mirror of
https://github.com/bitwarden/server.git
synced 2025-06-05 10:40:30 -05:00
146 lines
7.0 KiB
Plaintext
146 lines
7.0 KiB
Plaintext
@inject IWebHostEnvironment HostingEnvironment
|
|
@using Bit.Admin.Utilities
|
|
@using Bit.Core.Billing.Enums
|
|
@using Bit.Core.Enums
|
|
@using Bit.Core.Utilities
|
|
@model OrganizationEditModel
|
|
|
|
<script>
|
|
(() => {
|
|
document.getElementById('@(nameof(Model.PlanType))').addEventListener('change', () => {
|
|
const selectEl = document.getElementById('@(nameof(Model.PlanType))');
|
|
const selectText = selectEl.options[selectEl.selectedIndex].text;
|
|
document.getElementById('@(nameof(Model.Plan))').value = selectText;
|
|
togglePlanFeatures(selectEl.options[selectEl.selectedIndex].value);
|
|
});
|
|
document.getElementById('gateway-customer-link')?.addEventListener('click', () => {
|
|
const gateway = document.getElementById('@(nameof(Model.Gateway))');
|
|
const customerId = document.getElementById('@(nameof(Model.GatewayCustomerId))');
|
|
if (!gateway || gateway.value === '' || !customerId || customerId.value === '') {
|
|
return;
|
|
}
|
|
if (gateway.value === '@((byte)GatewayType.Stripe)') {
|
|
const url = `@(HostingEnvironment.GetStripeUrl())/customers/${customerId.value}/`;
|
|
window.open(url, '_blank');
|
|
} else if (gateway.value === '@((byte)GatewayType.Braintree)') {
|
|
const url = `@(HostingEnvironment.GetBraintreeMerchantUrl())/@Model.BraintreeMerchantId/${customerId.value}`;
|
|
window.open(url, '_blank');
|
|
}
|
|
});
|
|
document.getElementById('gateway-subscription-link')?.addEventListener('click', () => {
|
|
const gateway = document.getElementById('@(nameof(Model.Gateway))');
|
|
const subId = document.getElementById('@(nameof(Model.GatewaySubscriptionId))');
|
|
if (!gateway || gateway.value === '' || !subId || subId.value === '') {
|
|
return;
|
|
}
|
|
if (gateway.value === '@((byte)GatewayType.Stripe)') {
|
|
const url = `@(HostingEnvironment.GetStripeUrl())/subscriptions/${subId.value}/`;
|
|
window.open(url, '_blank');
|
|
} else if (gateway.value === '@((byte)GatewayType.Braintree)') {
|
|
const url = `@(HostingEnvironment.GetBraintreeMerchantUrl())/@Model.BraintreeMerchantId/subscriptions/${subId.value}`;
|
|
window.open(url, '_blank');
|
|
}
|
|
});
|
|
document.getElementById('@(nameof(Model.UseSecretsManager))').addEventListener('change', (event) => {
|
|
document.getElementById('organization-secrets-configuration').hidden = !event.target.checked;
|
|
|
|
if (event.target.checked) {
|
|
setInitialSecretsManagerConfiguration();
|
|
return;
|
|
}
|
|
|
|
clearSecretsManagerConfiguration();
|
|
});
|
|
})();
|
|
|
|
function togglePlanFeatures(planType) {
|
|
const plan = getPlan(planType);
|
|
|
|
if (!plan) {
|
|
return;
|
|
}
|
|
|
|
console.log(plan);
|
|
|
|
document.getElementById('@(nameof(Model.SelfHost))').checked = plan.hasSelfHost;
|
|
|
|
document.getElementById('@(nameof(Model.Use2fa))').checked = plan.has2fa;
|
|
document.getElementById('@(nameof(Model.UseApi))').checked = plan.hasApi;
|
|
document.getElementById('@(nameof(Model.UseGroups))').checked = plan.hasGroups;
|
|
document.getElementById('@(nameof(Model.UsePolicies))').checked = plan.hasPolicies;
|
|
document.getElementById('@(nameof(Model.UseSso))').checked = plan.hasSso;
|
|
document.getElementById('@(nameof(Model.UseOrganizationDomains))').checked = plan.hasOrganizationDomains;
|
|
document.getElementById('@(nameof(Model.UseScim))').checked = plan.hasScim;
|
|
document.getElementById('@(nameof(Model.UseDirectory))').checked = plan.hasDirectory;
|
|
document.getElementById('@(nameof(Model.UseEvents))').checked = plan.hasEvents;
|
|
document.getElementById('@(nameof(Model.UseResetPassword))').checked = plan.hasResetPassword;
|
|
document.getElementById('@(nameof(Model.UseCustomPermissions))').checked = plan.hasCustomPermissions;
|
|
// use key connector is intentionally omitted
|
|
|
|
document.getElementById('@(nameof(Model.UseTotp))').checked = plan.hasTotp;
|
|
document.getElementById('@(nameof(Model.UsersGetPremium))').checked = plan.usersGetPremium;
|
|
|
|
document.getElementById('@(nameof(Model.MaxStorageGb))').value =
|
|
document.getElementById('@(nameof(Model.MaxStorageGb))').value ||
|
|
plan.passwordManager.baseStorageGb ||
|
|
1;
|
|
document.getElementById('@(nameof(Model.Seats))').value = document.getElementById('@(nameof(Model.Seats))').value ||
|
|
plan.passwordManager.baseSeats ||
|
|
1;
|
|
}
|
|
|
|
function unlinkProvider(id) {
|
|
if (confirm('Are you sure you want to unlink this organization from its provider?')) {
|
|
$.ajax({
|
|
type: "POST",
|
|
url: `@Url.Action("UnlinkOrganizationFromProvider", "Organizations")?id=${id}`,
|
|
dataType: 'json',
|
|
contentType: false,
|
|
processData: false,
|
|
success: function (response) {
|
|
alert("Successfully unlinked provider");
|
|
window.location.href = `@Url.Action("Edit", "Organizations")?id=${id}`;
|
|
},
|
|
error: function (response) {
|
|
alert("Error!");
|
|
}
|
|
});
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/***
|
|
* Set Secrets Manager values based on current usage (for migrating from SM beta or reinstating an old subscription)
|
|
*/
|
|
function setInitialSecretsManagerConfiguration() {
|
|
const planType = document.getElementById('@(nameof(Model.PlanType))').value;
|
|
|
|
// Seats
|
|
document.getElementById('@(nameof(Model.SmSeats))').value = Math.max(@Model.OccupiedSmSeatsCount, 1);
|
|
|
|
// Service accounts
|
|
const baseServiceAccounts = getPlan(planType)?.secretsManager?.baseServiceAccount ?? 0;
|
|
if (planType !== '@((byte)PlanType.Free)' && @Model.ServiceAccountsCount > baseServiceAccounts) {
|
|
document.getElementById('@(nameof(Model.SmServiceAccounts))').value = @Model.ServiceAccountsCount;
|
|
} else {
|
|
document.getElementById('@(nameof(Model.SmServiceAccounts))').value = baseServiceAccounts;
|
|
}
|
|
|
|
// Clear autoscale values (no defaults)
|
|
document.getElementById('@(nameof(Model.MaxAutoscaleSmSeats))').value = '';
|
|
document.getElementById('@(nameof(Model.MaxAutoscaleSmServiceAccounts))').value = '';
|
|
}
|
|
|
|
function clearSecretsManagerConfiguration() {
|
|
document.getElementById('@(nameof(Model.SmSeats))').value = '';
|
|
document.getElementById('@(nameof(Model.SmServiceAccounts))').value = '';
|
|
document.getElementById('@(nameof(Model.MaxAutoscaleSmSeats))').value = '';
|
|
document.getElementById('@(nameof(Model.MaxAutoscaleSmServiceAccounts))').value = '';
|
|
}
|
|
|
|
function getPlan(planType) {
|
|
const plans = @Html.Raw(Json.Serialize(Model.GetPlansHelper()));
|
|
return plans.find(p => p.type == planType);
|
|
}
|
|
</script>
|