Browse Source

Convert functions to token

pull/15201/head
Mahmut Gundogdu 4 years ago
parent
commit
121e6ab940
  1. 26
      npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts
  2. 1
      npm/ng-packs/packages/core/src/lib/interceptors/index.ts
  3. 10
      npm/ng-packs/packages/core/src/lib/models/auth.ts
  4. 4
      npm/ng-packs/packages/core/src/lib/tokens/index.ts
  5. 4
      npm/ng-packs/packages/core/src/lib/tokens/pipe-to-login.token.ts
  6. 6
      npm/ng-packs/packages/core/src/lib/tokens/set-token-response-to-storage.token.ts
  7. 1
      npm/ng-packs/packages/core/src/public-api.ts
  8. 6
      npm/ng-packs/packages/oauth/src/lib/interceptors/api.interceptor.ts
  9. 27
      npm/ng-packs/packages/oauth/src/lib/oauth.module.ts
  10. 25
      npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts

26
npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts

@ -0,0 +1,26 @@
import {
HttpEvent,
HttpHandler,
HttpHeaders,
HttpInterceptor,
HttpRequest,
} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class ApiInterceptor implements IApiInterceptor {
getAdditionalHeaders(existingHeaders?: HttpHeaders) {
return existingHeaders;
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req);
}
}
export interface IApiInterceptor extends HttpInterceptor {
getAdditionalHeaders(existingHeaders?: HttpHeaders): HttpHeaders;
}

1
npm/ng-packs/packages/core/src/lib/interceptors/index.ts

@ -0,0 +1 @@
export * from './api.interceptor';

10
npm/ng-packs/packages/core/src/lib/models/auth.ts

@ -1,6 +1,16 @@
import { UnaryFunction } from 'rxjs';
import { Injector } from '@angular/core';
export interface LoginParams { export interface LoginParams {
username: string; username: string;
password: string; password: string;
rememberMe?: boolean; rememberMe?: boolean;
redirectUrl?: string; redirectUrl?: string;
} }
export type PipeToLoginFn = (
params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,
injector: Injector,
) => UnaryFunction<any, any>;
export type SetTokenResponseToStorageFn = (injector: Injector, tokenRes: unknown) => void;

4
npm/ng-packs/packages/core/src/lib/tokens/index.ts

@ -6,4 +6,6 @@ export * from './lodaer-delay.token';
export * from './manage-profile.token'; export * from './manage-profile.token';
export * from './options.token'; export * from './options.token';
export * from './tenant-key.token'; export * from './tenant-key.token';
export * from './include-localization-resources.token'; export * from './include-localization-resources.token';
export * from './pipe-to-login.token';
export * from './set-token-response-to-storage.token';

4
npm/ng-packs/packages/core/src/lib/tokens/pipe-to-login.token.ts

@ -0,0 +1,4 @@
import { InjectionToken } from '@angular/core';
import { PipeToLoginFn } from '../models/auth';
export const PIPE_TO_LOGIN_FN_KEY = new InjectionToken<PipeToLoginFn>('PIPE_TO_LOGIN_FN_KEY');

6
npm/ng-packs/packages/core/src/lib/tokens/set-token-response-to-storage.token.ts

@ -0,0 +1,6 @@
import { InjectionToken } from '@angular/core';
import { SetTokenResponseToStorageFn } from '../models';
export const SET_TOKEN_RESPONSE_TO_STORAGE_FN_KEY = new InjectionToken<SetTokenResponseToStorageFn>(
'SET_TOKEN_RESPONSE_TO_STORAGE_FN_KEY',
);

1
npm/ng-packs/packages/core/src/public-api.ts

@ -22,3 +22,4 @@ export * from './lib/strategies';
export * from './lib/tokens'; export * from './lib/tokens';
export * from './lib/utils'; export * from './lib/utils';
export * from './lib/validators'; export * from './lib/validators';
export * from './lib/interceptors';

6
npm/ng-packs/packages/oauth/src/lib/interceptors/api.interceptor.ts

