4 changed files with 131 additions and 22 deletions
			
			
		@ -0,0 +1,79 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Darksparrow\DeegraphPHP\Core; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\DeegraphPHP\DataStructures\ServerInfo; | 
				
			||||
 | 
					use Darksparrow\DeegraphPHP\QueryBuilder\QueryBuilders\Put; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class DeegraphServer | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    private string $ServerDomain; | 
				
			||||
 | 
					    private int $Port; | 
				
			||||
 | 
					    private string $Token; | 
				
			||||
 | 
					    private bool $AllowSelfSignedCerts; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public function __construct(string $server, int $port, string $token, bool $allowSelfSignedCerts = false) | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $this->ServerDomain = $server; | 
				
			||||
 | 
					        $this->Port = $port; | 
				
			||||
 | 
					        $this->Token = $token; | 
				
			||||
 | 
					        $this->AllowSelfSignedCerts = $allowSelfSignedCerts; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * Runs an API request against the Deegraph Server, and returns back information about the Deegraph Server. | 
				
			||||
 | 
					     * @return ServerInfo | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    public function ServerInfo(): ServerInfo | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $response = $this->RunRawRequest(endpoint: "/api/v1/@server_info"); | 
				
			||||
 | 
					        return ServerInfo::FromAPIResponse(response: $response); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    private function RunRawRequest(string $endpoint, string $method = "GET", string $body = null): string | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $ch = curl_init("https://{$this->ServerDomain}:{$this->Port}{$endpoint}"); | 
				
			||||
 | 
					        curl_setopt($ch, CURLOPT_HTTPHEADER, [ | 
				
			||||
 | 
					            'Content-Type: application/json', | 
				
			||||
 | 
					            "Authorization: Bearer {$this->Token}", | 
				
			||||
 | 
					        ]); | 
				
			||||
 | 
					        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if ($method == "POST") { | 
				
			||||
 | 
					            curl_setopt($ch, CURLOPT_POST, 1); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        if($this->AllowSelfSignedCerts) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | 
				
			||||
 | 
					            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if ($method == "POST" || $method == "PUT") { | 
				
			||||
 | 
					            if ($body != null) { | 
				
			||||
 | 
					                curl_setopt($ch, CURLOPT_POSTFIELDS, $body); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        $result = curl_exec($ch); | 
				
			||||
 | 
					        curl_close($ch); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        return $result; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * @param Put $query Takes in a Query Builder object. | 
				
			||||
 | 
					     * @return void | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    public function RunQuery(Put $query): void | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        echo $query; | 
				
			||||
 | 
					        echo "<br><br><br>"; | 
				
			||||
 | 
					        $response = $this->RunRawRequest( | 
				
			||||
 | 
					            endpoint: "/api/v1/@query", | 
				
			||||
 | 
					            method: "POST", | 
				
			||||
 | 
					            body: $query | 
				
			||||
 | 
					        ); | 
				
			||||
 | 
					        var_dump($response); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,23 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Darksparrow\DeegraphPHP\DataStructures; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ServerInfo | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public string $InstanceID; | 
				
			||||
 | 
					    public string $InstanceFQDN; | 
				
			||||
 | 
					    public array $PublicKeys; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public static function FromAPIResponse(string $response): ServerInfo | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $temp = json_decode($response, true); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        $builder = new ServerInfo(); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        $builder->InstanceID = $temp["@instance_id"]; | 
				
			||||
 | 
					        $builder->InstanceFQDN = $temp["@instance_fqdn"]; | 
				
			||||
 | 
					        $builder->PublicKeys = $temp["@public_keys"]; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        return $builder; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue