Enabled CORS
Fetching info from L-XOS
Change-Id: I6293f15adeb7716cc31499b18d35bdedf8f7cde1
diff --git a/views/ngXosViews/globalXos/src/js/rest.js b/views/ngXosViews/globalXos/src/js/rest.js
new file mode 100644
index 0000000..012daa8
--- /dev/null
+++ b/views/ngXosViews/globalXos/src/js/rest.js
@@ -0,0 +1,268 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 10/20/16.
+ */
+
+(function () {
+ 'use strict';
+ angular.module('xos.globalXos')
+ .service('Controllers', function($resource){
+ return $resource('/api/core/controllers/:id', {id: '@id'});
+ })
+ .service('GXOS', function($q, $resource, _, LXOS){
+ this.attachXosToItem = (items, target = LXOS) => {
+ return _.map(items, (lxos, i) => {
+ let currentXos = target[i];
+ return _.map(lxos, (item) => {
+ item.xos = currentXos;
+ return item;
+ });
+ })
+ };
+
+ this.buildQueryEndpoint = (baseUrl, target = LXOS) => {
+ return () => {
+ const d = $q.defer();
+
+ // store generated $resource for each L-XOS
+ let r = [];
+
+ let p = [];
+ _.forEach(target, (xos, i) => {
+ let resource = $resource(`${xos.auth_url}${baseUrl}`, {id: '@id'}, {
+ query: {
+ isArray: true,
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ }
+ });
+ r.push(resource);
+ p.push(r[i].query().$promise);
+ });
+
+ $q.all(p)
+ .then(res => {
+ res = this.attachXosToItem(res, target);
+ d.resolve(_.flatten(res));
+ })
+ .catch(d.reject);
+
+ return {$promise: d.promise};
+ };
+ };
+
+ // TODO evaluate
+ this.buildLocalResource = (baseUrl, xos) => {
+ const headers = {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ };
+ const resource = $resource(`${xos.auth_url}${baseUrl}`, {id: '@id'}, {
+ query: {
+ isArray: true,
+ headers: headers
+ }
+ });
+ return resource;
+ }
+ })
+ .service('LocalAuth', function ($q, $http, _, LXOS) {
+ const baseUrl = `api/utility/login/`;
+ this.login = () => {
+ const d = $q.defer();
+
+ let p = [];
+ _.forEach(LXOS, (xos, i) => {
+ let loginRequest = $http.post(`${xos.auth_url}${baseUrl}`, {username: xos.admin_user, password: xos.admin_password});
+ p.push(loginRequest);
+ });
+
+ $q.all(p)
+ .then(auths => {
+ _.forEach(auths, (auth, i) => {
+ LXOS[i].xoscsrftoken = auth.data.xoscsrftoken;
+ LXOS[i].xossessionid = auth.data.xossessionid;
+ LXOS[i].user = JSON.parse(auth.data.user);
+ });
+ d.resolve();
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ }
+ })
+ .service('LocalSlices', function(GXOS){
+ const baseUrl = `api/utility/slicesplus/`;
+
+ // TODO build a global resource
+ this.queryFromAll = (targets) => {
+ return GXOS.buildQueryEndpoint(baseUrl, targets)();
+ };
+ })
+ .service('LocalUsers', function(GXOS){
+ const baseUrl = `api/core/users/`;
+
+ // TODO build a global resource
+ this.queryFromAll = GXOS.buildQueryEndpoint(baseUrl);
+ })
+ .service('LocalInstances', function($q, $http, GXOS, LocalDeployments, LocalImages, LocalFlavor, LocalNode){
+ const baseUrl = `api/core/instances/`;
+
+ // NOTE Evaluate to dinamically create a resource targeted to a L-XOS
+
+ this.queryFromAll = (targets) => {
+ return GXOS.buildQueryEndpoint(baseUrl, targets)();
+ };
+ this.createOnLocal = (instance) => {
+ const d = $q.defer();
+ const xos = instance.xos;
+ delete instance.xos;
+ $http.post(`${xos.auth_url}${baseUrl}`, instance, {
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((inst) => {
+ d.resolve(inst);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ };
+
+ this.getFromLocal = (xos, params) => {
+ const d = $q.defer();
+ $http.get(`${xos.auth_url}${baseUrl}`, {
+ params: params,
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((inst) => {
+ d.resolve(inst.data);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ };
+
+ this.getLocalInfo = (xos) => {
+ const d = $q.defer();
+ $q.all([
+ LocalDeployments.queryFromLocal(xos),
+ LocalImages.queryFromLocal(xos),
+ LocalFlavor.queryFromLocal(xos),
+ LocalNode.queryFromLocal(xos)
+ ])
+ .then((res) => {
+ res = _.map(res, collection => {
+ return _.map(collection, item => {
+ return {id: item.id, label: item.name}
+ });
+ });
+ d.resolve(res);
+ })
+ .catch(d.reject);
+ return d.promise;
+ };
+
+ })
+ .service('LocalDeployments', function($q, $http){
+
+ const baseUrl = `api/core/deployments/`;
+
+ this.queryFromLocal = (xos) => {
+ const d = $q.defer();
+
+ $http.get(`${xos.auth_url}${baseUrl}`, {
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((res) => {
+ d.resolve(res.data);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ }
+ })
+ .service('LocalImages', function($q, $http){
+
+ const baseUrl = `api/core/images/`;
+
+ this.queryFromLocal = (xos) => {
+ const d = $q.defer();
+
+ $http.get(`${xos.auth_url}${baseUrl}`, {
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((res) => {
+ d.resolve(res.data);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ }
+ })
+ .service('LocalFlavor', function($q, $http){
+
+ const baseUrl = `api/core/flavors/`;
+
+ this.queryFromLocal = (xos) => {
+ const d = $q.defer();
+
+ $http.get(`${xos.auth_url}${baseUrl}`, {
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((res) => {
+ d.resolve(res.data);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ }
+ })
+ .service('LocalNode', function($q, $http){
+
+ const baseUrl = `api/core/nodes/`;
+
+ this.queryFromLocal = (xos) => {
+ const d = $q.defer();
+
+ $http.get(`${xos.auth_url}${baseUrl}`, {
+ headers: {
+ Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
+ }
+ })
+ .then((res) => {
+ d.resolve(res.data);
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+
+ return d.promise;
+ }
+ });
+})();
+