@myrmidon/auth-jwt-admin 0.1.1 → 0.1.2
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/esm2020/lib/auth-jwt-admin.module.mjs +4 -4
- package/esm2020/lib/components/auth-jwt-registration/auth-jwt-registration.component.mjs +3 -3
- package/esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2020/lib/components/password-strength-bar/password-strength-bar.component.mjs +3 -3
- package/esm2020/lib/components/state/users.query.mjs +3 -3
- package/esm2020/lib/components/state/users.service.mjs +3 -3
- package/esm2020/lib/components/state/users.store.mjs +3 -3
- package/esm2020/lib/components/user-editor/user-editor.component.mjs +3 -3
- package/esm2020/lib/components/user-filter/user-filter.component.mjs +3 -3
- package/esm2020/lib/components/user-list/user-list.component.mjs +5 -5
- package/esm2020/lib/services/auth-jwt-account.service.mjs +3 -3
- package/esm2020/lib/services/dialog.service.mjs +3 -3
- package/fesm2015/myrmidon-auth-jwt-admin.mjs +38 -38
- package/fesm2015/myrmidon-auth-jwt-admin.mjs.map +1 -1
- package/fesm2020/myrmidon-auth-jwt-admin.mjs +38 -38
- package/fesm2020/myrmidon-auth-jwt-admin.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myrmidon-auth-jwt-admin.mjs","sources":["../../../../projects/myrmidon/auth-jwt-admin/src/lib/validators/password.validators.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/auth-jwt-account.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.store.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.query.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.paginator.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/dialog.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/auth-jwt-admin.module.ts","../../../../projects/myrmidon/auth-jwt-admin/src/public-api.ts","../../../../projects/myrmidon/auth-jwt-admin/src/myrmidon-auth-jwt-admin.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class PasswordValidators {\r\n /** \"Standard\" password validator for my API services. */\r\n public static standard(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n if (control.value.length < 8) {\r\n return {\r\n passwordTooShort: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noUpperInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n noLowerInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noUpperInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n noSymbolInPassword: true,\r\n };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { retry, catchError } from 'rxjs/operators';\nimport { DataPage, EnvService, ErrorService } from '@myrmidon/ng-tools';\nimport { User } from '@myrmidon/auth-jwt-login';\n\n/**\n * User registration model. You can expand this interface to add more data.\n */\nexport interface RegistrationModel {\n email: string;\n name: string;\n firstName?: string;\n lastName?: string;\n password: string;\n}\n\n/**\n * Result of an existing resource check.\n */\nexport interface ExistResult {\n entry: string;\n isExisting: boolean;\n}\n\n/**\n * Password change data.\n */\nexport interface PasswordChange {\n email: string;\n oldPassword: string;\n newPassword: string;\n confirmPassword: string;\n}\n\n/**\n * User filter parameters.\n */\nexport interface UserFilter {\n pageNumber: number;\n pageSize: number;\n name?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthJwtAccountService {\n constructor(\n private _http: HttpClient,\n private _error: ErrorService,\n private _env: EnvService\n ) {}\n\n /**\n * Checks if the specified email address is registered on the server.\n * @param email email address to test.\n * @returns result.\n */\n public isEmailRegistered(email: string): Observable<ExistResult> {\n return this._http.get<ExistResult>(\n this._env.get('apiUrl') +\n 'accounts/emailexists/' +\n encodeURIComponent(email)\n );\n }\n\n /**\n * Checks if the specified user's given name is registered on the server.\n * This name is a nickname chosen by users during registration, and is the key\n * used for referencing users when talking to the server.\n * @param name name to test.\n * @returns result.\n */\n public isNameRegistered(name: string): Observable<ExistResult> {\n return this._http.get<ExistResult>(\n this._env.get('apiUrl') +\n 'accounts/nameexists/' +\n encodeURIComponent(name)\n );\n }\n\n /**\n * Register the user with the specified registration data.\n * @param registration The registration data.\n */\n public register(registration: RegistrationModel): Observable<any> {\n // const options = {\n // headers: this.createAuthHeaders({\n // 'Content-Type': 'application/json',\n // }),\n // };\n return this._http.post(\n this._env.get('apiUrl') + 'accounts/register',\n registration\n // options\n );\n }\n\n /**\n * Resend the confirmation email to the specified address.\n * @param email address.\n */\n public resendConfirmEmail(email: string): Observable<any> {\n // const options = {\n // headers: this.createAuthHeaders({\n // 'Content-Type': 'application/json',\n // }),\n // };\n return this._http.get(\n this._env.get('apiUrl') +\n 'accounts/resendconfirm/' +\n encodeURIComponent(email)\n // options\n );\n }\n\n /**\n * Request a password reset for the specified email address.\n * @param email Email address.\n */\n public requestPasswordReset(email: string): Observable<any> {\n return this._http.post(\n this._env.get('apiUrl') + 'accounts/resetpassword/request',\n { email }\n );\n }\n\n public getAllUsers(): Observable<DataPage<User>> {\n return this._http\n .get<DataPage<User>>(this._env.get('apiUrl') + 'users', {\n params: new HttpParams().set('pageNumber', '1'),\n })\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n public getUsers(filter: UserFilter): Observable<DataPage<User>> {\n let httpParams = new HttpParams();\n httpParams = httpParams.set('pageNumber', filter.pageNumber.toString());\n httpParams = httpParams.set('pageSize', filter.pageSize.toString());\n if (filter.name) {\n httpParams = httpParams.set('name', filter.name);\n }\n\n return this._http\n .get<DataPage<User>>(this._env.get('apiUrl') + 'users', {\n params: httpParams,\n })\n .pipe(retry(3), catchError(this._error.handleError));\n }\n /**\n * Get the top N users matching the specified name filter.\n * @param nameFilter The user name filter.\n * @param limit The maximum number of users to get.\n */\n public getTopUsers(nameFilter: string, limit = 10): Observable<User[]> {\n let httpParams = new HttpParams();\n httpParams = httpParams.set('pageNumber', '1');\n httpParams = httpParams.set('pageSize', limit.toString());\n if (nameFilter) {\n httpParams = httpParams.set('name', nameFilter);\n }\n const options =\n httpParams.keys().length > 0\n ? {\n params: httpParams,\n }\n : {};\n\n return this._http\n .get<User[]>(this._env.get('apiUrl') + 'users', options)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Get information about all the users listed in the specified names.\n * @param names User(s) names.\n */\n public getUsersFromNames(names: string[]): Observable<User[]> {\n let httpParams = new HttpParams();\n if (names && names.length > 0) {\n httpParams = httpParams.set('names', names.join(','));\n }\n const options =\n httpParams.keys().length > 0\n ? {\n params: httpParams,\n }\n : {};\n\n return this._http\n .get<User[]>(this._env.get('apiUrl') + 'users-from-names', options)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Get data about the specified user.\n * @param name The user name.\n */\n public getUser(name: string): Observable<User> {\n return this._http\n .get<User>(this._env.get('apiUrl') + 'users/' + name)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Update the editable data for the specified user.\n * @param user The user to update.\n */\n public updateUser(user: User): Observable<any> {\n return this._http\n .put(this._env.get('apiUrl') + 'users', user)\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Request a password reset email for the specified email address.\n * @param email The email address to receive the reset message.\n */\n public resetPassword(email: string): Observable<any> {\n return this._http\n .post(this._env.get('apiUrl') + 'accounts/resetpassword/request', {\n email: email,\n })\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Change the password.\n * @param change The password change data.\n */\n public changePassword(change: PasswordChange): Observable<any> {\n return this._http\n .post(this._env.get('apiUrl') + 'accounts/changepassword', change)\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Delete the user with the specified username.\n * @param name The user name.\n */\n public deleteUser(name: string): Observable<any> {\n return this._http\n .delete(this._env.get('apiUrl') + 'accounts/' + name)\n .pipe(catchError(this._error.handleError));\n }\n}\n","import {\n Component,\n OnChanges,\n EventEmitter,\n Input,\n Output,\n SimpleChange,\n} from '@angular/core';\n\n@Component({\n selector: 'auth-jwt-password-strength-bar',\n templateUrl: './password-strength-bar.component.html',\n styleUrls: ['./password-strength-bar.component.css'],\n})\nexport class PasswordStrengthBarComponent implements OnChanges {\n private _colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\n\n @Input() passwordToCheck: string | undefined;\n\n @Output() strengthChange = new EventEmitter<number>();\n\n public bars: string[];\n\n constructor() {\n this.strengthChange = new EventEmitter<number>();\n this.bars = [];\n }\n\n private measureStrength(p: string): number {\n let force = 0;\n const regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\n\n const lowerLetters = /[a-z]+/.test(p);\n const upperLetters = /[A-Z]+/.test(p);\n const numbers = /[0-9]+/.test(p);\n const symbols = regex.test(p);\n\n const flags = [lowerLetters, upperLetters, numbers, symbols];\n\n let passedMatches = 0;\n for (const flag of flags) {\n passedMatches += flag === true ? 1 : 0;\n }\n\n force += 2 * p.length + (p.length >= 10 ? 1 : 0);\n force += passedMatches * 10;\n\n // penalty (short password)\n force = p.length <= 6 ? Math.min(force, 10) : force;\n\n // penalty (poor letiety of characters)\n force = passedMatches === 1 ? Math.min(force, 10) : force;\n force = passedMatches === 2 ? Math.min(force, 20) : force;\n force = passedMatches === 3 ? Math.min(force, 40) : force;\n\n return force;\n }\n\n private getColor(s: number) {\n let idx = 0;\n if (s <= 10) {\n idx = 0;\n } else if (s <= 20) {\n idx = 1;\n } else if (s <= 30) {\n idx = 2;\n } else if (s <= 40) {\n idx = 3;\n } else {\n idx = 4;\n }\n return {\n idx: idx + 1,\n col: this._colors[idx],\n };\n }\n\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\n const password = changes['passwordToCheck'].currentValue;\n this.setBarColors(5, '#DDD');\n if (password) {\n const strength = this.measureStrength(password);\n const c = this.getColor(strength);\n this.setBarColors(c.idx, c.col);\n this.strengthChange.emit(strength);\n }\n }\n\n private setBarColors(count: number, col: string) {\n for (let n = 0; n < count; n++) {\n this.bars[n] = col;\n }\n }\n}\n","<div id=\"strength\">\n <small>strength:</small>\n <ul id=\"strengthBar\">\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\n </ul>\n</div>\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n UntypedFormBuilder,\n Validators,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Observable } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport {\n AuthJwtAccountService,\n ExistResult,\n RegistrationModel,\n} from '../../services/auth-jwt-account.service';\n\nimport { PasswordValidators } from '../../validators/password.validators';\n\n@Component({\n selector: 'auth-jwt-registration',\n templateUrl: './auth-jwt-registration.component.html',\n styleUrls: ['./auth-jwt-registration.component.css'],\n})\nexport class AuthJwtRegistrationComponent implements OnInit {\n public busy: boolean | undefined;\n // form\n public registration: UntypedFormGroup;\n public email: UntypedFormControl;\n public name: UntypedFormControl;\n public firstName: UntypedFormControl;\n public lastName: UntypedFormControl;\n public passwords: UntypedFormGroup;\n public password: UntypedFormControl;\n public confirmPassword: UntypedFormControl;\n\n /**\n * Emitted when a user was successfully registered. Usually\n * you should handle this to move away from the registration\n * page.\n */\n @Output()\n public registered: EventEmitter<any>;\n\n constructor(\n formBuilder: UntypedFormBuilder,\n private _snackbar: MatSnackBar,\n private _accountService: AuthJwtAccountService\n ) {\n this.registered = new EventEmitter<any>();\n // form\n this.email = formBuilder.control(\n '',\n [Validators.required, Validators.email],\n this.getUniqueEmailValidator(this._accountService).bind(this)\n );\n\n this.name = formBuilder.control(\n '',\n Validators.required,\n this.getUniqueNameValidator(this._accountService).bind(this)\n );\n\n this.firstName = formBuilder.control('', [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.lastName = formBuilder.control('', [\n Validators.required,\n Validators.maxLength(50),\n ]);\n\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\n this.password = formBuilder.control(\n '',\n Validators.compose([Validators.required, PasswordValidators.standard])\n );\n this.confirmPassword = formBuilder.control('', Validators.required);\n this.passwords = formBuilder.group(\n {\n password: this.password,\n confirmPassword: this.confirmPassword,\n },\n { validator: this.areEqual.bind(this) }\n );\n\n this.registration = formBuilder.group({\n email: this.email,\n name: this.name,\n firstName: this.firstName,\n lastName: this.lastName,\n passwords: this.passwords,\n });\n }\n\n private areEqual(group: UntypedFormGroup): { [key: string]: boolean } | null {\n if (this.password.value === this.confirmPassword.value) {\n return null;\n }\n return {\n areEqual: true,\n };\n }\n\n /**\n * Creates a unique name validator. There is no dependency injection at this level,\n * but we can use closures. As a matter of fact, we have access to the service instance\n * from the component where we register validators. So we will implement a function\n * that will accept the service as parameter, and create the actual validation function.\n * This function will have access to the service when called during the validation process.\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\n */\n private getUniqueNameValidator(service: AuthJwtAccountService) {\n return (\n control: AbstractControl\n ):\n | Promise<ValidationErrors | null>\n | Observable<ValidationErrors | null> => {\n return new Promise((resolve, reject) => {\n // avoid checking if empty\n if (!control.value) {\n resolve(null);\n } else {\n service.isNameRegistered(control.value).subscribe(\n (data: ExistResult) => {\n if (!data.isExisting) {\n resolve(null);\n } else {\n resolve({ uniqueName: true });\n }\n },\n (err) => {\n resolve({ uniqueName: true });\n }\n );\n }\n });\n };\n }\n\n private getUniqueEmailValidator(service: AuthJwtAccountService) {\n return (\n control: AbstractControl\n ):\n | Promise<ValidationErrors | null>\n | Observable<ValidationErrors | null> => {\n return new Promise((resolve, reject) => {\n // avoid checking if empty\n if (!control.value) {\n resolve(null);\n } else {\n service.isEmailRegistered(control.value).subscribe(\n (data: ExistResult) => {\n if (!data.isExisting) {\n resolve(null);\n } else {\n resolve({ uniqueEmail: true });\n }\n },\n (err) => {\n resolve({ uniqueEmail: true });\n }\n );\n }\n });\n };\n }\n\n ngOnInit(): void {}\n\n public getEmailErrorLabel(): string | null {\n if (!this.email.dirty) {\n return null;\n }\n\n if (this.email.hasError('required')) {\n return 'email address required';\n }\n if (this.email.hasError('email')) {\n return 'invalid email address';\n }\n if (this.email.hasError('uniqueEmail') && !this.email.pending) {\n return 'email address already registered';\n }\n return null;\n }\n\n public getNameErrorLabel(): string | null {\n if (!this.name.dirty) {\n return null;\n }\n\n if (this.name.hasError('required')) {\n return 'username required';\n }\n\n if (this.name.hasError('pattern')) {\n return 'invalid username';\n }\n\n if (this.name.hasError('uniqueName') && !this.name.pending) {\n return 'username already taken';\n }\n\n return null;\n }\n\n public getPasswordErrorLabel(): string | null {\n if (!this.password.dirty) {\n return null;\n }\n\n if (this.password.hasError('required')) {\n return 'password required';\n }\n if (this.password.hasError('passwordTooShort')) {\n let s = 'at least 8 characters';\n if (this.password.value) {\n s += ` (now ${this.password.value.length})`;\n }\n return s;\n }\n if (this.password.hasError('noUpperInPassword')) {\n return 'at least 1 uppercase letter';\n }\n if (this.password.hasError('noLowerInPassword')) {\n return 'at least 1 lowercase letter';\n }\n if (this.password.hasError('noSymbolInPassword')) {\n return 'at least 1 punctuation or symbol';\n }\n\n return null;\n }\n\n public onSubmit(): void {\n if (\n !this.registration.valid ||\n this.busy ||\n this.name.pending ||\n this.email.pending\n ) {\n return;\n }\n\n const model: RegistrationModel = {\n email: this.email.value,\n name: this.name.value,\n firstName: this.firstName.value,\n lastName: this.lastName.value,\n password: this.password.value,\n };\n\n this.busy = true;\n this._accountService\n .register(model)\n .pipe(take(1))\n .subscribe(\n () => {\n this.busy = false;\n this._snackbar.open('Registration succeeded', 'OK');\n // this.registration.reset();\n // this.registration.clearValidators();\n // this.registration.markAsPristine();\n this.registered.emit();\n },\n (error) => {\n this.busy = false;\n console.error(error);\n this._snackbar.open('Registration error', 'OK');\n }\n );\n }\n}\n","<div>\n <div>\n <p>\n To register a new user, you must provide his email address, choose a\n password, and choose a username, which must be unique (you will be\n notified if another user has already taken that name). The username must\n include only letters/digits, start with a letter, and be no shorter than 3\n characters, nor longer than 50.\n </p>\n <p>\n To promote a decent security level, the password must include at least 8\n characters, uppercase and lowercase letters, digits, and punctuation (like\n dashes, stops, parentheses, etc.).\n </p>\n <p>\n Once registered, the user will receive an email message to the email\n address you specified; he will have to click on the provided link to\n complete the registration process.\n </p>\n </div>\n\n <form role=\"form\" [formGroup]=\"registration\" (submit)=\"onSubmit()\">\n <fieldset>\n <label>register user</label>\n <!-- email -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n placeholder=\"email\"\n formControlName=\"email\"\n />\n <mat-error>{{ getEmailErrorLabel() }}</mat-error>\n <mat-icon *ngIf=\"email.pending\">hourglass</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n placeholder=\"username\"\n formControlName=\"name\"\n />\n <mat-error>{{ getNameErrorLabel() }}</mat-error>\n <mat-icon *ngIf=\"name.pending\">hourglass</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"first name\"\n formControlName=\"firstName\"\n />\n <mat-error\n *ngIf=\"\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n \"\n class=\"text-danger small\"\n >\n first name required\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"last name\"\n formControlName=\"lastName\"\n />\n <mat-error\n *ngIf=\"\n lastName.hasError('required') &&\n (lastName.dirty || lastName.touched)\n \"\n class=\"text-danger small\"\n >\n last name required\n </mat-error>\n </mat-form-field>\n </div>\n\n <div [formGroup]=\"passwords\">\n <!-- password -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"password\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"password\"\n formControlName=\"password\"\n />\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n <mat-error>{{ getPasswordErrorLabel() }}</mat-error>\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"password\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"confirm password\"\n formControlName=\"confirmPassword\"\n />\n <mat-error\n *ngIf=\"\n passwords.hasError('areEqual') &&\n (confirmPassword.dirty || confirmPassword.touched)\n \"\n >\n password differs from confirmation password\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"\n !registration.valid || busy || name.pending || email.pending\n \"\n >\n register\n </button>\n <mat-progress-spinner\n diameter=\"20\"\n *ngIf=\"busy\"\n aria-label=\"Busy\"\n ></mat-progress-spinner>\n </fieldset>\n </form>\n</div>\n","import { StoreConfig, EntityStore, EntityState, ActiveState } from '@datorama/akita';\r\nimport { Injectable } from '@angular/core';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n// https://netbasal.gitbook.io/akita/entity-store/entity-store/active-state\r\nexport interface UsersState\r\n extends EntityState<User, string>,\r\n ActiveState<string> {\r\n filter: UserFilter;\r\n active: string | null;\r\n}\r\n\r\nconst initialState: UsersState = {\r\n filter: {\r\n pageNumber: 1,\r\n pageSize: 20,\r\n },\r\n active: null\r\n};\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'Users', idKey: 'userName', resettable: true })\r\nexport class UsersStore extends EntityStore<UsersState> {\r\n constructor() {\r\n super(initialState);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { Observable } from 'rxjs';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\nimport { UsersState, UsersStore } from './users.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersQuery extends QueryEntity<UsersState> {\r\n constructor(protected _store: UsersStore) {\r\n super(_store);\r\n }\r\n\r\n public selectFilter(): Observable<UserFilter> {\r\n return this.select((state: UsersState) => state.filter);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AuthJwtAccountService,\r\n UserFilter,\r\n} from '../../services/auth-jwt-account.service';\r\nimport { UsersStore } from './users.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersService {\r\n constructor(\r\n private _store: UsersStore,\r\n private _accountService: AuthJwtAccountService\r\n ) {}\r\n\r\n /**\r\n * Update the filter in the store.\r\n * @param filter The filter.\r\n */\r\n public updateFilter(filter: UserFilter): void {\r\n this._store.update({\r\n filter: filter,\r\n });\r\n }\r\n\r\n public setActive(name: string | null): void {\r\n this._store.setActive(name);\r\n }\r\n\r\n public updateActive(user: User): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._store.setLoading(true);\r\n\r\n this._accountService.updateUser(user).subscribe(\r\n (_) => {\r\n this._store.setLoading(false);\r\n this._store.setError(null);\r\n this._store.updateActive((u) => {\r\n return { ...user };\r\n });\r\n resolve(true);\r\n },\r\n (error) => {\r\n console.error(error);\r\n this._store.setLoading(false);\r\n this._store.setError('Error updating user');\r\n resolve(false);\r\n }\r\n );\r\n });\r\n return promise;\r\n }\r\n\r\n public deleteUser(name: string): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._store.setLoading(true);\r\n\r\n this._accountService.deleteUser(name).subscribe(\r\n (_) => {\r\n this._store.setLoading(false);\r\n this._store.setError(null);\r\n this._store.remove(name);\r\n resolve(true);\r\n },\r\n (error) => {\r\n console.error(error);\r\n this._store.setLoading(false);\r\n this._store.setError('Error deleting user');\r\n reject(error);\r\n }\r\n );\r\n });\r\n return promise;\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { UserFilter } from '../../services/auth-jwt-account.service';\nimport { UsersQuery } from '../state/users.query';\nimport { UsersService } from '../state/users.service';\n\n@Component({\n selector: 'auth-jwt-user-filter',\n templateUrl: './user-filter.component.html',\n styleUrls: ['./user-filter.component.css'],\n})\nexport class UserFilterComponent implements OnInit {\n @Input()\n public disabled: boolean | undefined;\n\n public filter$: Observable<UserFilter>;\n\n public name: UntypedFormControl;\n public form: UntypedFormGroup;\n\n constructor(\n formBuilder: UntypedFormBuilder,\n query: UsersQuery,\n private _corporaService: UsersService\n ) {\n this.filter$ = query.selectFilter();\n\n // form\n this.name = formBuilder.control(null);\n this.form = formBuilder.group({\n name: this.name,\n });\n }\n\n ngOnInit(): void {\n this.filter$.subscribe((f) => {\n this.updateForm(f);\n });\n }\n\n private updateForm(filter: UserFilter): void {\n this.name.setValue(filter.name);\n this.form.markAsPristine();\n }\n\n public reset(): void {\n this.form.reset();\n this.apply();\n }\n\n private getFilter(): UserFilter {\n return {\n pageNumber: 1, // not used\n pageSize: 20, // not used\n name: this.name.value?.trim(),\n };\n }\n\n public apply(): void {\n if (this.form.invalid) {\n return;\n }\n const filter = this.getFilter();\n\n // update filter in state\n this._corporaService.updateFilter(filter);\n }\n}\n","<form [formGroup]=\"form\" (submit)=\"apply()\" ng-disabled=\"disabled\">\n <mat-form-field>\n <input matInput [formControl]=\"name\" placeholder=\"name or ID\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"reset()\"\n color=\"warn\"\n matTooltip=\"Reset filters\"\n [disabled]=\"disabled\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </mat-form-field>\n\n <button\n type=\"submit\"\n mat-icon-button\n color=\"primary\"\n [disabled]=\"disabled\"\n matTooltip=\"Apply filters\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n</form>\n","import { inject, InjectionToken } from '@angular/core';\r\nimport { PaginatorPlugin } from '@datorama/akita';\r\nimport { UsersQuery } from './users.query';\r\n\r\n// create a factory provider for the paginator\r\nexport const USERS_PAGINATOR = new InjectionToken('USERS_PAGINATOR', {\r\n providedIn: 'root',\r\n factory: () => {\r\n const query = inject(UsersQuery);\r\n return new PaginatorPlugin(query).withControls().withRange();\r\n },\r\n});\r\n","import { Component, OnInit, Inject, Optional } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n@Component({\r\n // https://github.com/angular/components/issues/7718\r\n // selector: 'cadmus-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.css'],\r\n})\r\nexport class ConfirmDialogComponent implements OnInit {\r\n public title: string;\r\n public prompt: string;\r\n public ok: string;\r\n public cancel: string;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n this.title = 'Confirm';\r\n this.prompt = 'Confirm operation?';\r\n this.ok = 'yes';\r\n this.cancel = 'no';\r\n }\r\n\r\n ngOnInit() {}\r\n}\r\n","<h1 mat-dialog-title>{{ title }}</h1>\r\n<mat-dialog-content>\r\n {{ prompt }}\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n color=\"warn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >\r\n {{ ok }}\r\n </button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">\r\n {{ cancel }}\r\n </button>\r\n</mat-dialog-actions>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';\r\nimport { Observable } from 'rxjs';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n/**\r\n * This service acts as a wrapper for MatDialog to simplify the process of calling\r\n * the dialog and subscribing to it. What it will do is create an Instance of\r\n * MatDialog with our custom component (ConfirmDialogComponent). Then it will set\r\n * any public properties it needs to by setting the properties on the\r\n * componentInstance object. It will return the observable afterClosed()\r\n * to the caller so they can subscribe to it. This will emit an event whenever\r\n * the dialog is closed.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n public confirm(title: string, prompt: string, ok = 'yes', cancel = 'no'):\r\n Observable<boolean> {\r\n\r\n let dialogRef: MatDialogRef<ConfirmDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(ConfirmDialogComponent);\r\n dialogRef.componentInstance.title = title;\r\n dialogRef.componentInstance.prompt = prompt;\r\n dialogRef.componentInstance.ok = ok;\r\n dialogRef.componentInstance.cancel = cancel;\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n UntypedFormBuilder,\n Validators,\n} from '@angular/forms';\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\n\n@Component({\n selector: 'auth-jwt-user-editor',\n templateUrl: './user-editor.component.html',\n styleUrls: ['./user-editor.component.css'],\n})\nexport class UserEditorComponent implements OnInit {\n private _user: User | undefined;\n\n public email: UntypedFormControl;\n public emailConfirmed: UntypedFormControl;\n public lockoutEnabled: UntypedFormControl;\n public firstName: UntypedFormControl;\n public lastName: UntypedFormControl;\n public roles: UntypedFormControl;\n public form: UntypedFormGroup;\n\n public unlocked: boolean | undefined;\n\n @Input() public set user(value: User | undefined) {\n this._user = value;\n this.updateForm(value);\n }\n public get user(): User | undefined {\n return this._user;\n }\n\n @Output() userChange: EventEmitter<User>;\n @Output() editorClose: EventEmitter<any>;\n\n constructor(formBuilder: UntypedFormBuilder, private _authService: AuthJwtService) {\n // events\n this.userChange = new EventEmitter<User>();\n this.editorClose = new EventEmitter<any>();\n // form\n this.email = formBuilder.control(null, [\n Validators.required,\n Validators.email,\n ]);\n this.emailConfirmed = formBuilder.control(false);\n this.lockoutEnabled = formBuilder.control(false);\n this.firstName = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.lastName = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.roles = formBuilder.control(null, Validators.maxLength(200));\n\n this.form = formBuilder.group({\n email: this.email,\n emailConfirmed: this.emailConfirmed,\n lockoutEnabled: this.lockoutEnabled,\n firstName: this.firstName,\n lastName: this.lastName,\n roles: this.roles,\n });\n }\n\n ngOnInit(): void {}\n\n private updateForm(user: User | undefined): void {\n if (!user) {\n this.form.reset();\n } else {\n this.email.setValue(user.email);\n this.emailConfirmed.setValue(user.emailConfirmed);\n this.lockoutEnabled.setValue(user.lockoutEnabled);\n this.firstName.setValue(user.firstName);\n this.lastName.setValue(user.lastName);\n if (user.roles?.length > 0) {\n this.roles.setValue(user.roles.join(' '));\n } else {\n this.roles.setValue(null);\n }\n }\n }\n\n private getUserFromForm(): User {\n return {\n userName: this._user?.userName || '',\n email: this.email.value,\n emailConfirmed: this.emailConfirmed.value,\n lockoutEnabled: this.lockoutEnabled.value,\n firstName: this.firstName.value,\n lastName: this.lastName.value,\n roles: this.roles.value\n ? this.roles.value.split(' ').filter((s: string) => s)\n : [],\n };\n }\n\n public endLockout(): void {\n if (this.unlocked) {\n return;\n }\n this._user!.lockoutEnd = this._authService.getUTCDate();\n this.unlocked = true;\n }\n\n public close(): void {\n this.editorClose.emit();\n }\n\n public save(): void {\n if (this.form.invalid) {\n return;\n }\n this.userChange.emit(this.getUserFromForm());\n }\n}\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <!-- email -->\n <div>\n <mat-form-field>\n <input type=\"text\" matInput [formControl]=\"email\" placeholder=\"email\" />\n <mat-error\n *ngIf=\"email.hasError('required') && (email.dirty || email.touched)\"\n >\n email address required\n </mat-error>\n <mat-error\n *ngIf=\"email.hasError('pattern') && (email.dirty || email.touched)\"\n >\n invalid email address\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- emailConfirmed -->\n <div>\n <mat-checkbox [formControl]=\"emailConfirmed\"\n >email address confirmed</mat-checkbox\n >\n </div>\n\n <!-- lockoutEnabled -->\n <div>\n <mat-checkbox [formControl]=\"lockoutEnabled\"\n >lockout enabled</mat-checkbox\n >\n \n <button\n mat-stroked-button\n (click)=\"endLockout()\"\n [disabled]=\"unlocked\"\n matTooltip=\"Unlock this user if locked\"\n >\n unlock\n </button>\n </div>\n\n <!-- firstName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"firstName\"\n placeholder=\"first name\"\n />\n <mat-error\n *ngIf=\"\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name required\n </mat-error>\n <mat-error\n *ngIf=\"\n firstName.hasError('maxlength') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- lastName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"lastName\"\n placeholder=\"last name\"\n />\n <mat-error\n *ngIf=\"\n lastName.hasError('required') && (lastName.dirty || lastName.touched)\n \"\n >\n last name required\n </mat-error>\n <mat-error\n *ngIf=\"\n lastName.hasError('maxlength') && (lastName.dirty || lastName.touched)\n \"\n >\n last name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- roles -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"roles\"\n placeholder=\"roles (separated by space)\"\n />\n <mat-error\n *ngIf=\"roles.hasError('maxlength') && (roles.dirty || roles.touched)\"\n >\n too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <br />\n <div>\n <button mat-icon-button color=\"warn\" matTooltip=\"Close\" (click)=\"close()\">\n <mat-icon>cancel</mat-icon>\n </button>\n \n <button\n type=\"submit\"\n mat-button\n color=\"primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save user data\"\n >\n <mat-icon>check_circle</mat-icon> save\n </button>\n </div>\n</form>\n","import { Component, Inject, OnDestroy } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl } from '@angular/forms';\nimport { PageEvent } from '@angular/material/paginator';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { map, startWith, switchMap, take, tap } from 'rxjs/operators';\nimport { PaginationResponse, PaginatorPlugin } from '@datorama/akita';\n\nimport { GravatarService, User } from '@myrmidon/auth-jwt-login';\nimport { DataPage } from '@myrmidon/ng-tools';\n\nimport {\n AuthJwtAccountService,\n UserFilter,\n} from '../../services/auth-jwt-account.service';\nimport { USERS_PAGINATOR } from '../state/users.paginator';\nimport { UsersState } from '../state/users.store';\nimport { UsersQuery } from '../state/users.query';\nimport { DialogService } from '../../services/dialog.service';\nimport { UsersService } from '../state/users.service';\n\n@Component({\n selector: 'auth-jwt-user-list',\n templateUrl: './user-list.component.html',\n styleUrls: ['./user-list.component.css'],\n})\nexport class UserListComponent implements OnDestroy {\n private _refresh$: BehaviorSubject<number>;\n private _filter$: Observable<UserFilter>;\n\n public pagination$: Observable<PaginationResponse<User>>;\n public pageSize: UntypedFormControl;\n public active$: Observable<User | undefined>;\n\n constructor(\n @Inject(USERS_PAGINATOR)\n public paginator: PaginatorPlugin<UsersState>,\n userQuery: UsersQuery,\n private _accountService: AuthJwtAccountService,\n private _usersService: UsersService,\n private _dialogService: DialogService,\n private _gravatarService: GravatarService,\n formBuilder: UntypedFormBuilder\n ) {\n this.pageSize = formBuilder.control(20);\n this._refresh$ = new BehaviorSubject(0);\n this._filter$ = userQuery.selectFilter();\n // https://netbasal.com/manage-your-entities-with-akita-like-a-boss-768732f8d4d1\n this.active$ = userQuery.selectActive<User>();\n\n this.pagination$ = combineLatest([\n this.paginator.pageChanges,\n this.pageSize.valueChanges.pipe(\n // we are required to emit at least the initial value\n // as combineLatest emits only if ALL observables have emitted\n startWith(20),\n // clear the cache when page size changes\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n this._filter$.pipe(\n // clear the cache when filters changed\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n this._refresh$.pipe(\n // clear the cache when forcing refresh\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n ]).pipe(\n // for each emitted value, combine into a filter and use it\n // to request the page from server\n switchMap(([pageNumber, pageSize, filter, refresh]) => {\n // const filter = { ...this._docsQuery.getValue().filter };\n const f = { ...filter };\n f.pageNumber = pageNumber;\n f.pageSize = pageSize;\n const request = this.getRequest(f);\n // update saved filters\n this.paginator.metadata.set('filter', f);\n return this.paginator.getPage(request);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.paginator.destroy();\n }\n\n private getRequest(\n filter: UserFilter\n ): () => Observable<PaginationResponse<User>> {\n return () =>\n this._accountService.getUsers(filter).pipe(\n // adapt server results to the paginator plugin\n map((p: DataPage<User>) => {\n return {\n currentPage: p.pageNumber,\n perPage: p.pageSize,\n lastPage: p.pageCount,\n data: p.items,\n total: p.total,\n };\n })\n );\n }\n\n public pageChange(event: PageEvent): void {\n // https://material.angular.io/components/paginator/api\n this.paginator.setPage(event.pageIndex + 1);\n if (event.pageSize !== this.pageSize.value) {\n this.pageSize.setValue(event.pageSize);\n }\n }\n\n public refresh(): void {\n this.paginator.clearCache();\n this._refresh$.next(this._refresh$.value + 1);\n }\n\n public deleteUser(user: User): void {\n this._dialogService\n .confirm('Confirm', `Delete User ${user.userName}?`)\n .pipe(take(1))\n .subscribe((yes) => {\n if (!yes) {\n return;\n }\n this._usersService.deleteUser(user.userName).finally(() => {\n this.refresh();\n });\n });\n }\n\n public setActiveUser(user: User | null): void {\n this._usersService.setActive(user?.userName || null);\n }\n\n public resetActiveUser(): void {\n this._usersService.setActive(null);\n }\n\n public saveActiveUser(user: User): void {\n this._usersService.updateActive(user).finally(() => {\n this.refresh();\n });\n }\n\n public onUserEditorClose(): void {\n this.setActiveUser(null);\n }\n\n public getGravatarUrl(email: string, size = 80): string | null {\n return this._gravatarService.buildGravatarUrl(email, size);\n }\n}\n","<div\n gdAreas=\"filters | progress | list | pager | editor\"\n gdRows=\"80px 64px 2fr 40px 1fr\"\n gdColumns=\"1fr\"\n gdGap=\"8px\"\n>\n <div>\n <!-- filters -->\n <div gdArea=\"filters\">\n <auth-jwt-user-filter></auth-jwt-user-filter>\n </div>\n\n <!-- progress -->\n <div *ngIf=\"paginator.isLoading$ | async\" gdArea=\"progress\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- list -->\n <div gdArea=\"list\" *ngIf=\"pagination$ | async as pagination\">\n <table>\n <thead>\n <td></td>\n <td></td>\n <td></td>\n <th>name</th>\n <th>first</th>\n <th>last</th>\n <th>email</th>\n <th>roles</th>\n <th>lock end</th>\n </thead>\n <tbody>\n <tr *ngFor=\"let user of pagination.data\">\n <td class=\"command\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Edit {{ user.userName }}\"\n color=\"primary\"\n (click)=\"setActiveUser(user)\"\n >\n <mat-icon>mode_edit</mat-icon>\n </button>\n </td>\n <td class=\"command\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Delete {{ user.userName }}\"\n color=\"warn\"\n (click)=\"deleteUser(user)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>\n <img\n [src]=\"getGravatarUrl(user.email, 32)\"\n [alt]=\"user.userName\"\n />\n </td>\n <td>{{ user.userName }}</td>\n <td>{{ user.firstName }}</td>\n <td>{{ user.lastName }}</td>\n <td>\n <a [href]=\"'mailto:' + user.email\">{{ user.email }}</a>\n </td>\n <td>{{ user.roles.join(\" \") }}</td>\n <td>{{ user.lockoutEnd }}</td>\n </tr>\n </tbody>\n </table>\n <!-- pagination -->\n <mat-paginator\n gdArea=\"pager\"\n gdAlignColumns=\"center\"\n gdAlignRows=\"start\"\n [length]=\"pagination.total\"\n [pageSize]=\"pageSize.value\"\n [pageSizeOptions]=\"[20, 50, 75, 100]\"\n [pageIndex]=\"pagination.currentPage - 1\"\n [showFirstLastButtons]=\"true\"\n (page)=\"pageChange($event)\"\n ></mat-paginator>\n </div>\n </div>\n\n <!-- editor -->\n <div gdArea=\"editor\" *ngIf=\"active$ | async as active\">\n <fieldset>\n <legend>{{ active.userName }}</legend>\n <auth-jwt-user-editor\n [user]=\"active\"\n (userChange)=\"saveActiveUser($event)\"\n (editorClose)=\"resetActiveUser()\"\n ></auth-jwt-user-editor>\n </fieldset>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { RouterModule } from '@angular/router';\nimport { AuthJwtLoginModule } from '@myrmidon/auth-jwt-login';\nimport { NgToolsModule } from '@myrmidon/ng-tools';\n\nimport { AuthJwtRegistrationComponent } from './components/auth-jwt-registration/auth-jwt-registration.component';\nimport { PasswordStrengthBarComponent } from './components/password-strength-bar/password-strength-bar.component';\nimport { UserFilterComponent } from './components/user-filter/user-filter.component';\nimport { UserListComponent } from './components/user-list/user-list.component';\nimport { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dialog.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { UserEditorComponent } from './components/user-editor/user-editor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatPaginatorModule } from '@angular/material/paginator';\n\n@NgModule({\n declarations: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent,\n ConfirmDialogComponent,\n UserEditorComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n RouterModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDialogModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatTooltipModule,\n AuthJwtLoginModule,\n NgToolsModule\n ],\n exports: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent\n ],\n})\nexport class AuthJwtAdminModule {}\n","/*\n * Public API Surface of auth-jwt-admin\n */\n\nexport * from './lib/components/auth-jwt-registration/auth-jwt-registration.component';\nexport * from './lib/components/password-strength-bar/password-strength-bar.component';\nexport * from './lib/components/user-filter/user-filter.component';\nexport * from './lib/components/user-list/user-list.component';\nexport * from './lib/services/auth-jwt-account.service';\nexport * from './lib/validators/password.validators';\nexport * from './lib/auth-jwt-admin.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.AuthJwtAccountService","i4","i5","i7","i10.PasswordStrengthBarComponent","i1.UsersStore","i2.AuthJwtAccountService","i2.UsersQuery","i3.UsersService","i6","i8","i3","i9","i1.UsersQuery","i4.DialogService","i12","i13.UserFilterComponent","i14.UserEditorComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"myrmidon-auth-jwt-admin.mjs","sources":["../../../../projects/myrmidon/auth-jwt-admin/src/lib/validators/password.validators.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/auth-jwt-account.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.store.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.query.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/users.paginator.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/dialog.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/auth-jwt-admin.module.ts","../../../../projects/myrmidon/auth-jwt-admin/src/public-api.ts","../../../../projects/myrmidon/auth-jwt-admin/src/myrmidon-auth-jwt-admin.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class PasswordValidators {\r\n /** \"Standard\" password validator for my API services. */\r\n public static standard(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n if (control.value.length < 8) {\r\n return {\r\n passwordTooShort: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noUpperInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n noLowerInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noUpperInPassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n noSymbolInPassword: true,\r\n };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { retry, catchError } from 'rxjs/operators';\nimport { DataPage, EnvService, ErrorService } from '@myrmidon/ng-tools';\nimport { User } from '@myrmidon/auth-jwt-login';\n\n/**\n * User registration model. You can expand this interface to add more data.\n */\nexport interface RegistrationModel {\n email: string;\n name: string;\n firstName?: string;\n lastName?: string;\n password: string;\n}\n\n/**\n * Result of an existing resource check.\n */\nexport interface ExistResult {\n entry: string;\n isExisting: boolean;\n}\n\n/**\n * Password change data.\n */\nexport interface PasswordChange {\n email: string;\n oldPassword: string;\n newPassword: string;\n confirmPassword: string;\n}\n\n/**\n * User filter parameters.\n */\nexport interface UserFilter {\n pageNumber: number;\n pageSize: number;\n name?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthJwtAccountService {\n constructor(\n private _http: HttpClient,\n private _error: ErrorService,\n private _env: EnvService\n ) {}\n\n /**\n * Checks if the specified email address is registered on the server.\n * @param email email address to test.\n * @returns result.\n */\n public isEmailRegistered(email: string): Observable<ExistResult> {\n return this._http.get<ExistResult>(\n this._env.get('apiUrl') +\n 'accounts/emailexists/' +\n encodeURIComponent(email)\n );\n }\n\n /**\n * Checks if the specified user's given name is registered on the server.\n * This name is a nickname chosen by users during registration, and is the key\n * used for referencing users when talking to the server.\n * @param name name to test.\n * @returns result.\n */\n public isNameRegistered(name: string): Observable<ExistResult> {\n return this._http.get<ExistResult>(\n this._env.get('apiUrl') +\n 'accounts/nameexists/' +\n encodeURIComponent(name)\n );\n }\n\n /**\n * Register the user with the specified registration data.\n * @param registration The registration data.\n */\n public register(registration: RegistrationModel): Observable<any> {\n // const options = {\n // headers: this.createAuthHeaders({\n // 'Content-Type': 'application/json',\n // }),\n // };\n return this._http.post(\n this._env.get('apiUrl') + 'accounts/register',\n registration\n // options\n );\n }\n\n /**\n * Resend the confirmation email to the specified address.\n * @param email address.\n */\n public resendConfirmEmail(email: string): Observable<any> {\n // const options = {\n // headers: this.createAuthHeaders({\n // 'Content-Type': 'application/json',\n // }),\n // };\n return this._http.get(\n this._env.get('apiUrl') +\n 'accounts/resendconfirm/' +\n encodeURIComponent(email)\n // options\n );\n }\n\n /**\n * Request a password reset for the specified email address.\n * @param email Email address.\n */\n public requestPasswordReset(email: string): Observable<any> {\n return this._http.post(\n this._env.get('apiUrl') + 'accounts/resetpassword/request',\n { email }\n );\n }\n\n public getAllUsers(): Observable<DataPage<User>> {\n return this._http\n .get<DataPage<User>>(this._env.get('apiUrl') + 'users', {\n params: new HttpParams().set('pageNumber', '1'),\n })\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n public getUsers(filter: UserFilter): Observable<DataPage<User>> {\n let httpParams = new HttpParams();\n httpParams = httpParams.set('pageNumber', filter.pageNumber.toString());\n httpParams = httpParams.set('pageSize', filter.pageSize.toString());\n if (filter.name) {\n httpParams = httpParams.set('name', filter.name);\n }\n\n return this._http\n .get<DataPage<User>>(this._env.get('apiUrl') + 'users', {\n params: httpParams,\n })\n .pipe(retry(3), catchError(this._error.handleError));\n }\n /**\n * Get the top N users matching the specified name filter.\n * @param nameFilter The user name filter.\n * @param limit The maximum number of users to get.\n */\n public getTopUsers(nameFilter: string, limit = 10): Observable<User[]> {\n let httpParams = new HttpParams();\n httpParams = httpParams.set('pageNumber', '1');\n httpParams = httpParams.set('pageSize', limit.toString());\n if (nameFilter) {\n httpParams = httpParams.set('name', nameFilter);\n }\n const options =\n httpParams.keys().length > 0\n ? {\n params: httpParams,\n }\n : {};\n\n return this._http\n .get<User[]>(this._env.get('apiUrl') + 'users', options)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Get information about all the users listed in the specified names.\n * @param names User(s) names.\n */\n public getUsersFromNames(names: string[]): Observable<User[]> {\n let httpParams = new HttpParams();\n if (names && names.length > 0) {\n httpParams = httpParams.set('names', names.join(','));\n }\n const options =\n httpParams.keys().length > 0\n ? {\n params: httpParams,\n }\n : {};\n\n return this._http\n .get<User[]>(this._env.get('apiUrl') + 'users-from-names', options)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Get data about the specified user.\n * @param name The user name.\n */\n public getUser(name: string): Observable<User> {\n return this._http\n .get<User>(this._env.get('apiUrl') + 'users/' + name)\n .pipe(retry(3), catchError(this._error.handleError));\n }\n\n /**\n * Update the editable data for the specified user.\n * @param user The user to update.\n */\n public updateUser(user: User): Observable<any> {\n return this._http\n .put(this._env.get('apiUrl') + 'users', user)\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Request a password reset email for the specified email address.\n * @param email The email address to receive the reset message.\n */\n public resetPassword(email: string): Observable<any> {\n return this._http\n .post(this._env.get('apiUrl') + 'accounts/resetpassword/request', {\n email: email,\n })\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Change the password.\n * @param change The password change data.\n */\n public changePassword(change: PasswordChange): Observable<any> {\n return this._http\n .post(this._env.get('apiUrl') + 'accounts/changepassword', change)\n .pipe(catchError(this._error.handleError));\n }\n\n /**\n * Delete the user with the specified username.\n * @param name The user name.\n */\n public deleteUser(name: string): Observable<any> {\n return this._http\n .delete(this._env.get('apiUrl') + 'accounts/' + name)\n .pipe(catchError(this._error.handleError));\n }\n}\n","import {\n Component,\n OnChanges,\n EventEmitter,\n Input,\n Output,\n SimpleChange,\n} from '@angular/core';\n\n@Component({\n selector: 'auth-jwt-password-strength-bar',\n templateUrl: './password-strength-bar.component.html',\n styleUrls: ['./password-strength-bar.component.css'],\n})\nexport class PasswordStrengthBarComponent implements OnChanges {\n private _colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\n\n @Input() passwordToCheck: string | undefined;\n\n @Output() strengthChange = new EventEmitter<number>();\n\n public bars: string[];\n\n constructor() {\n this.strengthChange = new EventEmitter<number>();\n this.bars = [];\n }\n\n private measureStrength(p: string): number {\n let force = 0;\n const regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\n\n const lowerLetters = /[a-z]+/.test(p);\n const upperLetters = /[A-Z]+/.test(p);\n const numbers = /[0-9]+/.test(p);\n const symbols = regex.test(p);\n\n const flags = [lowerLetters, upperLetters, numbers, symbols];\n\n let passedMatches = 0;\n for (const flag of flags) {\n passedMatches += flag === true ? 1 : 0;\n }\n\n force += 2 * p.length + (p.length >= 10 ? 1 : 0);\n force += passedMatches * 10;\n\n // penalty (short password)\n force = p.length <= 6 ? Math.min(force, 10) : force;\n\n // penalty (poor letiety of characters)\n force = passedMatches === 1 ? Math.min(force, 10) : force;\n force = passedMatches === 2 ? Math.min(force, 20) : force;\n force = passedMatches === 3 ? Math.min(force, 40) : force;\n\n return force;\n }\n\n private getColor(s: number) {\n let idx = 0;\n if (s <= 10) {\n idx = 0;\n } else if (s <= 20) {\n idx = 1;\n } else if (s <= 30) {\n idx = 2;\n } else if (s <= 40) {\n idx = 3;\n } else {\n idx = 4;\n }\n return {\n idx: idx + 1,\n col: this._colors[idx],\n };\n }\n\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\n const password = changes['passwordToCheck'].currentValue;\n this.setBarColors(5, '#DDD');\n if (password) {\n const strength = this.measureStrength(password);\n const c = this.getColor(strength);\n this.setBarColors(c.idx, c.col);\n this.strengthChange.emit(strength);\n }\n }\n\n private setBarColors(count: number, col: string) {\n for (let n = 0; n < count; n++) {\n this.bars[n] = col;\n }\n }\n}\n","<div id=\"strength\">\n <small>strength:</small>\n <ul id=\"strengthBar\">\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\n </ul>\n</div>\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n UntypedFormBuilder,\n Validators,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Observable } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport {\n AuthJwtAccountService,\n ExistResult,\n RegistrationModel,\n} from '../../services/auth-jwt-account.service';\n\nimport { PasswordValidators } from '../../validators/password.validators';\n\n@Component({\n selector: 'auth-jwt-registration',\n templateUrl: './auth-jwt-registration.component.html',\n styleUrls: ['./auth-jwt-registration.component.css'],\n})\nexport class AuthJwtRegistrationComponent implements OnInit {\n public busy: boolean | undefined;\n // form\n public registration: UntypedFormGroup;\n public email: UntypedFormControl;\n public name: UntypedFormControl;\n public firstName: UntypedFormControl;\n public lastName: UntypedFormControl;\n public passwords: UntypedFormGroup;\n public password: UntypedFormControl;\n public confirmPassword: UntypedFormControl;\n\n /**\n * Emitted when a user was successfully registered. Usually\n * you should handle this to move away from the registration\n * page.\n */\n @Output()\n public registered: EventEmitter<any>;\n\n constructor(\n formBuilder: UntypedFormBuilder,\n private _snackbar: MatSnackBar,\n private _accountService: AuthJwtAccountService\n ) {\n this.registered = new EventEmitter<any>();\n // form\n this.email = formBuilder.control(\n '',\n [Validators.required, Validators.email],\n this.getUniqueEmailValidator(this._accountService).bind(this)\n );\n\n this.name = formBuilder.control(\n '',\n Validators.required,\n this.getUniqueNameValidator(this._accountService).bind(this)\n );\n\n this.firstName = formBuilder.control('', [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.lastName = formBuilder.control('', [\n Validators.required,\n Validators.maxLength(50),\n ]);\n\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\n this.password = formBuilder.control(\n '',\n Validators.compose([Validators.required, PasswordValidators.standard])\n );\n this.confirmPassword = formBuilder.control('', Validators.required);\n this.passwords = formBuilder.group(\n {\n password: this.password,\n confirmPassword: this.confirmPassword,\n },\n { validator: this.areEqual.bind(this) }\n );\n\n this.registration = formBuilder.group({\n email: this.email,\n name: this.name,\n firstName: this.firstName,\n lastName: this.lastName,\n passwords: this.passwords,\n });\n }\n\n private areEqual(group: UntypedFormGroup): { [key: string]: boolean } | null {\n if (this.password.value === this.confirmPassword.value) {\n return null;\n }\n return {\n areEqual: true,\n };\n }\n\n /**\n * Creates a unique name validator. There is no dependency injection at this level,\n * but we can use closures. As a matter of fact, we have access to the service instance\n * from the component where we register validators. So we will implement a function\n * that will accept the service as parameter, and create the actual validation function.\n * This function will have access to the service when called during the validation process.\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\n */\n private getUniqueNameValidator(service: AuthJwtAccountService) {\n return (\n control: AbstractControl\n ):\n | Promise<ValidationErrors | null>\n | Observable<ValidationErrors | null> => {\n return new Promise((resolve, reject) => {\n // avoid checking if empty\n if (!control.value) {\n resolve(null);\n } else {\n service.isNameRegistered(control.value).subscribe(\n (data: ExistResult) => {\n if (!data.isExisting) {\n resolve(null);\n } else {\n resolve({ uniqueName: true });\n }\n },\n (err) => {\n resolve({ uniqueName: true });\n }\n );\n }\n });\n };\n }\n\n private getUniqueEmailValidator(service: AuthJwtAccountService) {\n return (\n control: AbstractControl\n ):\n | Promise<ValidationErrors | null>\n | Observable<ValidationErrors | null> => {\n return new Promise((resolve, reject) => {\n // avoid checking if empty\n if (!control.value) {\n resolve(null);\n } else {\n service.isEmailRegistered(control.value).subscribe(\n (data: ExistResult) => {\n if (!data.isExisting) {\n resolve(null);\n } else {\n resolve({ uniqueEmail: true });\n }\n },\n (err) => {\n resolve({ uniqueEmail: true });\n }\n );\n }\n });\n };\n }\n\n ngOnInit(): void {}\n\n public getEmailErrorLabel(): string | null {\n if (!this.email.dirty) {\n return null;\n }\n\n if (this.email.hasError('required')) {\n return 'email address required';\n }\n if (this.email.hasError('email')) {\n return 'invalid email address';\n }\n if (this.email.hasError('uniqueEmail') && !this.email.pending) {\n return 'email address already registered';\n }\n return null;\n }\n\n public getNameErrorLabel(): string | null {\n if (!this.name.dirty) {\n return null;\n }\n\n if (this.name.hasError('required')) {\n return 'username required';\n }\n\n if (this.name.hasError('pattern')) {\n return 'invalid username';\n }\n\n if (this.name.hasError('uniqueName') && !this.name.pending) {\n return 'username already taken';\n }\n\n return null;\n }\n\n public getPasswordErrorLabel(): string | null {\n if (!this.password.dirty) {\n return null;\n }\n\n if (this.password.hasError('required')) {\n return 'password required';\n }\n if (this.password.hasError('passwordTooShort')) {\n let s = 'at least 8 characters';\n if (this.password.value) {\n s += ` (now ${this.password.value.length})`;\n }\n return s;\n }\n if (this.password.hasError('noUpperInPassword')) {\n return 'at least 1 uppercase letter';\n }\n if (this.password.hasError('noLowerInPassword')) {\n return 'at least 1 lowercase letter';\n }\n if (this.password.hasError('noSymbolInPassword')) {\n return 'at least 1 punctuation or symbol';\n }\n\n return null;\n }\n\n public onSubmit(): void {\n if (\n !this.registration.valid ||\n this.busy ||\n this.name.pending ||\n this.email.pending\n ) {\n return;\n }\n\n const model: RegistrationModel = {\n email: this.email.value,\n name: this.name.value,\n firstName: this.firstName.value,\n lastName: this.lastName.value,\n password: this.password.value,\n };\n\n this.busy = true;\n this._accountService\n .register(model)\n .pipe(take(1))\n .subscribe(\n () => {\n this.busy = false;\n this._snackbar.open('Registration succeeded', 'OK');\n // this.registration.reset();\n // this.registration.clearValidators();\n // this.registration.markAsPristine();\n this.registered.emit();\n },\n (error) => {\n this.busy = false;\n console.error(error);\n this._snackbar.open('Registration error', 'OK');\n }\n );\n }\n}\n","<div>\n <div>\n <p>\n To register a new user, you must provide his email address, choose a\n password, and choose a username, which must be unique (you will be\n notified if another user has already taken that name). The username must\n include only letters/digits, start with a letter, and be no shorter than 3\n characters, nor longer than 50.\n </p>\n <p>\n To promote a decent security level, the password must include at least 8\n characters, uppercase and lowercase letters, digits, and punctuation (like\n dashes, stops, parentheses, etc.).\n </p>\n <p>\n Once registered, the user will receive an email message to the email\n address you specified; he will have to click on the provided link to\n complete the registration process.\n </p>\n </div>\n\n <form role=\"form\" [formGroup]=\"registration\" (submit)=\"onSubmit()\">\n <fieldset>\n <label>register user</label>\n <!-- email -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n placeholder=\"email\"\n formControlName=\"email\"\n />\n <mat-error>{{ getEmailErrorLabel() }}</mat-error>\n <mat-icon *ngIf=\"email.pending\">hourglass</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n placeholder=\"username\"\n formControlName=\"name\"\n />\n <mat-error>{{ getNameErrorLabel() }}</mat-error>\n <mat-icon *ngIf=\"name.pending\">hourglass</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"first name\"\n formControlName=\"firstName\"\n />\n <mat-error\n *ngIf=\"\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n \"\n class=\"text-danger small\"\n >\n first name required\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"last name\"\n formControlName=\"lastName\"\n />\n <mat-error\n *ngIf=\"\n lastName.hasError('required') &&\n (lastName.dirty || lastName.touched)\n \"\n class=\"text-danger small\"\n >\n last name required\n </mat-error>\n </mat-form-field>\n </div>\n\n <div [formGroup]=\"passwords\">\n <!-- password -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"password\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"password\"\n formControlName=\"password\"\n />\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n <mat-error>{{ getPasswordErrorLabel() }}</mat-error>\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <input\n matInput\n type=\"password\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n placeholder=\"confirm password\"\n formControlName=\"confirmPassword\"\n />\n <mat-error\n *ngIf=\"\n passwords.hasError('areEqual') &&\n (confirmPassword.dirty || confirmPassword.touched)\n \"\n >\n password differs from confirmation password\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"\n !registration.valid || busy || name.pending || email.pending\n \"\n >\n register\n </button>\n <mat-progress-spinner\n diameter=\"20\"\n *ngIf=\"busy\"\n aria-label=\"Busy\"\n ></mat-progress-spinner>\n </fieldset>\n </form>\n</div>\n","import { StoreConfig, EntityStore, EntityState, ActiveState } from '@datorama/akita';\r\nimport { Injectable } from '@angular/core';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n// https://netbasal.gitbook.io/akita/entity-store/entity-store/active-state\r\nexport interface UsersState\r\n extends EntityState<User, string>,\r\n ActiveState<string> {\r\n filter: UserFilter;\r\n active: string | null;\r\n}\r\n\r\nconst initialState: UsersState = {\r\n filter: {\r\n pageNumber: 1,\r\n pageSize: 20,\r\n },\r\n active: null\r\n};\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@StoreConfig({ name: 'Users', idKey: 'userName', resettable: true })\r\nexport class UsersStore extends EntityStore<UsersState> {\r\n constructor() {\r\n super(initialState);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryEntity } from '@datorama/akita';\r\nimport { Observable } from 'rxjs';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\nimport { UsersState, UsersStore } from './users.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersQuery extends QueryEntity<UsersState> {\r\n constructor(protected _store: UsersStore) {\r\n super(_store);\r\n }\r\n\r\n public selectFilter(): Observable<UserFilter> {\r\n return this.select((state: UsersState) => state.filter);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AuthJwtAccountService,\r\n UserFilter,\r\n} from '../../services/auth-jwt-account.service';\r\nimport { UsersStore } from './users.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UsersService {\r\n constructor(\r\n private _store: UsersStore,\r\n private _accountService: AuthJwtAccountService\r\n ) {}\r\n\r\n /**\r\n * Update the filter in the store.\r\n * @param filter The filter.\r\n */\r\n public updateFilter(filter: UserFilter): void {\r\n this._store.update({\r\n filter: filter,\r\n });\r\n }\r\n\r\n public setActive(name: string | null): void {\r\n this._store.setActive(name);\r\n }\r\n\r\n public updateActive(user: User): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._store.setLoading(true);\r\n\r\n this._accountService.updateUser(user).subscribe(\r\n (_) => {\r\n this._store.setLoading(false);\r\n this._store.setError(null);\r\n this._store.updateActive((u) => {\r\n return { ...user };\r\n });\r\n resolve(true);\r\n },\r\n (error) => {\r\n console.error(error);\r\n this._store.setLoading(false);\r\n this._store.setError('Error updating user');\r\n resolve(false);\r\n }\r\n );\r\n });\r\n return promise;\r\n }\r\n\r\n public deleteUser(name: string): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._store.setLoading(true);\r\n\r\n this._accountService.deleteUser(name).subscribe(\r\n (_) => {\r\n this._store.setLoading(false);\r\n this._store.setError(null);\r\n this._store.remove(name);\r\n resolve(true);\r\n },\r\n (error) => {\r\n console.error(error);\r\n this._store.setLoading(false);\r\n this._store.setError('Error deleting user');\r\n reject(error);\r\n }\r\n );\r\n });\r\n return promise;\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { UserFilter } from '../../services/auth-jwt-account.service';\nimport { UsersQuery } from '../state/users.query';\nimport { UsersService } from '../state/users.service';\n\n@Component({\n selector: 'auth-jwt-user-filter',\n templateUrl: './user-filter.component.html',\n styleUrls: ['./user-filter.component.css'],\n})\nexport class UserFilterComponent implements OnInit {\n @Input()\n public disabled: boolean | undefined;\n\n public filter$: Observable<UserFilter>;\n\n public name: UntypedFormControl;\n public form: UntypedFormGroup;\n\n constructor(\n formBuilder: UntypedFormBuilder,\n query: UsersQuery,\n private _corporaService: UsersService\n ) {\n this.filter$ = query.selectFilter();\n\n // form\n this.name = formBuilder.control(null);\n this.form = formBuilder.group({\n name: this.name,\n });\n }\n\n ngOnInit(): void {\n this.filter$.subscribe((f) => {\n this.updateForm(f);\n });\n }\n\n private updateForm(filter: UserFilter): void {\n this.name.setValue(filter.name);\n this.form.markAsPristine();\n }\n\n public reset(): void {\n this.form.reset();\n this.apply();\n }\n\n private getFilter(): UserFilter {\n return {\n pageNumber: 1, // not used\n pageSize: 20, // not used\n name: this.name.value?.trim(),\n };\n }\n\n public apply(): void {\n if (this.form.invalid) {\n return;\n }\n const filter = this.getFilter();\n\n // update filter in state\n this._corporaService.updateFilter(filter);\n }\n}\n","<form [formGroup]=\"form\" (submit)=\"apply()\" ng-disabled=\"disabled\">\n <mat-form-field>\n <input matInput [formControl]=\"name\" placeholder=\"name or ID\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"reset()\"\n color=\"warn\"\n matTooltip=\"Reset filters\"\n [disabled]=\"disabled\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </mat-form-field>\n\n <button\n type=\"submit\"\n mat-icon-button\n color=\"primary\"\n [disabled]=\"disabled\"\n matTooltip=\"Apply filters\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n</form>\n","import { inject, InjectionToken } from '@angular/core';\r\nimport { PaginatorPlugin } from '@datorama/akita';\r\nimport { UsersQuery } from './users.query';\r\n\r\n// create a factory provider for the paginator\r\nexport const USERS_PAGINATOR = new InjectionToken('USERS_PAGINATOR', {\r\n providedIn: 'root',\r\n factory: () => {\r\n const query = inject(UsersQuery);\r\n return new PaginatorPlugin(query).withControls().withRange();\r\n },\r\n});\r\n","import { Component, OnInit, Inject, Optional } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n@Component({\r\n // https://github.com/angular/components/issues/7718\r\n // selector: 'cadmus-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.css'],\r\n})\r\nexport class ConfirmDialogComponent implements OnInit {\r\n public title: string;\r\n public prompt: string;\r\n public ok: string;\r\n public cancel: string;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n this.title = 'Confirm';\r\n this.prompt = 'Confirm operation?';\r\n this.ok = 'yes';\r\n this.cancel = 'no';\r\n }\r\n\r\n ngOnInit() {}\r\n}\r\n","<h1 mat-dialog-title>{{ title }}</h1>\r\n<mat-dialog-content>\r\n {{ prompt }}\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n color=\"warn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >\r\n {{ ok }}\r\n </button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">\r\n {{ cancel }}\r\n </button>\r\n</mat-dialog-actions>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';\r\nimport { Observable } from 'rxjs';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n/**\r\n * This service acts as a wrapper for MatDialog to simplify the process of calling\r\n * the dialog and subscribing to it. What it will do is create an Instance of\r\n * MatDialog with our custom component (ConfirmDialogComponent). Then it will set\r\n * any public properties it needs to by setting the properties on the\r\n * componentInstance object. It will return the observable afterClosed()\r\n * to the caller so they can subscribe to it. This will emit an event whenever\r\n * the dialog is closed.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n public confirm(title: string, prompt: string, ok = 'yes', cancel = 'no'):\r\n Observable<boolean> {\r\n\r\n let dialogRef: MatDialogRef<ConfirmDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(ConfirmDialogComponent);\r\n dialogRef.componentInstance.title = title;\r\n dialogRef.componentInstance.prompt = prompt;\r\n dialogRef.componentInstance.ok = ok;\r\n dialogRef.componentInstance.cancel = cancel;\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n UntypedFormBuilder,\n Validators,\n} from '@angular/forms';\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\n\n@Component({\n selector: 'auth-jwt-user-editor',\n templateUrl: './user-editor.component.html',\n styleUrls: ['./user-editor.component.css'],\n})\nexport class UserEditorComponent implements OnInit {\n private _user: User | undefined;\n\n public email: UntypedFormControl;\n public emailConfirmed: UntypedFormControl;\n public lockoutEnabled: UntypedFormControl;\n public firstName: UntypedFormControl;\n public lastName: UntypedFormControl;\n public roles: UntypedFormControl;\n public form: UntypedFormGroup;\n\n public unlocked: boolean | undefined;\n\n @Input() public set user(value: User | undefined) {\n this._user = value;\n this.updateForm(value);\n }\n public get user(): User | undefined {\n return this._user;\n }\n\n @Output() userChange: EventEmitter<User>;\n @Output() editorClose: EventEmitter<any>;\n\n constructor(formBuilder: UntypedFormBuilder, private _authService: AuthJwtService) {\n // events\n this.userChange = new EventEmitter<User>();\n this.editorClose = new EventEmitter<any>();\n // form\n this.email = formBuilder.control(null, [\n Validators.required,\n Validators.email,\n ]);\n this.emailConfirmed = formBuilder.control(false);\n this.lockoutEnabled = formBuilder.control(false);\n this.firstName = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.lastName = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(50),\n ]);\n this.roles = formBuilder.control(null, Validators.maxLength(200));\n\n this.form = formBuilder.group({\n email: this.email,\n emailConfirmed: this.emailConfirmed,\n lockoutEnabled: this.lockoutEnabled,\n firstName: this.firstName,\n lastName: this.lastName,\n roles: this.roles,\n });\n }\n\n ngOnInit(): void {}\n\n private updateForm(user: User | undefined): void {\n if (!user) {\n this.form.reset();\n } else {\n this.email.setValue(user.email);\n this.emailConfirmed.setValue(user.emailConfirmed);\n this.lockoutEnabled.setValue(user.lockoutEnabled);\n this.firstName.setValue(user.firstName);\n this.lastName.setValue(user.lastName);\n if (user.roles?.length > 0) {\n this.roles.setValue(user.roles.join(' '));\n } else {\n this.roles.setValue(null);\n }\n }\n }\n\n private getUserFromForm(): User {\n return {\n userName: this._user?.userName || '',\n email: this.email.value,\n emailConfirmed: this.emailConfirmed.value,\n lockoutEnabled: this.lockoutEnabled.value,\n firstName: this.firstName.value,\n lastName: this.lastName.value,\n roles: this.roles.value\n ? this.roles.value.split(' ').filter((s: string) => s)\n : [],\n };\n }\n\n public endLockout(): void {\n if (this.unlocked) {\n return;\n }\n this._user!.lockoutEnd = this._authService.getUTCDate();\n this.unlocked = true;\n }\n\n public close(): void {\n this.editorClose.emit();\n }\n\n public save(): void {\n if (this.form.invalid) {\n return;\n }\n this.userChange.emit(this.getUserFromForm());\n }\n}\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <!-- email -->\n <div>\n <mat-form-field>\n <input type=\"text\" matInput [formControl]=\"email\" placeholder=\"email\" />\n <mat-error\n *ngIf=\"email.hasError('required') && (email.dirty || email.touched)\"\n >\n email address required\n </mat-error>\n <mat-error\n *ngIf=\"email.hasError('pattern') && (email.dirty || email.touched)\"\n >\n invalid email address\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- emailConfirmed -->\n <div>\n <mat-checkbox [formControl]=\"emailConfirmed\"\n >email address confirmed</mat-checkbox\n >\n </div>\n\n <!-- lockoutEnabled -->\n <div>\n <mat-checkbox [formControl]=\"lockoutEnabled\"\n >lockout enabled</mat-checkbox\n >\n \n <button\n mat-stroked-button\n (click)=\"endLockout()\"\n [disabled]=\"unlocked\"\n matTooltip=\"Unlock this user if locked\"\n >\n unlock\n </button>\n </div>\n\n <!-- firstName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"firstName\"\n placeholder=\"first name\"\n />\n <mat-error\n *ngIf=\"\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name required\n </mat-error>\n <mat-error\n *ngIf=\"\n firstName.hasError('maxlength') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- lastName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"lastName\"\n placeholder=\"last name\"\n />\n <mat-error\n *ngIf=\"\n lastName.hasError('required') && (lastName.dirty || lastName.touched)\n \"\n >\n last name required\n </mat-error>\n <mat-error\n *ngIf=\"\n lastName.hasError('maxlength') && (lastName.dirty || lastName.touched)\n \"\n >\n last name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- roles -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"roles\"\n placeholder=\"roles (separated by space)\"\n />\n <mat-error\n *ngIf=\"roles.hasError('maxlength') && (roles.dirty || roles.touched)\"\n >\n too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <br />\n <div>\n <button mat-icon-button color=\"warn\" matTooltip=\"Close\" (click)=\"close()\">\n <mat-icon>cancel</mat-icon>\n </button>\n \n <button\n type=\"submit\"\n mat-button\n color=\"primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save user data\"\n >\n <mat-icon>check_circle</mat-icon> save\n </button>\n </div>\n</form>\n","import { Component, Inject, OnDestroy } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl } from '@angular/forms';\nimport { PageEvent } from '@angular/material/paginator';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { map, startWith, switchMap, take, tap } from 'rxjs/operators';\nimport { PaginationResponse, PaginatorPlugin } from '@datorama/akita';\n\nimport { GravatarService, User } from '@myrmidon/auth-jwt-login';\nimport { DataPage } from '@myrmidon/ng-tools';\n\nimport {\n AuthJwtAccountService,\n UserFilter,\n} from '../../services/auth-jwt-account.service';\nimport { USERS_PAGINATOR } from '../state/users.paginator';\nimport { UsersState } from '../state/users.store';\nimport { UsersQuery } from '../state/users.query';\nimport { DialogService } from '../../services/dialog.service';\nimport { UsersService } from '../state/users.service';\n\n@Component({\n selector: 'auth-jwt-user-list',\n templateUrl: './user-list.component.html',\n styleUrls: ['./user-list.component.css'],\n})\nexport class UserListComponent implements OnDestroy {\n private _refresh$: BehaviorSubject<number>;\n private _filter$: Observable<UserFilter>;\n\n public pagination$: Observable<PaginationResponse<User>>;\n public pageSize: UntypedFormControl;\n public active$: Observable<User | undefined>;\n\n constructor(\n @Inject(USERS_PAGINATOR)\n public paginator: PaginatorPlugin<UsersState>,\n userQuery: UsersQuery,\n private _accountService: AuthJwtAccountService,\n private _usersService: UsersService,\n private _dialogService: DialogService,\n private _gravatarService: GravatarService,\n formBuilder: UntypedFormBuilder\n ) {\n this.pageSize = formBuilder.control(20);\n this._refresh$ = new BehaviorSubject(0);\n this._filter$ = userQuery.selectFilter();\n // https://netbasal.com/manage-your-entities-with-akita-like-a-boss-768732f8d4d1\n this.active$ = userQuery.selectActive<User>();\n\n this.pagination$ = combineLatest([\n this.paginator.pageChanges,\n this.pageSize.valueChanges.pipe(\n // we are required to emit at least the initial value\n // as combineLatest emits only if ALL observables have emitted\n startWith(20),\n // clear the cache when page size changes\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n this._filter$.pipe(\n // clear the cache when filters changed\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n this._refresh$.pipe(\n // clear the cache when forcing refresh\n tap((_) => {\n this.paginator.clearCache();\n })\n ),\n ]).pipe(\n // for each emitted value, combine into a filter and use it\n // to request the page from server\n switchMap(([pageNumber, pageSize, filter, refresh]) => {\n // const filter = { ...this._docsQuery.getValue().filter };\n const f = { ...filter };\n f.pageNumber = pageNumber;\n f.pageSize = pageSize;\n const request = this.getRequest(f);\n // update saved filters\n this.paginator.metadata.set('filter', f);\n return this.paginator.getPage(request);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.paginator.destroy();\n }\n\n private getRequest(\n filter: UserFilter\n ): () => Observable<PaginationResponse<User>> {\n return () =>\n this._accountService.getUsers(filter).pipe(\n // adapt server results to the paginator plugin\n map((p: DataPage<User>) => {\n return {\n currentPage: p.pageNumber,\n perPage: p.pageSize,\n lastPage: p.pageCount,\n data: p.items,\n total: p.total,\n };\n })\n );\n }\n\n public pageChange(event: PageEvent): void {\n // https://material.angular.io/components/paginator/api\n this.paginator.setPage(event.pageIndex + 1);\n if (event.pageSize !== this.pageSize.value) {\n this.pageSize.setValue(event.pageSize);\n }\n }\n\n public refresh(): void {\n this.paginator.clearCache();\n this._refresh$.next(this._refresh$.value + 1);\n }\n\n public deleteUser(user: User): void {\n this._dialogService\n .confirm('Confirm', `Delete User ${user.userName}?`)\n .pipe(take(1))\n .subscribe((yes) => {\n if (!yes) {\n return;\n }\n this._usersService.deleteUser(user.userName).finally(() => {\n this.refresh();\n });\n });\n }\n\n public setActiveUser(user: User | null): void {\n this._usersService.setActive(user?.userName || null);\n }\n\n public resetActiveUser(): void {\n this._usersService.setActive(null);\n }\n\n public saveActiveUser(user: User): void {\n this._usersService.updateActive(user).finally(() => {\n this.refresh();\n });\n }\n\n public onUserEditorClose(): void {\n this.setActiveUser(null);\n }\n\n public getGravatarUrl(email: string, size = 80): string | null {\n return this._gravatarService.buildGravatarUrl(email, size);\n }\n}\n","<div\r\n gdAreas=\"filters | progress | list | pager | editor\"\r\n gdRows=\"80px 64px 2fr 40px 1fr\"\r\n gdColumns=\"1fr\"\r\n gdGap=\"8px\"\r\n>\r\n <div>\r\n <!-- filters -->\r\n <div gdArea=\"filters\">\r\n <auth-jwt-user-filter></auth-jwt-user-filter>\r\n </div>\r\n\r\n <!-- progress -->\r\n <div *ngIf=\"paginator.isLoading$ | async\" gdArea=\"progress\">\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n\r\n <!-- list -->\r\n <div gdArea=\"list\" *ngIf=\"pagination$ | async as pagination\">\r\n <table>\r\n <thead>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <th>name</th>\r\n <th>first</th>\r\n <th>last</th>\r\n <th>email</th>\r\n <th>roles</th>\r\n <th>lock end</th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of pagination.data\">\r\n <td class=\"command\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit {{ user.userName }}\"\r\n color=\"primary\"\r\n (click)=\"setActiveUser(user)\"\r\n >\r\n <mat-icon>mode_edit</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"command\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete {{ user.userName }}\"\r\n color=\"warn\"\r\n (click)=\"deleteUser(user)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n <img\r\n [src]=\"getGravatarUrl(user.email, 32)\"\r\n [alt]=\"user.userName\"\r\n />\r\n </td>\r\n <td>{{ user.userName }}</td>\r\n <td>{{ user.firstName }}</td>\r\n <td>{{ user.lastName }}</td>\r\n <td>\r\n <a [href]=\"'mailto:' + user.email\">{{ user.email }}</a>\r\n </td>\r\n <td>{{ user.roles?.join(\" \") }}</td>\r\n <td>{{ user.lockoutEnd }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- pagination -->\r\n <mat-paginator\r\n gdArea=\"pager\"\r\n gdAlignColumns=\"center\"\r\n gdAlignRows=\"start\"\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pageSize.value\"\r\n [pageSizeOptions]=\"[20, 50, 75, 100]\"\r\n [pageIndex]=\"pagination.currentPage - 1\"\r\n [showFirstLastButtons]=\"true\"\r\n (page)=\"pageChange($event)\"\r\n ></mat-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- editor -->\r\n <div gdArea=\"editor\" *ngIf=\"active$ | async as active\">\r\n <fieldset>\r\n <legend>{{ active.userName }}</legend>\r\n <auth-jwt-user-editor\r\n [user]=\"active\"\r\n (userChange)=\"saveActiveUser($event)\"\r\n (editorClose)=\"resetActiveUser()\"\r\n ></auth-jwt-user-editor>\r\n </fieldset>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { RouterModule } from '@angular/router';\nimport { AuthJwtLoginModule } from '@myrmidon/auth-jwt-login';\nimport { NgToolsModule } from '@myrmidon/ng-tools';\n\nimport { AuthJwtRegistrationComponent } from './components/auth-jwt-registration/auth-jwt-registration.component';\nimport { PasswordStrengthBarComponent } from './components/password-strength-bar/password-strength-bar.component';\nimport { UserFilterComponent } from './components/user-filter/user-filter.component';\nimport { UserListComponent } from './components/user-list/user-list.component';\nimport { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dialog.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { UserEditorComponent } from './components/user-editor/user-editor.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatPaginatorModule } from '@angular/material/paginator';\n\n@NgModule({\n declarations: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent,\n ConfirmDialogComponent,\n UserEditorComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n RouterModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDialogModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatTooltipModule,\n AuthJwtLoginModule,\n NgToolsModule\n ],\n exports: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent\n ],\n})\nexport class AuthJwtAdminModule {}\n","/*\n * Public API Surface of auth-jwt-admin\n */\n\nexport * from './lib/components/auth-jwt-registration/auth-jwt-registration.component';\nexport * from './lib/components/password-strength-bar/password-strength-bar.component';\nexport * from './lib/components/user-filter/user-filter.component';\nexport * from './lib/components/user-list/user-list.component';\nexport * from './lib/services/auth-jwt-account.service';\nexport * from './lib/validators/password.validators';\nexport * from './lib/auth-jwt-admin.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.AuthJwtAccountService","i4","i5","i7","i10.PasswordStrengthBarComponent","i1.UsersStore","i2.AuthJwtAccountService","i2.UsersQuery","i3.UsersService","i6","i8","i3","i9","i1.UsersQuery","i4.DialogService","i12","i13.UserFilterComponent","i14.UserEditorComponent"],"mappings":"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"}
|