import {Injectable} from "@angular/core"; import ApiService, {AvailableVersion} from "@api/api.service"; import {LoginRequest} from "@api/v1/loginRequest"; import {TokenResponse} from "@api/v1/tokenResponse"; import {catchError, of, tap} from "rxjs"; import {AuthRoles} from "@model/AuthRoles"; import {AuthService, AvailableAuthenticationProvider} from "@service/auth.service"; @Injectable() export default class AuthApiService extends ApiService { public readonly basePath = 'Auth/'; public readonly version = AvailableVersion.v1; public login(login: LoginRequest) { let request = this.createRequestBuilder() .setEndpoint('Login') .setData(login) .setWithCredentials() .build; return this.post(request) .pipe( tap(response => { AuthService.setToken(response, AvailableAuthenticationProvider.Bearer, this.combinedUrl(this.createRequestBuilder().setEndpoint('ReLogin').build)); this.tokenRefreshService.setRefreshTokenExpireMs(response.expiresIn); }) ); } public logout() { let request = this.createRequestBuilder() .setWithCredentials() .setEndpoint('Logout') .build; return this.addAuth(request) .get(request) .pipe( tap(_ => { localStorage.removeItem(ApiService.tokenKey); }) ); } public getRole(isSilence: boolean = true) { let request = this.createRequestBuilder() .setSilenceMode(isSilence) .setEndpoint('GetRole') .build; return this.addAuth(request) .get(request) .pipe( catchError(_ => { return of(null); }) ); } }