Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export default class ResourceConsumption {
- //@ngInject
- constructor($resource, $http, vpcDomainConsumptionAuth, TokenStore) {
- this.$http = $http;
- this.vpcDomainConsumptionAuth = vpcDomainConsumptionAuth;
- this.TokenStore = TokenStore;
- this.UUID_ANCHOR = 'UUID_FIELD';
- const URL = `/v1/resource/sel_project/${this.UUID_ANCHOR}/metric/:type/measures`;
- const PARAMS = {
- uuid: '@uuid',
- type: '@type'
- };
- let ACTIONS = {
- query: {
- method: 'GET',
- isArray: true
- },
- getResourceInfo: {
- method: 'GET',
- url: `/v1/resource/sel_project/${this.UUID_ANCHOR}`
- }
- };
- this.prepareActions(ACTIONS);
- return $resource(URL, PARAMS, ACTIONS);
- }
- prepareActions(actions) {
- let that = this;
- Object.keys(actions).forEach(key => {
- let action = actions[key];
- let then = action.then;
- action.interceptor = {
- responseError: (resp) => {
- if (resp.status !== 401) return resp;
- const projectId = this.parseUuid(action.url, resp.config.url);
- return this.TokenStore.requestResellToken({projectId}, true, false)
- .then(token => {
- return this.$http({
- method: resp.config.method,
- url: resp.config.url,
- headers: {
- 'X-Auth-Token': token
- }
- })
- });
- }
- };
- // action выполняется только после выполнения then.
- action.then = function (resolve, reject) {
- let infoPromise = that.vpcDomainConsumptionAuth.getInfo();
- let tokenPromise = that.TokenStore.requestResellToken({projectId: this.params.uuid}, false, false);
- return Promise.all([infoPromise, tokenPromise]).then(
- ([{url}, token]) => {
- let uuid = this.params.uuid;
- delete this.params.uuid;
- this.url = url + this.url.replace(that.UUID_ANCHOR, uuid);
- this.headers = Object.assign(this.headers, {'X-Auth-Token': token + '1'});
- // Конструкция this.then = then || null позволяет выполнить заданный ранее then и избежать зацикливания.
- this.then = then || null;
- resolve(this);
- },
- reject);
- }
- });
- return actions;
- }
- parseUuid(mask, url) {
- const position = mask.indexOf(this.UUID_ANCHOR);
- const maskPieces = mask.split(this.UUID_ANCHOR);
- switch (position) {
- case 0:
- return url.split(maskPieces[1])[0];
- case mask.length - this.UUID_ANCHOR.length:
- return url.split(maskPieces[0])[1];
- default:
- return url.split(maskPieces[1])[0].split(maskPieces[0])[1];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement