diff --git a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html
index 01b96e3bc5..5c03a8c431 100644
--- a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html
+++ b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html
@@ -27,6 +27,7 @@
bitIconButton="bwi-generate"
bitSuffix
[appA11yTitle]="'generatePassword' | i18n"
+ (click)="generatePassword()"
data-testid="generate-password"
>
{{ "sendPasswordDescV2" | i18n }}
diff --git a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts
index a73a3a6ad8..4f95a6bcee 100644
--- a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts
+++ b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts
@@ -2,7 +2,7 @@ import { CommonModule } from "@angular/common";
import { Component, Input, OnInit } from "@angular/core";
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
import { FormBuilder, ReactiveFormsModule } from "@angular/forms";
-import { map } from "rxjs";
+import { firstValueFrom, map } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
@@ -17,6 +17,7 @@ import {
SectionHeaderComponent,
TypographyModule,
} from "@bitwarden/components";
+import { CredentialGeneratorService, Generators } from "@bitwarden/generator-core";
import { SendFormConfig } from "../../abstractions/send-form-config.service";
import { SendFormContainer } from "../../send-form-container";
@@ -72,6 +73,7 @@ export class SendOptionsComponent implements OnInit {
private sendFormContainer: SendFormContainer,
private formBuilder: FormBuilder,
private policyService: PolicyService,
+ private generatorService: CredentialGeneratorService,
) {
this.sendFormContainer.registerChildForm("sendOptionsForm", this.sendOptionsForm);
this.policyService
@@ -98,6 +100,16 @@ export class SendOptionsComponent implements OnInit {
});
}
+ generatePassword = async () => {
+ const generatedCredential = await firstValueFrom(
+ this.generatorService.generate$(Generators.Password),
+ );
+
+ this.sendOptionsForm.patchValue({
+ password: generatedCredential.credential,
+ });
+ };
+
ngOnInit() {
if (this.sendFormContainer.originalSendView) {
this.sendOptionsForm.patchValue({
diff --git a/libs/tools/send/send-ui/src/send-form/send-form.module.ts b/libs/tools/send/send-ui/src/send-form/send-form.module.ts
index 8b004207c1..99db65807a 100644
--- a/libs/tools/send/send-ui/src/send-form/send-form.module.ts
+++ b/libs/tools/send/send-ui/src/send-form/send-form.module.ts
@@ -1,9 +1,22 @@
import { NgModule } from "@angular/core";
+import { safeProvider } from "@bitwarden/angular/platform/utils/safe-provider";
+import { SafeInjectionToken } from "@bitwarden/angular/services/injection-tokens";
+import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
+import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
+import { StateProvider } from "@bitwarden/common/platform/state";
+import {
+ createRandomizer,
+ CredentialGeneratorService,
+ Randomizer,
+} from "@bitwarden/generator-core";
+
import { SendFormService } from "./abstractions/send-form.service";
import { SendFormComponent } from "./components/send-form.component";
import { DefaultSendFormService } from "./services/default-send-form.service";
+const RANDOMIZER = new SafeInjectionToken("Randomizer");
+
@NgModule({
imports: [SendFormComponent],
providers: [
@@ -11,6 +24,16 @@ import { DefaultSendFormService } from "./services/default-send-form.service";
provide: SendFormService,
useClass: DefaultSendFormService,
},
+ safeProvider({
+ provide: RANDOMIZER,
+ useFactory: createRandomizer,
+ deps: [CryptoService],
+ }),
+ safeProvider({
+ useClass: CredentialGeneratorService,
+ provide: CredentialGeneratorService,
+ deps: [RANDOMIZER, StateProvider, PolicyService],
+ }),
],
exports: [SendFormComponent],
})