myMyPlex.inc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. # Test params
  3. $_SERVER['PHP_AUTH_USER'] = 'profplump';
  4. #=========================================
  5. # Parameters/Globals
  6. #=========================================
  7. $USER_DB = 'sqlite:/var/state/myMyPlex/db.sqlite';
  8. $DBH = NULL;
  9. # Prevent PHP from whining - the actual timezone you set is irrelevent
  10. date_default_timezone_set('UTC');
  11. #=========================================
  12. # Error Handler
  13. #=========================================
  14. function error($errno, $errstr, $errfile = '', $errline = '') {
  15. header('HTTP/1.1 500 myMyPlex Processing Error');
  16. $msg = 'myMyPlex Processing Error';
  17. if ($errno) {
  18. $msg .= ' ' . $errno;
  19. }
  20. $msg .= ' (' . $errstr . ')';
  21. if ($errfile) {
  22. $msg .= ' in ' . $errfile;
  23. }
  24. if ($errline) {
  25. $msg .= ' at ' . $errline;
  26. }
  27. die($msg . "\n");
  28. }
  29. set_error_handler('error');
  30. #=========================================
  31. # DB Conneciton/Table Init
  32. #=========================================
  33. function get_dbh() {
  34. global $USER_DB;
  35. global $DBH;
  36. # If we haven't already connected in this session
  37. if (! $DBH) {
  38. # Connect
  39. $dbh = new PDO($USER_DB);
  40. if (! $dbh) {
  41. error(0, 'Unable to connect to DB');
  42. }
  43. $DBH = $dbh;
  44. # Create the user table if needed
  45. $dbh->query('
  46. CREATE TABLE IF NOT EXISTS users
  47. (username VARCHAR(64), auth CHAR(32),
  48. PRIMARY KEY(username), UNIQUE(auth))
  49. ');
  50. # Create the server table if needed
  51. $dbh->query('
  52. CREATE TABLE IF NOT EXISTS servers
  53. (username VARCHAR(64), name VARCHAR(64),
  54. address CHAR(15), port INT, id CHAR(40),
  55. version VARCHAR(32),
  56. PRIMARY KEY(username, name), UNIQUE(id))
  57. ');
  58. }
  59. # Return either a new or existing DB ref
  60. return $DBH;
  61. }
  62. #=========================================
  63. # Get User
  64. #=========================================
  65. function get_user($username = '', $auth = '') {
  66. $user = array(
  67. 'username' => '',
  68. 'auth' => ''
  69. );
  70. try {
  71. # Query for the requested user
  72. $dbh = get_dbh();
  73. if (strlen($username)) {
  74. $stmt = $dbh->prepare('SELECT username, auth FROM users WHERE username = ?');
  75. $stmt->execute(array($username));
  76. } else {
  77. $stmt = $dbh->prepare('SELECT username, auth FROM users WHERE auth = ?');
  78. $stmt->execute(array($auth));
  79. }
  80. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  81. # If the users exists, map it into our local array
  82. if ($row) {
  83. foreach (array_keys($user) as $key) {
  84. $user[$key] = $row[$key];
  85. }
  86. }
  87. } catch (PDOException $e) {
  88. error(0, 'DB error in get_user: ' . $e->getMessage());
  89. }
  90. return $user;
  91. }
  92. #=========================================
  93. # Save User
  94. #=========================================
  95. function save_user($user) {
  96. try {
  97. # Get connected
  98. $dbh = get_dbh();
  99. # Create the user if necessary
  100. $stmt = $dbh->prepare('SELECT username FROM users WHERE username = ?');
  101. $stmt->execute(array($user['username']));
  102. if (! is_array($stmt->fetch())) {
  103. $stmt = $dbh->prepare('INSERT INTO users (username) VALUES (?)');
  104. $stmt->execute(array($user['username']));
  105. }
  106. # Update the DB from our local array
  107. $stmt = $dbh->prepare('UPDATE users SET auth = ? WHERE username = ?');
  108. $stmt->execute(array($user['auth'], $user['username']));
  109. } catch (PDOException $e) {
  110. error(0, 'DB error in save_user: ' . $e->getMessage());
  111. }
  112. return TRUE;
  113. }
  114. #=========================================
  115. # Get Server
  116. #=========================================
  117. function get_server($username, $name) {
  118. $server = array(
  119. 'username' => '',
  120. 'name' => '',
  121. 'address' => '',
  122. 'port' => '',
  123. 'id' => '',
  124. 'version' => '',
  125. );
  126. try {
  127. # Query for the requested user
  128. $dbh = get_dbh();
  129. $stmt = $dbh->prepare('
  130. SELECT username, name, address, port, id, version
  131. FROM servers WHERE username = ? AND name = ?
  132. ');
  133. $stmt->execute(array($username, $name));
  134. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  135. # If the users exists, map it into our local array
  136. if ($row) {
  137. foreach (array_keys($server) as $key) {
  138. $server[$key] = $row[$key];
  139. }
  140. }
  141. } catch (PDOException $e) {
  142. error(0, 'DB error in get_server: ' . $e->getMessage());
  143. }
  144. return $server;
  145. }
  146. #=========================================
  147. # Save Server
  148. #=========================================
  149. function save_server($server) {
  150. try {
  151. # Get connected
  152. $dbh = get_dbh();
  153. # Create the server if necessary
  154. $stmt = $dbh->prepare('SELECT name FROM servers WHERE username = ? AND name = ?');
  155. $stmt->execute(array($server['username'], $server['name']));
  156. if (! is_array($stmt->fetch())) {
  157. $stmt = $dbh->prepare('INSERT INTO servers (username, name, id) VALUES (?, ?, ?)');
  158. $stmt->execute(array($server['username'], $server['name']));
  159. }
  160. # Update the DB from our local array
  161. $stmt = $dbh->prepare('UPDATE servers SET address = ?, port = ?, id = ? WHERE username = ? AND name = ?');
  162. $stmt->execute(array($server['address'], $server['port'], $server['id'], $server['username'], $server['name']));
  163. } catch (PDOException $e) {
  164. error(0, 'DB error in save_server: ' . $e->getMessage());
  165. }
  166. return TRUE;
  167. }
  168. #=========================================
  169. # Delete Server
  170. #=========================================
  171. function delete_server($id) {
  172. try {
  173. $dbh = get_dbh();
  174. $stmt = $dbh->prepare('DELETE FROM servers WHERE id = ?');
  175. $stmt->execute(array($id));
  176. } catch (PDOException $e) {
  177. error(0, 'DB error in save_server: ' . $e->getMessage());
  178. }
  179. return TRUE;
  180. }
  181. #=========================================
  182. # Get Server List
  183. #=========================================
  184. function get_server_list($username) {
  185. $servers = array();
  186. try {
  187. # Query for the requested user
  188. $dbh = get_dbh();
  189. $stmt = $dbh->prepare('SELECT name FROM servers WHERE username = ?');
  190. $stmt->execute(array($username));
  191. $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  192. foreach ($rs as $row) {
  193. $servers[] = $row['name'];
  194. }
  195. } catch (PDOException $e) {
  196. error(0, 'DB error in get_server_list: ' . $e->getMessage());
  197. }
  198. return $servers;
  199. }
  200. #=========================================
  201. # Generate Auth Tokens
  202. #=========================================
  203. function generate_auth() {
  204. return sprintf('%08x%08x%08x%08x',
  205. mt_rand(0, 0xffffffff), mt_rand(0, 0xffffffff),
  206. mt_rand(0, 0xffffffff), mt_rand(0, 0xffffffff));
  207. }
  208. ?>