1
0

servers.xml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. require_once 'myMyPlex.inc';
  3. # Bail if we're not happy with the auth token in the URL
  4. $auth = '';
  5. if (array_key_exists('auth_token', $_GET) && strlen($_GET['auth_token'])) {
  6. $auth = preg_replace('/\W/', '', $_GET['auth_token']);
  7. }
  8. if ($auth == '' || $auth != $_GET['auth_token']) {
  9. header('HTTP/1.1 401 Authorization Required');
  10. die("Invalid auth token\n");
  11. }
  12. # Lookup the user
  13. $user = get_user('', $auth);
  14. if (! $user['username']) {
  15. header('HTTP/1.1 401 Authorization Required');
  16. die("Unknown auth token\n");
  17. }
  18. # Handle deletes
  19. if ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
  20. if (preg_match('/\/(\w+)\.xml\?/', $_SERVER['REQUEST_URI'], $parts)) {
  21. delete_server($parts[1]);
  22. header('HTTP/1.1 200 OK');
  23. exit(0);
  24. } else {
  25. header('HTTP/1.1 422 Unprocessable Entity');
  26. die("Invalid machine ID\n");
  27. }
  28. }
  29. # Parse the input XML
  30. $doc = new DOMDocument();
  31. $doc->loadXML(file_get_contents('php://input'));
  32. $elm = $doc->getElementsByTagName('MediaContainer')->item(0);
  33. $elm = $elm->getElementsByTagName('Server')->item(0);
  34. $server = array();
  35. foreach (array('name', 'host', 'address', 'port', 'machineIdentifier', 'version') as $key) {
  36. $server[$key] = $elm->getAttribute($key);
  37. # Only keep valid data
  38. if (preg_replace('/[^\w\.\-]/', '', $server[$key]) != $server[$key]) {
  39. $server[$key] = '';
  40. }
  41. }
  42. # Ensure the data is reasonable
  43. $server['port'] = intval($server['port']);
  44. if ($server['port'] < 1 || $server['port'] > 65535) {
  45. $server['port'] = '';
  46. }
  47. preg_match('/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/', $server['address'], $ip_parts);
  48. if (count($ip_parts) == 5) {
  49. unset($ip_parts[0]);
  50. foreach ($ip_parts as $part) {
  51. $part = intval($part);
  52. if ($part < 1 || $part > 254) {
  53. $server['address'] = '';
  54. }
  55. }
  56. } else {
  57. $server['address'] = '';
  58. }
  59. if (
  60. strlen($server['name']) < 1 ||
  61. strlen($server['address']) < 1 ||
  62. strlen($server['port']) < 1 ||
  63. strlen($server['version']) < 1 ||
  64. strlen($server['machineIdentifier']) < 1
  65. ) {
  66. header('HTTP/1.1 422 Unprocessable Entity');
  67. die("Invalid name, address, port, ID, or version\n");
  68. }
  69. # Register the server
  70. $server['username'] = $user['username'];
  71. $server['id'] = $server['machineIdentifier'];
  72. save_server($server);
  73. # Build an XML response
  74. $doc = new DomDocument('1.0');
  75. $root = $doc->createElement('MediaContainer');
  76. $root = $doc->appendChild($root);
  77. $elm = $doc->createElement('Server');
  78. $elm->setAttribute('name', $server['name']);
  79. $elm->setAttribute('address', $server['address']);
  80. $elm->setAttribute('port', $server['port']);
  81. $elm->setAttribute('updatedAt', date('U'));
  82. $elm->setAttribute('machineIdentifier', $server['machineIdentifier']);
  83. $elm->setAttribute('createdAt', date('U'));
  84. $elm->setAttribute('owned', '1');
  85. $elm->setAttribute('host', $server['host']);
  86. $elm = $root->appendChild($elm);
  87. # Send our XML to the PMS
  88. header('HTTP/1.1 201 Created');
  89. print $doc->saveXML();
  90. ?>