Skip to content

Commit de46f11

Browse files
committed
feat: make API base URL configurable
1 parent 8878c9a commit de46f11

5 files changed

Lines changed: 33 additions & 16 deletions

File tree

apis/upcloudvps_api.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@ class UpcloudvpsApi
3535
* Constructor.
3636
*
3737
* @param array $params API connection parameters including:
38+
* - baseUrl (string) The API base URL
3839
* - apiToken (string) The API token
3940
* - moduleVer (string) The current module version
4041
* - blestaVer (string) The current Blesta version
4142
*/
4243
public function __construct(array $params)
4344
{
44-
$this->baseurl = "https://api.upcloud.com/1.3/";
45+
$this->baseurl = $params['baseUrl'];
4546
$this->blestaVer = $params['blestaVer'];
4647
$this->setHttpHeader('Authorization', 'Bearer ' . $params['apiToken']);
4748
$this->moduleVer = $params['moduleVer'] ?? 'dev';

language/en_us/upcloud.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
$lang['Upcloudvps.edit_row.edit_btn'] = 'Edit Server';
2323
$lang['Upcloudvps.row_meta.account_name'] = 'Account Name';
2424
$lang['Upcloudvps.row_meta.api_token'] = 'API Token';
25+
$lang['Upcloudvps.row_meta.api_base_url'] = 'API Base URL (optional)';
2526
$lang['Upcloudvps.module_row'] = 'Account';
2627
$lang['Upcloudvps.module_row_plural'] = 'Accounts';
2728
$lang['Upcloudvps.description'] = 'The UpCloud module make UpCloud VPS management simple and intuitive. Common tasks such as a ordering VPS, Start, Stop, Reboot, Change Password, View Data Usage are only a few clicks away.';

upcloud.php

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public function manageEditRow($module_row, array &$vars)
8888
*/
8989
public function addModuleRow(array &$vars)
9090
{
91-
$meta_fields = ['account_name', 'api_token'];
91+
$meta_fields = ['account_name', 'api_token', 'api_base_url'];
9292
$encrypted_fields = ['api_token'];
9393
$this->Input->setRules($this->getRowRules($vars));
9494
if ($this->Input->validates($vars)) {
@@ -117,7 +117,7 @@ public function addModuleRow(array &$vars)
117117
*/
118118
public function editModuleRow($module_row, array &$vars)
119119
{
120-
$meta_fields = ['account_name', 'api_token'];
120+
$meta_fields = ['account_name', 'api_token', 'api_base_url'];
121121
$encrypted_fields = ['api_token'];
122122
if (empty($vars['use_ssl'])) {
123123
$vars['use_ssl'] = 'false';
@@ -165,7 +165,7 @@ private function getRowRules(&$vars)
165165
'valid_connection' => [
166166
'rule' => [
167167
[$this, 'validateConnection'],
168-
$vars['api_token'],
168+
$vars['api_base_url'],
169169
],
170170
'message' => Language::_('Upcloudvps.!error.api_token_valid_connection', true)
171171
]
@@ -179,12 +179,13 @@ private function getRowRules(&$vars)
179179
* Validates the connection to the UpCloud API using provided credentials.
180180
*
181181
* @param string $api_token The UpCloud API token
182+
* @param string $api_base_url The UpCloud API base URL
182183
* @return bool True if the connection is successful, false otherwise
183184
*/
184-
public function validateConnection($api_token)
185+
public function validateConnection($api_token, $api_base_url)
185186
{
186187
try {
187-
$api = $this->getApi($api_token);
188+
$api = $this->getApi($api_token, $api_base_url);
188189
$result = $api->GetAccountInfo();
189190
$this->log('upcloud|accountRequest', serialize($result), 'input', true);
190191
if ($result['response_code'] == '200') {
@@ -199,9 +200,10 @@ public function validateConnection($api_token)
199200
* Initializes and returns an instance of the UpcloudvpsApi.
200201
*
201202
* @param string $api_token The UpCloud API token
203+
* @param string $api_base_url The UpCloud API base URL (optional)
202204
* @return UpcloudvpsApi An instance of the UpCloud API wrapper
203205
*/
204-
private function getApi($api_token)
206+
private function getApi($api_token, $api_base_url = null)
205207
{
206208
Loader::load(dirname(__FILE__) . DS . 'apis' . DS . 'upcloudvps_api.php');
207209
Loader::loadComponents($this, ['Record']);
@@ -217,6 +219,7 @@ private function getApi($api_token)
217219
}
218220
$blestaVer = $setting->value;
219221
$params = [
222+
'baseUrl' => empty($api_base_url) ? 'https://api.upcloud.com/1.3/' : $api_base_url,
220223
'apiToken' => $api_token,
221224
'blestaVer' => $blestaVer,
222225
'moduleVer' => $this->config->version,
@@ -233,7 +236,7 @@ private function getApi($api_token)
233236
*/
234237
private function getServerPlans($module_row)
235238
{
236-
$api = $this->getApi($module_row->meta->api_token);
239+
$api = $this->getApi($module_row->meta->api_token, $module_row->meta->api_base_url);
237240
$result = $api->Getplans()['response']['plans']['plan'];
238241
//$this->log('upcloud|Getplans', serialize($result), 'input', true);
239242
$Vmplans = [];
@@ -255,7 +258,7 @@ private function getServerPlans($module_row)
255258
*/
256259
private function getTemplates($module_row, $package = null)
257260
{
258-
$api = $this->getApi($module_row->meta->api_token);
261+
$api = $this->getApi($module_row->meta->api_token, $module_row->meta->api_base_url);
259262
$result_os = $api->GetTemplate()['response']['storages']['storage'];
260263
//$this->log('upcloud|GetTemplates', serialize($result_os), 'input', true);
261264
$templates = [];
@@ -283,7 +286,7 @@ private function getTemplates($module_row, $package = null)
283286
*/
284287
private function getLocations($module_row)
285288
{
286-
$api = $this->getApi($module_row->meta->api_token);
289+
$api = $this->getApi($module_row->meta->api_token, $module_row->meta->api_base_url);
287290
$zones = $api->GetZones()['response']['zones']['zone'];
288291
// $this->log('upcloud|getLocations', serialize($zones), 'input', true);
289292
$zoneLocation = [];
@@ -556,7 +559,7 @@ private function performServiceAction($service, $actionName, $logTag, $expectedR
556559
{
557560
$module_row = $this->getModuleRow();
558561
if ($module_row) {
559-
$api = $this->getApi($module_row->meta->api_token);
562+
$api = $this->getApi($module_row->meta->api_token, $module_row->meta->api_base_url);
560563
$service_fields = $this->serviceFieldsToObject($service->fields);
561564
$vmId = $service_fields->upcloudvps_vmid;
562565
//$this->log($logTag, serialize(['vm_id' => $vmId]), 'input', true);
@@ -749,7 +752,7 @@ public function addService($package, array $vars = null, $parent_package = null,
749752
$this->log('upcloud|create', serialize($params), 'input', true);
750753

751754
try {
752-
$api = $this->getApi($row->meta->api_token);
755+
$api = $this->getApi($row->meta->api_token, $row->meta->api_base_url);
753756
if (empty($vars['upcloudvps_vmid'])) {
754757
$server = $api->CreateServer($params);
755758
$this->log('upcloud', serialize($server), 'output', true);
@@ -869,7 +872,7 @@ public function editService($package, $service, array $vars = null, $parent_pack
869872
}
870873
}
871874
if ($vars['use_module'] == 'true' && !isset($delta['upcloudvps_vmid'])) {
872-
$api = $this->getApi($row->meta->api_token);
875+
$api = $this->getApi($row->meta->api_token, $row->meta->api_base_url);
873876
if ($this->Input->errors()) {
874877
return;
875878
}
@@ -1071,7 +1074,7 @@ private function getServiceInfo($service, $package, $client = false)
10711074
{
10721075
$row = $this->getModuleRow();
10731076
$service_fields = $this->serviceFieldsToObject($service->fields);
1074-
$api = $this->getApi($row->meta->api_token);
1077+
$api = $this->getApi($row->meta->api_token, $row->meta->api_base_url);
10751078
$response = $api->GetServer($service_fields->upcloudvps_vmid)['response']['server'];
10761079
$server_details = $response ?? (object) [];
10771080
$this->view = new View($client ? 'client_service_info' : 'admin_service_info', 'default');
@@ -1216,7 +1219,7 @@ private function getTabActions($package, $service, array $post = null, $client =
12161219
Loader::loadModels($this, ['Services']);
12171220
$service_fields = $this->serviceFieldsToObject($service->fields);
12181221
$templates = $this->getTemplates($row, $package);
1219-
$api = $this->getApi($row->meta->api_token);
1222+
$api = $this->getApi($row->meta->api_token, $row->meta->api_base_url);
12201223
// $this->log('upcloud|GetVMInformation', serialize($service_fields), 'input', true);
12211224
$vmId = $service_fields->upcloudvps_vmid;
12221225
$server_details = $api->GetServer($vmId)['response']['server'];
@@ -1379,7 +1382,7 @@ private function generatePassword()
13791382
public function changeServicePackage($package_from, $package_to, $service, $parent_package = null, $parent_service = null)
13801383
{
13811384
if (($row = $this->getModuleRow())) {
1382-
$api = $this->getApi($row->meta->api_token);
1385+
$api = $this->getApi($row->meta->api_token, $row->meta->api_base_url);
13831386
if ($package_from->meta->server_plan != $package_to->meta->server_plan) {
13841387
$service_fields = $this->serviceFieldsToObject($service->fields);
13851388
$action = $api->ModifyServer($service_fields->upcloudvps_vmid, $package_to->meta->server_plan);

views/default/add_row.pdt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ $this->Widget->create($this->_('Upcloudvps.add_row.box_title', true));
2323
$this->Form->fieldText('api_token', (isset($vars->api_token) ? $vars->api_token : null));
2424
?>
2525
</li>
26+
<li>
27+
<?php
28+
$this->Form->label($this->_('Upcloudvps.row_meta.api_base_url', true), 'api_base_url');
29+
$this->Form->fieldText('api_base_url', (isset($vars->api_base_url) ? $vars->api_base_url : null));
30+
?>
31+
</li>
2632
</ul>
2733
</div>
2834

views/default/edit_row.pdt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ $this->Widget->create($this->_('Upcloudvps.edit_row.box_title', true));
2323
$this->Form->fieldText('api_token', (isset($vars->api_token) ? $vars->api_token : null));
2424
?>
2525
</li>
26+
<li>
27+
<?php
28+
$this->Form->label($this->_('Upcloudvps.row_meta.api_base_url', true), 'api_base_url');
29+
$this->Form->fieldText('api_base_url', (isset($vars->api_base_url) ? $vars->api_base_url : null));
30+
?>
31+
</li>
2632
</ul>
2733
</div>
2834

0 commit comments

Comments
 (0)