/**
* @ngdoc service
* @name AuthService
* @module s4c.services.AuthService
*
* @description Componente para acesso a api do backend e/ou comunicação entre controllers
*
*
*/
(function () {
'use strict';
function AuthService($http, $q, $window, $rootScope, $mdDialog, $state, API_ENDPOINT) {
var self = this;
self.User = {
info: ''
};
/**
* @method getUserGrupos
*/
function getUserGrupos() {
var p = $q.defer();
getUserInfo().then(function (usuario) {
$http.get(API_ENDPOINT + 'grupo_usuarios/byusuario/' + usuario.id)
.then(function (response) {
if (typeof response.data === 'object') {
p.resolve(response.data);
} else {
p.reject(response);
}
}, function (err) {
p.reject(err);
});
});
return p.promise;
}
/**
* @method getUserAcervosPermissions
*/
function getUserAcervosPermissions() {
var p = $q.defer();
$http.get(API_ENDPOINT + 'permissoes/acervos/')
.then(function (response) {
if (typeof response.data === 'object') {
p.resolve(response.data);
} else {
p.reject(response);
}
}, function (err) {
p.reject(err);
});
return p.promise;
}
/**
* @method getUserFacesPermissions
*/
function getUserFacesPermissions() {
var p = $q.defer();
$http.get(API_ENDPOINT + 'permissoes/faces/')
.then(function (response) {
if (typeof response.data === 'object') {
p.resolve(response.data);
} else {
p.reject(response);
}
}, function (err) {
p.reject(err);
});
return p.promise;
}
/**
* @method getUserPresets
*/
function getUserPresets() {
var p = $q.defer();
$http.get(API_ENDPOINT + 'usuarios/me/presets')
.then(function (res) {
if (typeof res.data === 'object') {
p.resolve(res.data);
} else {
p.reject(res)
}
}, function (err) {
p.reject(err);
});
return p.promise;
}
/**
* @method changePassword
* @param {*} data
*/
function changePassword(data) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'usuarios/senha', data)
.then(function (response) {
if (typeof response.data === 'object') {
deferred.resolve(response.data);
} else {
deferred.reject(response);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method resetUserPassword
* @param {*} id
* @param {*} newPassword
*/
function resetUserPassword(id, newPassword) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'usuarios/' + id + '/reset_password', {
password: newPassword,
primeiro_login: true
}).then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject();
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
self.canLoad = true;
self.p = $q.defer();
/**
* @method getUserInfo
*/
function getUserInfo() {
if (self.p == null) {
self.p = $q.defer();
}
if ((self.User.info && self.User.info.cpf) || !self.canLoad) {
return self.p.promise;
}
self.canLoad = false;
$http.get(API_ENDPOINT + 'usuarios/me')
.then(function (response) {
if (typeof response.data === 'object') {
self.User.info = response.data;
self.canLoad = true;
if (self.User.info.primeiroLogin) {
$mdDialog.show({
controller: function ($scope, $mdDialog, $rootScope) {
$scope.username = self.User.info.username;
$scope.name = self.User.info.nome;
$scope.res = $rootScope.res;
$scope.salvar = function () {
if (!$scope.trocaSenha.$valid) {
return false;
}
changePassword({
password: $scope.senha
}).then(function (data) {
var dialog = $mdDialog;
dialog
.show(dialog.alert()
.title($scope.res('SUCESSO'))
.content($scope.res('SENHA_ALTERADA'))
.ok('OK'))
.then(function () {
dialog.hide();
});
}, function (err) {
$mdDialog.cancel();
$state.go('inicio');
});
};
},
templateUrl: 'app/components/inicio/primeira_senha.html',
clickOutsideToClose: false,
escapeToClose: false
})
.then(function (wat) {
$mdDialog.hide();
}, function () {
});
}
self.p.resolve(response.data);
} else {
self.p.reject(response);
}
}, function (err) {
self.p.reject(err);
});
return self.p.promise;
}
/**
* @method login
* @param {*} usuario
* @param {*} senha
* @param {*} primeiroLogin
* @param {*} dominio
*/
function login(usuario, senha, primeiroLogin, dominio) {
var p = $q.defer();
$http({
method: 'POST',
url: API_ENDPOINT + 'login/',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
transformRequest: function (obj) {
var str = [];
for (var p in obj) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
},
data: {
username: usuario,
password: senha,
dominio: dominio
}
}).then(function (res) {
if (typeof res.data === 'object' && !res.data.errorCode) {
$window.sessionStorage.setItem('s4cToken', JSON.stringify(res.data));
if (!primeiroLogin) {
$rootScope.$emit('userLoggedIn', res.data);
}
$http.get(API_ENDPOINT + 'area_atuacao/permissoes')
.then(function (permissoes) {
getUserInfo().then(function (user) {
user.permissoesAreaAtuacao = permissoes.data;
p.resolve(res.data);
});
}, function (err) {
p.reject(err);
});
} else {
p.reject(res);
}
}, function (err) {
p.reject(err);
});
return p.promise;
}
/**
* @method logout
*/
function logout() {
var p = $q.defer();
$http.get(API_ENDPOINT + 'usuarios/logout')
.then(function (res) {
document.cookie = "token=";
self.User.info = undefined;
self.p = undefined;
window.sessionStorage.clear();
if (typeof res.data === 'object') {
p.resolve(res.data);
} else {
p.reject(res)
}
}, function (err) {
p.reject(err);
});
return p.promise;
}
return {
user: self.User,
login: login,
logout: logout,
getUserInfo: getUserInfo,
getUserPresets: getUserPresets,
getUserAcervosPermissions: getUserAcervosPermissions,
getUserFacesPermissions: getUserFacesPermissions,
getUserGrupos: getUserGrupos,
resetUserPassword: resetUserPassword
};
}
AuthService.$inject = ['$http', '$q', '$window', '$rootScope', '$mdDialog', '$state', 'API_ENDPOINT'];
angular.module('s4c.services.AuthService', [])
.factory('AuthService', AuthService);
}());