mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-16 08:14:06 +00:00
119 lines
2.8 KiB
TypeScript
119 lines
2.8 KiB
TypeScript
import { Types } from "mongoose";
|
|
import { MembershipOrg, Organization } from "../models";
|
|
import {
|
|
ACCEPTED,
|
|
} from "../variables";
|
|
import {
|
|
EELicenseService,
|
|
} from "../ee/services";
|
|
import {
|
|
getLicenseServerKey,
|
|
getLicenseServerUrl,
|
|
} from "../config";
|
|
import {
|
|
licenseKeyRequest,
|
|
licenseServerKeyRequest,
|
|
} from "../config/request";
|
|
import {
|
|
createBotOrg
|
|
} from "./botOrg";
|
|
|
|
/**
|
|
* Create an organization with name [name]
|
|
* @param {Object} obj
|
|
* @param {String} obj.name - name of organization to create.
|
|
* @param {String} obj.email - POC email that will receive invoice info
|
|
* @param {Object} organization - new organization
|
|
*/
|
|
export const createOrganization = async ({
|
|
name,
|
|
email,
|
|
}: {
|
|
name: string;
|
|
email: string;
|
|
}) => {
|
|
|
|
const licenseServerKey = await getLicenseServerKey();
|
|
let organization;
|
|
|
|
if (licenseServerKey) {
|
|
const { data: { customerId } } = await licenseServerKeyRequest.post(
|
|
`${await getLicenseServerUrl()}/api/license-server/v1/customers`,
|
|
{
|
|
email,
|
|
name
|
|
}
|
|
);
|
|
|
|
organization = await new Organization({
|
|
name,
|
|
customerId
|
|
}).save();
|
|
|
|
} else {
|
|
organization = await new Organization({
|
|
name,
|
|
}).save();
|
|
}
|
|
|
|
// initialize bot for organization
|
|
await createBotOrg({
|
|
name,
|
|
organizationId: organization._id
|
|
});
|
|
|
|
return organization;
|
|
};
|
|
|
|
/**
|
|
* Update organization subscription quantity to reflect number of members in
|
|
* the organization.
|
|
* @param {Object} obj
|
|
* @param {Number} obj.organizationId - id of subscription's organization
|
|
*/
|
|
export const updateSubscriptionOrgQuantity = async ({
|
|
organizationId,
|
|
}: {
|
|
organizationId: string;
|
|
}) => {
|
|
// find organization
|
|
const organization = await Organization.findOne({
|
|
_id: organizationId,
|
|
});
|
|
|
|
if (organization && organization.customerId) {
|
|
if (EELicenseService.instanceType === "cloud") {
|
|
// instance of Infisical is a cloud instance
|
|
const quantity = await MembershipOrg.countDocuments({
|
|
organization: new Types.ObjectId(organizationId),
|
|
status: ACCEPTED,
|
|
});
|
|
|
|
await licenseServerKeyRequest.patch(
|
|
`${await getLicenseServerUrl()}/api/license-server/v1/customers/${organization.customerId}/cloud-plan`,
|
|
{
|
|
quantity,
|
|
}
|
|
);
|
|
|
|
EELicenseService.localFeatureSet.del(organizationId);
|
|
}
|
|
}
|
|
|
|
if (EELicenseService.instanceType === "enterprise-self-hosted") {
|
|
// instance of Infisical is an enterprise self-hosted instance
|
|
|
|
const usedSeats = await MembershipOrg.countDocuments({
|
|
status: ACCEPTED,
|
|
});
|
|
|
|
await licenseKeyRequest.patch(
|
|
`${await getLicenseServerUrl()}/api/license/v1/license`,
|
|
{
|
|
usedSeats,
|
|
}
|
|
);
|
|
}
|
|
|
|
await EELicenseService.refreshPlan(organizationId);
|
|
}; |