Fairoj : PWA changes, token refresh issue, search issue

This commit is contained in:
venbatechnologies@gmail.com 2020-11-17 14:08:25 +05:30
parent fdcd6bb21f
commit 776264d560
13 changed files with 359 additions and 14 deletions

View File

@ -82,7 +82,8 @@
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.stage.ts"
}
]
],
"serviceWorker": true
},
"test": {
"fileReplacements": [
@ -90,7 +91,8 @@
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.stage.ts"
}
]
],
"serviceWorker": true
}
}
},

21
ng6-seed/cert.pem Normal file
View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgIJALp8pgcPInoDMA0GCSqGSIb3DQEBCwUAMFExCzAJBgNV
BAYTAklOMRMwEQYDVQQIDApUYW1pbCBOYWR1MRAwDgYDVQQHDAdDaGVubmFpMQ4w
DAYDVQQKDAVWZW5iYTELMAkGA1UECwwCSVQwHhcNMjAxMTE2MTIxMDI3WhcNMzAx
MTE0MTIxMDI3WjBRMQswCQYDVQQGEwJJTjETMBEGA1UECAwKVGFtaWwgTmFkdTEQ
MA4GA1UEBwwHQ2hlbm5haTEOMAwGA1UECgwFVmVuYmExCzAJBgNVBAsMAklUMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9Abu9StEo1KrngOXi53hQN3W
lJUELHjRLtz+246W8/l+U2SQ8pvh/UsvS/T+2Ymtwkrn8+pLik+7abrMOFaYpW8i
LdbLtBDZHMrP/SkKv3SN3bIQQVtyWzMwoPtmOzvRuxyyvkWjwp3qIcLmLe104Z0D
myy4bG69lmgHY6tH9VPRzPSdMuJSETPZlTCec035CHauXub1kn33PWS/J6ZWzQV2
j2Cdp/U22qaRtv8mqqhgy85ytHddxzJs65Ea0Bf3zUaQwFLEFTHYKgdo+wzY3OC+
969xZA+zqh1WMWPSGikyMS113ECM/vt/0o2p2Uvj+H2Up/z5xC3li76NBQ4CRwID
AQABo1AwTjAdBgNVHQ4EFgQUsqEFNzWzQuQswW7/EmqLFC9ovO0wHwYDVR0jBBgw
FoAUsqEFNzWzQuQswW7/EmqLFC9ovO0wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
AQsFAAOCAQEAJsP1FxUT9N3SQDIiXMzId0cEMSfeqrTEJRLruQj2LvooPnvoheF1
CEgp+YDEbFphKfmYVb8e5B3P/xCqoNRrWZDgufXLhZbvo5KCufMt6z1gPJSMVt4c
/ChSqHonzlodz+w3gueHDkgs4bxK41E15BUhlIH4qGYuSoGPjmP2799aWIfX98k8
bjzRoqKEQzSZDjkrwpHdcbqm5XuxR19tYB7rbPawjPVyjIehZ5IkibxFdjJ9k01M
sETsdfXlyDZHUlyX0SA39eqUO4f7AXsidleHExYbolhQ82HpYJANXHFzmA5c9kLk
K2QQH8yTjqirZkQW6QB9HYYrxHTkNM4SLw==
-----END CERTIFICATE-----