@ -1,13 +1,13 @@
import { HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { HttpHandler, HttpHeaders, HttpRequest } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { finalize } from 'rxjs/operators'; import { finalize } from 'rxjs/operators';
import { SessionStateService, HttpWaitService, TENANT_KEY } from '@abp/ng.core'; import { SessionStateService, HttpWaitService, TENANT_KEY, IApiInterceptor } from '@abp/ng.core';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class ApiInterceptor implements HttpInterceptor { export class OAuthApiInterceptor implements IApiInterceptor {
constructor( constructor(
private oAuthService: OAuthService, private oAuthService: OAuthService,
private sessionState: SessionStateService, private sessionState: SessionStateService,

27
npm/ng-packs/packages/oauth/src/lib/oauth.module.ts

@ -1,15 +1,23 @@
import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { OAuthModule, OAuthService, OAuthStorage } from 'angular-oauth2-oidc'; import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';
import { AuthGuard, AuthService, noop } from '@abp/ng.core'; import {
ApiInterceptor,
AuthGuard,
AuthService,
noop,
PIPE_TO_LOGIN_FN_KEY,
SET_TOKEN_RESPONSE_TO_STORAGE_FN_KEY,
} from '@abp/ng.core';
import { storageFactory } from './utils/storage.factory'; import { storageFactory } from './utils/storage.factory';
import { AbpOAuthService, TimeoutLimitedOAuthService } from './services'; import { AbpOAuthService, TimeoutLimitedOAuthService } from './services';
import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler'; import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler';
import { initFactory } from './utils/init-factory'; import { initFactory } from './utils/init-factory';
import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { ApiInterceptor } from './interceptors/api.interceptor'; import { OAuthApiInterceptor } from './interceptors/api.interceptor';
import { AbpOAuthGuard } from './guards/oauth.guard'; import { AbpOAuthGuard } from './guards/oauth.guard';
import { NavigateToManageProfileProvider } from './providers'; import { NavigateToManageProfileProvider } from './providers';
import { pipeToLogin, setTokenResponseToStorage } from './utils';
@NgModule({ @NgModule({
imports: [CommonModule, OAuthModule], imports: [CommonModule, OAuthModule],
@ -27,6 +35,18 @@ export class AbpOAuthModule {
provide: AuthGuard, provide: AuthGuard,
useClass: AbpOAuthGuard, useClass: AbpOAuthGuard,
}, },
{
provide: ApiInterceptor,
useClass: OAuthApiInterceptor,
},
{
provide: PIPE_TO_LOGIN_FN_KEY,
useValue: pipeToLogin,
},
{
provide: SET_TOKEN_RESPONSE_TO_STORAGE_FN_KEY,
useValue: setTokenResponseToStorage,
},
{ {
provide: HTTP_INTERCEPTORS, provide: HTTP_INTERCEPTORS,
useExisting: ApiInterceptor, useExisting: ApiInterceptor,
@ -45,7 +65,6 @@ export class AbpOAuthModule {
deps: [Injector], deps: [Injector],
useFactory: initFactory, useFactory: initFactory,
}, },
OAuthModule.forRoot().providers, OAuthModule.forRoot().providers,
{ provide: OAuthStorage, useFactory: storageFactory }, { provide: OAuthStorage, useFactory: storageFactory },
// {provide: OAuthService, useClass: TimeoutLimitedOAuthService} // {provide: OAuthService, useClass: TimeoutLimitedOAuthService}

25
npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts

@ -3,12 +3,17 @@ import { Router } from '@angular/router';
import { OAuthStorage, TokenResponse } from 'angular-oauth2-oidc'; import { OAuthStorage, TokenResponse } from 'angular-oauth2-oidc';
import { pipe } from 'rxjs'; import { pipe } from 'rxjs';
import { switchMap, tap } from 'rxjs/operators'; import { switchMap, tap } from 'rxjs/operators';
import { ConfigStateService, LoginParams } from '@abp/ng.core'; import {
ConfigStateService,
LoginParams,
PipeToLoginFn,
SetTokenResponseToStorageFn,
} from '@abp/ng.core';
const cookieKey = 'rememberMe'; const cookieKey = 'rememberMe';
const storageKey = 'passwordFlow'; const storageKey = 'passwordFlow';
export function pipeToLogin( export const pipeToLogin: PipeToLoginFn = function (
params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>, params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,
injector: Injector, injector: Injector,
) { ) {
@ -22,10 +27,18 @@ export function pipeToLogin(
if (params.redirectUrl) router.navigate([params.redirectUrl]); if (params.redirectUrl) router.navigate([params.redirectUrl]);
}), }),
); );
} };
export function setTokenResponseToStorage(injector: Injector, tokenRes: TokenResponse) { export const setTokenResponseToStorage: SetTokenResponseToStorageFn = function (
const { access_token, refresh_token, scope: grantedScopes, expires_in } = tokenRes; injector: Injector,
tokenRes: unknown,
) {
const {
access_token,
refresh_token,
scope: grantedScopes,
expires_in,
} = tokenRes as TokenResponse;
const storage = injector.get(OAuthStorage); const storage = injector.get(OAuthStorage);
storage.setItem('access_token', access_token); storage.setItem('access_token', access_token);
@ -42,7 +55,7 @@ export function setTokenResponseToStorage(injector: Injector, tokenRes: TokenRes
const expiresAt = now.getTime() + expiresInMilliSeconds; const expiresAt = now.getTime() + expiresInMilliSeconds;
storage.setItem('expires_at', '' + expiresAt); storage.setItem('expires_at', '' + expiresAt);
} }
} };
export function setRememberMe(remember: boolean) { export function setRememberMe(remember: boolean) {
removeRememberMe(); removeRememberMe();

Loading…
Cancel
Save