diff --git a/KeyHelp.php b/KeyHelp.php new file mode 100644 index 0000000..6a7c7f7 --- /dev/null +++ b/KeyHelp.php @@ -0,0 +1,493 @@ +_config['ip'])) { + throw new Server_Exception('Server manager "KeyHelp" is not configured properly. IP address is not set!'); + } + + if(empty($this->_config['host'])) { + throw new Server_Exception('Server manager "KeyHelp" is not configured properly. Hostname is not set!'); + } + + if(empty($this->_config['accesshash'])) { + throw new Server_Exception('Server manager "KeyHelp" is not configured properly. API Key / Access Hash is not set!'); + } else { + $this->_config['accesshash'] = preg_replace("'(\r|\n)'","",$this->_config['accesshash']); + } + } + + public static function getForm() + { + return [ + 'label' => 'KeyHelp', + 'form' => [ + 'credentials' => [ + 'fields' => [ + [ + 'name' => 'accesshash', + 'type' => 'text', + 'label' => 'API key', + 'placeholder' => 'API key you generated from within KeyHelp.', + 'required' => true, + ], + ], + ], + ] + ]; + } + + public function getLoginUrl() + { + /* + ############################### + ### VORBEREITUNG FÜR SPÄTER ### + ############################### + $username = "rokkcloud"; + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$username; + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "login/".$userID; + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userLogin = $result->url; + + return $userLogin; */ + + $host = $this->_config['host']; + return 'https://'.$host.''; + } + public function getResellerLoginUrl() + { + $host = $this->_config['host']; + return 'https://'.$host.''; + } + + + public function testConnection() + { + $host = $this->_config['host']; + + $apiUrl = "https://".$host."/api/v2/"; + $action = "ping"; + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result)) { + return true; + var_dump($a); + } else { + throw new Server_Exception('Failed to connect to server'); + } + } + + + public function synchronizeAccount(Server_Account $a) + { + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $new = clone $a; + $new->setSuspended($result->is_suspended); + $new->setUsername($result->username); + + return $new; + } + + /** + * Package name must match on both KeyHelp and FOSSBilling! + */ + public function createAccount(Server_Account $a) + { + $apiUrl = "https://".$this->_config['host']."/api/v2/"; + $action = "clients/"; + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + $this->getLog()->info('Creating account '.$a->getUsername()); + $client = $a->getClient(); + $package = $a->getPackage()->getName(); + + $data = array( + "username"=> $a->getUsername(), + "language"=> "de", + "email"=> $client->getEmail(), + "password"=> $a->getPassword(), + "id_hosting_plan"=> $package, + "is_suspended"=> false, + "suspend_on"=> null, + "delete_on"=> null, + "send_login_credentials"=> true, + "create_system_domain"=> false, + ); + + $curl_session_b = curl_init(); + curl_setopt($curl_session_b ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session_b, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session_b, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($curl_session_b, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl_session_b, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl_session_b, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session_b, CURLOPT_POST, 1); + curl_setopt($curl_session_b, CURLOPT_POSTFIELDS, json_encode($data)); + $result_a = json_decode(curl_exec($curl_session_b)); + curl_close($curl_session_b ); + $keyhelp_user_id = $result_a->id; + + $data = array( + "id_user"=> $keyhelp_user_id, + "domain"=> $a->getDomain() + ); + $action = "domains"; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($curl_session, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session, CURLOPT_POST, 1); + curl_setopt($curl_session, CURLOPT_POSTFIELDS, json_encode($data)); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result_a)&&isset($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to create the hosting'); + } + } + + public function suspendAccount(Server_Account $a) + { + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $data = array( + "is_suspended"=> true, + ); + $action = "clients/".$userID; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session, CURLOPT_POSTFIELDS, json_encode($data)); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to suspend account!'); + } + } + + public function unsuspendAccount(Server_Account $a) + { + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $data = array( + "is_suspended"=> false, + ); + $action = "clients/".$userID; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session, CURLOPT_POSTFIELDS, json_encode($data)); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to suspend account!'); + } + } + + public function cancelAccount(Server_Account $a) + { + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $action = "clients/".$userID; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'DELETE'); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(empty($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to cancel / delete account!'); + } + + } + public function changeAccountPackage(Server_Account $a, Server_Package $p) + { + $this->getLog()->info('Changing password on account '.$a->getUsername()); + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $data = array( + "id_hosting_plan"=> $p->getName(), + ); + $action = "clients/".$userID; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session, CURLOPT_POSTFIELDS, json_encode($data)); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to change the account password!'); + } + } + + public function changeAccountPassword(Server_Account $a, $new) + { + $this->getLog()->info('Changing password on account '.$a->getUsername()); + $host = $this->_config['host']; + $apiUrl = "https://".$host."/api/v2/"; + $action = "clients/name/".$a->getUsername(); + $actionapiUrl = $apiUrl . $action; + $apiKey = $this->_config['accesshash']; + + + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + $result = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + $userID = $result->id; + + $data = array( + "password"=> $a->getPassword(), + ); + $action = "clients/".$userID; + $actionapiUrl = $apiUrl . $action; + $curl_session = curl_init(); + curl_setopt($curl_session ,CURLOPT_URL,$actionapiUrl); + curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_session, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($curl_session, CURLOPT_HTTPHEADER, array( + 'X-API-Key: '.$apiKey, + 'accept: application/json', + 'Content-Type: application/json', + )); + curl_setopt($curl_session, CURLOPT_POSTFIELDS, json_encode($data)); + $result_c = json_decode(curl_exec($curl_session)); + curl_close($curl_session ); + + if(isset($result_c)) { + return true; + } else { + throw new Server_Exception('Failed to change the account password!'); + } + } + /*####################################### + ### KEIN SUPPORT FÜR DIESE FUNKTIONEN ### + #######################################*/ + + public function changeAccountUsername(Server_Account $a, $new) + { + throw new Server_Exception('KeyHelp does not support username changes'); + } + public function changeAccountDomain(Server_Account $a, $new) + { + throw new Server_Exception('KeyHelp does not support changing the primary domain name'); + } + public function changeAccountIp(Server_Account $a, $new) + { + throw new Server_Exception('KeyHelp does not support changing the IP'); + } +}