diff --git a/src/app/authentication.service.ts b/src/app/authentication.service.ts index 7f5349c3d8550d1b5f9cf516763c1af02eafc0ff..c4afdd393fa5e7b86026db8e573f1dca4a84e4e1 100644 --- a/src/app/authentication.service.ts +++ b/src/app/authentication.service.ts @@ -3,17 +3,27 @@ import { User } from './user'; import { Observable } from 'rxjs/Observable'; import { of } from 'rxjs/observable/of'; import { UserRole } from './user-roles.enum'; +import { DataStoreService } from './data-store.service'; // TODO: connect to API // TODO: persist user data (shouldn't get lost on page refresh) @Injectable() export class AuthenticationService { - private mockUser: User; - - constructor() { } + private readonly STORAGE_KEY: string = 'USER'; + private user: User; + + constructor(private dataStoreService: DataStoreService) { + if (dataStoreService.has(this.STORAGE_KEY)) { + // Load user data from local data store if available + this.user = JSON.parse(dataStoreService.get(this.STORAGE_KEY)); + } + } login(email: string, password: string, role: UserRole): Observable<boolean> { - this.mockUser = new User(1, '', email, role); + this.user = new User(1, '', email, role, 'TOKEN'); + // Store user data in local storage to retain the data when the user reloads the page + this.dataStoreService.set(this.STORAGE_KEY, JSON.stringify(this.user)); + return of(true); } @@ -26,19 +36,21 @@ export class AuthenticationService { } logout() { - this.mockUser = null; + // Destroy the persisted user data + this.dataStoreService.remove(this.STORAGE_KEY); + this.user = undefined; } getUser(): Observable<User> { - return of(this.mockUser); + return of(this.user); } isLoggedIn(): Observable<boolean> { - return of(this.mockUser !== undefined); + return of(this.user !== undefined); } getRole(): Observable<UserRole> { - return of(this.mockUser.role); + return of(this.user.role); } }