| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- <?php
- # Test params
- $_SERVER['PHP_AUTH_USER'] = 'profplump';
- #=========================================
- # Parameters/Globals
- #=========================================
- $USER_DB = 'sqlite:/var/state/myMyPlex/db.sqlite';
- $DBH = NULL;
- # Prevent PHP from whining - the actual timezone you set is irrelevent
- date_default_timezone_set('UTC');
- #=========================================
- # Error Handler
- #=========================================
- function error($errno, $errstr, $errfile = '', $errline = '') {
- header('HTTP/1.1 500 myMyPlex Processing Error');
- $msg = 'myMyPlex Processing Error';
- if ($errno) {
- $msg .= ' ' . $errno;
- }
- $msg .= ' (' . $errstr . ')';
- if ($errfile) {
- $msg .= ' in ' . $errfile;
- }
- if ($errline) {
- $msg .= ' at ' . $errline;
- }
- die($msg . "\n");
- }
- set_error_handler('error');
- #=========================================
- # DB Conneciton/Table Init
- #=========================================
- function get_dbh() {
- global $USER_DB;
- global $DBH;
- # If we haven't already connected in this session
- if (! $DBH) {
- # Connect
- $dbh = new PDO($USER_DB);
- if (! $dbh) {
- error(0, 'Unable to connect to DB');
- }
- $DBH = $dbh;
- # Create the user table if needed
- $dbh->query('
- CREATE TABLE IF NOT EXISTS users
- (username VARCHAR(64), auth CHAR(32),
- PRIMARY KEY(username), UNIQUE(auth))
- ');
- # Create the server table if needed
- $dbh->query('
- CREATE TABLE IF NOT EXISTS servers
- (username VARCHAR(64), name VARCHAR(64),
- address CHAR(15), port INT, id CHAR(40),
- version VARCHAR(32),
- PRIMARY KEY(username, name), UNIQUE(id))
- ');
- }
- # Return either a new or existing DB ref
- return $DBH;
- }
- #=========================================
- # Get User
- #=========================================
- function get_user($username = '', $auth = '') {
- $user = array(
- 'username' => '',
- 'auth' => ''
- );
- try {
- # Query for the requested user
- $dbh = get_dbh();
- if (strlen($username)) {
- $stmt = $dbh->prepare('SELECT username, auth FROM users WHERE username = ?');
- $stmt->execute(array($username));
- } else {
- $stmt = $dbh->prepare('SELECT username, auth FROM users WHERE auth = ?');
- $stmt->execute(array($auth));
- }
- $row = $stmt->fetch(PDO::FETCH_ASSOC);
- # If the users exists, map it into our local array
- if ($row) {
- foreach (array_keys($user) as $key) {
- $user[$key] = $row[$key];
- }
- }
- } catch (PDOException $e) {
- error(0, 'DB error in get_user: ' . $e->getMessage());
- }
- return $user;
- }
- #=========================================
- # Save User
- #=========================================
- function save_user($user) {
- try {
- # Get connected
- $dbh = get_dbh();
- # Create the user if necessary
- $stmt = $dbh->prepare('SELECT username FROM users WHERE username = ?');
- $stmt->execute(array($user['username']));
- if (! is_array($stmt->fetch())) {
- $stmt = $dbh->prepare('INSERT INTO users (username) VALUES (?)');
- $stmt->execute(array($user['username']));
- }
- # Update the DB from our local array
- $stmt = $dbh->prepare('UPDATE users SET auth = ? WHERE username = ?');
- $stmt->execute(array($user['auth'], $user['username']));
- } catch (PDOException $e) {
- error(0, 'DB error in save_user: ' . $e->getMessage());
- }
- return TRUE;
- }
- #=========================================
- # Get Server
- #=========================================
- function get_server($username, $name) {
- $server = array(
- 'username' => '',
- 'name' => '',
- 'address' => '',
- 'port' => '',
- 'id' => '',
- 'version' => '',
- );
- try {
- # Query for the requested user
- $dbh = get_dbh();
- $stmt = $dbh->prepare('
- SELECT username, name, address, port, id, version
- FROM servers WHERE username = ? AND name = ?
- ');
- $stmt->execute(array($username, $name));
- $row = $stmt->fetch(PDO::FETCH_ASSOC);
- # If the users exists, map it into our local array
- if ($row) {
- foreach (array_keys($server) as $key) {
- $server[$key] = $row[$key];
- }
- }
- } catch (PDOException $e) {
- error(0, 'DB error in get_server: ' . $e->getMessage());
- }
- return $server;
- }
- #=========================================
- # Save Server
- #=========================================
- function save_server($server) {
- try {
- # Get connected
- $dbh = get_dbh();
- # Create the server if necessary
- $stmt = $dbh->prepare('SELECT name FROM servers WHERE username = ? AND name = ?');
- $stmt->execute(array($server['username'], $server['name']));
- if (! is_array($stmt->fetch())) {
- $stmt = $dbh->prepare('INSERT INTO servers (username, name, id) VALUES (?, ?, ?)');
- $stmt->execute(array($server['username'], $server['name']));
- }
- # Update the DB from our local array
- $stmt = $dbh->prepare('UPDATE servers SET address = ?, port = ?, id = ? WHERE username = ? AND name = ?');
- $stmt->execute(array($server['address'], $server['port'], $server['id'], $server['username'], $server['name']));
- } catch (PDOException $e) {
- error(0, 'DB error in save_server: ' . $e->getMessage());
- }
- return TRUE;
- }
- #=========================================
- # Delete Server
- #=========================================
- function delete_server($id) {
- try {
- $dbh = get_dbh();
- $stmt = $dbh->prepare('DELETE FROM servers WHERE id = ?');
- $stmt->execute(array($id));
- } catch (PDOException $e) {
- error(0, 'DB error in save_server: ' . $e->getMessage());
- }
- return TRUE;
- }
- #=========================================
- # Get Server List
- #=========================================
- function get_server_list($username) {
- $servers = array();
- try {
- # Query for the requested user
- $dbh = get_dbh();
- $stmt = $dbh->prepare('SELECT name FROM servers WHERE username = ?');
- $stmt->execute(array($username));
- $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
- foreach ($rs as $row) {
- $servers[] = $row['name'];
- }
- } catch (PDOException $e) {
- error(0, 'DB error in get_server_list: ' . $e->getMessage());
- }
- return $servers;
- }
- #=========================================
- # Generate Auth Tokens
- #=========================================
- function generate_auth() {
- return sprintf('%08x%08x%08x%08x',
- mt_rand(0, 0xffffffff), mt_rand(0, 0xffffffff),
- mt_rand(0, 0xffffffff), mt_rand(0, 0xffffffff));
- }
- ?>
|