28
ng6-seed/key.pem Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0Bu71K0SjUque
A5eLneFA3daUlQQseNEu3P7bjpbz+X5TZJDym+H9Sy9L9P7Zia3CSufz6kuKT7tp
usw4VpilbyIt1su0ENkcys/9KQq/dI3dshBBW3JbMzCg+2Y7O9G7HLK+RaPCneoh
wuYt7XThnQObLLhsbr2WaAdjq0f1U9HM9J0y4lIRM9mVMJ5zTfkIdq5e5vWSffc9
ZL8nplbNBXaPYJ2n9TbappG2/yaqqGDLznK0d13HMmzrkRrQF/fNRpDAUsQVMdgq
B2j7DNjc4L73r3FkD7OqHVYxY9IaKTIxLXXcQIz++3/SjanZS+P4fZSn/PnELeWL
vo0FDgJHAgMBAAECggEAcX0T/uN7jXVyKQ/EmAL58l/5XqqbAU/DAUd4I4YCAD9F
F+WKX7pNdK5Vtb6gE22raNPLYi3RqeaA46AjQAROA4pW2/isTfcT8gcEidlfjUDY
hYU9eBfebDm3YPbqSZv9Y0bqfgEHMwicDc2FnVB07kRGnBFFR/CMrXl+DkVnNtk3
EBDxGjEja0MpQe/uVAwscCCqKG/Ra+wbRPoRHCdpT8UTLYfd5Tbz7lTMtKoPVQyy
Svm0OfrDSCNksagJGLZgJMVQQr2W+4EGhL91pkysBIX/Gu+pV6nTWGpwlB3tjPOw
4e4SwcWhX75kQLXRtjQYM7okq7Y/Gs3KdgdYTOS9UQKBgQD+wYs512yuiCfKwiss
uOZyJGKUoNWQhy1CfzzvX2BvxW0DcwGcWLq4xsJtXEK4AvG3ZRwdssxF2Im38Vas
28TFLyhkYM/gHLwmrcWczab77jXMM12BPQBvz4iwC90+BtHnBEbNNkkj7h8FFwOf
qqNBcHzpKbBoSMn4uloDqimE6QKBgQD1N/pZU9S89NimeLPrTHibW3j/gJ6R8LO7
NaG1eV3JM9bhrFM3qQJTXYEW8gQ4b+z1uCKx+Mgz+D7JJMF7lH6H0XM5P6d/JTxm
6RpPOV01iuBe2ULkisg/4QQqY0F47iWuShja7WgxqVNyMrcZG4S92Neemg0DTKqT
vuQPKT6PrwKBgQDcQsy0cuyVrkTxSpX3sdoVAB53sONVdXqNTuOJdyYzHTgWzl2r
JxAx6C98TFOnM2x4CySXDNsO3Jyd/DzbcZwcfJxoxUeV1mJa8s2zuB9THO9IoXSL
5Ak3ovDkfS2Jjm33Vjw8+12bgisxxGcuqmNClhZ5pcDPOXfe5IglOP9y2QKBgDDl
dJoTSTxUZk7ripTErtfrqXjpILVhFbWiwBf7l2PjXlmpjv5uSPRulKsKnyTRzKJC
kUiDnwgd3AcnuRz3QzO55AvqUW/c8OpkWMarXZarlonTMK95rOxv5fC90fRXKFRU
mhgtdrVQWj9PNYtgHVvtvTD27tlVlD3Ztof/ZWYpAoGARlt6y7u87M8rI7ROz2xJ
EX/vvsq8+/NAkW4NSXC7ETJ4bjhvigG4/vN/gNdAZpw3NGaDaNZNaIOIIoYZ+pNL
JYnNOCfWfbu15tZGDOeQcArY8gHUjH63W2/da3c/SRvfP5rASmtk1mjOf0G8E3/v
JY3AbidYmdex3n0792PRuMI=
-----END PRIVATE KEY-----

View File

@ -19,6 +19,10 @@
"resources": {
"files": [
"/assets/**"
],
"urls": [
"https://fonts.googleapis.com/**",
"https://fonts.gstatic.com/**"
]
}
}

View File

