mirror of https://github.com/rancher/ui.git
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import Service from '@ember/service';
|
|
import { addQueryParam, addQueryParams } from 'shared/utils/util';
|
|
import fetch from '@rancher/ember-api-store/utils/fetch';
|
|
import { inject as service } from '@ember/service';
|
|
import { get, set } from '@ember/object';
|
|
import { reject } from 'rsvp';
|
|
|
|
const DIGITALOCEAN_API = 'api.digitalocean.com/v2';
|
|
|
|
export default Service.extend({
|
|
app: service(),
|
|
|
|
request(auth = {}, command, opt = {}, out) {
|
|
let url = `${ get(this, 'app.proxyEndpoint') }/`;
|
|
let token = get(auth, 'token');
|
|
let headers = { 'Accept': 'application/json' };
|
|
|
|
if (get(auth, 'type') === 'cloud') {
|
|
set(headers, 'x-api-cattleauth-header', `Bearer credID=${ token } passwordField=accessToken`);
|
|
} else {
|
|
set(headers, 'X-Api-Auth-Header', `Bearer ${ token }`);
|
|
}
|
|
|
|
if ( opt.url ) {
|
|
url += opt.url.replace(/^http[s]?\/\//, '');
|
|
} else {
|
|
url += `${ DIGITALOCEAN_API }/${ command }`;
|
|
url = addQueryParam(url, 'per_page', opt.per_page || 100);
|
|
url = addQueryParams(url, opt.params || {});
|
|
}
|
|
|
|
|
|
return fetch(url, { headers }).then((res) => {
|
|
let body = res.body;
|
|
|
|
if ( out ) {
|
|
out[command].pushObjects(body[command]);
|
|
} else {
|
|
out = body;
|
|
}
|
|
|
|
// De-paging
|
|
if ( body && body.links && body.links.pages && body.links.pages.next ) {
|
|
opt.url = body.links.pages.next;
|
|
|
|
return this.apiRequest(command, opt, out).then(() => {
|
|
return out;
|
|
});
|
|
} else {
|
|
return out;
|
|
}
|
|
}).catch((err) => {
|
|
return reject(err);
|
|
});
|
|
}
|
|
});
|