blob: edf77053cd3e2a0464e86b8cb52934af4659674a [file] [log] [blame]
Matteo Scandolo035c5932016-12-14 09:55:15 -08001import {AppConfig} from '../../config/app.config';
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08002import IHttpPromiseCallbackArg = angular.IHttpPromiseCallbackArg;
3export interface IAuthRequestData {
4 username: string;
5 password: string;
6}
7
8export interface IAuthResponseData extends IHttpPromiseCallbackArg<any> {
9 data: {
10 user: string;
11 xoscsrftoken: string;
12 xossessionid: string;
13 };
14}
Matteo Scandoloa4a47112016-12-16 10:06:13 -080015
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080016export interface IXosUser {
17 id: number;
18 email: string;
19}
20
Matteo Scandoloa4a47112016-12-16 10:06:13 -080021export interface IXosAuthService {
22 login(data: IAuthRequestData): Promise<any>;
23 logout(): Promise<any>;
Matteo Scandolod62ea792016-12-22 14:02:28 -080024 getUser(): any; // NOTE how to define return user || false ???
25 isAuthenticated(): boolean;
Matteo Scandolo0e363772017-01-13 11:41:29 -080026 clearUser(): void;
Matteo Scandoloa4a47112016-12-16 10:06:13 -080027}
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080028export class AuthService {
29
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080030 constructor(
31 private $http: angular.IHttpService,
32 private $q: angular.IQService,
33 private $cookies: angular.cookies.ICookiesService
34 ) {
35 }
36
37 public login(data: IAuthRequestData): Promise<any> {
38 const d = this.$q.defer();
39 this.$http.post(`${AppConfig.apiEndpoint}/utility/login/`, data)
40 .then((res: IAuthResponseData) => {
41 this.$cookies.put('xoscsrftoken', res.data.xoscsrftoken);
42 this.$cookies.put('xossessionid', res.data.xossessionid);
43 this.$cookies.put('xosuser', res.data.user);
44 res.data.user = JSON.parse(res.data.user);
45 d.resolve(res.data);
46 })
47 .catch(e => {
48 d.reject(e);
49 });
50 return d.promise;
51 }
Matteo Scandoloa4a47112016-12-16 10:06:13 -080052
53 public logout(): Promise<any> {
54 const d = this.$q.defer();
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080055 this.$http.post(`${AppConfig.apiEndpoint}/utility/logout/`, {
Matteo Scandoloa4a47112016-12-16 10:06:13 -080056 xoscsrftoken: this.$cookies.get('xoscsrftoken'),
57 xossessionid: this.$cookies.get('xossessionid')
58 })
59 .then(() => {
Matteo Scandolo0e363772017-01-13 11:41:29 -080060 this.clearUser();
Matteo Scandoloa4a47112016-12-16 10:06:13 -080061 d.resolve();
62 })
63 .catch(e => {
64 d.reject(e);
65 });
66 return d.promise;
67 }
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080068
Matteo Scandolo0e363772017-01-13 11:41:29 -080069 public clearUser(): void {
70 this.$cookies.remove('xoscsrftoken');
71 this.$cookies.remove('xossessionid');
72 this.$cookies.remove('xosuser');
73 }
74
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080075 public getUser(): IXosUser {
Matteo Scandolod62ea792016-12-22 14:02:28 -080076 const user = this.$cookies.get('xosuser');
77 if (angular.isDefined(user)) {
78 return JSON.parse(user);
79 }
80 return;
81 }
82
83 public isAuthenticated(): boolean {
84 const token = this.$cookies.get('xoscsrftoken');
85 const session = this.$cookies.get('xossessionid');
86 return angular.isDefined(token) && angular.isDefined(session);
Matteo Scandoloa8a6fbb2016-12-21 16:59:08 -080087 }
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080088}