@ -126,23 +126,29 @@ isloggin:boolean = false;
// }
refresh() {
let tokenexp:boolean;
this.getCurrentUser().getSession(function (err, session) {
return Observable.create(observer=>{
console.log("Current user check in token refresh fun",this.getCurrentUser())
return this.getCurrentUser().getSession(function (err, session) {
if (err) {
console.log("Error Refreshing token",err);
}
else {
if (session.isValid()) {
tokenexp = session.isValid();
of(tokenexp)
console.log("CognitoUtil: refreshed successfully");
} else {
tokenexp = session.isValid();
console.log("CognitoUtil: refreshed but session is still not valid");
}
}
return tokenexp;
observer.next(tokenexp)
observer.complete()
});
});
}
getAccessToken(){
this.refresh();

View File

@ -0,0 +1,260 @@
import { Injectable, Injector } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpInterceptor,
HttpSentEvent,
HttpHeaderResponse,
HttpProgressEvent,
HttpResponse,
HttpUserEvent,
HttpEvent
} from '@angular/common/http';
// import { AuthGuard } from './auth.guard';
import { Observable, of, BehaviorSubject, throwError} from 'rxjs';
// import { Router } from '@angular/router';
import { switchMap, tap, catchError, finalize } from 'rxjs/operators';
import { HttpErrorResponse } from "@angular/common/http";
import { Router } from '@angular/router';
import { CognitoService } from 'app/AwsService/cognito.service';
import { LoaderService } from 'app/shared/loaderService/loader.service';
import { environment } from '../../environments/environment';
import { AwsService } from 'app/AwsService/aws.service';
@Injectable({
providedIn: 'root'
})
export class ReqTokenInterceptor implements HttpInterceptor{
constructor( private router: Router,public shared:CognitoService,private loaderService:LoaderService,private awsService:AwsService) {
}
isRefreshingToken: boolean = false;
tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);
addToken(req: HttpRequest<any>, token: string): HttpRequest<any> {
return req.clone({
setHeaders: {
'Authorization': environment.authorization,
'Token': token
}
})
}
// addToken1(req: HttpRequest<any>, token: string): HttpRequest<any> {
// console.log("Token 1",token,req);
// return req.clone({ setHeaders: {'Authorization': environment.authorization,
// 'Token':token,
// // 'From':'2',
// }})
// }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
let token:any = this.shared.getAccessToken() ||"";
// console.log("Token From Interceptor >>",cognitoService.getToken())
if(token!=''){
token=token.getIdToken().getJwtToken()
}
this.showLoader();
// return <any>next.handle(this.addToken(req, token)).pipe(
// catchError(error => {
// this.onEnd();
// console.log("Initial Error",error);
// if (error instanceof HttpErrorResponse) {
// if((<HttpErrorResponse>error).status) {
// return this.handle401Error(req,next,error)
// }
// else{
// return this.handle401Error(req,next,error)
// }
// } else {
// console.log("observable error")
// return Observable.throw(error);
// }
// }));
return <any>next.handle(this.addToken(req, token)).pipe(
catchError(error => {
console.log("Initial Error",error);
if (error instanceof HttpErrorResponse) {
if((<HttpErrorResponse>error).status) {
return this.handle401Error(req,next,error)
}
else{
return this.handle401Error(req,next,error)
}
} else {
console.log("observable error")
return Observable.throw(error);
}
}),
finalize(()=>{
this.onEnd()
})
)
}
handle401Error(req: HttpRequest<any>, next: HttpHandler,err) {
console.log("err",err)
console.log("entered",this.isRefreshingToken,this.tokenSubject);
if (err instanceof HttpErrorResponse) {
if(err.status == 401 && err.error.error.toLowerCase() == 'invalid token!'){
console.log("Refreshing Token",err.status)
if (!this.isRefreshingToken) {
this.isRefreshingToken = true;
// Reset here so that the following requests wait until the token
// comes back from the refreshToken call.
this.tokenSubject.next(null);
console.log("STARTING TOKEN REFRESH")
// return this.shared.refresh()
// .subscribe((newToken: string) => {
// console.log("new",newToken)
// if (newToken) {
// let token:any = this.shared.getAccessToken() ||"";
// this.tokenSubject.next( token.getIdToken().getJwtToken());
// console.log(this.tokenSubject);
// return next.handle(this.addToken1(req, token.getIdToken().getJwtToken()))
// // .pipe(tap((event:HttpEvent<any>)=>{
// // if (event instanceof HttpResponse) {
// // this.onEnd();
// // }
// // },
// // (err: any) => {
// // this.handleError<any>('role',err);
// // console.log("Error on Refresh token",err)
// // this.onEnd();
// // }));
// }
// // If we don't get a new token, we are in trouble so logout.
// return this.awsService.logout();
// },err=>console.log("Error refresh",err))
return this.shared.refresh().pipe(
switchMap((newToken: string) =>{
console.log("New Token",newToken)
if(newToken){
this.isRefreshingToken=false
this.tokenSubject.next(newToken);
let token:any = this.shared.getAccessToken() ||"";
this.showLoader();
return next.handle(this.addToken(req, token.getIdToken().getJwtToken())).pipe(tap((event:HttpEvent<any>)=>{
if (event instanceof HttpResponse) {
this.onEnd();
}
},
(err: any) => {
this.handleError<any>('role',err);
console.log("Error on Refresh token",err)
this.onEnd();
}));
}
return this.awsService.logout();
})
)
// .catch(error => {
// // If there is an exception calling 'refreshToken', bad news so logout.
// return this.logoutUser();
// })
// .finally(() => {
// this.isRefreshingToken = false;
// });
} else {
console.log("Else Part 1201")
// return this.tokenSubject
// // .filter(token => token != null)
// .take(1)
// .switchMap(token => {
let token:any = this.shared.getAccessToken() ||"";
this.showLoader();
return next.handle(this.addToken(req,token.getIdToken().getJwtToken())).pipe(tap((event:HttpEvent<any>)=>{
if (event instanceof HttpResponse) {
this.onEnd();
}
},
(err: any) => {
this.handleError<any>('role',err);
console.log("Error on Refresh token",err)
this.onEnd();
}));
// });
}
}
else{
// return Observable.throw("Observable throw",err);
return this.handleError('',err)
}
}
else{
return Observable.throw("Observable throw",err);
}
}
private handleError<T> (operation = 'operation', error?: T) {
// return (error: any): Observable<T> => {
console.log("d",error)
if(error instanceof HttpErrorResponse){
// this.onEnd();
console.log("Error from interceptor >>>",error)
console.error("Error: " + error.status);
if(error.status == 401){
localStorage.clear();
this.router.navigate(['/authentication/login']);
}
else if(error.status == 404){
this.router.navigate(['/error/404']);
}
else if(error.status == 503){
this.router.navigate(['/error/503']);
}
else if(error.status == 0){
console.log("NO Internet")
this.router.navigate(['/error/404']);
}
else{
// alert("Please Check your Internet connection");
let errorMessage = '';
let type : number;
if (error.error instanceof ErrorEvent) {
// client-side error
errorMessage = `Error: ${error.error.message}`;
type = 1;
} else {
// server-side error
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
type = 2;
}
return throwError({error_status :type == 2 ? error.status : '',
error_message:error.message,
error_text :type == 2 ? error.statusText : '',
html_format :errorMessage,
error_type :type,
});
}
return throwError(error);
}
// };
}
// };
// }
private onEnd(): void {
this.hideLoader();
}
private showLoader(): void {
this.loaderService.show();
}
private hideLoader(): void {
this.loaderService.hide();
}
}

