62 lines
2.4 KiB
TypeScript
62 lines
2.4 KiB
TypeScript
import { Component, OnInit } from "@angular/core";
|
|
import { BaseComponent } from "../../../../core/common/base/base.component";
|
|
import { ActivatedRoute, Router, Params } from "@angular/router";
|
|
import { LoginService } from "../utilities/login.service";
|
|
import { AuthService } from "../../../../core/services/auth/auth.service";
|
|
import { HttpClient } from "@angular/common/http";
|
|
import { takeUntil } from "rxjs/operators";
|
|
import { environment } from "../../../../../environments/environment";
|
|
import { AuthProvider } from "../../../../core/common/enum/auth-provider";
|
|
|
|
@Component({
|
|
selector: 'app-openaire-login',
|
|
templateUrl: './openaire-login.component.html',
|
|
})
|
|
export class OpenAireLoginComponent extends BaseComponent implements OnInit {
|
|
private returnUrl: string;
|
|
|
|
constructor(
|
|
private route: ActivatedRoute,
|
|
private loginService: LoginService,
|
|
private authService: AuthService,
|
|
private router: Router,
|
|
private httpClient: HttpClient
|
|
) {
|
|
super();
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
this.route.queryParams
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe((params: Params) => {
|
|
const returnUrlFromParams = params['returnUrl'];
|
|
if (returnUrlFromParams) { this.returnUrl = returnUrlFromParams; }
|
|
if (!params['code']) { this.openaireAuthorize(); } else { this.openaireLoginUser(params['code'], params['state']) }
|
|
})
|
|
}
|
|
|
|
public openaireAuthorize() {
|
|
window.location.href = environment.loginProviders.openAireConfiguration.oauthUrl
|
|
+ '?response_type=code&client_id=' + environment.loginProviders.openAireConfiguration.clientId
|
|
+ '&redirect_uri=' + environment.loginProviders.openAireConfiguration.redirectUri
|
|
+ '&state=' + environment.loginProviders.openAireConfiguration.state
|
|
+ '&scope=openid profile email';
|
|
}
|
|
|
|
public openaireLoginUser(code: string, state: string) {
|
|
if (state !== environment.loginProviders.openAireConfiguration.state) {
|
|
this.router.navigate(['/login'])
|
|
}
|
|
this.httpClient.post(environment.Server + 'auth/openAireRequestToken', { code: code, provider: AuthProvider.OpenAire })
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe((data: any) => {
|
|
this.authService.login({ ticket: data.payload.accessToken, provider: AuthProvider.OpenAire, data: null })
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe(
|
|
res => this.loginService.onLogInSuccess(res, this.returnUrl),
|
|
error => this.loginService.onLogInError(error)
|
|
);
|
|
});
|
|
}
|
|
}
|