organization signup
This commit is contained in:
parent
27495d5055
commit
880be03211
|
@ -29,11 +29,12 @@
|
|||
del: { url: _apiUri + '/ciphers/:id/delete', method: 'POST', params: { id: '@id' } }
|
||||
});
|
||||
|
||||
_service.shares = $resource(_apiUri + '/shares/:id', {}, {
|
||||
_service.organizations = $resource(_apiUri + '/organizations/:id', {}, {
|
||||
get: { method: 'GET', params: { id: '@id' } },
|
||||
listCipher: { url: _apiUri + '/shares/:cipherId', method: 'GET', params: { cipherId: '@cipherId' } },
|
||||
list: { method: 'GET', params: {} },
|
||||
post: { method: 'POST', params: {} },
|
||||
del: { url: _apiUri + '/shares/:id/delete', method: 'POST', params: { id: '@id' } }
|
||||
put: { method: 'POST', params: { id: '@id' } },
|
||||
del: { url: _apiUri + '/organizations/:id/delete', method: 'POST', params: { id: '@id' } }
|
||||
});
|
||||
|
||||
_service.accounts = $resource(_apiUri + '/accounts', {}, {
|
||||
|
|
|
@ -132,7 +132,7 @@ angular
|
|||
};
|
||||
|
||||
_service.makeShareKey = function () {
|
||||
return forge.random.getBytesSync(32);
|
||||
return _service.rsaEncrypt(forge.random.getBytesSync(32));
|
||||
};
|
||||
|
||||
_service.hashPassword = function (password, key) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
angular
|
||||
.module('bit.settings')
|
||||
|
||||
.controller('settingsController', function ($scope, $uibModal, apiService, toastr, authService) {
|
||||
.controller('settingsController', function ($scope, $state, $uibModal, apiService, toastr, authService) {
|
||||
$scope.model = {
|
||||
profile: {},
|
||||
twoFactorEnabled: false,
|
||||
|
@ -70,6 +70,10 @@
|
|||
});
|
||||
};
|
||||
|
||||
$scope.viewOrganization = function (id) {
|
||||
$state.go('backend.org.dashboard');
|
||||
};
|
||||
|
||||
$scope.twoFactor = function () {
|
||||
var twoFactorModal = $uibModal.open({
|
||||
animation: true,
|
||||
|
|
|
@ -1,17 +1,27 @@
|
|||
angular
|
||||
.module('bit.settings')
|
||||
|
||||
.controller('settingsCreateOrganizationController', function ($scope, apiService, $uibModalInstance, cryptoService,
|
||||
authService, toastr, $analytics) {
|
||||
.controller('settingsCreateOrganizationController', function ($scope, $state, apiService, $uibModalInstance, cryptoService,
|
||||
toastr, $analytics) {
|
||||
$analytics.eventTrack('settingsCreateOrganizationController', { category: 'Modal' });
|
||||
|
||||
$scope.model = {
|
||||
plan: 'Free'
|
||||
};
|
||||
|
||||
$scope.submit = function (model) {
|
||||
var request = {
|
||||
masterPasswordHash: cryptoService.hashPassword(model.masterPassword)
|
||||
name: model.name,
|
||||
planType: model.plan,
|
||||
key: cryptoService.makeShareKey()
|
||||
};
|
||||
|
||||
$scope.submitPromise = apiService.organizations.post(request, function () {
|
||||
$uibModalInstance.dismiss('cancel');
|
||||
$analytics.eventTrack('Created Organization');
|
||||
$state.go('backend.org.dashboard').then(function () {
|
||||
toastr.success('Your new organization is ready to go!', 'Organization Created');
|
||||
});
|
||||
}).$promise;
|
||||
};
|
||||
|
||||
|
|
|
@ -118,23 +118,26 @@
|
|||
No organizations yet for your account.
|
||||
</div>
|
||||
<div class="table-responsive" ng-show="model.organizations && model.organizations.length">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 75px; min-width: 75px;"></th>
|
||||
<th>Name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<table class="table table-striped table-hover table-selectable">
|
||||
<tbody>
|
||||
<tr ng-repeat="org in model.organizations | orderBy: ['name']">
|
||||
<td></td>
|
||||
<td>{{org.Name}}</td>
|
||||
<td class="actions" style="width: 40px; min-width: 40px;">
|
||||
<button type="button" ng-click="viewOrganization(org.id)" class="btn btn-link btn-table"
|
||||
uib-tooltip="View/Manage">
|
||||
<i class="fa fa-lg fa-share"></i>
|
||||
</button>
|
||||
</td>
|
||||
<td ng-click="viewOrganization(org.id)">
|
||||
<span ng-click="$event.stopPropagation()">
|
||||
{{org.name}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-footer" ng-show="!model.organizations || !model.organizations.length">
|
||||
<div class="box-footer">
|
||||
<button type="button" ng-click="createOrganization()" class="btn btn-default btn-flat">
|
||||
Create an Organization
|
||||
</button>
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
</div>
|
||||
<form name="createOrgForm" ng-submit="createOrgForm.$valid && submit(model)" api-form="submitPromise">
|
||||
<div class="modal-body">
|
||||
<p>Create an organization.</p>
|
||||
<div class="callout callout-danger validation-errors" ng-show="createOrgForm.$errors">
|
||||
<h4>Errors have occured</h4>
|
||||
<ul>
|
||||
|
@ -16,6 +15,29 @@
|
|||
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control"
|
||||
required api-field />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" ng-model="model.plan" name="PlanType" value="Free" checked>
|
||||
Free
|
||||
</label>
|
||||
<p class="help-block">Share with 1 other user.</p>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" ng-model="model.plan" name="PlanType" value="Premium">
|
||||
Premium ($1 /month)
|
||||
</label>
|
||||
<p class="help-block">Share with up to 5 users.</p>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" ng-model="model.plan" name="PlanType" value="Teams">
|
||||
Teams ($2 /user per month)
|
||||
</label>
|
||||
<p class="help-block">Share with as many users as you need.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="createOrgForm.$loading">
|
||||
|
|
Loading…
Reference in New Issue