|
- {{charge.date | date: format: mediumDate}}
+ {{charge.date | date: 'mediumDate'}}
|
{{charge.paymentSource}}
diff --git a/src/app/services/apiService.js b/src/app/services/apiService.js
index c77bf197..aa09661f 100644
--- a/src/app/services/apiService.js
+++ b/src/app/services/apiService.js
@@ -70,7 +70,17 @@
putReinstate: { url: _apiUri + '/organizations/:id/reinstate', method: 'POST', params: { id: '@id' } },
postLeave: { url: _apiUri + '/organizations/:id/leave', method: 'POST', params: { id: '@id' } },
postVerifyBank: { url: _apiUri + '/organizations/:id/verify-bank', method: 'POST', params: { id: '@id' } },
- del: { url: _apiUri + '/organizations/:id/delete', method: 'POST', params: { id: '@id' } }
+ del: { url: _apiUri + '/organizations/:id/delete', method: 'POST', params: { id: '@id' } },
+ postLicense: {
+ url: _apiUri + '/organizations/license',
+ method: 'POST',
+ headers: { 'Content-Type': undefined }
+ },
+ putLicense: {
+ url: _apiUri + '/organizations/:id/license',
+ method: 'POST',
+ headers: { 'Content-Type': undefined }
+ }
});
_service.organizationUsers = $resource(_apiUri + '/organizations/:orgId/users/:id', {}, {
diff --git a/src/app/settings/settingsCreateOrganizationController.js b/src/app/settings/settingsCreateOrganizationController.js
index 42d4c5c4..b22d7917 100644
--- a/src/app/settings/settingsCreateOrganizationController.js
+++ b/src/app/settings/settingsCreateOrganizationController.js
@@ -2,10 +2,11 @@
.module('bit.settings')
.controller('settingsCreateOrganizationController', function ($scope, $state, apiService, cryptoService,
- toastr, $analytics, authService, stripe, constants) {
+ toastr, $analytics, authService, stripe, constants, appSettings, validationService) {
$scope.plans = constants.plans;
$scope.storageGb = constants.storageGb;
$scope.paymentMethod = 'card';
+ $scope.selfHosted = appSettings.selfHosted;
$scope.model = {
plan: 'free',
@@ -52,50 +53,68 @@
}
};
- $scope.submit = function (model) {
- var shareKeyCt = cryptoService.makeShareKeyCt();
-
- if (model.plan === 'free') {
- var freeRequest = {
- name: model.name,
- planType: model.plan,
- key: shareKeyCt,
- billingEmail: model.billingEmail
- };
-
- $scope.submitPromise = apiService.organizations.post(freeRequest).$promise.then(finalizeCreate);
- }
- else {
- var stripeReq = null;
- if ($scope.paymentMethod === 'card') {
- stripeReq = stripe.card.createToken(model.card);
- }
- else if ($scope.paymentMethod === 'bank') {
- model.bank.currency = 'USD';
- model.bank.country = 'US';
- stripeReq = stripe.bankAccount.createToken(model.bank);
- }
- else {
+ $scope.submit = function (model, form) {
+ if ($scope.selfHosted) {
+ var fileEl = document.getElementById('file');
+ var files = fileEl.files;
+ if (!files || !files.length) {
+ validationService.addError(form, 'file', 'Select a license file.', true);
return;
}
- $scope.submitPromise = stripeReq.then(function (response) {
- var paidRequest = {
+ var fd = new FormData();
+ fd.append('license', files[0]);
+ fd.append('key', shareKeyCt);
+
+ $scope.submitPromise = apiService.organizations.postLicense(fd).$promise.then(function (result) {
+ return finalizeCreate();
+ });
+ }
+ else {
+ var shareKeyCt = cryptoService.makeShareKeyCt();
+
+ if (model.plan === 'free') {
+ var freeRequest = {
name: model.name,
- planType: model.interval === 'month' ? $scope.plans[model.plan].monthPlanType :
- $scope.plans[model.plan].annualPlanType,
+ planType: model.plan,
key: shareKeyCt,
- paymentToken: response.id,
- additionalSeats: model.additionalSeats,
- additionalStorageGb: model.additionalStorageGb,
- billingEmail: model.billingEmail,
- businessName: model.ownedBusiness ? model.businessName : null
+ billingEmail: model.billingEmail
};
- return apiService.organizations.post(paidRequest).$promise;
- }, function (err) {
- throw err.message;
- }).then(finalizeCreate);
+ $scope.submitPromise = apiService.organizations.post(freeRequest).$promise.then(finalizeCreate);
+ }
+ else {
+ var stripeReq = null;
+ if ($scope.paymentMethod === 'card') {
+ stripeReq = stripe.card.createToken(model.card);
+ }
+ else if ($scope.paymentMethod === 'bank') {
+ model.bank.currency = 'USD';
+ model.bank.country = 'US';
+ stripeReq = stripe.bankAccount.createToken(model.bank);
+ }
+ else {
+ return;
+ }
+
+ $scope.submitPromise = stripeReq.then(function (response) {
+ var paidRequest = {
+ name: model.name,
+ planType: model.interval === 'month' ? $scope.plans[model.plan].monthPlanType :
+ $scope.plans[model.plan].annualPlanType,
+ key: shareKeyCt,
+ paymentToken: response.id,
+ additionalSeats: model.additionalSeats,
+ additionalStorageGb: model.additionalStorageGb,
+ billingEmail: model.billingEmail,
+ businessName: model.ownedBusiness ? model.businessName : null
+ };
+
+ return apiService.organizations.post(paidRequest).$promise;
+ }, function (err) {
+ throw err.message;
+ }).then(finalizeCreate);
+ }
}
function finalizeCreate(result) {
diff --git a/src/app/settings/views/settingsCreateOrganization.html b/src/app/settings/views/settingsCreateOrganization.html
index 242558cf..3aaa2d41 100644
--- a/src/app/settings/views/settingsCreateOrganization.html
+++ b/src/app/settings/views/settingsCreateOrganization.html
@@ -6,667 +6,691 @@
Organizations allow you to share parts of your vault with others as well as manage related users
for a specific entity (such as a family, small team, or large company).
- |