@dbg-riskit/angular-login 12.3.0 → 13.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dbg-riskit-angular-login.d.ts +1 -0
- package/docs/README.md +1 -11
- package/{esm2015/dbg-riskit-angular-login.js → esm2020/dbg-riskit-angular-login.mjs} +0 -0
- package/esm2020/lib/login.component.mjs +80 -0
- package/esm2020/lib/login.menu.component.mjs +83 -0
- package/esm2020/lib/login.module.mjs +53 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/fesm2015/dbg-riskit-angular-login.mjs +212 -0
- package/fesm2015/dbg-riskit-angular-login.mjs.map +1 -0
- package/fesm2020/dbg-riskit-angular-login.mjs +208 -0
- package/fesm2020/dbg-riskit-angular-login.mjs.map +1 -0
- package/lib/login.component.d.ts +3 -0
- package/lib/login.menu.component.d.ts +9 -2
- package/lib/login.module.d.ts +11 -0
- package/package.json +28 -16
- package/bundles/dbg-riskit-angular-login.umd.js +0 -545
- package/bundles/dbg-riskit-angular-login.umd.js.map +0 -1
- package/dbg-riskit-angular-login.metadata.json +0 -1
- package/esm2015/lib/login.component.js +0 -73
- package/esm2015/lib/login.menu.component.js +0 -75
- package/esm2015/lib/login.module.js +0 -33
- package/fesm2015/dbg-riskit-angular-login.js +0 -178
- package/fesm2015/dbg-riskit-angular-login.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"LoginModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":9,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":8},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":12,"character":8},{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":13,"character":8},{"__symbolic":"reference","module":"@dbg-riskit/angular-auth","name":"AuthModule","line":14,"character":8},{"__symbolic":"reference","module":"@dbg-riskit/angular-view","name":"CommonViewModule","line":15,"character":8}],"declarations":[{"__symbolic":"reference","name":"LoginMenuComponent"},{"__symbolic":"reference","name":"LoginComponent"},{"__symbolic":"reference","name":"LoginMenuComponentTitle"},{"__symbolic":"reference","name":"LoginMenuItems"}],"exports":[{"__symbolic":"reference","name":"LoginMenuComponent"},{"__symbolic":"reference","name":"LoginMenuComponentTitle"},{"__symbolic":"reference","name":"LoginMenuItems"}]}]}],"members":{}},"LoginComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@dbg-riskit/angular-view","name":"BaseComponent","line":23,"character":36},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":11,"character":1},"arguments":[{"host":{"[class.risk-login-form]":"true","$quoted$":["[class.risk-login-form]"]},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":20,"character":25},"member":"OnPush"},"preserveWhitespaces":false,"template":"<risk-flex>\n <risk-flex-spacer></risk-flex-spacer>\n\n <div *ngIf=\"isDirectFlow\">\n <ng-template #loggedOut>\n <risk-error *ngIf=\"errorMessage\" [message]=\"errorMessage\"></risk-error>\n\n <form (ngSubmit)=\"login()\" role=\"form\">\n <mat-card>\n <mat-card-title-group>\n <mat-card-title>Please Sign In</mat-card-title>\n </mat-card-title-group>\n <mat-card-content>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"text\"\n placeholder=\"Username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n autofocus>\n </mat-form-field>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"password\"\n placeholder=\"Password\"\n name=\"password\"\n [(ngModel)]=\"password\">\n </mat-form-field>\n </mat-card-content>\n <mat-card-actions>\n <button *ngIf=\"!loggingIn\"\n mat-raised-button\n color=\"primary\"\n type=\"submit\">\n Sign in\n </button>\n <img [src]=\"logo\" alt=\"Company logo\">\n <mat-spinner *ngIf=\"loggingIn\" [diameter]=\"36\"></mat-spinner>\n </mat-card-actions>\n </mat-card>\n </form>\n </ng-template>\n\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <ng-template [ngIf]=\"userProfile | async\" let-user=\"ngIf\">\n <risk-good *ngIf=\"user?.name\"\n [message]=\"'Successfully logged in as ' + user.name + '.'\"></risk-good>\n <risk-good *ngIf=\"!user && !user.name\"\n [message]=\"'Successfully logged in!'\"></risk-good>\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngIf=\"!isDirectFlow\">\n <ng-template [ngIf]=\"!errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-spinner></mat-spinner>\n <div></div>\n </div>\n <h3>Contacting authentication server...</h3>\n </ng-template>\n <ng-template [ngIf]=\"errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-icon class=\"risk-login-form-error\" color=\"warn\">error_outline</mat-icon>\n <div></div>\n </div>\n <h3>Failed to authenticate user: {{errorMessage}}</h3>\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <button mat-button\n (click)=\"login()\"\n color=\"primary\"\n type=\"button\">\n <mat-icon>autorenew</mat-icon>\n Retry\n </button>\n <div></div>\n </div>\n </ng-template>\n </div>\n\n <risk-flex-spacer></risk-flex-spacer>\n</risk-flex>\n","styles":[":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n",".risk-flex>div{width:400px;max-width:97vw;max-height:70vh;margin-top:40px}.mat-card-title-group{margin:0}.mat-card-title-group .mat-card-title{font-weight:500}.mat-card-actions{margin:0;margin-bottom:-8px!important;padding:0}.mat-card-actions img{float:right;margin:3px 0;height:30px}.risk-login-form-flex-wrapper{display:-webkit-flex;display:flex}.risk-login-form-flex-wrapper>div{-webkit-flex:1;flex:1}.risk-login-form-error{font-size:100px;height:100px;width:100px}h3{text-align:center}input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px white inset}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":45,"character":24},"arguments":[{"__symbolic":"reference","module":"@dbg-riskit/angular-common","name":"AUTH_PROVIDER","line":45,"character":31}]}],null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":48,"character":24},"arguments":[{"__symbolic":"reference","module":"@dbg-riskit/angular-common","name":"SECONDARY_LOGO","line":48,"character":31}]}]],"parameters":[{"__symbolic":"reference","module":"@dbg-riskit/common","name":"AuthProvider","line":45,"character":77},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":46,"character":59},{"__symbolic":"reference","module":"@dbg-riskit/angular-auth","name":"AuthRoutingFlowService","line":47,"character":64},{"__symbolic":"reference","name":"string"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"login":[{"__symbolic":"method"}]}},"LoginMenuComponentTitle":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":18,"character":1},"arguments":[{"selector":"risk-login-menu-title-horizontal, risk-login-menu-title-vertical","host":{"[class.risk-login-menu-title]":"true","$quoted$":["[class.risk-login-menu-title]"]}}]}],"members":{}},"LoginMenuItems":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":28,"character":1},"arguments":[{"selector":"risk-login-menu-before-items-horizontal, risk-login-menu-before-items-vertical,risk-login-menu-after-items-horizontal,risk-login-menu-after-items-vertical"}]}],"members":{}},"LoginMenuComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@dbg-riskit/angular-view","name":"BaseComponent","line":50,"character":40},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":37,"character":1},"arguments":[{"selector":"risk-login-menu","host":{"[class.risk-login-menu]":"true","$quoted$":["[class.risk-login-menu]"]},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":47,"character":25},"member":"OnPush"},"preserveWhitespaces":false,"template":"<ng-template [ngIf]=\"orientation === 'row'\">\n <mat-menu #loginMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"risk-login-menu-before-items-horizontal\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </button>\n </ng-template>\n <ng-template #loggedOut>\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>launch</mat-icon>\n Login\n </button>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-horizontal\"></ng-content>\n </mat-menu>\n <button mat-button\n #menu=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"loginMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n (onMenuClose)=\"menuClosed()\"\n type=\"button\">\n <ng-content select=\"risk-login-menu-title-horizontal\"></ng-content>\n <mat-icon>person</mat-icon>\n </button>\n</ng-template>\n\n<ng-template [ngIf]=\"orientation === 'column'\">\n <ng-content select=\"risk-login-menu-title-vertical\"></ng-content>\n <ng-content select=\"risk-login-menu-before-items-vertical\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut2\">\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </a>\n </ng-template>\n <ng-template #loggedOut2>\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>launch</mat-icon>\n Login\n </a>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-vertical\"></ng-content>\n</ng-template>\n","styles":[":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n",":host{display:-webkit-flex!important;display:flex!important}:host.risk-login-menu-flex-row{-webkit-flex-direction:row;flex-direction:row}:host.risk-login-menu-flex-column{-webkit-flex-direction:column;flex-direction:column}:host .risk-login-menu-title{font-weight:bold;margin:0 5px}\n"]}]}],"members":{"orientation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":5}}]}],"isRow":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":55,"character":5},"arguments":["class.risk-login-menu-flex-row"]}]}],"isColumn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":60,"character":5},"arguments":["class.risk-login-menu-flex-column"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":65,"character":24},"arguments":[{"__symbolic":"reference","module":"@dbg-riskit/angular-common","name":"AUTH_PROVIDER","line":65,"character":31}]}],null,null],"parameters":[{"__symbolic":"reference","module":"@dbg-riskit/common","name":"AuthProvider","line":65,"character":77},{"__symbolic":"reference","module":"@dbg-riskit/angular-auth","name":"AuthRoutingFlowService","line":66,"character":64},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":67,"character":59}]}],"menuClosed":[{"__symbolic":"method"}],"logout":[{"__symbolic":"method"}]}}},"origins":{"LoginModule":"./lib/login.module","LoginComponent":"./lib/login.component","LoginMenuComponentTitle":"./lib/login.menu.component","LoginMenuItems":"./lib/login.menu.component","LoginMenuComponent":"./lib/login.menu.component"},"importAs":"@dbg-riskit/angular-login"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
|
|
2
|
-
import { AuthRoutingFlowService } from '@dbg-riskit/angular-auth';
|
|
3
|
-
import { AUTH_PROVIDER, SECONDARY_LOGO } from '@dbg-riskit/angular-common';
|
|
4
|
-
import { toErrorMessage } from '@dbg-riskit/angular-error';
|
|
5
|
-
import { BaseComponent } from '@dbg-riskit/angular-view';
|
|
6
|
-
import { first, takeUntil } from 'rxjs/operators';
|
|
7
|
-
export class LoginComponent extends BaseComponent {
|
|
8
|
-
constructor(authProvider, changeDetectorRef, authRoutingFlowService, secondaryLogo) {
|
|
9
|
-
super();
|
|
10
|
-
this.authProvider = authProvider;
|
|
11
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
12
|
-
this.authRoutingFlowService = authRoutingFlowService;
|
|
13
|
-
this.secondaryLogo = secondaryLogo;
|
|
14
|
-
/**
|
|
15
|
-
* Control for "login button-to-spinner".
|
|
16
|
-
*/
|
|
17
|
-
this.loggingIn = false;
|
|
18
|
-
// Update component state on login status change
|
|
19
|
-
this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe(() => this.changeDetectorRef.markForCheck());
|
|
20
|
-
}
|
|
21
|
-
ngAfterViewInit() {
|
|
22
|
-
this.authRoutingFlowService.loginViaService().pipe(takeUntil(this.destroyed)).subscribe(() => {
|
|
23
|
-
this.changeDetectorRef.markForCheck();
|
|
24
|
-
}, (err) => {
|
|
25
|
-
this.errorMessage = toErrorMessage(err).message;
|
|
26
|
-
this.changeDetectorRef.markForCheck();
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
get isDirectFlow() {
|
|
30
|
-
return this.authRoutingFlowService.directFlow;
|
|
31
|
-
}
|
|
32
|
-
get authStatus() {
|
|
33
|
-
return this.authProvider.loggedIn;
|
|
34
|
-
}
|
|
35
|
-
get userProfile() {
|
|
36
|
-
return this.authProvider.userProfile;
|
|
37
|
-
}
|
|
38
|
-
login() {
|
|
39
|
-
this.loggingIn = true;
|
|
40
|
-
this.authRoutingFlowService.login(this.username, this.password).pipe(first()).subscribe((res) => {
|
|
41
|
-
if (!res) {
|
|
42
|
-
this.errorMessage = 'Authentication failed. Server did not generate a token.';
|
|
43
|
-
}
|
|
44
|
-
this.loggingIn = false;
|
|
45
|
-
this.changeDetectorRef.markForCheck();
|
|
46
|
-
}, () => {
|
|
47
|
-
this.loggingIn = false;
|
|
48
|
-
this.errorMessage = 'Authentication failed. Is the username and password correct?';
|
|
49
|
-
this.changeDetectorRef.markForCheck();
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
get logo() {
|
|
53
|
-
return this.secondaryLogo;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
LoginComponent.decorators = [
|
|
57
|
-
{ type: Component, args: [{
|
|
58
|
-
template: "<risk-flex>\n <risk-flex-spacer></risk-flex-spacer>\n\n <div *ngIf=\"isDirectFlow\">\n <ng-template #loggedOut>\n <risk-error *ngIf=\"errorMessage\" [message]=\"errorMessage\"></risk-error>\n\n <form (ngSubmit)=\"login()\" role=\"form\">\n <mat-card>\n <mat-card-title-group>\n <mat-card-title>Please Sign In</mat-card-title>\n </mat-card-title-group>\n <mat-card-content>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"text\"\n placeholder=\"Username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n autofocus>\n </mat-form-field>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"password\"\n placeholder=\"Password\"\n name=\"password\"\n [(ngModel)]=\"password\">\n </mat-form-field>\n </mat-card-content>\n <mat-card-actions>\n <button *ngIf=\"!loggingIn\"\n mat-raised-button\n color=\"primary\"\n type=\"submit\">\n Sign in\n </button>\n <img [src]=\"logo\" alt=\"Company logo\">\n <mat-spinner *ngIf=\"loggingIn\" [diameter]=\"36\"></mat-spinner>\n </mat-card-actions>\n </mat-card>\n </form>\n </ng-template>\n\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <ng-template [ngIf]=\"userProfile | async\" let-user=\"ngIf\">\n <risk-good *ngIf=\"user?.name\"\n [message]=\"'Successfully logged in as ' + user.name + '.'\"></risk-good>\n <risk-good *ngIf=\"!user && !user.name\"\n [message]=\"'Successfully logged in!'\"></risk-good>\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngIf=\"!isDirectFlow\">\n <ng-template [ngIf]=\"!errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-spinner></mat-spinner>\n <div></div>\n </div>\n <h3>Contacting authentication server...</h3>\n </ng-template>\n <ng-template [ngIf]=\"errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-icon class=\"risk-login-form-error\" color=\"warn\">error_outline</mat-icon>\n <div></div>\n </div>\n <h3>Failed to authenticate user: {{errorMessage}}</h3>\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <button mat-button\n (click)=\"login()\"\n color=\"primary\"\n type=\"button\">\n <mat-icon>autorenew</mat-icon>\n Retry\n </button>\n <div></div>\n </div>\n </ng-template>\n </div>\n\n <risk-flex-spacer></risk-flex-spacer>\n</risk-flex>\n",
|
|
59
|
-
host: {
|
|
60
|
-
'[class.risk-login-form]': 'true'
|
|
61
|
-
},
|
|
62
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
63
|
-
preserveWhitespaces: false,
|
|
64
|
-
styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ".risk-flex>div{width:400px;max-width:97vw;max-height:70vh;margin-top:40px}.mat-card-title-group{margin:0}.mat-card-title-group .mat-card-title{font-weight:500}.mat-card-actions{margin:0;margin-bottom:-8px!important;padding:0}.mat-card-actions img{float:right;margin:3px 0;height:30px}.risk-login-form-flex-wrapper{display:-webkit-flex;display:flex}.risk-login-form-flex-wrapper>div{-webkit-flex:1;flex:1}.risk-login-form-error{font-size:100px;height:100px;width:100px}h3{text-align:center}input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px white inset}\n"]
|
|
65
|
-
},] }
|
|
66
|
-
];
|
|
67
|
-
LoginComponent.ctorParameters = () => [
|
|
68
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_PROVIDER,] }] },
|
|
69
|
-
{ type: ChangeDetectorRef },
|
|
70
|
-
{ type: AuthRoutingFlowService },
|
|
71
|
-
{ type: String, decorators: [{ type: Inject, args: [SECONDARY_LOGO,] }] }
|
|
72
|
-
];
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1sb2dpbi9zcmMvbGliL2xvZ2luLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0csT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQWEsY0FBYyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXZELE9BQU8sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFjaEQsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBc0I3QyxZQUEyRCxZQUEwQixFQUNqRCxpQkFBb0MsRUFDcEMsc0JBQThDLEVBQ3RCLGFBQXFCO1FBQzdFLEtBQUssRUFBRSxDQUFDO1FBSitDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ2pELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQVJqRjs7V0FFRztRQUNJLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFPOUIsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDNUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDNUIsQ0FBQyxTQUFTLENBQ1AsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsRUFDRCxDQUFDLEdBQWUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ2hFLEtBQUssRUFBRSxDQUNWLENBQUMsU0FBUyxDQUNQLENBQUMsR0FBWSxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcseURBQXlELENBQUM7YUFDakY7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxFQUNELEdBQUcsRUFBRTtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsOERBQThELENBQUM7WUFDbkYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDOzs7WUE3RkosU0FBUyxTQUFDO2dCQUNQLDJsSEFBMkM7Z0JBSzNDLElBQUksRUFBaUI7b0JBQ2pCLHlCQUF5QixFQUFFLE1BQU07aUJBQ3BDO2dCQUNELGVBQWUsRUFBTSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUNuRCxtQkFBbUIsRUFBRSxLQUFLOzthQUM3Qjs7OzRDQXVCdUIsTUFBTSxTQUFDLGFBQWE7WUE3Q0ksaUJBQWlCO1lBRXpELHNCQUFzQjt5Q0E4Q04sTUFBTSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0F1dGhSb3V0aW5nRmxvd1NlcnZpY2V9IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItYXV0aCc7XG5pbXBvcnQge0FVVEhfUFJPVklERVIsIFNFQ09OREFSWV9MT0dPfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQge0Vycm9yVHlwZXMsIHRvRXJyb3JNZXNzYWdlfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLWVycm9yJztcbmltcG9ydCB7QmFzZUNvbXBvbmVudH0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7QXV0aFByb3ZpZGVyLCBVc2VySW5mb30gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3QsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybCAgICAgICAgOiAnbG9naW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJscyAgICAgICAgICA6IFtcbiAgICAgICAgJy4uLy4uLy4uL2NvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJ2xvZ2luLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgaG9zdCAgICAgICAgICAgICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stbG9naW4tZm9ybV0nOiAndHJ1ZSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbiAgICA6IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIEVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBVc2VyIG5hbWUgYmluZGluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQYXNzd29yZCBiaW5kaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXNzd29yZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2wgZm9yIFwibG9naW4gYnV0dG9uLXRvLXNwaW5uZXJcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nZ2luZ0luOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQEluamVjdChBVVRIX1BST1ZJREVSKSBwcml2YXRlIHJlYWRvbmx5IGF1dGhQcm92aWRlcjogQXV0aFByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdXRoUm91dGluZ0Zsb3dTZXJ2aWNlOiBBdXRoUm91dGluZ0Zsb3dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBASW5qZWN0KFNFQ09OREFSWV9MT0dPKSBwcml2YXRlIHJlYWRvbmx5IHNlY29uZGFyeUxvZ286IHN0cmluZykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlIG9uIGxvZ2luIHN0YXR1cyBjaGFuZ2VcbiAgICAgICAgdGhpcy5hdXRoUHJvdmlkZXIubG9nZ2VkSW5TdHJlYW0ucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdXRoUm91dGluZ0Zsb3dTZXJ2aWNlLmxvZ2luVmlhU2VydmljZSgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXG4gICAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycjogRXJyb3JUeXBlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdG9FcnJvck1lc3NhZ2UoZXJyKS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0RpcmVjdEZsb3coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhSb3V0aW5nRmxvd1NlcnZpY2UuZGlyZWN0RmxvdztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dGhTdGF0dXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhQcm92aWRlci5sb2dnZWRJbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8VXNlckluZm8gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFByb3ZpZGVyLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2dpbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dnaW5nSW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmF1dGhSb3V0aW5nRmxvd1NlcnZpY2UubG9naW4odGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCkucGlwZShcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQXV0aGVudGljYXRpb24gZmFpbGVkLiBTZXJ2ZXIgZGlkIG5vdCBnZW5lcmF0ZSBhIHRva2VuLic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ0luID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnaW5nSW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQuIElzIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgY29ycmVjdD8nO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2dvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY29uZGFyeUxvZ287XG4gICAgfVxufVxuIl19
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, HostBinding, Inject, Input } from '@angular/core';
|
|
2
|
-
import { AuthRoutingFlowService } from '@dbg-riskit/angular-auth';
|
|
3
|
-
import { AUTH_PROVIDER } from '@dbg-riskit/angular-common';
|
|
4
|
-
import { BaseComponent } from '@dbg-riskit/angular-view';
|
|
5
|
-
import { first, takeUntil } from 'rxjs/operators';
|
|
6
|
-
export class LoginMenuComponentTitle {
|
|
7
|
-
}
|
|
8
|
-
LoginMenuComponentTitle.decorators = [
|
|
9
|
-
{ type: Directive, args: [{
|
|
10
|
-
selector: 'risk-login-menu-title-horizontal, '
|
|
11
|
-
+ 'risk-login-menu-title-vertical',
|
|
12
|
-
host: {
|
|
13
|
-
'[class.risk-login-menu-title]': 'true'
|
|
14
|
-
}
|
|
15
|
-
},] }
|
|
16
|
-
];
|
|
17
|
-
export class LoginMenuItems {
|
|
18
|
-
}
|
|
19
|
-
LoginMenuItems.decorators = [
|
|
20
|
-
{ type: Directive, args: [{
|
|
21
|
-
selector: 'risk-login-menu-before-items-horizontal,'
|
|
22
|
-
+ ' risk-login-menu-before-items-vertical,'
|
|
23
|
-
+ 'risk-login-menu-after-items-horizontal,'
|
|
24
|
-
+ 'risk-login-menu-after-items-vertical'
|
|
25
|
-
},] }
|
|
26
|
-
];
|
|
27
|
-
export class LoginMenuComponent extends BaseComponent {
|
|
28
|
-
constructor(authProvider, authRoutingFlowService, changeDetectorRef) {
|
|
29
|
-
super();
|
|
30
|
-
this.authProvider = authProvider;
|
|
31
|
-
this.authRoutingFlowService = authRoutingFlowService;
|
|
32
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
33
|
-
this.orientation = 'row';
|
|
34
|
-
// Update menu state on login status change
|
|
35
|
-
this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe(() => this.changeDetectorRef.markForCheck());
|
|
36
|
-
}
|
|
37
|
-
get isRow() {
|
|
38
|
-
return this.orientation === 'row';
|
|
39
|
-
}
|
|
40
|
-
get isColumn() {
|
|
41
|
-
return this.orientation === 'column';
|
|
42
|
-
}
|
|
43
|
-
menuClosed() {
|
|
44
|
-
this.changeDetectorRef.markForCheck();
|
|
45
|
-
}
|
|
46
|
-
get authStatus() {
|
|
47
|
-
return this.authProvider.loggedIn;
|
|
48
|
-
}
|
|
49
|
-
logout() {
|
|
50
|
-
this.authRoutingFlowService.logout().pipe(first()).subscribe();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
LoginMenuComponent.decorators = [
|
|
54
|
-
{ type: Component, args: [{
|
|
55
|
-
selector: 'risk-login-menu',
|
|
56
|
-
template: "<ng-template [ngIf]=\"orientation === 'row'\">\n <mat-menu #loginMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"risk-login-menu-before-items-horizontal\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </button>\n </ng-template>\n <ng-template #loggedOut>\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>launch</mat-icon>\n Login\n </button>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-horizontal\"></ng-content>\n </mat-menu>\n <button mat-button\n #menu=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"loginMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n (onMenuClose)=\"menuClosed()\"\n type=\"button\">\n <ng-content select=\"risk-login-menu-title-horizontal\"></ng-content>\n <mat-icon>person</mat-icon>\n </button>\n</ng-template>\n\n<ng-template [ngIf]=\"orientation === 'column'\">\n <ng-content select=\"risk-login-menu-title-vertical\"></ng-content>\n <ng-content select=\"risk-login-menu-before-items-vertical\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut2\">\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </a>\n </ng-template>\n <ng-template #loggedOut2>\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>launch</mat-icon>\n Login\n </a>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-vertical\"></ng-content>\n</ng-template>\n",
|
|
57
|
-
host: {
|
|
58
|
-
'[class.risk-login-menu]': 'true'
|
|
59
|
-
},
|
|
60
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
61
|
-
preserveWhitespaces: false,
|
|
62
|
-
styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:-webkit-flex!important;display:flex!important}:host.risk-login-menu-flex-row{-webkit-flex-direction:row;flex-direction:row}:host.risk-login-menu-flex-column{-webkit-flex-direction:column;flex-direction:column}:host .risk-login-menu-title{font-weight:bold;margin:0 5px}\n"]
|
|
63
|
-
},] }
|
|
64
|
-
];
|
|
65
|
-
LoginMenuComponent.ctorParameters = () => [
|
|
66
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_PROVIDER,] }] },
|
|
67
|
-
{ type: AuthRoutingFlowService },
|
|
68
|
-
{ type: ChangeDetectorRef }
|
|
69
|
-
];
|
|
70
|
-
LoginMenuComponent.propDecorators = {
|
|
71
|
-
orientation: [{ type: Input }],
|
|
72
|
-
isRow: [{ type: HostBinding, args: ['class.risk-login-menu-flex-row',] }],
|
|
73
|
-
isColumn: [{ type: HostBinding, args: ['class.risk-login-menu-flex-column',] }]
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4ubWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWxvZ2luL3NyYy9saWIvbG9naW4ubWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDUixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXZELE9BQU8sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFTaEQsTUFBTSxPQUFPLHVCQUF1Qjs7O1lBUG5DLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsb0NBQW9DO3NCQUNsQyxnQ0FBZ0M7Z0JBQzVDLElBQUksRUFBTTtvQkFDTiwrQkFBK0IsRUFBRSxNQUFNO2lCQUMxQzthQUNKOztBQVVELE1BQU0sT0FBTyxjQUFjOzs7WUFOMUIsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSwwQ0FBMEM7c0JBQ3hDLHlDQUF5QztzQkFDekMseUNBQXlDO3NCQUN6QyxzQ0FBc0M7YUFDckQ7O0FBaUJELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBZWpELFlBQTJELFlBQTBCLEVBQ2pELHNCQUE4QyxFQUM5QyxpQkFBb0M7UUFDcEUsS0FBSyxFQUFFLENBQUM7UUFIK0MsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBZGpFLGdCQUFXLEdBQXFCLEtBQUssQ0FBQztRQWlCekMsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDNUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQW5CRCxJQUNXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUNXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFhTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUN0QyxDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLEtBQUssRUFBRSxDQUNWLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQzs7O1lBbkRKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQWEsaUJBQWlCO2dCQUN0QyxzOURBQWdEO2dCQUtoRCxJQUFJLEVBQWlCO29CQUNqQix5QkFBeUIsRUFBRSxNQUFNO2lCQUNwQztnQkFDRCxlQUFlLEVBQU0sdUJBQXVCLENBQUMsTUFBTTtnQkFDbkQsbUJBQW1CLEVBQUUsS0FBSzs7YUFDN0I7Ozs0Q0FnQnVCLE1BQU0sU0FBQyxhQUFhO1lBdkRwQyxzQkFBc0I7WUFSMUIsaUJBQWlCOzs7MEJBa0RoQixLQUFLO29CQUdMLFdBQVcsU0FBQyxnQ0FBZ0M7dUJBSzVDLFdBQVcsU0FBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0F1dGhSb3V0aW5nRmxvd1NlcnZpY2V9IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItYXV0aCc7XG5pbXBvcnQge0FVVEhfUFJPVklERVJ9IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7QmFzZUNvbXBvbmVudH0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7QXV0aFByb3ZpZGVyfSBmcm9tICdAZGJnLXJpc2tpdC9jb21tb24nO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAncmlzay1sb2dpbi1tZW51LXRpdGxlLWhvcml6b250YWwsICdcbiAgICAgICAgICAgICAgKyAncmlzay1sb2dpbi1tZW51LXRpdGxlLXZlcnRpY2FsJyxcbiAgICBob3N0ICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stbG9naW4tbWVudS10aXRsZV0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIExvZ2luTWVudUNvbXBvbmVudFRpdGxlIHtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdyaXNrLWxvZ2luLW1lbnUtYmVmb3JlLWl0ZW1zLWhvcml6b250YWwsJ1xuICAgICAgICAgICAgICArICcgcmlzay1sb2dpbi1tZW51LWJlZm9yZS1pdGVtcy12ZXJ0aWNhbCwnXG4gICAgICAgICAgICAgICsgJ3Jpc2stbG9naW4tbWVudS1hZnRlci1pdGVtcy1ob3Jpem9udGFsLCdcbiAgICAgICAgICAgICAgKyAncmlzay1sb2dpbi1tZW51LWFmdGVyLWl0ZW1zLXZlcnRpY2FsJ1xufSlcbmV4cG9ydCBjbGFzcyBMb2dpbk1lbnVJdGVtcyB7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yICAgICAgICAgICA6ICdyaXNrLWxvZ2luLW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsICAgICAgICA6ICdsb2dpbi5tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHMgICAgICAgICAgOiBbXG4gICAgICAgICcuLi8uLi8uLi9jb21wb25lbnQuc2NzcycsXG4gICAgICAgICdsb2dpbi5tZW51LmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgaG9zdCAgICAgICAgICAgICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stbG9naW4tbWVudV0nOiAndHJ1ZSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbiAgICA6IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbk1lbnVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiAncm93JyB8ICdjb2x1bW4nID0gJ3Jvdyc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJpc2stbG9naW4tbWVudS1mbGV4LXJvdycpXG4gICAgcHVibGljIGdldCBpc1JvdygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdyb3cnO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mucmlzay1sb2dpbi1tZW51LWZsZXgtY29sdW1uJylcbiAgICBwdWJsaWMgZ2V0IGlzQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2NvbHVtbic7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKEBJbmplY3QoQVVUSF9QUk9WSURFUikgcHJpdmF0ZSByZWFkb25seSBhdXRoUHJvdmlkZXI6IEF1dGhQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdXRoUm91dGluZ0Zsb3dTZXJ2aWNlOiBBdXRoUm91dGluZ0Zsb3dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBtZW51IHN0YXRlIG9uIGxvZ2luIHN0YXR1cyBjaGFuZ2VcbiAgICAgICAgdGhpcy5hdXRoUHJvdmlkZXIubG9nZ2VkSW5TdHJlYW0ucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1lbnVDbG9zZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRoU3RhdHVzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoUHJvdmlkZXIubG9nZ2VkSW47XG4gICAgfVxuXG4gICAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdXRoUm91dGluZ0Zsb3dTZXJ2aWNlLmxvZ291dCgpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { RouterModule } from '@angular/router';
|
|
5
|
-
import { AuthModule } from '@dbg-riskit/angular-auth';
|
|
6
|
-
import { CommonViewModule } from '@dbg-riskit/angular-view';
|
|
7
|
-
import { LoginComponent } from './login.component';
|
|
8
|
-
import { LoginMenuComponent, LoginMenuComponentTitle, LoginMenuItems } from './login.menu.component';
|
|
9
|
-
export class LoginModule {
|
|
10
|
-
}
|
|
11
|
-
LoginModule.decorators = [
|
|
12
|
-
{ type: NgModule, args: [{
|
|
13
|
-
imports: [
|
|
14
|
-
CommonModule,
|
|
15
|
-
FormsModule,
|
|
16
|
-
RouterModule,
|
|
17
|
-
AuthModule,
|
|
18
|
-
CommonViewModule
|
|
19
|
-
],
|
|
20
|
-
declarations: [
|
|
21
|
-
LoginMenuComponent,
|
|
22
|
-
LoginComponent,
|
|
23
|
-
LoginMenuComponentTitle,
|
|
24
|
-
LoginMenuItems
|
|
25
|
-
],
|
|
26
|
-
exports: [
|
|
27
|
-
LoginMenuComponent,
|
|
28
|
-
LoginMenuComponentTitle,
|
|
29
|
-
LoginMenuItems
|
|
30
|
-
]
|
|
31
|
-
},] }
|
|
32
|
-
];
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1sb2dpbi9zcmMvbGliL2xvZ2luLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBc0JuRyxNQUFNLE9BQU8sV0FBVzs7O1lBcEJ2QixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFPO29CQUNWLFlBQVk7b0JBQ1osV0FBVztvQkFDWCxZQUFZO29CQUNaLFVBQVU7b0JBQ1YsZ0JBQWdCO2lCQUNuQjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1Ysa0JBQWtCO29CQUNsQixjQUFjO29CQUNkLHVCQUF1QjtvQkFDdkIsY0FBYztpQkFDakI7Z0JBQ0QsT0FBTyxFQUFPO29CQUNWLGtCQUFrQjtvQkFDbEIsdUJBQXVCO29CQUN2QixjQUFjO2lCQUNqQjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLWF1dGgnO1xuaW1wb3J0IHtDb21tb25WaWV3TW9kdWxlfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLXZpZXcnO1xuaW1wb3J0IHtMb2dpbkNvbXBvbmVudH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2dpbk1lbnVDb21wb25lbnQsIExvZ2luTWVudUNvbXBvbmVudFRpdGxlLCBMb2dpbk1lbnVJdGVtc30gZnJvbSAnLi9sb2dpbi5tZW51LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0cyAgICAgOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgQXV0aE1vZHVsZSxcbiAgICAgICAgQ29tbW9uVmlld01vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIExvZ2luTWVudUNvbXBvbmVudCxcbiAgICAgICAgTG9naW5Db21wb25lbnQsXG4gICAgICAgIExvZ2luTWVudUNvbXBvbmVudFRpdGxlLFxuICAgICAgICBMb2dpbk1lbnVJdGVtc1xuICAgIF0sXG4gICAgZXhwb3J0cyAgICAgOiBbXG4gICAgICAgIExvZ2luTWVudUNvbXBvbmVudCxcbiAgICAgICAgTG9naW5NZW51Q29tcG9uZW50VGl0bGUsXG4gICAgICAgIExvZ2luTWVudUl0ZW1zXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZHVsZSB7XG59XG4iXX0=
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, ChangeDetectionStrategy, Inject, ChangeDetectorRef, Directive, Input, HostBinding, NgModule } from '@angular/core';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { RouterModule } from '@angular/router';
|
|
5
|
-
import { AuthRoutingFlowService, AuthModule } from '@dbg-riskit/angular-auth';
|
|
6
|
-
import { BaseComponent, CommonViewModule } from '@dbg-riskit/angular-view';
|
|
7
|
-
import { AUTH_PROVIDER, SECONDARY_LOGO } from '@dbg-riskit/angular-common';
|
|
8
|
-
import { toErrorMessage } from '@dbg-riskit/angular-error';
|
|
9
|
-
import { takeUntil, first } from 'rxjs/operators';
|
|
10
|
-
|
|
11
|
-
class LoginComponent extends BaseComponent {
|
|
12
|
-
constructor(authProvider, changeDetectorRef, authRoutingFlowService, secondaryLogo) {
|
|
13
|
-
super();
|
|
14
|
-
this.authProvider = authProvider;
|
|
15
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
16
|
-
this.authRoutingFlowService = authRoutingFlowService;
|
|
17
|
-
this.secondaryLogo = secondaryLogo;
|
|
18
|
-
/**
|
|
19
|
-
* Control for "login button-to-spinner".
|
|
20
|
-
*/
|
|
21
|
-
this.loggingIn = false;
|
|
22
|
-
// Update component state on login status change
|
|
23
|
-
this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe(() => this.changeDetectorRef.markForCheck());
|
|
24
|
-
}
|
|
25
|
-
ngAfterViewInit() {
|
|
26
|
-
this.authRoutingFlowService.loginViaService().pipe(takeUntil(this.destroyed)).subscribe(() => {
|
|
27
|
-
this.changeDetectorRef.markForCheck();
|
|
28
|
-
}, (err) => {
|
|
29
|
-
this.errorMessage = toErrorMessage(err).message;
|
|
30
|
-
this.changeDetectorRef.markForCheck();
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
get isDirectFlow() {
|
|
34
|
-
return this.authRoutingFlowService.directFlow;
|
|
35
|
-
}
|
|
36
|
-
get authStatus() {
|
|
37
|
-
return this.authProvider.loggedIn;
|
|
38
|
-
}
|
|
39
|
-
get userProfile() {
|
|
40
|
-
return this.authProvider.userProfile;
|
|
41
|
-
}
|
|
42
|
-
login() {
|
|
43
|
-
this.loggingIn = true;
|
|
44
|
-
this.authRoutingFlowService.login(this.username, this.password).pipe(first()).subscribe((res) => {
|
|
45
|
-
if (!res) {
|
|
46
|
-
this.errorMessage = 'Authentication failed. Server did not generate a token.';
|
|
47
|
-
}
|
|
48
|
-
this.loggingIn = false;
|
|
49
|
-
this.changeDetectorRef.markForCheck();
|
|
50
|
-
}, () => {
|
|
51
|
-
this.loggingIn = false;
|
|
52
|
-
this.errorMessage = 'Authentication failed. Is the username and password correct?';
|
|
53
|
-
this.changeDetectorRef.markForCheck();
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
get logo() {
|
|
57
|
-
return this.secondaryLogo;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
LoginComponent.decorators = [
|
|
61
|
-
{ type: Component, args: [{
|
|
62
|
-
template: "<risk-flex>\n <risk-flex-spacer></risk-flex-spacer>\n\n <div *ngIf=\"isDirectFlow\">\n <ng-template #loggedOut>\n <risk-error *ngIf=\"errorMessage\" [message]=\"errorMessage\"></risk-error>\n\n <form (ngSubmit)=\"login()\" role=\"form\">\n <mat-card>\n <mat-card-title-group>\n <mat-card-title>Please Sign In</mat-card-title>\n </mat-card-title-group>\n <mat-card-content>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"text\"\n placeholder=\"Username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n autofocus>\n </mat-form-field>\n <mat-form-field class=\"risk-full-width\">\n <input matInput\n type=\"password\"\n placeholder=\"Password\"\n name=\"password\"\n [(ngModel)]=\"password\">\n </mat-form-field>\n </mat-card-content>\n <mat-card-actions>\n <button *ngIf=\"!loggingIn\"\n mat-raised-button\n color=\"primary\"\n type=\"submit\">\n Sign in\n </button>\n <img [src]=\"logo\" alt=\"Company logo\">\n <mat-spinner *ngIf=\"loggingIn\" [diameter]=\"36\"></mat-spinner>\n </mat-card-actions>\n </mat-card>\n </form>\n </ng-template>\n\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <ng-template [ngIf]=\"userProfile | async\" let-user=\"ngIf\">\n <risk-good *ngIf=\"user?.name\"\n [message]=\"'Successfully logged in as ' + user.name + '.'\"></risk-good>\n <risk-good *ngIf=\"!user && !user.name\"\n [message]=\"'Successfully logged in!'\"></risk-good>\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngIf=\"!isDirectFlow\">\n <ng-template [ngIf]=\"!errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-spinner></mat-spinner>\n <div></div>\n </div>\n <h3>Contacting authentication server...</h3>\n </ng-template>\n <ng-template [ngIf]=\"errorMessage\">\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <mat-icon class=\"risk-login-form-error\" color=\"warn\">error_outline</mat-icon>\n <div></div>\n </div>\n <h3>Failed to authenticate user: {{errorMessage}}</h3>\n <div class=\"risk-login-form-flex-wrapper\">\n <div></div>\n <button mat-button\n (click)=\"login()\"\n color=\"primary\"\n type=\"button\">\n <mat-icon>autorenew</mat-icon>\n Retry\n </button>\n <div></div>\n </div>\n </ng-template>\n </div>\n\n <risk-flex-spacer></risk-flex-spacer>\n</risk-flex>\n",
|
|
63
|
-
host: {
|
|
64
|
-
'[class.risk-login-form]': 'true'
|
|
65
|
-
},
|
|
66
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
67
|
-
preserveWhitespaces: false,
|
|
68
|
-
styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ".risk-flex>div{width:400px;max-width:97vw;max-height:70vh;margin-top:40px}.mat-card-title-group{margin:0}.mat-card-title-group .mat-card-title{font-weight:500}.mat-card-actions{margin:0;margin-bottom:-8px!important;padding:0}.mat-card-actions img{float:right;margin:3px 0;height:30px}.risk-login-form-flex-wrapper{display:-webkit-flex;display:flex}.risk-login-form-flex-wrapper>div{-webkit-flex:1;flex:1}.risk-login-form-error{font-size:100px;height:100px;width:100px}h3{text-align:center}input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px white inset}\n"]
|
|
69
|
-
},] }
|
|
70
|
-
];
|
|
71
|
-
LoginComponent.ctorParameters = () => [
|
|
72
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_PROVIDER,] }] },
|
|
73
|
-
{ type: ChangeDetectorRef },
|
|
74
|
-
{ type: AuthRoutingFlowService },
|
|
75
|
-
{ type: String, decorators: [{ type: Inject, args: [SECONDARY_LOGO,] }] }
|
|
76
|
-
];
|
|
77
|
-
|
|
78
|
-
class LoginMenuComponentTitle {
|
|
79
|
-
}
|
|
80
|
-
LoginMenuComponentTitle.decorators = [
|
|
81
|
-
{ type: Directive, args: [{
|
|
82
|
-
selector: 'risk-login-menu-title-horizontal, '
|
|
83
|
-
+ 'risk-login-menu-title-vertical',
|
|
84
|
-
host: {
|
|
85
|
-
'[class.risk-login-menu-title]': 'true'
|
|
86
|
-
}
|
|
87
|
-
},] }
|
|
88
|
-
];
|
|
89
|
-
class LoginMenuItems {
|
|
90
|
-
}
|
|
91
|
-
LoginMenuItems.decorators = [
|
|
92
|
-
{ type: Directive, args: [{
|
|
93
|
-
selector: 'risk-login-menu-before-items-horizontal,'
|
|
94
|
-
+ ' risk-login-menu-before-items-vertical,'
|
|
95
|
-
+ 'risk-login-menu-after-items-horizontal,'
|
|
96
|
-
+ 'risk-login-menu-after-items-vertical'
|
|
97
|
-
},] }
|
|
98
|
-
];
|
|
99
|
-
class LoginMenuComponent extends BaseComponent {
|
|
100
|
-
constructor(authProvider, authRoutingFlowService, changeDetectorRef) {
|
|
101
|
-
super();
|
|
102
|
-
this.authProvider = authProvider;
|
|
103
|
-
this.authRoutingFlowService = authRoutingFlowService;
|
|
104
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
105
|
-
this.orientation = 'row';
|
|
106
|
-
// Update menu state on login status change
|
|
107
|
-
this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe(() => this.changeDetectorRef.markForCheck());
|
|
108
|
-
}
|
|
109
|
-
get isRow() {
|
|
110
|
-
return this.orientation === 'row';
|
|
111
|
-
}
|
|
112
|
-
get isColumn() {
|
|
113
|
-
return this.orientation === 'column';
|
|
114
|
-
}
|
|
115
|
-
menuClosed() {
|
|
116
|
-
this.changeDetectorRef.markForCheck();
|
|
117
|
-
}
|
|
118
|
-
get authStatus() {
|
|
119
|
-
return this.authProvider.loggedIn;
|
|
120
|
-
}
|
|
121
|
-
logout() {
|
|
122
|
-
this.authRoutingFlowService.logout().pipe(first()).subscribe();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
LoginMenuComponent.decorators = [
|
|
126
|
-
{ type: Component, args: [{
|
|
127
|
-
selector: 'risk-login-menu',
|
|
128
|
-
template: "<ng-template [ngIf]=\"orientation === 'row'\">\n <mat-menu #loginMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <ng-content select=\"risk-login-menu-before-items-horizontal\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut\">\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </button>\n </ng-template>\n <ng-template #loggedOut>\n <button mat-menu-item\n (click)=\"logout()\"\n type=\"button\">\n <mat-icon>launch</mat-icon>\n Login\n </button>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-horizontal\"></ng-content>\n </mat-menu>\n <button mat-button\n #menu=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"loginMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n (onMenuClose)=\"menuClosed()\"\n type=\"button\">\n <ng-content select=\"risk-login-menu-title-horizontal\"></ng-content>\n <mat-icon>person</mat-icon>\n </button>\n</ng-template>\n\n<ng-template [ngIf]=\"orientation === 'column'\">\n <ng-content select=\"risk-login-menu-title-vertical\"></ng-content>\n <ng-content select=\"risk-login-menu-before-items-vertical\"></ng-content>\n <ng-template [ngIf]=\"authStatus | async\" [ngIfElse]=\"loggedOut2\">\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n Logout\n </a>\n </ng-template>\n <ng-template #loggedOut2>\n <a mat-button\n (click)=\"logout()\">\n <mat-icon>launch</mat-icon>\n Login\n </a>\n </ng-template>\n <ng-content select=\"risk-login-menu-after-items-vertical\"></ng-content>\n</ng-template>\n",
|
|
129
|
-
host: {
|
|
130
|
-
'[class.risk-login-menu]': 'true'
|
|
131
|
-
},
|
|
132
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
133
|
-
preserveWhitespaces: false,
|
|
134
|
-
styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:-webkit-flex!important;display:flex!important}:host.risk-login-menu-flex-row{-webkit-flex-direction:row;flex-direction:row}:host.risk-login-menu-flex-column{-webkit-flex-direction:column;flex-direction:column}:host .risk-login-menu-title{font-weight:bold;margin:0 5px}\n"]
|
|
135
|
-
},] }
|
|
136
|
-
];
|
|
137
|
-
LoginMenuComponent.ctorParameters = () => [
|
|
138
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_PROVIDER,] }] },
|
|
139
|
-
{ type: AuthRoutingFlowService },
|
|
140
|
-
{ type: ChangeDetectorRef }
|
|
141
|
-
];
|
|
142
|
-
LoginMenuComponent.propDecorators = {
|
|
143
|
-
orientation: [{ type: Input }],
|
|
144
|
-
isRow: [{ type: HostBinding, args: ['class.risk-login-menu-flex-row',] }],
|
|
145
|
-
isColumn: [{ type: HostBinding, args: ['class.risk-login-menu-flex-column',] }]
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
class LoginModule {
|
|
149
|
-
}
|
|
150
|
-
LoginModule.decorators = [
|
|
151
|
-
{ type: NgModule, args: [{
|
|
152
|
-
imports: [
|
|
153
|
-
CommonModule,
|
|
154
|
-
FormsModule,
|
|
155
|
-
RouterModule,
|
|
156
|
-
AuthModule,
|
|
157
|
-
CommonViewModule
|
|
158
|
-
],
|
|
159
|
-
declarations: [
|
|
160
|
-
LoginMenuComponent,
|
|
161
|
-
LoginComponent,
|
|
162
|
-
LoginMenuComponentTitle,
|
|
163
|
-
LoginMenuItems
|
|
164
|
-
],
|
|
165
|
-
exports: [
|
|
166
|
-
LoginMenuComponent,
|
|
167
|
-
LoginMenuComponentTitle,
|
|
168
|
-
LoginMenuItems
|
|
169
|
-
]
|
|
170
|
-
},] }
|
|
171
|
-
];
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Generated bundle index. Do not edit.
|
|
175
|
-
*/
|
|
176
|
-
|
|
177
|
-
export { LoginComponent, LoginMenuComponent, LoginMenuComponentTitle, LoginMenuItems, LoginModule };
|
|
178
|
-
//# sourceMappingURL=dbg-riskit-angular-login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dbg-riskit-angular-login.js","sources":["../../../../pkg/dbg-riskit/angular-login/src/lib/login.component.ts","../../../../pkg/dbg-riskit/angular-login/src/lib/login.menu.component.ts","../../../../pkg/dbg-riskit/angular-login/src/lib/login.module.ts","../../../../pkg/dbg-riskit/angular-login/src/dbg-riskit-angular-login.ts"],"sourcesContent":["import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject} from '@angular/core';\n\nimport {AuthRoutingFlowService} from '@dbg-riskit/angular-auth';\nimport {AUTH_PROVIDER, SECONDARY_LOGO} from '@dbg-riskit/angular-common';\nimport {ErrorTypes, toErrorMessage} from '@dbg-riskit/angular-error';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {AuthProvider, UserInfo} from '@dbg-riskit/common';\n\nimport {Observable} from 'rxjs';\nimport {first, takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl : 'login.component.html',\n styleUrls : [\n '../../../component.scss',\n 'login.component.scss'\n ],\n host : {\n '[class.risk-login-form]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class LoginComponent extends BaseComponent implements AfterViewInit {\n\n /**\n * Error message to be displayed.\n */\n public errorMessage?: string;\n\n /**\n * User name binding.\n */\n public username?: string;\n\n /**\n * Password binding.\n */\n public password?: string;\n\n /**\n * Control for \"login button-to-spinner\".\n */\n public loggingIn: boolean = false;\n\n public constructor(@Inject(AUTH_PROVIDER) private readonly authProvider: AuthProvider,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly authRoutingFlowService: AuthRoutingFlowService,\n @Inject(SECONDARY_LOGO) private readonly secondaryLogo: string) {\n super();\n // Update component state on login status change\n this.authProvider.loggedInStream.pipe(\n takeUntil(this.destroyed)\n ).subscribe(() => this.changeDetectorRef.markForCheck());\n }\n\n public ngAfterViewInit(): void {\n this.authRoutingFlowService.loginViaService().pipe(\n takeUntil(this.destroyed)\n ).subscribe(\n () => {\n this.changeDetectorRef.markForCheck();\n },\n (err: ErrorTypes) => {\n this.errorMessage = toErrorMessage(err).message;\n this.changeDetectorRef.markForCheck();\n }\n );\n }\n\n public get isDirectFlow(): boolean {\n return this.authRoutingFlowService.directFlow;\n }\n\n public get authStatus(): Observable<boolean> {\n return this.authProvider.loggedIn;\n }\n\n public get userProfile(): Observable<UserInfo | undefined> {\n return this.authProvider.userProfile;\n }\n\n public login(): void {\n this.loggingIn = true;\n this.authRoutingFlowService.login(this.username, this.password).pipe(\n first()\n ).subscribe(\n (res: boolean) => {\n if (!res) {\n this.errorMessage = 'Authentication failed. Server did not generate a token.';\n }\n this.loggingIn = false;\n this.changeDetectorRef.markForCheck();\n },\n () => {\n this.loggingIn = false;\n this.errorMessage = 'Authentication failed. Is the username and password correct?';\n this.changeDetectorRef.markForCheck();\n }\n );\n }\n\n public get logo(): string {\n return this.secondaryLogo;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n HostBinding,\n Inject,\n Input\n} from '@angular/core';\n\nimport {AuthRoutingFlowService} from '@dbg-riskit/angular-auth';\nimport {AUTH_PROVIDER} from '@dbg-riskit/angular-common';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {AuthProvider} from '@dbg-riskit/common';\n\nimport {Observable} from 'rxjs';\nimport {first, takeUntil} from 'rxjs/operators';\n\n@Directive({\n selector: 'risk-login-menu-title-horizontal, '\n + 'risk-login-menu-title-vertical',\n host : {\n '[class.risk-login-menu-title]': 'true'\n }\n})\nexport class LoginMenuComponentTitle {\n}\n\n@Directive({\n selector: 'risk-login-menu-before-items-horizontal,'\n + ' risk-login-menu-before-items-vertical,'\n + 'risk-login-menu-after-items-horizontal,'\n + 'risk-login-menu-after-items-vertical'\n})\nexport class LoginMenuItems {\n}\n\n@Component({\n selector : 'risk-login-menu',\n templateUrl : 'login.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'login.menu.component.scss'\n ],\n host : {\n '[class.risk-login-menu]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class LoginMenuComponent extends BaseComponent {\n\n @Input()\n public orientation: 'row' | 'column' = 'row';\n\n @HostBinding('class.risk-login-menu-flex-row')\n public get isRow(): boolean {\n return this.orientation === 'row';\n }\n\n @HostBinding('class.risk-login-menu-flex-column')\n public get isColumn(): boolean {\n return this.orientation === 'column';\n }\n\n public constructor(@Inject(AUTH_PROVIDER) private readonly authProvider: AuthProvider,\n private readonly authRoutingFlowService: AuthRoutingFlowService,\n private readonly changeDetectorRef: ChangeDetectorRef) {\n super();\n\n // Update menu state on login status change\n this.authProvider.loggedInStream.pipe(\n takeUntil(this.destroyed)\n ).subscribe(() => this.changeDetectorRef.markForCheck());\n }\n\n public menuClosed(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n public get authStatus(): Observable<boolean> {\n return this.authProvider.loggedIn;\n }\n\n public logout(): void {\n this.authRoutingFlowService.logout().pipe(\n first()\n ).subscribe();\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {RouterModule} from '@angular/router';\nimport {AuthModule} from '@dbg-riskit/angular-auth';\nimport {CommonViewModule} from '@dbg-riskit/angular-view';\nimport {LoginComponent} from './login.component';\nimport {LoginMenuComponent, LoginMenuComponentTitle, LoginMenuItems} from './login.menu.component';\n\n@NgModule({\n imports : [\n CommonModule,\n FormsModule,\n RouterModule,\n AuthModule,\n CommonViewModule\n ],\n declarations: [\n LoginMenuComponent,\n LoginComponent,\n LoginMenuComponentTitle,\n LoginMenuItems\n ],\n exports : [\n LoginMenuComponent,\n LoginMenuComponentTitle,\n LoginMenuItems\n ]\n})\nexport class LoginModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|