create by license moved from update license component

This commit is contained in:
Kyle Spearrin 2018-07-03 09:55:59 -04:00
parent 70dbca67e7
commit 738eaa6ca7
8 changed files with 103 additions and 54 deletions

View File

@ -3,8 +3,18 @@
</div>
<p>{{'newOrganizationDesc' | i18n}}</p>
<ng-container *ngIf="selfHosted">
<p>{{'uploadLicenseFilePremium' | i18n}}</p>
<app-update-license [user]="true" [create]="true" (onUpdated)="finalizePremium()"></app-update-license>
<p>{{'uploadLicenseFileOrg' | i18n}}</p>
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate>
<div class="form-group">
<label for="file">{{'licenseFile' | i18n}}</label>
<input type="file" id="file" class="form-control-file" name="file" required>
<small class="form-text text-muted">{{'licenseFileDesc' | i18n : 'bitwarden_organization_license.json'}}</small>
</div>
<button type="submit" class="btn btn-primary btn-submit" [disabled]="form.loading">
<i class="fa fa-spinner fa-spin"></i>
<span>{{'submit' | i18n}}</span>
</button>
</form>
</ng-container>
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate *ngIf="!selfHosted">
<h2 class="mt-5">{{'generalInformation' | i18n}}</h2>

View File

@ -87,6 +87,17 @@ export class CreateOrganizationComponent {
}
async submit() {
let files: FileList = null;
if (this.selfHosted) {
const fileEl = document.getElementById('file') as HTMLInputElement;
files = fileEl.files;
if (files == null || files.length === 0) {
this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),
this.i18nService.t('selectFile'));
return;
}
}
let key: string = null;
let collectionCt: string = null;
@ -96,34 +107,41 @@ export class CreateOrganizationComponent {
return this.cryptoService.encrypt('Default Collection', shareKey[1]);
}).then((collection) => {
collectionCt = collection.encryptedString;
if (this.plan === 'free') {
if (this.selfHosted || this.plan === 'free') {
return null;
} else {
return this.paymentComponent.createPaymentToken();
}
}).then((token: string) => {
const request = new OrganizationCreateRequest();
request.key = key;
request.collectionName = collectionCt;
request.name = this.name;
request.billingEmail = this.billingEmail;
if (this.plan === 'free') {
request.planType = PlanType.Free;
if (this.selfHosted) {
const fd = new FormData();
fd.append('license', files[0]);
fd.append('key', key);
fd.append('collectionName', collectionCt);
return this.apiService.postOrganizationLicense(fd);
} else {
request.paymentToken = token;
request.businessName = this.ownedBusiness ? this.businessName : null;
request.additionalSeats = this.additionalSeats;
request.additionalStorageGb = this.additionalStorage;
request.country = this.paymentComponent.getCountry();
if (this.interval === 'month') {
request.planType = this.plans[this.plan].monthPlanType;
} else {
request.planType = this.plans[this.plan].annualPlanType;
}
}
const request = new OrganizationCreateRequest();
request.key = key;
request.collectionName = collectionCt;
request.name = this.name;
request.billingEmail = this.billingEmail;
return this.apiService.postOrganization(request);
if (this.plan === 'free') {
request.planType = PlanType.Free;
} else {
request.paymentToken = token;
request.businessName = this.ownedBusiness ? this.businessName : null;
request.additionalSeats = this.additionalSeats;
request.additionalStorageGb = this.additionalStorage;
request.country = this.paymentComponent.getCountry();
if (this.interval === 'month') {
request.planType = this.plans[this.plan].monthPlanType;
} else {
request.planType = this.plans[this.plan].annualPlanType;
}
}
return this.apiService.postOrganization(request);
}
}).then((response) => {
return this.finalize(response.id);
});

View File

@ -33,7 +33,17 @@
</app-callout>
<ng-container *ngIf="selfHosted">
<p>{{'uploadLicenseFilePremium' | i18n}}</p>
<app-update-license [user]="true" [create]="true" (onUpdated)="finalizePremium()"></app-update-license>
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate>
<div class="form-group">
<label for="file">{{'licenseFile' | i18n}}</label>
<input type="file" id="file" class="form-control-file" name="file" required>
<small class="form-text text-muted">{{'licenseFileDesc' | i18n : 'bitwarden_premium_license.json'}}</small>
</div>
<button type="submit" class="btn btn-primary btn-submit" [disabled]="form.loading">
<i class="fa fa-spinner fa-spin"></i>
<span>{{'submit' | i18n}}</span>
</button>
</form>
</ng-container>
<form #form (ngSubmit)="submit()" [appApiAction]="formPromise" ngNativeValidate *ngIf="!selfHosted">
<h2 class="mt-5">{{'addons' | i18n}}</h2>

View File

@ -46,15 +46,34 @@ export class PremiumComponent implements OnInit {
}
async submit() {
let files: FileList = null;
if (this.selfHosted) {
const fileEl = document.getElementById('file') as HTMLInputElement;
files = fileEl.files;
if (files == null || files.length === 0) {
this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),
this.i18nService.t('selectFile'));
return;
}
}
try {
this.formPromise = this.paymentComponent.createPaymentToken().then((token) => {
if (this.selfHosted) {
const fd = new FormData();
fd.append('paymentToken', token);
fd.append('additionalStorageGb', (this.additionalStorage || 0).toString());
return this.apiService.postPremium(fd);
}).then(() => {
return this.finalizePremium();
});
fd.append('license', files[0]);
this.formPromise = this.apiService.postAccountLicense(fd).then(() => {
return this.finalizePremium();
});
} else {
this.formPromise = this.paymentComponent.createPaymentToken().then((token) => {
const fd = new FormData();
fd.append('paymentToken', token);
fd.append('additionalStorageGb', (this.additionalStorage || 0).toString());
return this.apiService.postPremium(fd);
}).then(() => {
return this.finalizePremium();
});
}
await this.formPromise;
} catch { }
}

