blob: 81c4f7de59ab4ef5cf8921a7e0f862e46c279d75 [file] [log] [blame]
import IHttpPromiseCallbackArg = angular.IHttpPromiseCallbackArg;
import {IXosAppConfig} from '../../../index';
export interface IAuthRequestData {
username: string;
password: string;
}
export interface IAuthResponseData extends IHttpPromiseCallbackArg<any> {
data: {
sessionid: string;
};
}
export interface IXosUser {
id: number;
email: string;
}
export interface IXosAuthService {
login(data: IAuthRequestData): Promise<any>;
logout(): Promise<any>;
getUser(): any; // NOTE how to define return user || false ???
isAuthenticated(): boolean;
clearUser(): void;
}
export class AuthService {
constructor(
private $http: angular.IHttpService,
private $q: angular.IQService,
private $cookies: angular.cookies.ICookiesService,
private AppConfig: IXosAppConfig
) {
}
public login(data: IAuthRequestData): Promise<any> {
const d = this.$q.defer();
this.$http.post(`${this.AppConfig.apiEndpoint}/utility/login`, data)
.then((res: IAuthResponseData) => {
if (res.status >= 400) {
return d.reject(res.data);
}
this.$cookies.put('sessionid', res.data.sessionid, {path: '/'});
d.resolve(res.data);
})
.catch(e => {
d.reject(e);
});
return d.promise;
}
public logout(): Promise<any> {
const d = this.$q.defer();
this.$http.post(`${this.AppConfig.apiEndpoint}/utility/logout`, {
// xoscsrftoken: this.$cookies.get('xoscsrftoken'),
// sessionid: this.$cookies.get('sessionid')
})
.then(() => {
this.clearUser();
d.resolve();
})
.catch(e => {
d.reject(e);
});
return d.promise;
}
public clearUser(): void {
// this.$cookies.remove('xoscsrftoken', {path: '/'});
this.$cookies.remove('sessionid', {path: '/'});
// this.$cookies.remove('xosuser', {path: '/'});
}
public getUser(): IXosUser {
const user = this.$cookies.get('xosuser');
if (angular.isDefined(user)) {
return JSON.parse(user);
}
return;
}
public isAuthenticated(): boolean {
// const token = this.$cookies.get('xoscsrftoken');
const session = this.$cookies.get('sessionid');
return angular.isDefined(session);
}
}