download license component
This commit is contained in:
parent
9a55202a9f
commit
65a20815bf
|
@ -58,6 +58,7 @@ import { AccountComponent as OrgAccountComponent } from './organizations/setting
|
||||||
import { AdjustSeatsComponent } from './organizations/settings/adjust-seats.component';
|
import { AdjustSeatsComponent } from './organizations/settings/adjust-seats.component';
|
||||||
import { ApiKeyComponent as OrgApiKeyComponent } from './organizations/settings/api-key.component';
|
import { ApiKeyComponent as OrgApiKeyComponent } from './organizations/settings/api-key.component';
|
||||||
import { DeleteOrganizationComponent } from './organizations/settings/delete-organization.component';
|
import { DeleteOrganizationComponent } from './organizations/settings/delete-organization.component';
|
||||||
|
import { DownloadLicenseComponent } from './organizations/settings/download-license.component';
|
||||||
import { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';
|
import { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';
|
||||||
import { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';
|
import { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';
|
||||||
import { RotateApiKeyComponent as OrgRotateApiKeyComponent } from './organizations/settings/rotate-api-key.component';
|
import { RotateApiKeyComponent as OrgRotateApiKeyComponent } from './organizations/settings/rotate-api-key.component';
|
||||||
|
@ -257,6 +258,7 @@ registerLocaleData(localeZhTw, 'zh-TW');
|
||||||
DeleteAccountComponent,
|
DeleteAccountComponent,
|
||||||
DeleteOrganizationComponent,
|
DeleteOrganizationComponent,
|
||||||
DomainRulesComponent,
|
DomainRulesComponent,
|
||||||
|
DownloadLicenseComponent,
|
||||||
ExportComponent,
|
ExportComponent,
|
||||||
ExposedPasswordsReportComponent,
|
ExposedPasswordsReportComponent,
|
||||||
FallbackSrcDirective,
|
FallbackSrcDirective,
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
<form #form class="card" (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate>
|
||||||
|
<div class="card-body">
|
||||||
|
<h3 class="card-body-header">{{'downloadLicense' | i18n}}</h3>
|
||||||
|
<div class="row">
|
||||||
|
<div class="form-group col-6">
|
||||||
|
<div class="d-flex">
|
||||||
|
<label for="installationId">{{'enterInstallationId' | i18n}}</label>
|
||||||
|
<a class="ml-auto" target="_blank" rel="noopener" title="{{'learnMore' | i18n}}"
|
||||||
|
href="https://help.bitwarden.com/article/licensing-on-premise/#organization-account-sharing">
|
||||||
|
<i class="fa fa-question-circle-o"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<input id="installationId" class="form-control" type="text" name="InstallationId"
|
||||||
|
[(ngModel)]="installationId" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary btn-submit" [disabled]="form.loading">
|
||||||
|
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}"></i>
|
||||||
|
<span>{{'submit' | i18n}}</span>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-outline-secondary" (click)="cancel()">
|
||||||
|
{{'cancel' | i18n}}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
|
@ -0,0 +1,43 @@
|
||||||
|
import {
|
||||||
|
Component,
|
||||||
|
EventEmitter,
|
||||||
|
Input,
|
||||||
|
Output,
|
||||||
|
} from '@angular/core';
|
||||||
|
|
||||||
|
import { ApiService } from 'jslib/abstractions/api.service';
|
||||||
|
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-download-license',
|
||||||
|
templateUrl: 'download-license.component.html',
|
||||||
|
})
|
||||||
|
export class DownloadLicenseComponent {
|
||||||
|
@Input() organizationId: string;
|
||||||
|
@Output() onDownloaded = new EventEmitter();
|
||||||
|
@Output() onCanceled = new EventEmitter();
|
||||||
|
|
||||||
|
installationId: string;
|
||||||
|
formPromise: Promise<any>;
|
||||||
|
|
||||||
|
constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService) { }
|
||||||
|
|
||||||
|
async submit() {
|
||||||
|
if (this.installationId == null || this.installationId === '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.formPromise = this.apiService.getOrganizationLicense(this.organizationId, this.installationId);
|
||||||
|
const license = await this.formPromise;
|
||||||
|
const licenseString = JSON.stringify(license, null, 2);
|
||||||
|
this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_organization_license.json');
|
||||||
|
this.platformUtilsService.eventTrack('Downloaded License');
|
||||||
|
this.onDownloaded.emit();
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
cancel() {
|
||||||
|
this.onCanceled.emit();
|
||||||
|
}
|
||||||
|
}
|
|
@ -88,11 +88,9 @@
|
||||||
<button type="button" class="btn btn-outline-secondary" (click)="changePlan()">
|
<button type="button" class="btn btn-outline-secondary" (click)="changePlan()">
|
||||||
{{'changeBillingPlan' | i18n}}
|
{{'changeBillingPlan' | i18n}}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-outline-secondary btn-submit ml-1" #licenseBtn
|
<button type="button" class="btn btn-outline-secondary ml-1" (click)="downloadLicense()"
|
||||||
[appApiAction]="licensePromise" [disabled]="licenseBtn.loading" (click)="downloadLicense()"
|
*ngIf="canDownloadLicense" [disabled]="showDownloadLicense">
|
||||||
*ngIf="canDownloadLicense">
|
{{'downloadLicense' | i18n}}
|
||||||
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}"></i>
|
|
||||||
<span>{{'downloadLicense' | i18n}}</span>
|
|
||||||
</button>
|
</button>
|
||||||
<button #cancelBtn type="button" class="btn btn-outline-danger btn-submit ml-auto" (click)="cancel()"
|
<button #cancelBtn type="button" class="btn btn-outline-danger btn-submit ml-auto" (click)="cancel()"
|
||||||
[appApiAction]="cancelPromise" [disabled]="cancelBtn.loading"
|
[appApiAction]="cancelPromise" [disabled]="cancelBtn.loading"
|
||||||
|
@ -101,6 +99,10 @@
|
||||||
<span>{{'cancelSubscription' | i18n}}</span>
|
<span>{{'cancelSubscription' | i18n}}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="mt-3" *ngIf="showDownloadLicense">
|
||||||
|
<app-download-license [organizationId]="organizationId" (onDownloaded)="closeDownloadLicense()"
|
||||||
|
(onCanceled)="closeDownloadLicense()"></app-download-license>
|
||||||
|
</div>
|
||||||
<h2 class="spaced-header">{{'userSeats' | i18n}}</h2>
|
<h2 class="spaced-header">{{'userSeats' | i18n}}</h2>
|
||||||
<p>{{'subscriptionUserSeats' | i18n : sub.seats}}</p>
|
<p>{{'subscriptionUserSeats' | i18n : sub.seats}}</p>
|
||||||
<ng-container *ngIf="subscription && canAdjustSeats && !subscription.cancelled && !subscriptionMarkedForCancel">
|
<ng-container *ngIf="subscription && canAdjustSeats && !subscription.cancelled && !subscriptionMarkedForCancel">
|
||||||
|
|
|
@ -30,12 +30,12 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
||||||
adjustStorageAdd = true;
|
adjustStorageAdd = true;
|
||||||
showAdjustStorage = false;
|
showAdjustStorage = false;
|
||||||
showUpdateLicense = false;
|
showUpdateLicense = false;
|
||||||
|
showDownloadLicense = false;
|
||||||
sub: OrganizationSubscriptionResponse;
|
sub: OrganizationSubscriptionResponse;
|
||||||
selfHosted = false;
|
selfHosted = false;
|
||||||
|
|
||||||
cancelPromise: Promise<any>;
|
cancelPromise: Promise<any>;
|
||||||
reinstatePromise: Promise<any>;
|
reinstatePromise: Promise<any>;
|
||||||
licensePromise: Promise<any>;
|
|
||||||
|
|
||||||
constructor(private tokenService: TokenService, private apiService: ApiService,
|
constructor(private tokenService: TokenService, private apiService: ApiService,
|
||||||
private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,
|
private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,
|
||||||
|
@ -109,22 +109,12 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async downloadLicense() {
|
downloadLicense() {
|
||||||
if (this.loading) {
|
this.showDownloadLicense = !this.showDownloadLicense;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const installationId = window.prompt(this.i18nService.t('enterInstallationId'));
|
closeDownloadLicense() {
|
||||||
if (installationId == null || installationId === '') {
|
this.showDownloadLicense = false;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.licensePromise = this.apiService.getOrganizationLicense(this.organizationId, installationId);
|
|
||||||
const license = await this.licensePromise;
|
|
||||||
const licenseString = JSON.stringify(license, null, 2);
|
|
||||||
this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_organization_license.json');
|
|
||||||
} catch { }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateLicense() {
|
updateLicense() {
|
||||||
|
|
Loading…
Reference in New Issue