auth.service.ts
2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import {Injectable, Inject, EventEmitter} from "ng-forward";
import {NoosferoRootScope, UserResponse} from "./../shared/models/interfaces";
import {SessionService} from "./session.service";
import {AuthEvents} from "./auth-events";
@Injectable()
@Inject("$http", SessionService, "$log")
export class AuthService {
public loginSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>();
public loginFailed: EventEmitter<ng.IHttpPromiseCallbackArg<any>> = new EventEmitter<ng.IHttpPromiseCallbackArg<any>>();
public logoutSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>();
constructor(private $http: ng.IHttpService,
private sessionService: SessionService,
private $log: ng.ILogService) {
}
loginFromCookie() {
let url: string = '/api/v1/login_from_cookie';
return this.$http.post(url, null).then(this.loginSuccessCallback.bind(this), this.loginFailedCallback.bind(this));
}
private loginSuccessCallback(response: ng.IHttpPromiseCallbackArg<UserResponse>) {
this.$log.debug('AuthService.login [SUCCESS] response', response);
let currentUser: noosfero.User = this.sessionService.create(response.data);
this.loginSuccess.next(currentUser);
return currentUser;
}
login(credentials: noosfero.Credentials): ng.IPromise<noosfero.User> {
let url = '/api/v1/login';
let encodedData = 'login=' + credentials.username + '&password=' + credentials.password;
return this.$http.post(url, encodedData).then(this.loginSuccessCallback.bind(this), this.loginFailedCallback.bind(this));
}
private loginFailedCallback(response: ng.IHttpPromiseCallbackArg<any>): any {
this.$log.debug('AuthService.login [FAIL] response', response);
this.loginFailed.next(response);
return null;
}
public logout() {
let user: noosfero.User = this.sessionService.currentUser();
this.sessionService.destroy();
this.logoutSuccess.next(user);
this.$http.jsonp('/account/logout'); // FIXME logout from noosfero to sync login state
}
public isAuthenticated() {
return !!this.sessionService.currentUser();
}
public currentUser(): noosfero.User {
return this.sessionService.currentUser();
}
public isAuthorized(authorizedRoles: string | string[]) {
if (!angular.isArray(authorizedRoles)) {
authorizedRoles = [<string>authorizedRoles];
}
return (this.isAuthenticated() && authorizedRoles.indexOf(this.sessionService.currentUser().userRole) !== -1);
}
subscribe(eventName: string, fn: Function) {
let event: EventEmitter<any> = <EventEmitter<any>>(<any>this)[eventName];
if (event) {
event.subscribe(fn);
} else {
throw new Error(`The event: ${eventName} not exists`);
}
}
}