Browse Source

add latest updates, will be checked again

pull/18768/head
Sinan Öztürk 3 years ago
parent
commit
c5eb3f34b5
  1. 2
      npm/ng-packs/apps/dev-app/src/environments/environment.ts
  2. 66
      npm/ng-packs/packages/oauth/src/lib/strategies/auth-code-flow-strategy.ts
  3. 13
      npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts
  4. 30
      npm/ng-packs/packages/oauth/src/lib/strategies/auth-password-flow-strategy.ts
  5. 16
      npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts
  6. 29
      npm/ng-packs/packages/oauth/src/lib/utils/cookie-utils.ts

2
npm/ng-packs/apps/dev-app/src/environments/environment.ts

@ -14,7 +14,7 @@ export const environment = {
issuer: 'https://localhost:44305/',
clientId: 'MyProjectName_App',
scope: 'offline_access MyProjectName',
responseType: 'code',
// responseType: 'code',
redirectUri: baseUrl,
},
apis: {

66
npm/ng-packs/packages/oauth/src/lib/strategies/auth-code-flow-strategy.ts

@ -1,22 +1,71 @@
import { noop } from '@abp/ng.core';
import { Params } from '@angular/router';
import { from, of } from 'rxjs';
import { filter, from, of } from 'rxjs';
import { AuthFlowStrategy } from './auth-flow-strategy';
import { deleteAllCookies } from '../utils/cookie-utils';
import { getRememberMe, removeRememberMe, setRememberMe } from '../utils';
export class AuthCodeFlowStrategy extends AuthFlowStrategy {
export class AuthCodeFlowStrategy extends AuthFlowStrategy{
readonly isInternalAuth = false;
private rememberMeKey = 'remember_me'
private remember_me = 'remember_me'
async init() {
console.log('code flow');
const accessToken = this.oAuthService.getAccessToken();
let parsedToken = JSON.parse(atob(accessToken.split(".")[1]));;
this.checkRememberMeOption();
return super
.init()
.then(() => this.oAuthService.tryLogin().catch(noop))
.then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token'));
.then(() => this.oAuthService.setupAutomaticSilentRefresh())
// .then(() => this.listenToTokenExpiration());
}
// private listenToTokenExpiration() {
// this.oAuthService.events
// .pipe(
// filter(
// event => {
// return event instanceof OAuthInfoEvent &&
// event.type === 'token_expires' &&
// event.info === 'access_token'
// }
// ),
// )
// .subscribe(() => {
// if (this.oAuthService.getRefreshToken()) {
// console.log('refresh token');
// this.refreshToken();
// } else {
// this.oAuthService.logOut();
// removeRememberMe(this.localStorageService);
// this.configState.refreshAppState().subscribe();
// }
// });
// }
private checkRememberMeOption() {
const accessToken = this.oAuthService.getAccessToken();
const expireDate = this.oAuthService.getAccessTokenExpiration();
const currentDate = new Date().getTime();
let rememberMe = getRememberMe(this.localStorageService);
if (accessToken && rememberMe === null) {
let parsedToken = JSON.parse(atob(accessToken.split(".")[1]));
if (parsedToken[this.remember_me]) {
setRememberMe(true, this.localStorageService);
} else {
setRememberMe(false, this.localStorageService)
}
}
rememberMe = getRememberMe(this.localStorageService);
if (accessToken && expireDate < currentDate && rememberMe === 'false') {
removeRememberMe(this.localStorageService);
this.oAuthService.logOut();
}else{
console.log('try login');
this.oAuthService.tryLogin().catch(noop)
}
}
navigateToLogin(queryParams?: Params) {
@ -35,6 +84,7 @@ export class AuthCodeFlowStrategy extends AuthFlowStrategy {
}
logout(queryParams?: Params) {
removeRememberMe(this.localStorageService);
return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));
}

13
npm/ng-packs/packages/oauth/src/lib/strategies/auth-flow-strategy.ts

@ -70,23 +70,20 @@ export abstract class AuthFlowStrategy {
const shouldClear = shouldStorageClear(this.oAuthConfig.clientId, oAuthStorage);
if (shouldClear) clearOAuthStorage(oAuthStorage);
}
this.oAuthService.configure(this.oAuthConfig);
this.oAuthService.events
.pipe(filter(event => event.type === 'token_refresh_error'))
.subscribe(() => this.navigateToLogin());
this.navigateToPreviousUrl();
return this.oAuthService
.loadDiscoveryDocument()
.then(() => {
if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) {
return Promise.resolve();
const expireDate = this.oAuthService.getAccessTokenExpiration();
const currentDate = new Date().getTime();
if (expireDate > currentDate || this.oAuthService.getRefreshToken()) {
return this.refreshToken();
}
return this.refreshToken();
return Promise.resolve();
})
.catch(this.catchError);
}

30
npm/ng-packs/packages/oauth/src/lib/strategies/auth-password-flow-strategy.ts

@ -1,13 +1,12 @@
import { filter, switchMap, tap } from 'rxjs/operators';
import { OAuthInfoEvent } from 'angular-oauth2-oidc';
import { Params, Router } from '@angular/router';
import { from, Observable, pipe } from 'rxjs';
import { from, Observable } from 'rxjs';
import { HttpHeaders } from '@angular/common/http';
import { AuthFlowStrategy } from './auth-flow-strategy';
import { pipeToLogin, removeRememberMe } from '../utils/auth-utils';
import { LoginParams } from '@abp/ng.core';
import { getRememberMe, pipeToLogin, removeRememberMe } from '../utils/auth-utils';
import { AbpLocalStorageService, LoginParams } from '@abp/ng.core';
import { clearOAuthStorage } from '../utils/clear-o-auth-storage';
import { getCookieValueByName } from '../utils/cookie-utils';
export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
readonly isInternalAuth = true;
@ -18,10 +17,11 @@ export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
this.oAuthService.events
.pipe(
filter(
event =>
event instanceof OAuthInfoEvent &&
event => {
return event instanceof OAuthInfoEvent &&
event.type === 'token_expires' &&
event.info === 'access_token',
event.info === 'access_token'
}
),
)
.subscribe(() => {
@ -36,12 +36,21 @@ export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
}
async init() {
if (!(getCookieValueByName(this.cookieKey) === 'true') && localStorage.getItem(this.storageKey)) {
this.checkRememberMeOption(this.localStorageService);
return super.init().then(() => this.listenToTokenExpiration());
}
private checkRememberMeOption(localStorageService: AbpLocalStorageService) {
const accessToken = this.oAuthService.getAccessToken();
const expireDate = this.oAuthService.getAccessTokenExpiration();
const currentDate = new Date().getTime();
const rememberMe = getRememberMe(localStorageService) === 'true';
if (accessToken && expireDate < currentDate && !rememberMe) {
removeRememberMe(this.localStorageService);
this.oAuthService.logOut();
}
return super.init().then(() => this.listenToTokenExpiration());
}
navigateToLogin(queryParams?: Params) {
@ -77,6 +86,7 @@ export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
}
protected refreshToken() {
console.log('token refreshed');
return this.oAuthService.refreshToken().catch(() => {
clearOAuthStorage();
removeRememberMe(this.localStorageService);

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

@ -11,6 +11,7 @@ import {
const cookieKey = 'rememberMe';
const storageKey = 'passwordFlow';
const remember_me = 'remember_me';
export const pipeToLogin: PipeToLoginFn = function (
params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,
@ -32,14 +33,15 @@ export function setRememberMe(
remember: boolean | undefined,
localStorageService: AbpLocalStorageService,
) {
removeRememberMe(localStorageService);
localStorageService.setItem(storageKey, 'true');
document.cookie = `${cookieKey}=true; path=/${
remember ? ' ;expires=Fri, 31 Dec 9999 23:59:59 GMT' : ''
}`;
console.log('set Remember Me');
localStorageService.setItem(remember_me, JSON.stringify(remember));
}
export function removeRememberMe(localStorageService: AbpLocalStorageService) {
localStorageService.removeItem(storageKey);
document.cookie = cookieKey + '= ; path=/; expires = Thu, 01 Jan 1970 00:00:00 GMT';
console.log('remove remember Me');
localStorageService.removeItem(remember_me);
}
export function getRememberMe(localStorageService: AbpLocalStorageService){
return localStorageService.getItem(remember_me);
}

29
npm/ng-packs/packages/oauth/src/lib/utils/cookie-utils.ts

@ -1,29 +0,0 @@
export function getCookieValueByName(name: string) {
const cookiesArray = document.cookie.split(';');
for (let i = 0; i < cookiesArray.length; i++) {
let cookie = cookiesArray[i].trim();
if (cookie.startsWith(name + '=')) {
return cookie.substring(name.length + 1);
}
}
return null;
}
export function deleteAllCookies() {
var cookies = document.cookie.split("; ");
for (var c = 0; c < cookies.length; c++) {
var d = window.location.hostname.split(".");
while (d.length > 0) {
var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
var p = location.pathname.split('/');
document.cookie = cookieBase + '/';
while (p.length > 0) {
document.cookie = cookieBase + p.join('/');
p.pop();
};
d.shift();
}
}
}
Loading…
Cancel
Save