View File

@ -8,7 +8,7 @@
<i class="fa fa-spinner fa-spin"></i>
<span>{{'submit' | i18n}}</span>
</button>
<button type="button" class="btn btn-outline-secondary" (click)="cancel()" *ngIf="!create">
<button type="button" class="btn btn-outline-secondary" (click)="cancel()">
{{'cancel' | i18n}}
</button>
</form>

View File

@ -10,24 +10,20 @@ import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { TokenService } from 'jslib/abstractions/token.service';
@Component({
selector: 'app-update-license',
templateUrl: 'update-license.component.html',
})
export class UpdateLicenseComponent {
@Input() create = true;
@Input() user = true;
@Output() onUpdated = new EventEmitter();
@Output() onCanceled = new EventEmitter();
storageAdjustment = 0;
formPromise: Promise<any>;
constructor(private apiService: ApiService, private i18nService: I18nService,
private analytics: Angulartics2, private toasterService: ToasterService,
private tokenService: TokenService) { }
private analytics: Angulartics2, private toasterService: ToasterService) { }
async submit() {
const fileEl = document.getElementById('file') as HTMLInputElement;
@ -39,25 +35,18 @@ export class UpdateLicenseComponent {
}
try {
const fd = new FormData();
fd.append('license', files[0]);
if (this.user) {
const fd = new FormData();
fd.append('license', files[0]);
if (this.create) {
if (!this.tokenService.getEmailVerified()) {
this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),
this.i18nService.t('accountEmailMustBeVerified'));
return;
}
this.formPromise = this.apiService.postPremium(fd);
} else {
this.formPromise = this.apiService.postAccountLicense(fd);
}
this.formPromise = this.apiService.postAccountLicense(fd);
} else {
// TODO
}
await this.formPromise;
if (!this.create) {
this.analytics.eventTrack.next({ action: 'Updated License' });
this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense'));
}
this.analytics.eventTrack.next({ action: 'Updated License' });
this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense'));
this.onUpdated.emit();
} catch { }
}

View File

@ -64,7 +64,7 @@
<div class="card mt-3" *ngIf="showUpdateLicense">
<div class="card-body">
<h3 class="card-body-header">{{'updateLicense' | i18n}}</h3>
<app-update-license [create]="false" [user]="true" (onUpdated)="closeUpdateLicense(true)" (onCanceled)="closeUpdateLicense(false)"></app-update-license>
<app-update-license [user]="true" (onUpdated)="closeUpdateLicense(true)" (onCanceled)="closeUpdateLicense(false)"></app-update-license>
</div>
</div>
</ng-container>

View File

@ -1452,6 +1452,9 @@
"uploadLicenseFilePremium": {
"message": "To upgrade your account to a premium membership you need to upload a valid license file."
},
"uploadLicenseFileOrg": {
"message": "To create an on-premise hosted organization you need to upload a valid license file."
},
"accountEmailMustBeVerified": {
"message": "Your account's email address must be verified."
},