Code Duplication    Length = 81-84 lines in 2 locations

src/Api/DigitalOceanRebooter.php 1 location

@@ 8-88 (lines=81) @@
5
use GuzzleHttp\Client;
6
use Tylercd100\Rebooter\ApiRebooter;
7
8
class DigitalOceanRebooter extends ApiRebooter {
9
10
    protected $token;
11
    protected $server_id;
12
    protected $host;
13
    protected $client;
14
    
15
    /**
16
     * @param string $token     API Token from DigitalOcean.com
17
     * @param number $server_id The ID of the droplet you want to control
18
     * @param string $host      The api host
19
     * @param Client $client    The guzzle client to use
20
     */
21
    public function __construct($token, $server_id, $host = "api.digitalocean.com", Client $client = null) {
22
23
        if (!$client instanceof Client) {
24
            $client = new Client();
25
        }
26
27
        $this->client = $client;
28
        $this->token = $token;
29
        $this->server_id = $server_id;
30
        $this->host = $host;
31
    }
32
33
    /**
34
     * Executes a Boot command
35
     * @return \Psr\Http\Message\ResponseInterface
36
     */
37
    public function boot() {
38
        return $this->exec("power_on");
39
    }
40
41
    /**
42
     * Executes a Reboot command
43
     * @return \Psr\Http\Message\ResponseInterface
44
     */
45
    public function reboot() {
46
        return $this->exec("reboot");
47
    }
48
49
    /**
50
     * Executes a Shutdown command
51
     * @return \Psr\Http\Message\ResponseInterface
52
     */
53
    public function shutdown() {
54
        return $this->exec("power_off");
55
    }
56
57
    /**
58
     * Builds the request URL for the API call
59
     * @param  string $action The DigitalOcean API action
60
     * @return string
61
     */
62
    protected function buildRequestUrl($action) {
63
        return "https://{$this->host}/v2/droplets/{$this->server_id}/actions";
64
    }
65
66
    /**
67
     * Builds the request data for the API call
68
     * @param  string $action The DigitalOcean API action
69
     * @return array
70
     */
71
    protected function buildRequestData($action) {
72
        return ["type"=>$action];
73
    }
74
75
    /**
76
     * Executes a command on the API
77
     * @param string $action
78
     * @return \Psr\Http\Message\ResponseInterface
79
     */
80
    protected function exec($action) {
81
        $url  = $this->buildRequestUrl($action);
82
        $data = $this->buildRequestData($action);
83
        return $this->client->request('POST', $url, [
84
            'auth' => [$this->token, ""],
85
            'form_params' => $data,
86
        ]);
87
    }
88
}

src/Api/VultrRebooter.php 1 location

@@ 8-91 (lines=84) @@
5
use GuzzleHttp\Client;
6
use Tylercd100\Rebooter\ApiRebooter;
7
8
class VultrRebooter extends ApiRebooter {
9
10
    protected $token;
11
    protected $server_id;
12
    protected $host;
13
    protected $client;
14
    
15
    /**
16
     * @param string $token     API Token from vultr.com
17
     * @param number $server_id The ID of the server you want to control (Vultr calls it the `SUBID`)
18
     * @param string $host      The api host
19
     * @param Client $client    The guzzle client to use
20
     */
21
    public function __construct($token, $server_id, $host = "api.vultr.com", Client $client = null){
22
23
        if(!$client instanceof Client){
24
            $client = new Client();
25
        }
26
27
        $this->client = $client;
28
        $this->token = $token;
29
        $this->server_id = $server_id;
30
        $this->host = $host;
31
    }
32
33
    /**
34
     * Executes a Boot command
35
     * @return \Psr\Http\Message\ResponseInterface
36
     */
37
    public function boot(){
38
        return $this->exec("start");
39
    }
40
41
    /**
42
     * Executes a Reboot command
43
     * @return \Psr\Http\Message\ResponseInterface
44
     */
45
    public function reboot(){
46
        return $this->exec("reboot");
47
    }
48
49
    /**
50
     * Executes a Shutdown command
51
     * @return \Psr\Http\Message\ResponseInterface
52
     */
53
    public function shutdown(){
54
        return $this->exec("halt");
55
    }
56
57
    /**
58
     * Builds the request URL for the API call
59
     * @param  string $action The Vultr API action
60
     * @return string
61
     */
62
    protected function buildRequestUrl($action){
63
        return "https://{$this->host}/v1/server/{$action}";
64
    }
65
66
    /**
67
     * Builds the request data for the API call
68
     * @param  string $action The Vultr API action
69
     * @return array
70
     */
71
    protected function buildRequestData($action){
72
        return ["SUBID"=>$this->server_id];
73
    }
74
75
    /**
76
     * Executes a command on the API
77
     * @param string $action
78
     * @return \Psr\Http\Message\ResponseInterface
79
     */
80
    protected function exec($action){
81
        $url  = $this->buildRequestUrl($action);
82
        $data = $this->buildRequestData($action);
83
84
        return $this->client->request('POST', $url, [
85
            'headers' => [
86
                'API-Key' => $this->token,
87
            ],
88
            'form_params' => $data,
89
        ]);
90
    }
91
}