View File

@ -16,7 +16,8 @@ export class AppComponent {
window.addEventListener('beforeinstallprompt', event => {
this.promptEvent = event;
// this.Pwa.promptEvent=event
alert(event);
console.log("beforeinstall Prompt Listener",event);
// alert("Install as App");
});
}
}

View File

@ -51,6 +51,7 @@ import { HttpLoaderComponent } from './layouts/http-loader/http-loader.component
import { AdvanceFilterComponent } from './sales-pd/advance-filter/advance-filter.component';
import { ServiceWorkerModule } from '@angular/service-worker';
import { environment } from '../environments/environment';
import { ReqTokenInterceptor } from './_guard/req-token.interceptor';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@ -122,7 +123,7 @@ export function createTranslateLoader(http: HttpClient) {
// },
{
provide:HTTP_INTERCEPTORS,
useClass: TokenInterceptor,
useClass: ReqTokenInterceptor,
multi: true
}
],

View File

@ -15,7 +15,7 @@
<div class="user-profile-thumb text-center">
<div class="user-i">
<div><h3>{{userDep}} </h3></div>
<img [src]="profileurl ||'http://image.ibb.co/mGjZB9/usernew.png'" class="rad-full mb-1" width="100" height="100" alt="">
<img [src]="profileurl ||'https://image.ibb.co/mGjZB9/usernew.png'" class="rad-full mb-1" width="100" height="100" alt="">
<div><h4>{{fullName}}</h4></div>
<div><h5>{{roleName}}</h5></div>
</div>

