refactor: rename AuthApiService
This commit is contained in:
119
src/api/v1/authApi.service.ts
Normal file
119
src/api/v1/authApi.service.ts
Normal file
@ -0,0 +1,119 @@
|
||||
import {Injectable} from "@angular/core";
|
||||
import ApiService, {AvailableVersion} from "@api/api.service";
|
||||
import {LoginRequest} from "@api/v1/loginRequest";
|
||||
import {catchError, map, Observable, of} from "rxjs";
|
||||
import {AuthRoles} from "@model/authRoles";
|
||||
import {AvailableOAuthProvidersResponse} from "@api/v1/availableProvidersResponse";
|
||||
import {OAuthProvider} from "@model/oAuthProvider";
|
||||
import {TwoFactorAuthentication} from "@model/twoFactorAuthentication";
|
||||
import {TwoFactorAuthRequest} from "@api/v1/twoFactorAuthRequest";
|
||||
import {OAuthAction} from "@model/oAuthAction";
|
||||
|
||||
export interface OAuthProviderData extends AvailableOAuthProvidersResponse {
|
||||
icon: string;
|
||||
}
|
||||
|
||||
@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<TwoFactorAuthentication>(request);
|
||||
}
|
||||
|
||||
public twoFactorAuth(data: TwoFactorAuthRequest) {
|
||||
let request = this.createRequestBuilder()
|
||||
.setEndpoint('2FA')
|
||||
.setData(data)
|
||||
.setWithCredentials()
|
||||
.build;
|
||||
|
||||
return this.post<boolean>(request);
|
||||
}
|
||||
|
||||
public reLogin() {
|
||||
let request = this.createRequestBuilder()
|
||||
.setEndpoint('ReLogin')
|
||||
.setWithCredentials()
|
||||
.build;
|
||||
|
||||
return this.get<AuthRoles>(request);
|
||||
}
|
||||
|
||||
public logout() {
|
||||
let request = this.createRequestBuilder()
|
||||
.setWithCredentials()
|
||||
.setEndpoint('Logout')
|
||||
.build;
|
||||
|
||||
return this.addAuth(request).get(request);
|
||||
}
|
||||
|
||||
public getRole(isSilence: boolean = true) {
|
||||
let request = this.createRequestBuilder()
|
||||
.setSilenceMode(isSilence)
|
||||
.setEndpoint('GetRole')
|
||||
.build;
|
||||
|
||||
return this.addAuth(request)
|
||||
.get<AuthRoles>(request)
|
||||
.pipe(
|
||||
catchError(_ => {
|
||||
return of(null);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private getProviderIcon(provider: OAuthProvider): string {
|
||||
switch (provider) {
|
||||
case OAuthProvider.Google:
|
||||
return 'assets/icons/google.svg';
|
||||
case OAuthProvider.Yandex:
|
||||
return 'assets/icons/yandex.svg';
|
||||
case OAuthProvider.MailRu:
|
||||
return 'assets/icons/mailru.svg';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
public availableProviders(callback: string): Observable<OAuthProviderData[]> {
|
||||
let request = this.createRequestBuilder()
|
||||
.setEndpoint('AvailableProviders')
|
||||
.setQueryParams({callback: callback})
|
||||
.setWithCredentials()
|
||||
.build;
|
||||
|
||||
return this.get<Array<AvailableOAuthProvidersResponse>>(request).pipe(
|
||||
map(data => {
|
||||
return data.map((provider) => ({
|
||||
...provider,
|
||||
icon: this.getProviderIcon(provider.provider),
|
||||
}) as OAuthProviderData);
|
||||
}));
|
||||
}
|
||||
|
||||
private handleTokenRequest(token: string, action: OAuthAction) {
|
||||
return this.createRequestBuilder()
|
||||
.setEndpoint('HandleToken')
|
||||
.setQueryParams({token: token, action: action})
|
||||
.setWithCredentials()
|
||||
.build;
|
||||
}
|
||||
|
||||
public loginOAuth(token: string) {
|
||||
return this.get<TwoFactorAuthentication>(this.handleTokenRequest(token, OAuthAction.Login));
|
||||
}
|
||||
|
||||
public linkAccount(token: string): Observable<null> {
|
||||
const request = this.handleTokenRequest(token, OAuthAction.Bind);
|
||||
return this.addAuth(request).get(request);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user