diff --git a/src/Actions/ManagesAllocations.php b/src/Actions/ManagesAllocations.php index 684b2b1..ae53af8 100644 --- a/src/Actions/ManagesAllocations.php +++ b/src/Actions/ManagesAllocations.php @@ -10,21 +10,13 @@ trait ManagesAllocations * Get the collection of allocations for a given node. * * @param int $nodeId + * @param int $page * * @return array */ - public function allocations($nodeId, int $page = 1) + public function allocations(int $nodeId, int $page = 1) { - $data = $this->get("api/application/nodes/$nodeId".'/allocations?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Allocation::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get("api/application/nodes/$nodeId".'/allocations?page='.$page); } /** @@ -35,7 +27,7 @@ public function allocations($nodeId, int $page = 1) * * @return void */ - public function createAllocation($nodeId, array $data) + public function createAllocation(int $nodeId, array $data) { return $this->post("api/application/nodes/$nodeId/allocations", $data); } @@ -49,7 +41,7 @@ public function createAllocation($nodeId, array $data) * * @return void */ - public function deleteAllocation($nodeId, $allocationId) + public function deleteAllocation(int $nodeId, int $allocationId) { return $this->delete("api/application/nodes/$nodeId/allocations/$allocationId"); } diff --git a/src/Actions/ManagesEggs.php b/src/Actions/ManagesEggs.php index c671e80..8eca706 100644 --- a/src/Actions/ManagesEggs.php +++ b/src/Actions/ManagesEggs.php @@ -13,24 +13,22 @@ trait ManagesEggs * * @return Egg[] */ - public function eggs($nestId) + public function eggs(int $nestId) { - return $this->transformCollection( - $this->get("api/application/nests/$nestId/eggs")['data'], - Egg::class - ); + return $this->get("api/application/nests/$nestId/eggs"); } /** * Get a egg instance. * - * @param int $nestId - * @param int $eggId + * @param int $nestId + * @param int $eggId + * @param array $includes * * @return Egg */ - public function egg($nestId, $eggId) + public function egg(int $nestId, int $eggId, array $includes = []) { - return new Egg($this->get("api/application/nests/$nestId/eggs/$eggId"), $this); + return $this->get("api/application/nests/$nestId/eggs/$eggId".$this->include($includes)); } } diff --git a/src/Actions/ManagesLocations.php b/src/Actions/ManagesLocations.php index 40b13da..30b9230 100644 --- a/src/Actions/ManagesLocations.php +++ b/src/Actions/ManagesLocations.php @@ -9,32 +9,26 @@ trait ManagesLocations /** * Get a collection of locations. * + * @param int $page + * * @return array */ public function locations(int $page = 1) { - $data = $this->get('api/application/locations?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Location::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/application/locations?page='.$page); } /** * Get a location instance. * - * @param int $locationId + * @param int $locationId + * @param array $includes * * @return Location */ - public function location($locationId) + public function location(int $locationId, array $includes = []) { - return new Location($this->get("api/application/locations/$locationId"), $this); + return $this->get("api/application/locations/$locationId".$this->include($includes)); } /** @@ -46,7 +40,7 @@ public function location($locationId) */ public function createLocation(array $data) { - return new Location($this->post('api/application/locations', $data), $this); + return $this->post('api/application/locations', $data); } /** @@ -57,9 +51,9 @@ public function createLocation(array $data) * * @return Location */ - public function updateLocation($locationId, array $data) + public function updateLocation(int $locationId, array $data) { - return new Location($this->patch("api/application/locations/$locationId", $data), $this); + return $this->patch("api/application/locations/$locationId", $data); } /** @@ -69,7 +63,7 @@ public function updateLocation($locationId, array $data) * * @return void */ - public function deleteLocation($locationId) + public function deleteLocation(int $locationId) { return $this->delete("api/application/locations/$locationId"); } diff --git a/src/Actions/ManagesNests.php b/src/Actions/ManagesNests.php index e0ace9c..ce82c2f 100644 --- a/src/Actions/ManagesNests.php +++ b/src/Actions/ManagesNests.php @@ -9,31 +9,25 @@ trait ManagesNests /** * Get a collection of nests. * + * @param int $page + * * @return array */ public function nests(int $page = 1) { - $data = $this->get('api/application/nests?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Nest::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/application/nests?page='.$page); } /** * Get a nest instance. * - * @param int $nestId + * @param int $nestId + * @param array $includes * * @return Nest */ - public function nest($nestId) + public function nest(int $nestId, array $includes = []) { - return new Nest($this->get("api/application/nests/$nestId"), $this); + return $this->get("api/application/nests/$nestId".$this->include($includes)); } } diff --git a/src/Actions/ManagesNodes.php b/src/Actions/ManagesNodes.php index 72e5d4c..7c2600e 100644 --- a/src/Actions/ManagesNodes.php +++ b/src/Actions/ManagesNodes.php @@ -9,32 +9,26 @@ trait ManagesNodes /** * Get a collection of nodes. * + * @param int $page + * * @return array */ public function nodes(int $page = 1) { - $data = $this->get('api/application/nodes?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Node::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/application/nodes?page='.$page); } /** * Get a node instance. * - * @param int $nodeId + * @param int $nodeId + * @param array $includes * * @return Node */ - public function node($nodeId) + public function node(int $nodeId, array $includes = []) { - return new Node($this->get("api/application/nodes/$nodeId"), $this); + return $this->get("api/application/nodes/$nodeId".$this->include($includes)); } /** @@ -46,7 +40,7 @@ public function node($nodeId) */ public function createNode(array $data) { - return new Node($this->post('api/application/nodes', $data), $this); + return $this->post('api/application/nodes', $data); } /** @@ -57,9 +51,9 @@ public function createNode(array $data) * * @return Node */ - public function updateNode($nodeId, array $data) + public function updateNode(int $nodeId, array $data) { - return new Node($this->patch("api/application/nodes/$nodeId", $data), $this); + return $this->patch("api/application/nodes/$nodeId", $data); } /** @@ -69,7 +63,7 @@ public function updateNode($nodeId, array $data) * * @return void */ - public function deleteNode($nodeId) + public function deleteNode(int $nodeId) { return $this->delete("api/application/nodes/$nodeId"); } diff --git a/src/Actions/ManagesServers.php b/src/Actions/ManagesServers.php index 19eed88..a2232d8 100644 --- a/src/Actions/ManagesServers.php +++ b/src/Actions/ManagesServers.php @@ -2,7 +2,6 @@ namespace HCGCloud\Pterodactyl\Actions; -use HCGCloud\Pterodactyl\Resources\Allocation; use HCGCloud\Pterodactyl\Resources\Server; use HCGCloud\Pterodactyl\Resources\ServerDatabase; @@ -11,66 +10,39 @@ trait ManagesServers /** * Get the collection of servers. * + * @param int $page + * * @return array */ public function servers(int $page = 1) { - $data = $this->get('api/application/servers?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Server::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/application/servers?page='.$page); } /** * Get a server instance. * - * @param int $serverId + * @param int $serverId + * @param array $includes * * @return Server */ - public function server($serverId) + public function server(int $serverId, array $includes = ['allocations']) { - $request = $this->get("api/application/servers/$serverId".'?include=allocations'); - - $allocations = $this->transformCollection( - $request['attributes']['relationships']['allocations']['data'], - Allocation::class - ); - - $server = new Server($request, $this); - - $server->allocations = $allocations; - - return $server; + return $this->get("api/application/servers/$serverId".$this->include($includes)); } /** * Get a server instance by external id. * - * @param int $externalId + * @param int $externalId + * @param array $includes * * @return Server */ - public function serverEx($externalId) + public function serverEx(int $externalId, array $includes = ['allocations']) { - $request = $this->get("api/application/servers/external/$externalId".'?include=allocations'); - - $allocations = $this->transformCollection( - $request['attributes']['relationships']['allocations']['data'], - Allocation::class - ); - - $server = new Server($request, $this); - - $server->allocations = $allocations; - - return $server; + return $this->get("api/application/servers/external/$externalId".$this->include($includes)); } /** @@ -82,7 +54,7 @@ public function serverEx($externalId) */ public function createServer(array $data) { - return new Server($this->post('api/application/servers', $data), $this); + return $this->post('api/application/servers', $data); } /** @@ -92,7 +64,7 @@ public function createServer(array $data) * * @return void */ - public function deleteServer($serverId) + public function deleteServer(int $serverId) { return $this->delete("api/application/servers/$serverId"); } @@ -104,7 +76,7 @@ public function deleteServer($serverId) * * @return void */ - public function forceDeleteServer($serverId) + public function forceDeleteServer(int $serverId) { return $this->delete("api/application/servers/$serverId/force"); } @@ -117,9 +89,9 @@ public function forceDeleteServer($serverId) * * @return Server */ - public function updateServerDetails($serverId, array $data) + public function updateServerDetails(int $serverId, array $data) { - return new Server($this->patch("api/application/servers/$serverId/details", $data), $this); + return $this->patch("api/application/servers/$serverId/details", $data); } /** @@ -130,9 +102,9 @@ public function updateServerDetails($serverId, array $data) * * @return Server */ - public function updateServerBuild($serverId, array $data) + public function updateServerBuild(int $serverId, array $data) { - return new Server($this->patch("api/application/servers/$serverId/build", $data), $this); + return $this->patch("api/application/servers/$serverId/build", $data); } /** @@ -143,9 +115,9 @@ public function updateServerBuild($serverId, array $data) * * @return Server */ - public function updateServerStartup($serverId, array $data) + public function updateServerStartup(int $serverId, array $data) { - return new Server($this->patch("api/application/servers/$serverId/startup", $data), $this); + return $this->patch("api/application/servers/$serverId/startup", $data); } /** @@ -155,7 +127,7 @@ public function updateServerStartup($serverId, array $data) * * @return void */ - public function suspendServer($serverId) + public function suspendServer(int $serverId) { return $this->post("api/application/servers/$serverId/suspend"); } @@ -167,7 +139,7 @@ public function suspendServer($serverId) * * @return void */ - public function unsuspendServer($serverId) + public function unsuspendServer(int $serverId) { return $this->post("api/application/servers/$serverId/unsuspend"); } @@ -179,7 +151,7 @@ public function unsuspendServer($serverId) * * @return void */ - public function reinstallServer($serverId) + public function reinstallServer(int $serverId) { return $this->post("api/application/servers/$serverId/reinstall"); } @@ -191,7 +163,7 @@ public function reinstallServer($serverId) * * @return void */ - public function rebuildServer($serverId) + public function rebuildServer(int $serverId) { return $this->post("api/application/servers/$serverId/rebuild"); } @@ -203,15 +175,9 @@ public function rebuildServer($serverId) * * @return ServerDatabase[] */ - public function serverDatabases($serverId) + public function serverDatabases(int $serverId) { - $data = $this->get("api/application/servers/$serverId/databases"); - $transform = $this->transformCollection( - $data['data'], - ServerDatabase::class - ); - - return $transform; + return $this->get("api/application/servers/$serverId/databases"); } /** @@ -222,9 +188,9 @@ public function serverDatabases($serverId) * * @return ServerDatabase */ - public function serverDatabase($serverId, $databaseId) + public function serverDatabase(int $serverId, int $databaseId) { - return new ServerDatabase($this->get("api/application/servers/$serverId/databases/$databaseId"), $this); + return $this->get("api/application/servers/$serverId/databases/$databaseId"); } /** @@ -235,9 +201,9 @@ public function serverDatabase($serverId, $databaseId) * * @return ServerDatabase */ - public function createServerDatabase($serverId, array $data) + public function createServerDatabase(int $serverId, array $data) { - return new ServerDatabase($this->post("api/application/servers/$serverId/databases/", $data), $this); + return $this->post("api/application/servers/$serverId/databases/", $data); } /** @@ -248,7 +214,7 @@ public function createServerDatabase($serverId, array $data) * * @return void */ - public function resetServerDatabasePassword($serverId, $databaseId) + public function resetServerDatabasePassword(int $serverId, int $databaseId) { return $this->post("api/application/servers/$serverId/databases/$databaseId/reset-password"); } @@ -261,7 +227,7 @@ public function resetServerDatabasePassword($serverId, $databaseId) * * @return void */ - public function deleteServerDatabase($serverId, $databaseId) + public function deleteServerDatabase(int $serverId, int $databaseId) { return $this->delete("api/application/servers/$serverId/databases/$databaseId"); } diff --git a/src/Actions/ManagesUsers.php b/src/Actions/ManagesUsers.php index e6277aa..6456269 100644 --- a/src/Actions/ManagesUsers.php +++ b/src/Actions/ManagesUsers.php @@ -9,44 +9,39 @@ trait ManagesUsers /** * Get the collection of users. * + * @param int $page + * * @return array */ public function users(int $page = 1) { - $data = $this->get('api/application/users?page='.$page); - $transform = $this->transformCollection( - $data['data'], - User::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/application/users?page='.$page); } /** * Get a user instance. * - * @param int $userId + * @param int $userId + * @param array $includes * * @return User */ - public function user($userId) + public function user(int $userId, array $includes = []) { - return new User($this->get("api/application/users/$userId"), $this); + return $this->get("api/application/users/$userId".$this->include($includes)); } /** * Get a user instance by external id. * - * @param int $userExternalId + * @param int $userExternalId + * @param array $includes * * @return User */ - public function userEx($userExternalId) + public function userEx(int $userExternalId, array $includes = []) { - return new User($this->get("api/application/users/external/$userExternalId"), $this); + return $this->get("api/application/users/external/$userExternalId".$this->include($includes)); } /** @@ -58,7 +53,7 @@ public function userEx($userExternalId) */ public function createUser(array $data) { - return new User($this->post('api/application/users', $data), $this); + return $this->post('api/application/users', $data); } /** @@ -69,9 +64,9 @@ public function createUser(array $data) * * @return User */ - public function updateUser($userId, array $data) + public function updateUser(int $userId, array $data) { - return new User($this->patch("api/application/users/$userId", $data), $this); + return $this->patch("api/application/users/$userId", $data); } /** @@ -81,7 +76,7 @@ public function updateUser($userId, array $data) * * @return void */ - public function deleteUser($userId) + public function deleteUser(int $userId) { return $this->delete("api/application/users/$userId"); } diff --git a/src/Actions/UsesServers.php b/src/Actions/UsesServers.php index f80b2f2..2aa1c27 100644 --- a/src/Actions/UsesServers.php +++ b/src/Actions/UsesServers.php @@ -10,44 +10,37 @@ trait UsesServers /** * Get the collection of servers for the authenticated user. * + * @param int $page + * * @return array */ public function listServers(int $page = 1) { - $data = $this->get('api/client?page='.$page); - $transform = $this->transformCollection( - $data['data'], - Server::class - ); - - return [ - 'data' => $transform, - 'meta' => $data['meta'], - ]; + return $this->get('api/client?page='.$page); } /** * Gets the details of a given server. * + * @param string $serverIdentifier + * @param array $includes + * * @return Server[] */ - public function getServer($serverIdentifier) + public function getServer(string $serverIdentifier, array $includes = []) { - $request = $this->get("api/client/servers/$serverIdentifier"); - $server = new Server($request, $this); - - return $server; + return $this->get("api/client/servers/$serverIdentifier".$this->include($includes)); } /** * Toggle the power on a given server. * - * @param string $serverId + * @param string $serverIdentifier * @param string $action * * @return void */ - public function powerServer($serverIdentifier, $action) + public function powerServer(string $serverIdentifier, string $action) { return $this->post("api/client/servers/$serverIdentifier/power", ['signal'=>"$action"]); } @@ -55,12 +48,12 @@ public function powerServer($serverIdentifier, $action) /** * Send a command to a given server. * - * @param string $serverId - * @param string $action + * @param string $serverIdentifier + * @param string $command * * @return void */ - public function commandServer($serverIdentifier, $command) + public function commandServer(string $serverIdentifier, string $command) { return $this->post("api/client/servers/$serverIdentifier/command", ['command'=>"$command"]); } @@ -68,15 +61,12 @@ public function commandServer($serverIdentifier, $command) /** * Get the utilization of a given server. * - * @param string $serverId + * @param string $serverIdentifier * * @return Stats[] */ - public function utilizationServer($serverIdentifier) + public function utilizationServer(string $serverIdentifier) { - $request = $this->get("api/client/servers/$serverIdentifier/utilization"); - $stats = new Stats($request, $this); - - return $stats; + return $this->get("api/client/servers/$serverIdentifier/utilization"); } } diff --git a/src/Exceptions/FailedActionException.php b/src/Exceptions/FailedActionException.php index 63df0bf..fb06188 100644 --- a/src/Exceptions/FailedActionException.php +++ b/src/Exceptions/FailedActionException.php @@ -6,13 +6,4 @@ class FailedActionException extends Exception { - /** - * Create a new exception instance. - * - * @return void - */ - public function __construct($message) - { - parent::__construct($message); - } } diff --git a/src/MakesHttpRequests.php b/src/MakesHttpRequests.php index 3f5a090..54f3f6f 100644 --- a/src/MakesHttpRequests.php +++ b/src/MakesHttpRequests.php @@ -103,7 +103,7 @@ private function request($verb, $uri, array $payload = []) $responseBody = (string) $response->getBody(); - return json_decode($responseBody, true) ?: $responseBody; + return $this->transform(json_decode($responseBody, true)) ?: $responseBody; } /** @@ -142,7 +142,9 @@ public function retry($timeout, $callback) beginning: - if ($output = $callback()) { + $output = $callback(); + + if ($output) { return $output; } diff --git a/src/Pterodactyl.php b/src/Pterodactyl.php index cab3c6c..021a2db 100644 --- a/src/Pterodactyl.php +++ b/src/Pterodactyl.php @@ -69,19 +69,57 @@ public function __construct($apiKey, $baseUri, HttpClient $guzzle = null) } /** - * Transform the items of the collection to the given class. + * Transform response data to resources. * - * @param array $collection - * @param string $class - * @param array $extraData + * @param array $response * - * @return array + * @return mixed */ - protected function transformCollection($collection, $class, $extraData = []) + protected function transform($response) { - return array_map(function ($data) use ($class, $extraData) { - return new $class($data + $extraData, $this); - }, $collection); + if (empty($response['object'])) { + return $response; + } + + switch ($response['object']) { + case 'list': + $data = array_map(function ($object) { + return $this->transform($object); + }, $response['data']); + + if (isset($response['meta'])) { + return [ + 'data' => $data, + 'meta' => $response['meta'], + ]; + } + + return $data; + } + + if (isset($response['attributes']['relationships'])) { + $response['attributes']['relationships'] = array_map(function ($object) { + return $this->transform($object); + }, $response['attributes']['relationships']); + } + + $class = '\\HCGCloud\\Pterodactyl\\Resources\\'.ucwords($response['object']); + + $resource = class_exists($class) ? new $class($response['attributes'], $this) : $response['attributes']; + + return $resource; + } + + /** + * Transform include array to url parameter. + * + * @param array $includes + * + * @return string + */ + protected function include($includes) + { + return empty($includes) ? '' : '?include='.implode(',', $includes); } /** diff --git a/src/Resources/Egg.php b/src/Resources/Egg.php index 6831d56..6af89e6 100644 --- a/src/Resources/Egg.php +++ b/src/Resources/Egg.php @@ -67,13 +67,6 @@ class Egg extends Resource */ public $script = []; - /** - * The attributes of the egg. - * - * @var array - */ - public $attributes = []; - /** * The date/time the egg was created. * diff --git a/src/Resources/Location.php b/src/Resources/Location.php index a1d2b7c..c0966c9 100644 --- a/src/Resources/Location.php +++ b/src/Resources/Location.php @@ -25,13 +25,6 @@ class Location extends Resource */ public $long; - /** - * The attributes of the location. - * - * @var array - */ - public $attributes = []; - /** * The date/time the location was created. * diff --git a/src/Resources/Nest.php b/src/Resources/Nest.php index a039763..52993d4 100644 --- a/src/Resources/Nest.php +++ b/src/Resources/Nest.php @@ -39,13 +39,6 @@ class Nest extends Resource */ public $description; - /** - * The attributes of the nest. - * - * @var array - */ - public $attributes = []; - /** * The date/time the nest was created. * @@ -73,12 +66,13 @@ public function eggs() /** * Get a egg instance in the given nest. * - * @param int $eggId + * @param int $eggId + * @param array $includes * * @return Egg */ - public function egg($eggId) + public function egg($eggId, array $includes = []) { - return $this->pterodactyl->egg($this->id, $eggId); + return $this->pterodactyl->egg($this->id, $eggId, $includes); } } diff --git a/src/Resources/Node.php b/src/Resources/Node.php index c3995a8..6dc5bde 100644 --- a/src/Resources/Node.php +++ b/src/Resources/Node.php @@ -123,13 +123,6 @@ class Node extends Resource */ public $daemonBase; - /** - * The attributes of the node. - * - * @var array - */ - public $attributes = []; - /** * The date/time the node was created. * @@ -197,7 +190,7 @@ public function createAllocation(array $data) * * @return void */ - public function deleteAllocation($allocationId) + public function deleteAllocation(int $allocationId) { return $this->pterodactyl->deleteAllocation($this->id, $allocationId); } diff --git a/src/Resources/Resource.php b/src/Resources/Resource.php index cfae493..e72f593 100644 --- a/src/Resources/Resource.php +++ b/src/Resources/Resource.php @@ -11,7 +11,7 @@ class Resource * * @var array */ - public $attributes; + protected $attributes; /** * The Pterodactyl SDK instance. diff --git a/src/Resources/Server.php b/src/Resources/Server.php index f8a675a..0348578 100644 --- a/src/Resources/Server.php +++ b/src/Resources/Server.php @@ -81,13 +81,6 @@ class Server extends Resource */ public $updatedAt; - /** - * The attributes of the server. - * - * @var array - */ - public $attributes = []; - /** * The limits of the server. * @@ -159,6 +152,8 @@ public function unsuspend() /** * Update details of the server. * + * @param array $data + * * @return void */ public function updateDetails(array $data = []) @@ -174,6 +169,8 @@ public function updateDetails(array $data = []) /** * Update build configuration of the server. * + * @param array $data + * * @return void */ public function updateBuild(array $data = []) @@ -190,6 +187,8 @@ public function updateBuild(array $data = []) /** * Update startup parameters of the server. * + * @param array $data + * * @return void */ public function updateStartup(array $data = []) @@ -228,19 +227,23 @@ public function rebuild() /** * Power the server. * + * @param string $action + * * @return void */ - public function power($action) + public function power(string $action) { return $this->pterodactyl->powerServer($this->identifier, $action); } /** - * Power the server. + * Send command to the server. + * + * @param string $command * * @return void */ - public function command($command) + public function command(string $command) { return $this->pterodactyl->commandServer($this->identifier, $command); } @@ -262,7 +265,7 @@ public function databases() * * @return ServerDatabase */ - public function database($databaseId) + public function database(int $databaseId) { return $this->pterodactyl->serverDatabase($this->id, $databaseId); } @@ -286,7 +289,7 @@ public function createDatabase(array $data) * * @return void */ - public function resetDatabasePassword($databaseId) + public function resetDatabasePassword(int $databaseId) { return $this->pterodactyl->resetServerDatabasePassword($this->id, $databaseId); } @@ -298,7 +301,7 @@ public function resetDatabasePassword($databaseId) * * @return void */ - public function deleteDatabase($databaseId) + public function deleteDatabase(int $databaseId) { return $this->pterodactyl->deleteServerDatabase($this->id, $databaseId); } diff --git a/src/Resources/ServerDatabase.php b/src/Resources/ServerDatabase.php index d72fb78..e20a9bd 100644 --- a/src/Resources/ServerDatabase.php +++ b/src/Resources/ServerDatabase.php @@ -60,13 +60,6 @@ class ServerDatabase extends Resource */ public $updatedAt; - /** - * The attributes of the server. - * - * @var array - */ - public $attributes = []; - /** * Reset password of the given server's database. * diff --git a/src/Resources/SubUser.php b/src/Resources/SubUser.php new file mode 100644 index 0000000..709b9c6 --- /dev/null +++ b/src/Resources/SubUser.php @@ -0,0 +1,48 @@ +