Skip to content

Commit

Permalink
misc: added license checks for oidc sso
Browse files Browse the repository at this point in the history
  • Loading branch information
sheensantoscapadngan committed Jun 17, 2024
1 parent 2c237ee commit d79ffbe
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 17 deletions.
1 change: 1 addition & 0 deletions backend/src/ee/services/license/licence-fns.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({
auditLogStreams: false,
auditLogStreamLimit: 3,
samlSSO: false,
oidcSSO: false,
scim: false,
ldap: false,
groups: false,
Expand Down
1 change: 1 addition & 0 deletions backend/src/ee/services/license/license-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export type TFeatureSet = {
auditLogStreams: false;
auditLogStreamLimit: 3;
samlSSO: false;
oidcSSO: false;
scim: false;
ldap: false;
groups: false;
Expand Down
18 changes: 15 additions & 3 deletions backend/src/ee/services/oidc/oidc-config-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,6 @@ export const oidcConfigServiceFactory = ({
}
);

// TODO: Sheen update oidc config
// await samlConfigDAL.update({ orgId }, { lastUsed: new Date() });

if (user.email && !user.isEmailVerified) {
const token = await tokenService.createTokenForUser({
type: TokenType.TOKEN_EMAIL_VERIFICATION,
Expand Down Expand Up @@ -315,12 +312,20 @@ export const oidcConfigServiceFactory = ({
const org = await orgDAL.findOne({
slug: orgSlug
});

if (!org) {
throw new BadRequestError({
message: "Organization not found"
});
}

const plan = await licenseService.getPlan(org.id);
if (!plan.oidcSSO)
throw new BadRequestError({
message:
"Failed to update OIDC SSO configuration due to plan restriction. Upgrade plan to update SSO configuration."
});

const { permission } = await permissionService.getOrgPermission(
actor,
actorId,
Expand Down Expand Up @@ -396,6 +401,13 @@ export const oidcConfigServiceFactory = ({
});
}

const plan = await licenseService.getPlan(org.id);
if (!plan.oidcSSO)
throw new BadRequestError({
message:
"Failed to create OIDC SSO configuration due to plan restriction. Upgrade plan to update SSO configuration."
});

const { permission } = await permissionService.getOrgPermission(
actor,
actorId,
Expand Down
17 changes: 9 additions & 8 deletions frontend/src/hooks/api/subscriptions/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,19 @@ export type SubscriptionPlan = {
workspacesUsed: number;
environmentLimit: number;
samlSSO: boolean;
oidcSSO: boolean;
scim: boolean;
ldap: boolean;
groups: boolean;
status:
| "incomplete"
| "incomplete_expired"
| "trialing"
| "active"
| "past_due"
| "canceled"
| "unpaid"
| null;
| "incomplete"
| "incomplete_expired"
| "trialing"
| "active"
| "past_due"
| "canceled"
| "unpaid"
| null;
trial_end: number | null;
has_used_trial: boolean;
};
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { createNotification } from "@app/components/notifications";
import { OrgPermissionCan } from "@app/components/permissions";
import { Button, Switch } from "@app/components/v2";
import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@app/context";
import { Button, Switch, UpgradePlanModal } from "@app/components/v2";
import {
OrgPermissionActions,
OrgPermissionSubjects,
useOrganization,
useSubscription
} from "@app/context";
import { useGetOIDCConfig } from "@app/hooks/api";
import { useUpdateOIDCConfig } from "@app/hooks/api/oidcConfig/mutations";
import { usePopUp } from "@app/hooks/usePopUp";
Expand All @@ -10,17 +15,24 @@ import { OIDCModal } from "./OIDCModal";

export const OrgOIDCSection = (): JSX.Element => {
const { currentOrg } = useOrganization();
const { subscription } = useSubscription();

const { data, isLoading } = useGetOIDCConfig(currentOrg?.slug ?? "");
const { mutateAsync } = useUpdateOIDCConfig();
const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([
"addOIDC"
"addOIDC",
"upgradePlan"
] as const);

const handleOIDCToggle = async (value: boolean) => {
try {
if (!currentOrg?.id) return;

if (!subscription?.oidcSSO) {
handlePopUpOpen("upgradePlan");
return;
}

await mutateAsync({
orgSlug: currentOrg?.slug,
isActive: value
Expand All @@ -40,10 +52,10 @@ export const OrgOIDCSection = (): JSX.Element => {
};

const addOidcButtonClick = async () => {
try {
if (subscription?.oidcSSO && currentOrg) {
handlePopUpOpen("addOIDC");
} catch (err) {
console.error(err);
} else {
handlePopUpOpen("upgradePlan");
}
};

Expand Down Expand Up @@ -96,6 +108,11 @@ export const OrgOIDCSection = (): JSX.Element => {
handlePopUpClose={handlePopUpClose}
handlePopUpToggle={handlePopUpToggle}
/>
<UpgradePlanModal
isOpen={popUp.upgradePlan.isOpen}
onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)}
text="You can use OIDC SSO if you switch to Infisical's Pro plan."
/>
</>
);
};

0 comments on commit d79ffbe

Please sign in to comment.