2019-10-11 17:47:41 +02:00
|
|
|
<div class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="2faU2fTitle">
|
|
|
|
<div class="modal-dialog modal-lg" role="document">
|
2018-06-27 23:50:31 +02:00
|
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
2019-10-11 17:47:41 +02:00
|
|
|
<h2 class="modal-title" id="2faU2fTitle">
|
2018-06-27 23:50:31 +02:00
|
|
|
{{'twoStepLogin' | i18n}}
|
2021-03-16 17:44:31 +01:00
|
|
|
<small>{{'webAuthnTitle' | i18n}}</small>
|
2018-06-27 23:50:31 +02:00
|
|
|
</h2>
|
2019-10-11 17:22:21 +02:00
|
|
|
<button type="button" class="close" data-dismiss="modal" appA11yTitle="{{'close' | i18n}}">
|
2018-06-27 23:50:31 +02:00
|
|
|
<span aria-hidden="true">×</span>
|
|
|
|
</button>
|
|
|
|
</div>
|
2019-02-21 22:50:37 +01:00
|
|
|
<app-two-factor-verify [organizationId]="organizationId" [type]="type" (onAuthed)="auth($event)"
|
|
|
|
*ngIf="!authed">
|
2018-06-28 05:55:50 +02:00
|
|
|
</app-two-factor-verify>
|
2018-06-27 23:50:31 +02:00
|
|
|
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate *ngIf="authed">
|
|
|
|
<div class="modal-body">
|
|
|
|
<app-callout type="success" title="{{'enabled' | i18n}}" icon="fa-check-circle" *ngIf="enabled">
|
|
|
|
{{'twoStepLoginProviderEnabled' | i18n}}
|
|
|
|
</app-callout>
|
|
|
|
<app-callout type="warning">
|
2021-03-16 17:44:31 +01:00
|
|
|
<p>{{'twoFactorWebAuthnWarning' | i18n}}</p>
|
2018-06-27 23:50:31 +02:00
|
|
|
<ul class="mb-0">
|
2021-03-16 17:44:31 +01:00
|
|
|
<li>{{'twoFactorWebAuthnSupportWeb' | i18n}}</li>
|
2018-06-27 23:50:31 +02:00
|
|
|
</ul>
|
|
|
|
</app-callout>
|
2021-03-16 17:44:31 +01:00
|
|
|
<img src="../../images/two-factor/7.png" class="float-right ml-5" alt="">
|
2018-10-08 20:23:30 +02:00
|
|
|
<ul class="fa-ul">
|
|
|
|
<li *ngFor="let k of keys; let i = index" #removeKeyBtn [appApiAction]="k.removePromise">
|
|
|
|
<i class="fa-li fa fa-key"></i>
|
2021-03-16 17:44:31 +01:00
|
|
|
<strong *ngIf="!k.configured || !k.name">{{'webAuthnkeyX' | i18n : i + 1}}</strong>
|
2018-10-08 20:23:30 +02:00
|
|
|
<strong *ngIf="k.configured && k.name">{{k.name}}</strong>
|
2019-10-11 16:35:24 +02:00
|
|
|
<ng-container *ngIf="k.configured && !removeKeyBtn.loading">
|
2021-03-16 17:44:31 +01:00
|
|
|
<ng-container *ngIf="k.migrated">
|
|
|
|
<span>{{'webAuthnMigrated' | i18n}}</span>
|
2019-10-11 16:35:24 +02:00
|
|
|
</ng-container>
|
|
|
|
</ng-container>
|
2018-10-08 20:23:30 +02:00
|
|
|
<ng-container *ngIf="keysConfiguredCount > 1 && k.configured">
|
2019-02-21 22:50:37 +01:00
|
|
|
<i class="fa fa-spin fa-spinner text-muted fa-fw" title="{{'loading' | i18n}}"
|
2019-10-11 16:35:24 +02:00
|
|
|
*ngIf="removeKeyBtn.loading" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
-
|
|
|
|
<a href="#" appStopClick (click)="remove(k)">{{'remove' | i18n}}</a>
|
2018-06-27 23:50:31 +02:00
|
|
|
</ng-container>
|
2018-10-08 20:23:30 +02:00
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<hr>
|
2021-03-16 17:44:31 +01:00
|
|
|
<p>{{'twoFactorWebAuthnAdd' | i18n}}:</p>
|
2018-10-08 20:23:30 +02:00
|
|
|
<ol>
|
|
|
|
<li>{{'twoFactorU2fGiveName' | i18n}}</li>
|
|
|
|
<li>{{'twoFactorU2fPlugInReadKey' | i18n}}</li>
|
|
|
|
<li>{{'twoFactorU2fTouchButton' | i18n}}</li>
|
|
|
|
<li>{{'twoFactorU2fSaveForm' | i18n}}</li>
|
|
|
|
</ol>
|
|
|
|
<div class="row">
|
|
|
|
<div class="form-group col-6">
|
|
|
|
<label for="name">{{'name' | i18n}}</label>
|
2019-02-21 22:50:37 +01:00
|
|
|
<input id="name" type="text" name="Name" class="form-control" [(ngModel)]="name"
|
|
|
|
[disabled]="!keyIdAvailable">
|
2018-06-27 23:50:31 +02:00
|
|
|
</div>
|
2018-10-08 20:23:30 +02:00
|
|
|
</div>
|
2019-02-21 22:50:37 +01:00
|
|
|
<button type="button" (click)="readKey()" class="btn btn-outline-secondary mr-2"
|
2021-03-16 17:44:31 +01:00
|
|
|
[disabled]="readKeyBtn.loading || webAuthnListening || !keyIdAvailable" #readKeyBtn
|
2019-02-21 22:50:37 +01:00
|
|
|
[appApiAction]="challengePromise">
|
2018-10-08 20:23:30 +02:00
|
|
|
{{'readKey' | i18n}}
|
|
|
|
</button>
|
|
|
|
<ng-container *ngIf="readKeyBtn.loading">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-spinner fa-spin text-muted" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
</ng-container>
|
|
|
|
<ng-container *ngIf="!readKeyBtn.loading">
|
2021-03-16 17:44:31 +01:00
|
|
|
<ng-container *ngIf="webAuthnListening">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-spinner fa-spin text-muted" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
{{'twoFactorU2fWaiting' | i18n}}...
|
|
|
|
</ng-container>
|
2021-03-16 17:44:31 +01:00
|
|
|
<ng-container *ngIf="webAuthnResponse">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-check-circle text-success" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
{{'twoFactorU2fClickSave' | i18n}}
|
|
|
|
</ng-container>
|
2021-03-16 17:44:31 +01:00
|
|
|
<ng-container *ngIf="webAuthnError">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-warning text-danger" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
{{'twoFactorU2fProblemReadingTryAgain' | i18n}}
|
|
|
|
</ng-container>
|
2018-06-27 23:50:31 +02:00
|
|
|
</ng-container>
|
|
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
2021-03-16 17:44:31 +01:00
|
|
|
<button type="submit" class="btn btn-primary" [disabled]="form.loading || !webAuthnResponse">
|
2019-10-11 16:35:24 +02:00
|
|
|
<i class="fa fa-spinner fa-spin" *ngIf="form.loading" title="{{'loading' | i18n}}"
|
|
|
|
aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
<span *ngIf="!form.loading">{{'save' | i18n}}</span>
|
|
|
|
</button>
|
2019-02-21 22:50:37 +01:00
|
|
|
<button #disableBtn type="button" class="btn btn-outline-secondary btn-submit"
|
|
|
|
[appApiAction]="disablePromise" [disabled]="disableBtn.loading" (click)="disable()"
|
|
|
|
*ngIf="enabled">
|
2019-10-11 16:35:24 +02:00
|
|
|
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}" aria-hidden="true"></i>
|
2018-10-08 20:23:30 +02:00
|
|
|
<span>{{'disableAllKeys' | i18n}}</span>
|
2018-06-27 23:50:31 +02:00
|
|
|
</button>
|
2019-02-21 22:50:37 +01:00
|
|
|
<button type="button" class="btn btn-outline-secondary"
|
|
|
|
data-dismiss="modal">{{'close' | i18n}}</button>
|
2018-06-27 23:50:31 +02:00
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|