Browse Source

Move source to src/

Shane Mc Cormack 8 years ago
parent
commit
f3a1dffea1
2 changed files with 1 additions and 572 deletions
  1. 0 571
      MyDNSHostAPI.php
  2. 1 1
      composer.json

+ 0 - 571
MyDNSHostAPI.php

@@ -1,571 +0,0 @@
-<?php
-	require_once(__DIR__ . '/requests/library/Requests.php');
-	Requests::register_autoloader();
-
-	/**
-	 * Class to interact with mydnshost api.
-	 */
-	class MyDNSHostAPI {
-		/** Base URL. */
-		private $baseurl = 'https://api.mydnshost.co.uk/';
-		/** API Version. */
-		private $version = '1.0';
-		/** Auth Data. */
-		private $auth = FALSE;
-		/** Are we impersonating someone? */
-		private $impersonate = FALSE;
-		/** Are we impersonating an email address or an ID? */
-		private $impersonateType = FALSE;
-		/** Are we accessing domain functions with admin override? */
-		private $domainAdminOverride = FALSE;
-		/** Debug mode value. */
-		private $debug = FALSE;
-		/** Last API Response */
-		private $lastResponse = NULL;
-
-		/**
-		 * Create a new MyDNSHostAPI
-		 *
-		 * @param $baseurl Base URL to connect to.
-		 */
-		public function __construct($baseurl) {
-			$this->baseurl = $baseurl;
-		}
-
-		/**
-		 * Enable/disable debug mode
-		 *
-		 * @param $value New debug value
-		 * @return $this for chaining.
-		 */
-		public function setDebug($value) {
-			$this->debug = $value;
-			return $this;
-		}
-
-		/**
-		 * Are we in debug mode?
-		 *
-		 * @return True/False if in debugging mode.
-		 */
-		public function isDebug() {
-			return $this->debug;
-		}
-
-		/**
-		 * Auth using a username and password.
-		 *
-		 * @param $user User to auth with
-		 * @param $pass Password to auth with
-		 * @param $key (Optional) 2FA Key for login.
-		 * @return $this for chaining.
-		 */
-		public function setAuthUserPass($user, $pass, $key = NULL) {
-			$this->auth = ['type' => 'userpass', 'user' => $user, 'pass' => $pass, '2fa' => $key];
-			return $this;
-		}
-
-		/**
-		 * Auth using a username and api key.
-		 *
-		 * @param $user User to auth with
-		 * @param $key Key to auth with
-		 * @return $this for chaining.
-		 */
-		public function setAuthUserKey($user, $key) {
-			$this->auth = ['type' => 'userkey', 'user' => $user, 'key' => $key];
-			return $this;
-		}
-
-		/**
-		 * Auth using a session ID.
-		 *
-		 * @param $sessionid ID to auth with
-		 * @return $this for chaining.
-		 */
-		public function setAuthSession($sessionid) {
-			$this->auth = ['type' => 'session', 'sessionid' => $sessionid];
-			return $this;
-		}
-
-		/**
-		 * Auth using a custom auth method.
-		 *
-		 * @param $auth Auth data.
-		 * @return $this for chaining.
-		 */
-		public function setAuth($auth) {
-			$this->auth = $auth;
-			return $this;
-		}
-
-		/**
-		 * Impersonate a user
-		 *
-		 * @param $user User to impersonate
-		 * @param $type (Default: email) Is $user an email or id?
-		 * @return $this for chaining.
-		 */
-		public function impersonate($user, $type = 'email') {
-			$this->impersonate = $user;
-			$this->impersonateType = $type;
-
-			return $this;
-		}
-
-		/**
-		 * Check if we have valid auth details.
-		 *
-		 * @return True if we can auth successfully.
-		 */
-		public function validAuth() {
-			if ($this->auth === FALSE) {
-				return FALSE;
-			}
-
-			return $this->getUserData() !== NULL;
-		}
-
-		/**
-		 * Get information about the user we are authed as and our current
-		 * access level.
-		 *
-		 * @return Array of user data or null if we are not authed.
-		 */
-		public function getUserData() {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/userdata');
-			return isset($result['response']) ? $result['response'] : NULL;
-		}
-
-		/**
-		 * Get information about all users we can see.
-		 *
-		 * @return Result from the API.
-		 */
-		public function getUsers() {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/users');
-			return $result;
-		}
-
-		/**
-		 * Set information a given user id.
-		 *
-		 * @param $userid User ID to get data for (Default: 'self')
-		 * @return Result from the api
-		 */
-		public function getUserInfo($userID = 'self') {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/users/' . $userID);
-			return isset($result['response']) ? $result['response'] : NULL;
-		}
-
-		/**
-		 * Update information about the user we are authed as
-		 *
-		 * @param $data Data to use for the update
-		 * @param $userid User ID to edit (Default: 'self')
-		 * @return Result from the api
-		 */
-		public function setUserInfo($data, $userID = 'self') {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/' . $userID, 'POST', $data);
-		}
-
-		/**
-		 * Create a new user
-		 *
-		 * @param $data for the create operation
-		 * @return Result from the api
-		 */
-		public function createUser($data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/create', 'POST', $data);
-		}
-
-		/**
-		 * Delete the given user id.
-		 *
-		 * @param $userid User ID to delete.
-		 * @return Result from the api
-		 */
-		public function deleteUser($userID) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/' . $userID, 'DELETE');
-		}
-
-		/**
-		 * Get API Keys for the current user
-		 *
-		 * @return Array of api keys.
-		 */
-		public function getAPIKeys() {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/users/self/keys');
-			return isset($result['response']) ? $result['response'] : NULL;
-		}
-
-		/**
-		 * Create a new API Key.
-		 *
-		 * @param $data Data to use for the create
-		 * @return Result of create operation.
-		 */
-		public function createAPIKey($data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/keys', 'POST', $data);
-		}
-
-		/**
-		 * Create a new API Key.
-		 *
-		 * @param $key Key to update
-		 * @param $data Data to use for the update
-		 * @return Result of update operation.
-		 */
-		public function updateAPIKey($key, $data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/keys/' . $key, 'POST', $data);
-		}
-
-		/**
-		 * Delete a new API Key.
-		 *
-		 * @param $key Key to delete
-		 * @return Result of delete operation.
-		 */
-		public function deleteAPIKey($key) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/keys/' . $key, 'DELETE');
-		}
-
-		/**
-		 * Get 2FA Keys for the current user
-		 *
-		 * @return Array of 2FA keys.
-		 */
-		public function get2FAKeys() {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/users/self/2fa');
-			return isset($result['response']) ? $result['response'] : NULL;
-		}
-
-		/**
-		 * Create a new 2FA Key.
-		 *
-		 * @param $data Data to use for the create
-		 * @return Result of create operation.
-		 */
-		public function create2FAKey($data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/2fa', 'POST', $data);
-		}
-
-		/**
-		 * Update a new 2FA Key.
-		 *
-		 * @param $key Key to update
-		 * @param $data Data to use for the update
-		 * @return Result of update operation.
-		 */
-		public function update2FAKey($key, $data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/2fa/' . $key, 'POST', $data);
-		}
-
-		/**
-		 * Verify a new 2FA Key.
-		 *
-		 * @param $key Key to verify
-		 * @param $code Code to verify with
-		 * @return Result of update operation.
-		 */
-		public function verify2FAKey($key, $code) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/2fa/' . $key . '/verify', 'POST', ['code' => $code]);
-		}
-
-		/**
-		 * Delete a new 2FA Key.
-		 *
-		 * @param $key Key to delete
-		 * @return Result of delete operation.
-		 */
-		public function delete2FAKey($key) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api('/users/self/2fa/' . $key, 'DELETE');
-		}
-
-		/**
-		 * Get a session ID from the backend
-		 *
-		 * @return Backend session ID or null if we are not authed.
-		 */
-		public function getSessionID() {
-			if ($this->auth === FALSE) { return NULL; }
-
-			$result = $this->api('/session');
-			return isset($result['response']['session']) ? $result['response']['session'] : NULL;
-		}
-
-
-		/**
-		 * Enable or disable domain admin-override.
-		 *
-		 * @param $value (Default: true) Set value for domain admin override.
-		 */
-		public function domainAdmin($value = true) {
-			$this->domainAdminOverride = true;
-
-			return $this;
-		}
-
-		/**
-		 * Get list of our domains.
-		 *
-		 * @return Array of domains or an empty array.
-		 */
-		public function getDomains() {
-			if ($this->auth === FALSE) { return []; }
-
-			$result = $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains');
-			return isset($result['response']) ? $result['response'] : [];
-		}
-
-		/**
-		 * Create a domain.
-		 *
-		 * @param $domain Domain to create.
-		 * @param $owner (Default: NULL) Who to set as owner (if null, self);
-		 * @return Result from the API
-		 */
-		public function createDomain($domain, $owner = NULL) {
-			if ($this->auth === FALSE) { return []; }
-
-			$data = ['domain' => $domain];
-			if ($owner !== null) {
-				$data['owner'] = $owner;
-			}
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains', 'POST', $data);
-		}
-
-		/**
-		 * Delete a domain.
-		 *
-		 * @param $domain Domain to delete.
-		 * @return Result from the API
-		 */
-		public function deleteDomain($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain, 'DELETE');
-		}
-
-		/**
-		 * Get domain data for a given domain.
-		 *
-		 * @param $domain Domain to get data for
-		 * @return Array of domains or an empty array.
-		 */
-		public function getDomainData($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			$result = $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain);
-			return isset($result['response']) ? $result['response'] : NULL;
-		}
-
-		/**
-		 * Set domain data for a given domain.
-		 *
-		 * @param $domain Domain to set data for
-		 * @param $data Data to set
-		 * @return Result from the API
-		 */
-		public function setDomainData($domain, $data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain, 'POST', $data);
-		}
-
-		/**
-		 * Get domain access for a given domain.
-		 *
-		 * @param $domain Domain to get access-data for
-		 * @return Array of access info or an empty array.
-		 */
-		public function getDomainAccess($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			$result = $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/access');
-			return isset($result['response']['access']) ? $result['response']['access'] : [];
-		}
-
-		/**
-		 * Set domain access for a given domain.
-		 *
-		 * @param $domain Domain to set access-data for
-		 * @param $data New access data
-		 * @return Response from the API
-		 */
-		public function setDomainAccess($domain, $data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/access', 'POST', $data);
-		}
-
-		/**
-		 * Attempt to sync the domain to the backends.
-		 *
-		 * @param $domain Domain to export.
-		 * @return Array of records or an empty array.
-		 */
-		public function syncDomain($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/sync');
-		}
-
-		/**
-		 * Export domain as bind zone file.
-		 *
-		 * @param $domain Domain to export.
-		 * @return Array of records or an empty array.
-		 */
-		public function exportZone($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			$result = $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/export');
-			return isset($result['response']['zone']) ? $result['response']['zone'] : [];
-		}
-
-		/**
-		 * Import domain from bind zone file.
-		 *
-		 * @param $domain Domain to import.
-		 * @param $zone Zonefile data
-		 * @return Array of records or an empty array.
-		 */
-		public function importZone($domain, $zone) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/import', 'POST', ['zone' => $zone]);
-		}
-
-
-		/**
-		 * Get domain records for a given domain.
-		 *
-		 * @param $domain Domain to get records for
-		 * @return Array of records or an empty array.
-		 */
-		public function getDomainRecords($domain) {
-			if ($this->auth === FALSE) { return []; }
-
-			$result = $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/records');
-			return isset($result['response']['records']) ? $result['response']['records'] : [];
-		}
-
-		/**
-		 * Set domain records for a given domain.
-		 *
-		 * @param $domain Domain to set records for
-		 * @param $data Data to set
-		 * @return Result from API
-		 */
-		public function setDomainRecords($domain, $data) {
-			if ($this->auth === FALSE) { return []; }
-
-			return $this->api(($this->domainAdminOverride ? '/admin' : '') . '/domains/' . $domain . '/records', 'POST', $data);
-		}
-
-		/**
-		 * Get the last response from the API
-		 *
-		 * @return Last API Response.
-		 */
-		public function getLastResponse() {
-			return $this->lastResponse;
-		}
-
-		/**
-		 * Poke the API.
-		 *
-		 * @param $apimethod API Method to poke
-		 * @param $method Request method to access the API with
-		 * @param $data (Default: []) Data to send if POST
-		 * @return Response from the API as an array.
-		 */
-		private function api($apimethod, $method = 'GET', $data = []) {
-			$headers = [];
-			$options = [];
-			if ($this->auth !== FALSE) {
-				if ($this->auth['type'] == 'session') {
-					$headers['X-SESSION-ID'] = $this->auth['sessionid'];
-				} else if ($this->auth['type'] == 'userkey') {
-					$headers['X-API-USER'] = $this->auth['user'];
-					$headers['X-API-KEY'] = $this->auth['key'];
-				} else if ($this->auth['type'] == 'userpass') {
-					$options['auth'] = [$this->auth['user'], $this->auth['pass']];
-					if (isset($this->auth['2fa'])) {
-						$headers['X-2FA-KEY'] = $this->auth['2fa'];
-					}
-				}
-			}
-
-			if ($this->impersonate !== FALSE) {
-				if ($this->impersonateType == 'id') {
-					$headers['X-IMPERSONATE-ID'] = $this->impersonate;
-				} else {
-					$headers['X-IMPERSONATE'] = $this->impersonate;
-				}
-			}
-
-			$url = sprintf('%s/%s/%s', rtrim($this->baseurl, '/'), $this->version, ltrim($apimethod, '/'));
-
-			try {
-				if ($method == 'GET') {
-					$response = Requests::get($url, $headers, $options);
-				} else if ($method == 'POST') {
-					$response = Requests::post($url, $headers, json_encode(['data' => $data]), $options);
-				} else if ($method == 'DELETE') {
-					$response = Requests::delete($url, $headers, $options);
-				}
-				$data = @json_decode($response->body, TRUE);
-			} catch (Requests_Exception $ex) {
-				$data = NULL;
-			}
-
-			if ($data == NULL) {
-				$data = ['error' => 'There was an unknown error.'];
-			}
-
-			if ($this->isDebug()) {
-				$debug = ['request' => '', 'response' => $response->body];
-				if ($method == 'POST') {
-					$debug['request'] = json_encode(['data' => $data]);
-				}
-
-				$data['__DEBUG'] = $debug;
-			}
-
-			$this->lastResponse = $data;
-			return $data;
-		}
-	}

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
 {
     "name": "mydnshost/mydnshost-php-api",
     "name": "mydnshost/mydnshost-php-api",
     "description": "PHP API for mydnshost.co.uk",
     "description": "PHP API for mydnshost.co.uk",
-    "homepage": "https://github.com/ShaneMcC/mydnshost-php-api",
+    "homepage": "https://github.com/mydnshost/mydnshost-php-api",
     "license": "MIT",
     "license": "MIT",
     "authors": [
     "authors": [
         {
         {