From bfe811c4079fe2406ef3d71bfec0fadbc8695972 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 23 Feb 2023 15:01:26 +0300 Subject: [PATCH 1/2] dd grant function on AuthService --- .../core/src/lib/abstracts/abstract.model.ts | 11 +++++ .../core/src/lib/abstracts/auth.service.ts | 23 +++++++--- .../packages/core/src/lib/abstracts/index.ts | 1 + .../oauth/src/lib/services/oauth.service.ts | 43 ++++++++++++++----- 4 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts b/npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts new file mode 100644 index 0000000000..a8205a0aa6 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts @@ -0,0 +1,11 @@ +export interface AbstractModel { + access_token: string; + id_token: string; + token_type: string; + expires_in: number; + refresh_token: string; + scope: string; + state?: string; + tenant_domain?:string +} + diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts index 97bf0b7b24..44ad0ccb03 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts @@ -1,7 +1,9 @@ -import { Injectable } from '@angular/core'; -import { Params } from '@angular/router'; -import { Observable, of } from 'rxjs'; -import { LoginParams } from '../models/auth'; +import {HttpHeaders} from '@angular/common/http'; +import {Injectable} from '@angular/core'; +import {Params} from '@angular/router'; +import {Observable, of} from 'rxjs'; +import {LoginParams} from '../models/auth'; +import {AbstractModel} from "./abstract.model"; /** * Abstract service for Authentication. @@ -10,7 +12,8 @@ import { LoginParams } from '../models/auth'; providedIn: 'root', }) export class AuthService implements IAuthService { - constructor() {} + constructor() { + } private warningMessage() { console.error('You should add @abp/ng-oauth packages or create your own auth packages.'); @@ -31,7 +34,8 @@ export class AuthService implements IAuthService { return of(undefined); } - navigateToLogin(queryParams?: Params): void {} + navigateToLogin(queryParams?: Params): void { + } get isInternalAuth() { throw new Error('not implemented'); @@ -42,6 +46,11 @@ export class AuthService implements IAuthService { this.warningMessage(); return false; } + + loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise { + console.log({grantType, parameters, headers}) + return Promise.reject(new Error('not implemented')); + } } export interface IAuthService { @@ -56,4 +65,6 @@ export interface IAuthService { navigateToLogin(queryParams?: Params): void; login(params: LoginParams): Observable; + + loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise; } diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts index 6a32fcf8eb..6585e55cd1 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts @@ -1,3 +1,4 @@ export * from './ng-model.component'; export * from './auth.guard'; export * from './auth.service'; +export * from './abstract.model' diff --git a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts index a8f937e8ca..dceb7ac845 100644 --- a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts +++ b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts @@ -1,24 +1,27 @@ -import { Injectable, Injector } from '@angular/core'; -import { Params } from '@angular/router'; -import { from, Observable, lastValueFrom } from 'rxjs'; -import { filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { IAuthService, LoginParams } from '@abp/ng.core'; -import { AuthFlowStrategy } from '../strategies'; -import { EnvironmentService } from '@abp/ng.core'; -import { AUTH_FLOW_STRATEGY } from '../tokens/auth-flow-strategy'; -import { AuthConfig, OAuthService } from "angular-oauth2-oidc"; +import {Injectable, Injector} from '@angular/core'; +import {Params} from '@angular/router'; +import {from, Observable, lastValueFrom} from 'rxjs'; +import {filter, map, switchMap, take, tap} from 'rxjs/operators'; +import { AbstractModel, IAuthService, LoginParams} from '@abp/ng.core'; +import {AuthFlowStrategy} from '../strategies'; +import {EnvironmentService} from '@abp/ng.core'; +import {AUTH_FLOW_STRATEGY} from '../tokens/auth-flow-strategy'; +import {OAuthService} from "angular-oauth2-oidc"; +import {HttpHeaders} from '@angular/common/http'; @Injectable({ providedIn: 'root', }) export class AbpOAuthService implements IAuthService { private strategy!: AuthFlowStrategy; - + private oAuthService: OAuthService; get isInternalAuth() { return this.strategy.isInternalAuth; } - constructor(protected injector: Injector, private oAuthService: OAuthService) {} + constructor(protected injector: Injector,) { + this.oAuthService = this.injector.get(OAuthService) + } async init() { const environmentService = this.injector.get(EnvironmentService); @@ -54,4 +57,22 @@ export class AbpOAuthService implements IAuthService { get isAuthenticated(): boolean { return this.oAuthService.hasValidAccessToken(); } + + loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise { + + const {clientId: client_id, dummyClientSecret: client_secret} = this.oAuthService; + const access_token = this.oAuthService.getAccessToken() + const p = { + access_token, + grant_type: grantType, + client_id, + ...parameters + }; + + if (client_secret) { + p['client_secret'] = client_secret; + } + + return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers) + } } From 2f5ad652f85d4e8a2cab7afaa87a73584fed656c Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Mon, 27 Feb 2023 10:41:46 +0300 Subject: [PATCH 2/2] Reformat and change AbstractModel name to AuthResponse --- ...stract.model.ts => auth-response.model.ts} | 5 +-- .../core/src/lib/abstracts/auth.service.ts | 32 +++++++------- .../packages/core/src/lib/abstracts/index.ts | 2 +- .../oauth/src/lib/services/oauth.service.ts | 42 ++++++++++--------- 4 files changed, 44 insertions(+), 37 deletions(-) rename npm/ng-packs/packages/core/src/lib/abstracts/{abstract.model.ts => auth-response.model.ts} (71%) diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth-response.model.ts similarity index 71% rename from npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts rename to npm/ng-packs/packages/core/src/lib/abstracts/auth-response.model.ts index a8205a0aa6..7c8afaa3ec 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/abstract.model.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth-response.model.ts @@ -1,4 +1,4 @@ -export interface AbstractModel { +export interface AbpAuthResponse { access_token: string; id_token: string; token_type: string; @@ -6,6 +6,5 @@ export interface AbstractModel { refresh_token: string; scope: string; state?: string; - tenant_domain?:string + tenant_domain?: string; } - diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts index 44ad0ccb03..3c6d62fae6 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth.service.ts @@ -1,9 +1,9 @@ -import {HttpHeaders} from '@angular/common/http'; -import {Injectable} from '@angular/core'; -import {Params} from '@angular/router'; -import {Observable, of} from 'rxjs'; -import {LoginParams} from '../models/auth'; -import {AbstractModel} from "./abstract.model"; +import { HttpHeaders } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Params } from '@angular/router'; +import { Observable, of } from 'rxjs'; +import { LoginParams } from '../models/auth'; +import { AbpAuthResponse } from './auth-response.model'; /** * Abstract service for Authentication. @@ -12,9 +12,6 @@ import {AbstractModel} from "./abstract.model"; providedIn: 'root', }) export class AuthService implements IAuthService { - constructor() { - } - private warningMessage() { console.error('You should add @abp/ng-oauth packages or create your own auth packages.'); } @@ -34,8 +31,7 @@ export class AuthService implements IAuthService { return of(undefined); } - navigateToLogin(queryParams?: Params): void { - } + navigateToLogin(queryParams?: Params): void {} get isInternalAuth() { throw new Error('not implemented'); @@ -47,8 +43,12 @@ export class AuthService implements IAuthService { return false; } - loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise { - console.log({grantType, parameters, headers}) + loginUsingGrant( + grantType: string, + parameters: object, + headers?: HttpHeaders, + ): Promise { + console.log({ grantType, parameters, headers }); return Promise.reject(new Error('not implemented')); } } @@ -66,5 +66,9 @@ export interface IAuthService { login(params: LoginParams): Observable; - loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise; + loginUsingGrant( + grantType: string, + parameters: object, + headers?: HttpHeaders, + ): Promise; } diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts index 6585e55cd1..e1ff2f106b 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/index.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/index.ts @@ -1,4 +1,4 @@ export * from './ng-model.component'; export * from './auth.guard'; export * from './auth.service'; -export * from './abstract.model' +export * from './auth-response.model'; diff --git a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts index dceb7ac845..e929ab7c79 100644 --- a/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts +++ b/npm/ng-packs/packages/oauth/src/lib/services/oauth.service.ts @@ -1,26 +1,27 @@ -import {Injectable, Injector} from '@angular/core'; -import {Params} from '@angular/router'; -import {from, Observable, lastValueFrom} from 'rxjs'; -import {filter, map, switchMap, take, tap} from 'rxjs/operators'; -import { AbstractModel, IAuthService, LoginParams} from '@abp/ng.core'; -import {AuthFlowStrategy} from '../strategies'; -import {EnvironmentService} from '@abp/ng.core'; -import {AUTH_FLOW_STRATEGY} from '../tokens/auth-flow-strategy'; -import {OAuthService} from "angular-oauth2-oidc"; -import {HttpHeaders} from '@angular/common/http'; +import { Injectable, Injector } from '@angular/core'; +import { Params } from '@angular/router'; +import { from, Observable, lastValueFrom } from 'rxjs'; +import { filter, map, switchMap, take, tap } from 'rxjs/operators'; +import { AbpAuthResponse, IAuthService, LoginParams } from '@abp/ng.core'; +import { AuthFlowStrategy } from '../strategies'; +import { EnvironmentService } from '@abp/ng.core'; +import { AUTH_FLOW_STRATEGY } from '../tokens/auth-flow-strategy'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { HttpHeaders } from '@angular/common/http'; @Injectable({ providedIn: 'root', }) export class AbpOAuthService implements IAuthService { private strategy!: AuthFlowStrategy; - private oAuthService: OAuthService; + private readonly oAuthService: OAuthService; + get isInternalAuth() { return this.strategy.isInternalAuth; } - constructor(protected injector: Injector,) { - this.oAuthService = this.injector.get(OAuthService) + constructor(protected injector: Injector) { + this.oAuthService = this.injector.get(OAuthService); } async init() { @@ -58,21 +59,24 @@ export class AbpOAuthService implements IAuthService { return this.oAuthService.hasValidAccessToken(); } - loginUsingGrant(grantType: string, parameters: object, headers?: HttpHeaders): Promise { - - const {clientId: client_id, dummyClientSecret: client_secret} = this.oAuthService; - const access_token = this.oAuthService.getAccessToken() + loginUsingGrant( + grantType: string, + parameters: object, + headers?: HttpHeaders, + ): Promise { + const { clientId: client_id, dummyClientSecret: client_secret } = this.oAuthService; + const access_token = this.oAuthService.getAccessToken(); const p = { access_token, grant_type: grantType, client_id, - ...parameters + ...parameters, }; if (client_secret) { p['client_secret'] = client_secret; } - return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers) + return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers); } }