mirror of
https://github.com/bitwarden/web
synced 2025-12-13 14:53:25 +00:00
Compare commits
1 Commits
mono-repo
...
PS-326-mis
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a30878774 |
0
apps/web/.gitignore → .gitignore
vendored
0
apps/web/.gitignore → .gitignore
vendored
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -0,0 +1,4 @@
|
|||||||
|
[submodule "jslib"]
|
||||||
|
path = jslib
|
||||||
|
url = https://github.com/bitwarden/jslib.git
|
||||||
|
branch = master
|
||||||
|
|||||||
0
apps/web/.husky/pre-commit → .husky/pre-commit
Normal file → Executable file
0
apps/web/.husky/pre-commit → .husky/pre-commit
Normal file → Executable file
@@ -2,7 +2,7 @@
|
|||||||
build
|
build
|
||||||
dist
|
dist
|
||||||
|
|
||||||
#jslib
|
jslib
|
||||||
|
|
||||||
# External libraries / auto synced locales
|
# External libraries / auto synced locales
|
||||||
src/locales
|
src/locales
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
<div
|
|
||||||
class="modal fade"
|
|
||||||
role="dialog"
|
|
||||||
aria-modal="true"
|
|
||||||
aria-labelledby="enrollMasterPasswordResetTitle"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-dialog-scrollable" role="document">
|
|
||||||
<form
|
|
||||||
class="modal-content"
|
|
||||||
#form
|
|
||||||
(ngSubmit)="submit()"
|
|
||||||
[appApiAction]="formPromise"
|
|
||||||
ngNativeValidate
|
|
||||||
>
|
|
||||||
<div class="modal-header">
|
|
||||||
<h2 class="modal-title" id="enrollMasterPasswordResetTitle">
|
|
||||||
{{ (isEnrolled ? "withdrawPasswordReset" : "enrollPasswordReset") | i18n }}
|
|
||||||
</h2>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="close"
|
|
||||||
data-dismiss="modal"
|
|
||||||
appA11yTitle="{{ 'close' | i18n }}"
|
|
||||||
>
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<app-callout type="warning" *ngIf="!isEnrolled">
|
|
||||||
{{ "resetPasswordEnrollmentWarning" | i18n }}
|
|
||||||
</app-callout>
|
|
||||||
<app-user-verification [(ngModel)]="verification" name="secret"> </app-user-verification>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button bitButton buttonType="primary" type="submit" [disabled]="form.loading">
|
|
||||||
<i
|
|
||||||
class="bwi bwi-spinner bwi-spin"
|
|
||||||
title="{{ 'loading' | i18n }}"
|
|
||||||
*ngIf="form.loading"
|
|
||||||
></i>
|
|
||||||
<span>
|
|
||||||
{{ "submit" | i18n }}
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
bitButton
|
|
||||||
buttonType="secondary"
|
|
||||||
type="button"
|
|
||||||
data-dismiss="modal"
|
|
||||||
appA11yTitle="{{ 'close' | i18n }}"
|
|
||||||
>
|
|
||||||
<span>
|
|
||||||
{{ "cancel" | i18n }}
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
import { Component } from "@angular/core";
|
|
||||||
|
|
||||||
import { ModalRef } from "jslib-angular/components/modal/modal.ref";
|
|
||||||
import { ModalConfig } from "jslib-angular/services/modal.service";
|
|
||||||
import { ApiService } from "jslib-common/abstractions/api.service";
|
|
||||||
import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
|
||||||
import { I18nService } from "jslib-common/abstractions/i18n.service";
|
|
||||||
import { LogService } from "jslib-common/abstractions/log.service";
|
|
||||||
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
|
|
||||||
import { SyncService } from "jslib-common/abstractions/sync.service";
|
|
||||||
import { UserVerificationService } from "jslib-common/abstractions/userVerification.service";
|
|
||||||
import { Utils } from "jslib-common/misc/utils";
|
|
||||||
import { Organization } from "jslib-common/models/domain/organization";
|
|
||||||
import { OrganizationUserResetPasswordEnrollmentRequest } from "jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest";
|
|
||||||
import { Verification } from "jslib-common/types/verification";
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: "app-enroll-master-password-reset",
|
|
||||||
templateUrl: "enroll-master-password-reset.component.html",
|
|
||||||
})
|
|
||||||
export class EnrollMasterPasswordReset {
|
|
||||||
organization: Organization;
|
|
||||||
|
|
||||||
verification: Verification;
|
|
||||||
formPromise: Promise<any>;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
private userVerificationService: UserVerificationService,
|
|
||||||
private apiService: ApiService,
|
|
||||||
private platformUtilsService: PlatformUtilsService,
|
|
||||||
private i18nService: I18nService,
|
|
||||||
private cryptoService: CryptoService,
|
|
||||||
private syncService: SyncService,
|
|
||||||
private logService: LogService,
|
|
||||||
private modalRef: ModalRef,
|
|
||||||
config: ModalConfig
|
|
||||||
) {
|
|
||||||
this.organization = config.data.organization;
|
|
||||||
}
|
|
||||||
|
|
||||||
async submit() {
|
|
||||||
let toastStringRef = "withdrawPasswordResetSuccess";
|
|
||||||
|
|
||||||
this.formPromise = this.userVerificationService
|
|
||||||
.buildRequest(this.verification, OrganizationUserResetPasswordEnrollmentRequest)
|
|
||||||
.then(async (request) => {
|
|
||||||
// Set variables
|
|
||||||
let keyString: string = null;
|
|
||||||
|
|
||||||
// Enrolling
|
|
||||||
if (!this.organization.resetPasswordEnrolled) {
|
|
||||||
// Retrieve Public Key
|
|
||||||
const orgKeys = await this.apiService.getOrganizationKeys(this.organization.id);
|
|
||||||
if (orgKeys == null) {
|
|
||||||
throw new Error(this.i18nService.t("resetPasswordOrgKeysError"));
|
|
||||||
}
|
|
||||||
|
|
||||||
const publicKey = Utils.fromB64ToArray(orgKeys.publicKey);
|
|
||||||
|
|
||||||
// RSA Encrypt user's encKey.key with organization public key
|
|
||||||
const encKey = await this.cryptoService.getEncKey();
|
|
||||||
const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);
|
|
||||||
keyString = encryptedKey.encryptedString;
|
|
||||||
toastStringRef = "enrollPasswordResetSuccess";
|
|
||||||
|
|
||||||
// Create request and execute enrollment
|
|
||||||
request.resetPasswordKey = keyString;
|
|
||||||
await this.apiService.putOrganizationUserResetPasswordEnrollment(
|
|
||||||
this.organization.id,
|
|
||||||
this.organization.userId,
|
|
||||||
request
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// Withdrawal
|
|
||||||
request.resetPasswordKey = keyString;
|
|
||||||
await this.apiService.putOrganizationUserResetPasswordEnrollment(
|
|
||||||
this.organization.id,
|
|
||||||
this.organization.userId,
|
|
||||||
request
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.syncService.fullSync(true);
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
await this.formPromise;
|
|
||||||
this.platformUtilsService.showToast("success", null, this.i18nService.t(toastStringRef));
|
|
||||||
this.modalRef.close();
|
|
||||||
} catch (e) {
|
|
||||||
this.logService.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get isEnrolled(): boolean {
|
|
||||||
return this.organization.resetPasswordEnrolled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import { ScrollingModule } from "@angular/cdk/scrolling";
|
|
||||||
import { NgModule } from "@angular/core";
|
|
||||||
|
|
||||||
import { LooseComponentsModule } from "../../loose-components.module";
|
|
||||||
import { SharedModule } from "../../shared.module";
|
|
||||||
|
|
||||||
import { EnrollMasterPasswordReset } from "./enroll-master-password-reset.component";
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [SharedModule, ScrollingModule, LooseComponentsModule],
|
|
||||||
declarations: [EnrollMasterPasswordReset],
|
|
||||||
exports: [EnrollMasterPasswordReset],
|
|
||||||
})
|
|
||||||
export class OrganizationUserModule {}
|
|
||||||
@@ -22,16 +22,14 @@ const routes: Routes = [
|
|||||||
component: ManageComponent,
|
component: ManageComponent,
|
||||||
canActivate: [PermissionsGuard],
|
canActivate: [PermissionsGuard],
|
||||||
data: {
|
data: {
|
||||||
permissions: NavigationPermissionsService.getPermissions("manage"),
|
permissions: NavigationPermissionsService.getPermissions("manage").concat(
|
||||||
|
Permissions.ManageSso
|
||||||
|
),
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "sso",
|
path: "sso",
|
||||||
component: SsoComponent,
|
component: SsoComponent,
|
||||||
canActivate: [PermissionsGuard],
|
|
||||||
data: {
|
|
||||||
permissions: [Permissions.ManageSso],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -15,4 +15,3 @@ files:
|
|||||||
en-GB: en_GB
|
en-GB: en_GB
|
||||||
en-IN: en_IN
|
en-IN: en_IN
|
||||||
sr-CY: sr_CY
|
sr-CY: sr_CY
|
||||||
sr-CS: sr_CS
|
|
||||||
1
jslib
Submodule
1
jslib
Submodule
Submodule jslib added at 0d658ba26d
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user