diff --git a/CHANGELOG.md b/CHANGELOG.md index 80c6ae0..37145ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## unreleased +* Feature: Add Certificate Support +* Improvements: Improve typing and structure of Server response + ## 2.2.1 (22.07.2020) * Make package requirements less strict * Bugfix: getByName functions had a wrong return type and failed when a resource was not found by name [#50](https://github.com/LKDevelopment/hetzner-cloud-php-sdk/issues/50) diff --git a/src/Models/Certificates/Certificate.php b/src/Models/Certificates/Certificate.php index 88def2c..9703334 100644 --- a/src/Models/Certificates/Certificate.php +++ b/src/Models/Certificates/Certificate.php @@ -130,7 +130,7 @@ public function delete(): bool */ public static function parse($input) { - return new self($input->id, $input->name, $input->certificate, $input->created, $input->not_valid_before, $input->not_valid_after, $input->domain_names, $input->fingerprint, $input->used_by, $input->labels); + return new self($input->id, $input->name, $input->certificate, $input->created, $input->not_valid_before, $input->not_valid_after, $input->domain_names, $input->fingerprint, $input->used_by, get_object_vars($input->labels)); } /** diff --git a/src/Models/Servers/Server.php b/src/Models/Servers/Server.php index 1f867c8..2bb840b 100644 --- a/src/Models/Servers/Server.php +++ b/src/Models/Servers/Server.php @@ -44,12 +44,12 @@ class Server extends Model implements Resource public $created; /** - * @var array + * @var ServerPublicNet */ public $publicNet; /** - * @var array + * @var ServerPrivateNet[] */ public $privateNet; /** @@ -103,7 +103,7 @@ class Server extends Model implements Resource public $includedTraffic; /** - * @var array|\LKDev\HetznerCloud\Models\Protection + * @var \LKDev\HetznerCloud\Models\Protection */ public $protection; @@ -140,13 +140,13 @@ public function setAdditionalData($data) { $this->name = $data->name; $this->status = $data->status ?: null; - $this->publicNet = $data->public_net ?: null; - $this->privateNet = property_exists($data, 'private_net') ? $data->private_net : []; - $this->serverType = $data->server_type ?: ServerType::parse($data->server_type); - $this->datacenter = $data->datacenter ?: Datacenter::parse($data->datacenter); + $this->publicNet = property_exists($data, 'public_net') ? ServerPublicNet::parse($data->public_net) : null; + $this->privateNet = property_exists($data, 'private_net') ? $this->parsePrivateNet($data->private_net) : []; + $this->serverType = property_exists($data, 'server_type') ? ServerType::parse($data->server_type) : null; + $this->datacenter = property_exists($data, 'datacenter') ? Datacenter::parse($data->datacenter) : null; $this->created = $data->created; - $this->image = $data->image ?: Image::parse($data->image); - $this->iso = $data->iso ?: ISO::parse($data->iso); + $this->image = property_exists($data, 'image') ? Image::parse($data->image) : null; + $this->iso = property_exists($data, 'iso') ? ISO::parse($data->iso) : null; $this->rescueEnabled = $data->rescue_enabled ?: null; $this->locked = $data->locked ?: null; $this->backupWindow = $data->backup_window ?: null; @@ -154,13 +154,26 @@ public function setAdditionalData($data) $this->ingoingTraffic = $data->ingoing_traffic ?: null; $this->includedTraffic = $data->included_traffic ?: null; $this->volumes = property_exists($data, 'volumes') ? $data->volumes : []; - $this->protection = $data->protection ?: Protection::parse($data->protection); - $this->labels = $data->labels; + $this->labels = get_object_vars($data->labels); $this->primaryDiskSize = $data->primary_disk_size ?: null; return $this; } + /** + * @param \stdClass[] $privateNets + * @return ServerPrivateNet[] + */ + protected function parsePrivateNet(array $privateNets) + { + $parsed = []; + foreach ($privateNets as $privateNet) { + $parsed[] = new ServerPrivateNet($privateNet->network, $privateNet->ip, $privateNet->alias_ips, $privateNet->mac_address); + } + + return $parsed; + } + /** * Reload the data of the server. * diff --git a/src/Models/Servers/ServerPrivateNet.php b/src/Models/Servers/ServerPrivateNet.php new file mode 100644 index 0000000..d419dc3 --- /dev/null +++ b/src/Models/Servers/ServerPrivateNet.php @@ -0,0 +1,38 @@ +network = $network; + $this->ip = $ip; + $this->aliasIps = $aliasIps; + $this->macAddress = $macAddress; + } +} diff --git a/src/Models/Servers/ServerPublicNet.php b/src/Models/Servers/ServerPublicNet.php new file mode 100644 index 0000000..83cf40c --- /dev/null +++ b/src/Models/Servers/ServerPublicNet.php @@ -0,0 +1,44 @@ +ipv4 = $ipv4; + $this->ipv6 = $ipv6; + $this->floatingIps = $floatingIps; + } + + /** + * @param \stdClass $data + * @return ServerPublicNet + */ + public static function parse(\stdClass $data) + { + return new ServerPublicNet(ServerPublicNetIPv4::parse($data->ipv4), ServerPublicNetIPv6::parse($data->ipv6), $data->floating_ips); + } +} diff --git a/src/Models/Servers/ServerPublicNetIPv4.php b/src/Models/Servers/ServerPublicNetIPv4.php new file mode 100644 index 0000000..b69bdd5 --- /dev/null +++ b/src/Models/Servers/ServerPublicNetIPv4.php @@ -0,0 +1,44 @@ +ip = $ip; + $this->blocked = $blocked; + $this->dnsPtr = $dnsPtr; + } + + /** + * @param \stdClass $data + * @return ServerPublicNetIPv4 + */ + public static function parse(\stdClass $data) + { + return new self($data->ip, $data->blocked, $data->dns_ptr); + } +} diff --git a/src/Models/Servers/ServerPublicNetIPv6.php b/src/Models/Servers/ServerPublicNetIPv6.php new file mode 100644 index 0000000..4f58cc1 --- /dev/null +++ b/src/Models/Servers/ServerPublicNetIPv6.php @@ -0,0 +1,49 @@ +ip = $ip; + $this->blocked = $blocked; + $this->dnsPtr = $dnsPtr; + } + + /** + * @param \stdClass $data + * @return ServerPublicNetIPv6 + */ + public static function parse(\stdClass $data) + { + $dnsPtrs = []; + foreach ($data->dns_ptr as $dnsPtr) { + $dnsPtrs[] = new ServerPublicNetIPv6DnsPtr($dnsPtr->ip, $dnsPtr->dns_ptr); + } + + return new self($data->ip, $data->blocked, $dnsPtrs); + } +} diff --git a/src/Models/Servers/ServerPublicNetIPv6DnsPtr.php b/src/Models/Servers/ServerPublicNetIPv6DnsPtr.php new file mode 100644 index 0000000..92124de --- /dev/null +++ b/src/Models/Servers/ServerPublicNetIPv6DnsPtr.php @@ -0,0 +1,30 @@ +ip = $ip; + $this->dnsPtr = $dnsPtr; + } +}