feat: add auth service
This commit is contained in:
@ -1,10 +1,12 @@
|
||||
import {catchError, mergeMap, Observable, retryWhen, tap, timer} from "rxjs";
|
||||
import {catchError, filter, mergeMap, Observable, retryWhen, switchMap, take, tap, timer} from "rxjs";
|
||||
import {HttpClient, HttpErrorResponse} from "@angular/common/http";
|
||||
import {NotifyColor, OpenNotifyService} from "@service/open-notify.service";
|
||||
import {environment} from "@environment";
|
||||
import {Router} from "@angular/router";
|
||||
import {Injectable} from "@angular/core";
|
||||
import {RequestBuilder, RequestData, SetRequestBuilderAfterBuild} from "@api/RequestBuilder";
|
||||
import {TokenRefreshService} from "@service/token-refresh.service";
|
||||
import {AuthToken} from "@service/auth.service";
|
||||
|
||||
export function retryWithInterval<T>(): (source: Observable<T>) => Observable<T> {
|
||||
return (source: Observable<T>) =>
|
||||
@ -35,13 +37,14 @@ export enum AvailableVersion {
|
||||
|
||||
@Injectable()
|
||||
export default abstract class ApiService implements SetRequestBuilderAfterBuild {
|
||||
constructor(private http: HttpClient, private notify: OpenNotifyService, private router: Router) {
|
||||
constructor(private http: HttpClient, private notify: OpenNotifyService, private router: Router, protected tokenRefreshService: TokenRefreshService) {
|
||||
}
|
||||
|
||||
private apiUrl = environment.apiUrl;
|
||||
protected abstract basePath: string;
|
||||
protected abstract version: AvailableVersion;
|
||||
private request: RequestData = RequestBuilder.getStandardRequestData();
|
||||
public static readonly tokenKey = 'auth_token';
|
||||
|
||||
public setRequestBuilder(request: RequestData): void {
|
||||
this.request = request;
|
||||
@ -128,6 +131,18 @@ export default abstract class ApiService implements SetRequestBuilderAfterBuild
|
||||
return this.makeHttpRequest<Type>('delete');
|
||||
}
|
||||
|
||||
public addAuth() {
|
||||
const token = localStorage.getItem(ApiService.tokenKey);
|
||||
|
||||
if (!token)
|
||||
return this;
|
||||
|
||||
const authToken = AuthToken.httpHeader((JSON.parse(token) as AuthToken));
|
||||
authToken.keys().forEach(key => this.request.httpHeaders = this.request.httpHeaders.append(key, authToken.get(key) ?? ''))
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private handleError(error: HttpErrorResponse): void {
|
||||
// todo: change to Retry-After condition
|
||||
if (error.error.toString().includes("setup")) {
|
||||
@ -147,6 +162,7 @@ export default abstract class ApiService implements SetRequestBuilderAfterBuild
|
||||
message = 'Ошибка запроса. Пожалуйста, проверьте отправленные данные.';
|
||||
break;
|
||||
case 401:
|
||||
this.router.navigate(['/login/']).then();
|
||||
message = 'Ошибка авторизации. Пожалуйста, выполните вход с правильными учетными данными.';
|
||||
break;
|
||||
case 403:
|
||||
|
Reference in New Issue
Block a user