Skip to content
Snippets Groups Projects
auth.service.ts 4.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Injectable } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { Router } from '@angular/router';
    import { LocalStorageService } from './local-storage.service';
    
    import { NotificationService } from './notification/notification.service';
    
    import { HeaderService } from './header.service';
    
    import { Observable, Subject } from 'rxjs';
    
    import { tap } from 'rxjs/operators';
    
    
    @Injectable({
        providedIn: 'root'
    })
    export class AuthService {
    
        authMode: string = 'default';
    
        authUri: string = '';
    
        private eventAction = new Subject<any>();
    
    
        constructor(public http: HttpClient,
            private router: Router,
            private headerService: HeaderService,
            private notify: NotificationService,
            private localStorage: LocalStorageService) { }
    
    
        catchEvent(): Observable<any> {
            return this.eventAction.asObservable();
        }
    
        setEvent(content: any) {
            return this.eventAction.next(content);
        }
    
    
        getToken() {
            return this.localStorage.get('MaarchCourrierToken');
        }
    
    
    Alex ORLUC's avatar
    Alex ORLUC committed
        getAppSession() {
            return this.localStorage.getAppSession();
        }
    
    
        setAppSession(id: string) {
            this.localStorage.setAppSession(id);
        }
    
    
        setCachedUrl(url: string) {
            this.localStorage.save('MaarchCourrierCachedUrl', url);
        }
    
        getCachedUrl() {
            return this.localStorage.get('MaarchCourrierCachedUrl');
        }
    
        cleanCachedUrl() {
            return this.localStorage.remove(`MaarchCourrierCachedUrl`);
        }
    
    
        getUrl(id: number) {
            return this.localStorage.get(`MaarchCourrierUrl_${id}`);
        }
    
        setUrl(url: string) {
    
            const arrUrl = url.split('/');
    
            if (arrUrl.indexOf('resources') === -1 && arrUrl.indexOf('content') === -1) {
                this.localStorage.save(`MaarchCourrierUrl_${JSON.parse(atob(this.getToken().split('.')[1])).user.id}`, url);
            }
    
        }
    
        cleanUrl(id: number) {
            return this.localStorage.remove(`MaarchCourrierUrl_${id}`);
        }
    
    
        setToken(token: string) {
            this.localStorage.save('MaarchCourrierToken', token);
        }
    
        getRefreshToken() {
            return this.localStorage.get('MaarchCourrierRefreshToken');
        }
    
        setRefreshToken(refreshToken: string) {
            this.localStorage.save('MaarchCourrierRefreshToken', refreshToken);
        }
    
        clearTokens() {
            this.localStorage.remove('MaarchCourrierToken');
            this.localStorage.remove('MaarchCourrierRefreshToken');
        }
    
    
        async logout(cleanUrl: boolean = true) {
    
            if (['cas', 'keycloak'].indexOf(this.authMode) > -1) {
                this.SsoLogout(cleanUrl);
            } else {
                this.redirectAfterLogout(cleanUrl);
                await this.router.navigate(['/login']);
            }
        }
    
        SsoLogout(cleanUrl: boolean = true) {
            this.http.get('../rest/authenticate/logout').pipe(
                tap(async (data: any) => {
                    this.redirectAfterLogout(cleanUrl);
    
                    window.location.href = data.logoutUrl;
    
                })
            ).subscribe();
        }
    
        redirectAfterLogout(cleanUrl: boolean = true) {
    
            if (this.getToken() !== null && cleanUrl) {
    
                this.cleanUrl(JSON.parse(atob(this.getToken().split('.')[1])).user.id);
            }
    
            this.headerService.setUser();
    
        }
    
        saveTokens(token: string, refreshToken: string) {
            this.setToken(token);
            this.setRefreshToken(refreshToken);
        }
    
        isAuth(): boolean {
            return this.getToken() !== null;
        }
    
        updateUserInfo(token: string) {
    
            const currentPicture = this.user.picture;
    
    
            this.user = JSON.parse(atob(token.split('.')[1])).user;
    
            this.user.picture = currentPicture;
        }
    
        updateUserInfoWithTokenRefresh() {
            this.http.get('../rest/authenticate/token', {
                params: {
    
                    refreshToken: this.getRefreshToken()
    
                next: (data: any) => {
                    this.setToken(data.token);
    
                    this.updateUserInfo(this.getToken());
                },
                error: err => {
                    this.notify.handleSoftErrors(err);
                }
            });
        }
    
        setUser(value: any) {
            this.user = value;
        }
    }