All files / src/app/shared/login login.service.ts

41.66% Statements 10/24
40% Branches 2/5
23.07% Functions 3/13
40.9% Lines 9/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 607x 7x 7x     7x           7x       7x             4x                 6x 6x                                                      
import { Injectable, Injector } from "@angular/core";
import { environment } from "@environment";
import { Observable, of, tap } from "rxjs";
import { Account } from "./account.interface";
import { LoginProvider } from "./login-service.interface";
import { MSALLoginService } from "./msal-login/msal-login.service";
 
 
@Injectable({
    providedIn: "root",
})
export class LoginService implements LoginProvider {
    service!: LoginProvider;
    account: Account | undefined;
 
    constructor (private readonly injector: Injector) { }
 
    setService () {
        this.service = this.injector.get(MSALLoginService);
    }
 
    isLoggedIn () {
        return !environment.msal || !!(this.service && this.service.getAccount());
    }
 
    loginWithProvider (provider: "msal" | "dummy") {
        localStorage.setItem("login-provider", provider);
        this.setService();
        this.service?.init().subscribe(() => this.service?.login());
    }
    init (): Observable<void> {
        if(!environment.msal)
            return of();
        this.setService();
        return this.service!.init().pipe(tap(() => {
            this.account = this.service!.getAccount();
        }));
    }
    handleSuccess (callback?: (() => void) | undefined): void {
        this.service.handleSuccess(callback);
    }
    login (): Promise<void> {
        return this.service.login();
    }
    logout (): void {
        this.service.logout();
    }
    getAccount (): Account | undefined {
        return this.service.getAccount();
    }
 
    getToken (): Observable<string> {
        return this.service.getToken();
    }
 
    getProvider (): string {
        return this.service.getProvider();
    }
}