Bläddra i källkod

auto logout enhancement

tigger 2 år sedan
förälder
incheckning
b233429155
1 ändrade filer med 30 tillägg och 9 borttagningar
  1. 30 9
      src/app/app.component.ts

+ 30 - 9
src/app/app.component.ts

@@ -1,17 +1,12 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, HostListener, OnInit } from '@angular/core';
 import { Router, RouterModule, RouterOutlet, RoutesRecognized } from '@angular/router';
 import { MatModule } from '../dependencies/angularlib/mat.module';
-import { DialogModule } from 'angularlib/dialog/dialog.module';
-import { DialogUtil } from 'angularlib/dialog/dialog.util';
-import { NgxsModule, Store } from '@ngxs/store'
-import { LabelState } from 'angularlib/labels/label.state';
-import { HttpClientModule } from '@angular/common/http';
+import { Store } from '@ngxs/store'
 import { Angularlib } from 'angularlib/angularlib.module';
-import { CommonModule } from '@angular/common';
-import { LabelModule } from 'angularlib/labels/label.module';
 import { BaseComponent, untilDestroy } from 'angularlib/base.component';
-import { filter, map } from 'rxjs';
+import { Subject, filter, map, repeat, takeUntil, timer } from 'rxjs';
 import { Title } from '@angular/platform-browser';
+import { LoginService } from 'angularlib/login/login.service';
 
 @Component({
   selector: 'app-root',
@@ -30,15 +25,34 @@ import { Title } from '@angular/platform-browser';
 export class AppComponent extends BaseComponent implements OnInit {
   title = 'SwOPT Angular';
 
+  /**login timeout duration in milliseconds
+     * @default 5 minutes
+    */
+  private duration: number = 300000;
+  private startTimeout$ = new Subject();
+  private stopTimeout$ = new Subject();
+  private timeout = timer(this.duration).pipe(
+      map(() => {if(this.loginService.user)this.loginService.logout();console.warn('session inactive timeout, logging out...');}),
+      takeUntil(this.stopTimeout$),
+      repeat({delay:() => this.startTimeout$})
+  );
+
   constructor(
     private router: Router,
     private store: Store,
+    protected loginService: LoginService,
     /**Platform Browser title */
     protected pbTitle: Title,
   ) {
     super(store);
   }
 
+  @HostListener('window:mousedown')
+  private refreshTimeout() {
+    this.stopTimeout$.next(null);
+    this.startTimeout$.next(null);
+  }
+
   ngOnInit(): void {
     this.router.events.pipe(untilDestroy(this),
     filter((event) => event instanceof RoutesRecognized),
@@ -50,5 +64,12 @@ export class AppComponent extends BaseComponent implements OnInit {
       this.title = title;
       this.pbTitle.setTitle(this.title);
     });
+
+    /**subsribe user changes and initiate timeout timer */
+    this.loginService.user$.pipe(untilDestroy(this)).subscribe(user => {
+      if (user) {
+        this.timeout.pipe(untilDestroy(this),takeUntil(this.loginService.loggedOut)).subscribe();
+      }
+    });
   }
 }