blob: e97f09177879646816f8472058120dd0dd8684de [file] [log] [blame]
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
"use strict";
angular.module('cordRest', [])
.factory('SetCSRFToken', function setCSRFToken($cookies) {
return {
request: function(request){
request.headers['X-CSRFToken'] = $cookies.get('xoscsrftoken');
request.headers['sessionId'] = $cookies.get('sessionid');
return request;
}
};
})
.service('User', function($http, $q, $cookies, cordConfig){
this.login = function(username, password){
var deferred = $q.defer();
var user;
// logging in the user
$http.post(cordConfig.url + '/xoslib/login/', {username: username, password: password})
.then(function(res){
$cookies.put('user', res.data.user);
$cookies.put('sessionid', res.data.xossessionid);
user = JSON.parse(res.data.user);
return $http.get(cordConfig.url + '/xos/tenantrootprivileges?user=' + user.id);
})
.then(function(subscribers){
// subscribers are an array because the way Django perform query
// but one user is related to only one subscriber
$cookies.put('subscriberId', subscribers.data[0].id);
deferred.resolve(user);
})
.catch(function(e){
deferred.reject(e);
throw new Error(e);
});
return deferred.promise;
};
this.isLoggedIn = function(){
var user = $cookies.get('user');
if( angular.isDefined(user)){
return true;
}
return false;
};
this.logout = function(){
var deferred = $q.defer();
var sessionId = $cookies.get('sessionid');
$http.post(cordConfig.url + '/xoslib/logout/', {xossessionid: sessionId})
.then(function(res){
$cookies.remove('user');
deferred.resolve();
})
.catch(function(e){
throw new Error(e);
});
return deferred.promise;
};
})
.service('Subscribers', function($resource, cordConfig){
return $resource(cordConfig.url + '/xoslib/rs/subscriber');
})
.service('SubscriberUsers', function($resource, $filter, cordConfig, Helpers){
return $resource(cordConfig.url + '/xoslib/rs/subscriber/:subscriberId/users/:id', {}, {
query: {
method: 'GET',
isArray: true,
interceptor: {
response: function(res){
// this is used to fake some data that are not XOS related,
// but can be provided by any external services
// add an icon to the user
res.data.map(function(user){
switch (user.name){
case 'Mom\'s PC':
user['icon_id'] = 'mom';
break
case 'Jack\'s Laptop':
user['icon_id'] = 'boy2';
break
case 'Jill\'s Laptop':
user['icon_id'] = 'girl1';
break
case 'Dad\'s PC':
user['icon_id'] = 'dad';
break
}
return user;
});
// add a random login date to the user
res.data.forEach(function(user){
if(!angular.isDefined(cordConfig.userActivity[user.id])){
var date = Helpers.randomDate(new Date(2015, 0, 1), new Date());
cordConfig.userActivity[user.id] = $filter('date')(date, 'mediumTime');
}
});
return res.data;
}
}
}
});
})
.service('SubscriberUsersUrlFilterLevel', function($q, $http, cordConfig){
this.updateUrlFilterLevel = function(subscriberId, userId, level){
var deferred = $q.defer();
$http.put(cordConfig.url + '/xoslib/rs/subscriber/' + subscriberId + '/users/' + userId + '/url_filter/' + level)
.then(function(res){
deferred.resolve(res);
})
.catch(function(e){
throw new Error(e);
});
return deferred.promise;
};
});
}());