View File

@ -255,7 +255,7 @@
</mat-card-content>
<div [hidden]="recordStatus">
<mat-paginator #paginator class="mat-elevation-z1" [length]="PdListData.length" [pageIndex]="pageIndex"
<mat-paginator #paginator class="mat-elevation-z1" [length]="length" [pageIndex]="pageIndex"
[pageSize]="pageSize" [pageSizeOptions]="[5, 10, 25,50, 100]" (page)="pageEvent=OnPageChange($event)" showFirstLastButtons>
</mat-paginator>
</div>

View File

@ -43,7 +43,7 @@ export class AllPdComponent implements OnInit, OnChanges {
PdListData:any[] = [];
// pagination variable details
length = 5;
length = 0;
pageIndex = 0;
pageSize = 10;
pageEvent: any;
@ -110,8 +110,29 @@ console.log(this.displayedColumns)
ngOnChanges(changes: SimpleChanges) {
let filteredText = changes.bindFilterValue.currentValue ? changes.bindFilterValue.currentValue.trim() : changes.bindFilterValue.currentValue;
filteredText = filteredText ? filteredText.toLowerCase() : filteredText;
this.dataSourceTab1.filter = filteredText;
// this.dataSourceTab1.filter = filteredText;
// console.log("changes",this.bindFilterValue)
this.filterData(filteredText)
}
filterData(text) {
if(!text) {
this.pagedList = this.PdListData.slice(0, 10);
this.length = this.PdListData.length;
return
}
this.pagedList = this.PdListData.filter(v=>{
if ((v.pd_sno && v.pd_sno.toLowerCase().indexOf(text.toLowerCase())>-1 )|| v.applicat_details[0].applicant_name.toLowerCase().indexOf(text.toLowerCase()) > -1
|| v.pd_status.toLowerCase().indexOf(text.toLowerCase())>-1|| v.city_name && v.city_name.toLowerCase().indexOf(text.toLowerCase())>-1 || v.lender_applicant_id.toLowerCase().indexOf(text.toLowerCase())>-1
||( v.pd_sno_split && v.pd_sno_split.serial_no && v.pd_sno_split.serial_no.toLowerCase().indexOf(text.toLowerCase())>-1)) {
return true;
}
return false
})
// this.pa
// this.length = this.pagedList.length
console.log(this.PdListData,this.pagedList,text)
}

View File

@ -103,6 +103,7 @@ export class CameraService {
resolve(latLong)
},
err => {
console.log("Error Getting Geolocation",err)
resolve('error');
});
});

View File

@ -4,8 +4,8 @@
"theme_color": "#1976d2",
"background_color": "#fafafa",
"display": "standalone",
"scope": "./",
"start_url": "/lenderdemo",
"scope": ".",
"start_url": "./",
"icons": [
{
"src": "assets/icons/icon-72x72.png",