absolute require_once paths
[foocorp:gnu-fm.git] / nixtape / 1.x / submissions / 1.1 / handshake.php
1 <?php
2 /* GNUkebox -- a free software server for recording your listening habits
3
4    Copyright (C) 2009 Free Software Foundation, Inc
5
6    This program is free software: you can redistribute it and/or modify
7    it under the terms of the GNU Affero General Public License as published by
8    the Free Software Foundation, either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU Affero General Public License for more details.
15
16    You should have received a copy of the GNU Affero General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 // Implements the submissions handshake protocol 1.1 as detailed at: http://www.audioscrobbler.net/wiki/Protocol1.1.merged
22 //
23 // By sending the timestamp as the md5 challenge then creating the session key from md5(md5($password) . $timestamp) we can
24 // force a 1.1 client to give us a session key that can be used by the 1.2 protocol handler, so we only handle handshakes for
25 // 1.1 then pass all submissions off to the 1.2 handler.
26
27 require_once($_SERVER['DOCUMENT_ROOT'] . '/config.php');
28 require_once($install_path . '1.x/auth-utils.php');
29 require_once($install_path . 'temp-utils.php');
30
31 $supported_protocols = array('1.1');
32
33 if (!isset($_REQUEST['p']) || !isset($_REQUEST['u']) || !isset($_REQUEST['c'])) {
34         die("FAILED\n");
35 }
36
37 $protocol = $_REQUEST['p']; $username = $_REQUEST['u']; $client = $_REQUEST['c'];
38
39 if (!in_array($protocol, $supported_protocols)) {
40         die("FAILED Unsupported protocol version\n");
41 }
42
43 $timestamp = time();
44
45 $adodb->SetFetchMode(ADODB_FETCH_ASSOC);
46 try {
47         $row = $adodb->GetRow('SELECT uniqueid,password FROM Users WHERE lower(username) = lower(' . $adodb->qstr($username) . ')');
48 } catch (Exception $e) {
49         die('FAILED ' . $e->getMessage() . "\n");
50 }
51 if (!$row) {
52         die("BADUSER\n");
53 }
54 $password = $row['password'];
55 $uniqueid = $row['uniqueid'];
56 $session_id = md5($password . $timestamp);
57 try {
58 $res = $adodb->Execute('INSERT INTO Scrobble_Sessions(userid, sessionid, client, expires) VALUES ('
59         . ($uniqueid) . ','
60         . $adodb->qstr($session_id, 'text') . ','
61         . $adodb->qstr($client, 'text') . ','
62         . $adodb->qstr(time() + 86400) . ')');
63 } catch (Exception $e) {
64         die('FAILED ' . $e->getMessage() . "\n");
65 }
66
67 echo "UPTODATE\n";
68 echo $timestamp . "\n";
69 echo $base_url . "/1.x/submissions/1.2/\n";
70 echo "INTERVAL 1\n";