Compare commits

..

21 Commits

Author SHA1 Message Date
a74f0170da Merge pull request #2954 from Infisical/fix/addressed-reported-migration-related-ui-issues
fix: resolved conditions permission not getting added from new policy…
2025-01-08 22:26:45 +08:00
=
a0fad34a6d fix: resolved conditions permission not getting added from new policy button 2025-01-08 19:48:13 +05:30
0b9d890a51 Merge pull request #2953 from Infisical/fix/addressed-reported-migration-related-ui-issues
fix: address sso redirect and project role creation
2025-01-08 19:20:19 +08:00
5ba507bc1c misc: made installation ID optional for github 2025-01-08 19:17:38 +08:00
=
0ecc196e5d feat: added missing coerce in azure key vault 2025-01-08 16:30:46 +05:30
=
ddac9f7cc4 feat: made all redirect route to coerce it 2025-01-08 16:27:56 +05:30
34354994d8 fix: address sso redirect and project role creation 2025-01-08 18:29:25 +08:00
1576358805 Merge pull request #2947 from Infisical/auth0-saml
Add Support for Auth0 SAML
2025-01-07 15:04:44 -05:00
e6103d2d3f docs: update initial saml setup steps 2025-01-07 11:45:07 -08:00
8bf8bc77c9 Merge pull request #2951 from akhilmhdh/fix/broken-image
feat: resolved app not loading on org no access
2025-01-07 14:29:47 -05:00
=
3219723149 feat: resolved app not loading on org no access 2025-01-08 00:55:22 +05:30
6d3793beff Merge pull request #2949 from akhilmhdh/fix/broken-image
Fixed broke image
2025-01-08 00:18:38 +05:30
0df41f3391 Merge pull request #2948 from Infisical/fix-user-groups-plan
Improvement: Clarify Enterprise Plan for User Group Feature Upgrade Modal
2025-01-07 10:44:32 -08:00
=
1acac9d479 feat: resolved broken gitlab image and hidden the standalone endpoints from api documentation 2025-01-08 00:14:31 +05:30
0cefd6f837 Run linter 2025-01-08 01:41:22 +07:00
5e9dc0b98d clarify enterprise plan for user group feature upgrade modal 2025-01-07 10:38:09 -08:00
f632847dc6 Merge branch 'main', remote-tracking branch 'origin' into auth0-saml 2025-01-08 01:35:11 +07:00
faa6d1cf40 Add support for Auth0 SAML 2025-01-08 01:34:03 +07:00
7fb18870e3 Merge pull request #2946 from akhilmhdh/feat/updated-saml-error-message
Updated saml error message
2025-01-07 10:57:03 -05:00
ae841715e5 update saml error message 2025-01-07 10:56:44 -05:00
=
baac87c16a feat: updated saml error message on missing email or first name attribute 2025-01-07 21:17:25 +05:30
43 changed files with 166 additions and 42 deletions

View File

@ -84,7 +84,10 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
samlConfig.audience = `spn:${ssoConfig.issuer}`; samlConfig.audience = `spn:${ssoConfig.issuer}`;
} }
} }
if (ssoConfig.authProvider === SamlProviders.GOOGLE_SAML) { if (
ssoConfig.authProvider === SamlProviders.GOOGLE_SAML ||
ssoConfig.authProvider === SamlProviders.AUTH0_SAML
) {
samlConfig.wantAssertionsSigned = false; samlConfig.wantAssertionsSigned = false;
} }
@ -123,7 +126,10 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
`email: ${email} firstName: ${profile.firstName as string}` `email: ${email} firstName: ${profile.firstName as string}`
); );
throw new Error("Invalid saml request. Missing email or first name"); throw new BadRequestError({
message:
"Missing email or first name. Please double check your SAML attribute mapping for the selected provider."
});
} }
const userMetadata = Object.keys(profile.attributes || {}) const userMetadata = Object.keys(profile.attributes || {})

View File

@ -246,8 +246,7 @@ export const licenseServiceFactory = ({
}; };
const getOrgPlan = async ({ orgId, actor, actorId, actorOrgId, actorAuthMethod, projectId }: TOrgPlanDTO) => { const getOrgPlan = async ({ orgId, actor, actorId, actorOrgId, actorAuthMethod, projectId }: TOrgPlanDTO) => {
const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId); await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId);
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Read, OrgPermissionSubjects.Billing);
const plan = await getPlan(orgId, projectId); const plan = await getPlan(orgId, projectId);
return plan; return plan;
}; };

View File

@ -6,7 +6,8 @@ export enum SamlProviders {
AZURE_SAML = "azure-saml", AZURE_SAML = "azure-saml",
JUMPCLOUD_SAML = "jumpcloud-saml", JUMPCLOUD_SAML = "jumpcloud-saml",
GOOGLE_SAML = "google-saml", GOOGLE_SAML = "google-saml",
KEYCLOAK_SAML = "keycloak-saml" KEYCLOAK_SAML = "keycloak-saml",
AUTH0_SAML = "auth0-saml"
} }
export type TCreateSamlCfgDTO = { export type TCreateSamlCfgDTO = {

View File

@ -21,6 +21,9 @@ export const registerServeUI = async (
server.route({ server.route({
method: "GET", method: "GET",
url: "/runtime-ui-env.js", url: "/runtime-ui-env.js",
schema: {
hide: true
},
handler: (_req, res) => { handler: (_req, res) => {
const appCfg = getConfig(); const appCfg = getConfig();
void res.type("application/javascript"); void res.type("application/javascript");
@ -43,12 +46,19 @@ export const registerServeUI = async (
wildcard: false wildcard: false
}); });
server.get("/*", (request, reply) => { server.route({
if (request.url.startsWith("/api")) { method: "GET",
reply.callNotFound(); url: "/*",
return; schema: {
hide: true
},
handler: (request, reply) => {
if (request.url.startsWith("/api")) {
reply.callNotFound();
return;
}
void reply.sendFile("index.html");
} }
void reply.sendFile("index.html");
}); });
} }
}; };

View File

@ -15,7 +15,7 @@ Prerequisites:
<Steps> <Steps>
<Step title="Create a SCIM token in Infisical"> <Step title="Create a SCIM token in Infisical">
In Infisical, head to your Organization Settings > Authentication > SCIM Configuration and In Infisical, head to your Organization Settings > Security > SCIM Configuration and
press the **Enable SCIM provisioning** toggle to allow Azure to provision/deprovision users for your organization. press the **Enable SCIM provisioning** toggle to allow Azure to provision/deprovision users for your organization.
![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png) ![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png)

View File

@ -15,7 +15,7 @@ Prerequisites:
<Steps> <Steps>
<Step title="Create a SCIM token in Infisical"> <Step title="Create a SCIM token in Infisical">
In Infisical, head to your Organization Settings > Authentication > SCIM Configuration and In Infisical, head to your Organization Settings > Security > SCIM Configuration and
press the **Enable SCIM provisioning** toggle to allow JumpCloud to provision/deprovision users and user groups for your organization. press the **Enable SCIM provisioning** toggle to allow JumpCloud to provision/deprovision users and user groups for your organization.
![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png) ![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png)

View File

@ -15,7 +15,7 @@ Prerequisites:
<Steps> <Steps>
<Step title="Create a SCIM token in Infisical"> <Step title="Create a SCIM token in Infisical">
In Infisical, head to your Organization Settings > Authentication > SCIM Configuration and In Infisical, head to your Organization Settings > Security > SCIM Configuration and
press the **Enable SCIM provisioning** toggle to allow Okta to provision/deprovision users and user groups for your organization. press the **Enable SCIM provisioning** toggle to allow Okta to provision/deprovision users and user groups for your organization.
![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png) ![SCIM enable provisioning](/images/platform/scim/scim-enable-provisioning.png)

View File

@ -0,0 +1,93 @@
---
title: "Auth0 SAML"
description: "Learn how to configure Auth0 SAML for Infisical SSO."
---
<Info>
Auth0 SAML SSO feature is a paid feature. If you're using Infisical Cloud,
then it is available under the **Pro Tier**. If you're self-hosting Infisical,
then you should contact sales@infisical.com to purchase an enterprise license
to use it.
</Info>
<Steps>
<Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select Auth0, then click **Connect** again.
Next, note the **Application Callback URL** and **Audience** to use when configuring the Auth0 SAML application.
![Auth0 SAML initial configuration](../../../images/sso/auth0-saml/init-config.png)
</Step>
<Step title="Create a SAML application in Auth0">
2.1. In your Auth0 account, head to Applications and create an application.
![Auth0 SAML app creation](../../../images/sso/auth0-saml/create-application.png)
Select **Regular Web Application** and press **Create**.
![Auth0 SAML app creation](../../../images/sso/auth0-saml/create-application-2.png)
2.2. In the Application head to Settings > Application URIs and add the **Application Callback URL** from step 1 into the **Allowed Callback URLs** field.
![Auth0 SAML allowed callback URLs](../../../images/sso/auth0-saml/auth0-config.png)
2.3. In the Application head to Addons > SAML2 Web App and copy the **Issuer**, **Identity Provider Login URL**, and **Identity Provider Certificate** from the **Usage** tab.
![Auth0 SAML config](../../../images/sso/auth0-saml/auth0-config-2.png)
2.4. Back in Infisical, set **Issuer**, **Identity Provider Login URL**, and **Certificate** to the corresponding items from step 2.3.
![Auth0 SAML Infisical config](../../../images/sso/auth0-saml/infisical-config.png)
2.5. Back in Auth0, in the **Settings** tab, set the **Application Callback URL** to the **Application Callback URL** from step 1
and update the **Settings** field with the JSON under the picture below (replacing `<audience-from-infisical>` with the **Audience** from step 1).
![Auth0 SAML config](../../../images/sso/auth0-saml/auth0-config-3.png)
```json
{
"audience": "<audience-from-infisical>",
"mappings": {
"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email",
"given_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/firstName",
"family_name": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/lastName"
},
"signatureAlgorithm": "rsa-sha256",
"digestAlgorithm": "sha256",
"signResponse": true
}
```
Click **Save**.
</Step>
<Step title="Enable SAML SSO in Infisical">
Enabling SAML SSO allows members in your organization to log into Infisical via Auth0.
![Auth0 SAML enable](../../../images/sso/auth0-saml/enable-saml.png)
</Step>
<Step title="Enforce SAML SSO in Infisical">
Enforcing SAML SSO ensures that members in your organization can only access Infisical
by logging into the organization via Auth0.
To enforce SAML SSO, you're required to test out the SAML connection by successfully authenticating at least one Auth0 user with Infisical;
Once you've completed this requirement, you can toggle the **Enforce SAML SSO** button to enforce SAML SSO.
</Step>
</Steps>
<Tip>
If you are only using one organization on your Infisical instance, you can configure a default organization in the [Server Admin Console](../admin-panel/server-admin#default-organization) to expedite SAML login.
</Tip>
<Note>
If you're configuring SAML SSO on a self-hosted instance of Infisical, make
sure to set the `AUTH_SECRET` and `SITE_URL` environment variable for it to
work:
<div class="height:1px;"/>
- `AUTH_SECRET`: A secret key used for signing and verifying JWT. This
can be a random 32-byte base64 string generated with `openssl rand -base64
32`.
<div class="height:1px;"/>
- `SITE_URL`: The absolute URL of your self-hosted instance of Infisical including the protocol (e.g. https://app.infisical.com)
</Note>

View File

@ -12,7 +12,7 @@ description: "Learn how to configure Microsoft Entra ID for Infisical SSO."
<Steps> <Steps>
<Step title="Prepare the SAML SSO configuration in Infisical"> <Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to your Organization Settings > Authentication > SAML SSO Configuration and select **Set up SAML SSO**. In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select Azure / Entra, then click **Connect** again.
Next, copy the **Reply URL (Assertion Consumer Service URL)** and **Identifier (Entity ID)** to use when configuring the Azure SAML application. Next, copy the **Reply URL (Assertion Consumer Service URL)** and **Identifier (Entity ID)** to use when configuring the Azure SAML application.

View File

@ -12,7 +12,7 @@ description: "Learn how to configure Google SAML for Infisical SSO."
<Steps> <Steps>
<Step title="Prepare the SAML SSO configuration in Infisical"> <Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to your Organization Settings > Authentication > SAML SSO Configuration and select **Set up SAML SSO**. In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select Google, then click **Connect** again.
Next, note the **ACS URL** and **SP Entity ID** to use when configuring the Google SAML application. Next, note the **ACS URL** and **SP Entity ID** to use when configuring the Google SAML application.

View File

@ -12,7 +12,7 @@ description: "Learn how to configure JumpCloud SAML for Infisical SSO."
<Steps> <Steps>
<Step title="Prepare the SAML SSO configuration in Infisical"> <Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to your Organization Settings > Authentication > SAML SSO Configuration and select **Set up SAML SSO**. In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select JumpCloud, then click **Connect** again.
Next, copy the **ACS URL** and **SP Entity ID** to use when configuring the JumpCloud SAML application. Next, copy the **ACS URL** and **SP Entity ID** to use when configuring the JumpCloud SAML application.

View File

@ -12,7 +12,7 @@ description: "Learn how to configure Keycloak SAML for Infisical SSO."
<Steps> <Steps>
<Step title="Prepare the SAML SSO configuration in Infisical"> <Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to your Organization Settings > Authentication > SAML SSO Configuration and select **Manage**. In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select Keycloak, then click **Connect** again.
![Keycloak SAML organization security section](../../../images/sso/keycloak/org-security-section.png) ![Keycloak SAML organization security section](../../../images/sso/keycloak/org-security-section.png)

View File

@ -12,7 +12,7 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO."
<Steps> <Steps>
<Step title="Prepare the SAML SSO configuration in Infisical"> <Step title="Prepare the SAML SSO configuration in Infisical">
In Infisical, head to your Organization Settings > Authentication > SAML SSO Configuration and select **Set up SAML SSO**. In Infisical, head to Organization Settings > Security and click **Connect** for SAML under the Connect to an Identity Provider section. Select Okta, then click **Connect** again.
Next, copy the **Single sign-on URL** and **Audience URI (SP Entity ID)** to use when configuring the Okta SAML 2.0 application. Next, copy the **Single sign-on URL** and **Audience URI (SP Entity ID)** to use when configuring the Okta SAML 2.0 application.
![Okta SAML initial configuration](../../../images/sso/okta/init-config.png) ![Okta SAML initial configuration](../../../images/sso/okta/init-config.png)

View File

@ -28,6 +28,7 @@ Infisical supports these and many other identity providers:
- [JumpCloud SAML](/documentation/platform/sso/jumpcloud) - [JumpCloud SAML](/documentation/platform/sso/jumpcloud)
- [Keycloak SAML](/documentation/platform/sso/keycloak-saml) - [Keycloak SAML](/documentation/platform/sso/keycloak-saml)
- [Google SAML](/documentation/platform/sso/google-saml) - [Google SAML](/documentation/platform/sso/google-saml)
- [Auth0 SAML](/documentation/platform/sso/auth0-saml)
- [Keycloak OIDC](/documentation/platform/sso/keycloak-oidc) - [Keycloak OIDC](/documentation/platform/sso/keycloak-oidc)
- [Auth0 OIDC](/documentation/platform/sso/auth0-oidc) - [Auth0 OIDC](/documentation/platform/sso/auth0-oidc)
- [General OIDC](/documentation/platform/sso/general-oidc) - [General OIDC](/documentation/platform/sso/general-oidc)

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

View File

@ -248,6 +248,7 @@
"documentation/platform/sso/jumpcloud", "documentation/platform/sso/jumpcloud",
"documentation/platform/sso/keycloak-saml", "documentation/platform/sso/keycloak-saml",
"documentation/platform/sso/google-saml", "documentation/platform/sso/google-saml",
"documentation/platform/sso/auth0-saml",
"documentation/platform/sso/keycloak-oidc", "documentation/platform/sso/keycloak-oidc",
"documentation/platform/sso/auth0-oidc", "documentation/platform/sso/auth0-oidc",
"documentation/platform/sso/general-oidc" "documentation/platform/sso/general-oidc"

View File

@ -48,7 +48,8 @@ export const InitialStep = ({ setStep, email, setEmail, password, setPassword }:
const redirectUrl = `/api/v1/sso/redirect/saml2/organizations/${orgSlug}${ const redirectUrl = `/api/v1/sso/redirect/saml2/organizations/${orgSlug}${
callbackPort ? `?callback_port=${callbackPort}` : "" callbackPort ? `?callback_port=${callbackPort}` : ""
}`; }`;
navigate({ to: redirectUrl });
window.location.assign(redirectUrl);
}; };
const redirectToOidc = (orgSlug: string) => { const redirectToOidc = (orgSlug: string) => {
@ -56,7 +57,8 @@ export const InitialStep = ({ setStep, email, setEmail, password, setPassword }:
const redirectUrl = `/api/v1/sso/oidc/login?orgSlug=${orgSlug}${ const redirectUrl = `/api/v1/sso/oidc/login?orgSlug=${orgSlug}${
callbackPort ? `&callbackPort=${callbackPort}` : "" callbackPort ? `&callbackPort=${callbackPort}` : ""
}`; }`;
navigate({ to: redirectUrl });
window.location.assign(redirectUrl);
}; };
useEffect(() => { useEffect(() => {

View File

@ -27,7 +27,7 @@ export const OrgGroupsSection = () => {
if (!subscription?.groups) { if (!subscription?.groups) {
handlePopUpOpen("upgradePlan", { handlePopUpOpen("upgradePlan", {
description: description:
"You can manage users more efficiently with groups if you upgrade your Infisical plan." "You can manage users more efficiently with groups if you upgrade your Infisical plan to an Enterprise license."
}); });
} else { } else {
handlePopUpOpen("group"); handlePopUpOpen("group");

View File

@ -5,9 +5,9 @@ import { z } from "zod";
import { GitHubOAuthCallbackPage } from "./GithubOauthCallbackPage"; import { GitHubOAuthCallbackPage } from "./GithubOauthCallbackPage";
const GitHubOAuthCallbackPageQueryParamsSchema = z.object({ const GitHubOAuthCallbackPageQueryParamsSchema = z.object({
code: z.string().catch(""), code: z.coerce.string().catch(""),
state: z.string().catch(""), state: z.string().catch(""),
installation_id: z.coerce.string().catch("") installation_id: z.coerce.string().optional().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -25,7 +25,8 @@ enum AuthProvider {
AZURE_SAML = "azure-saml", AZURE_SAML = "azure-saml",
JUMPCLOUD_SAML = "jumpcloud-saml", JUMPCLOUD_SAML = "jumpcloud-saml",
KEYCLOAK_SAML = "keycloak-saml", KEYCLOAK_SAML = "keycloak-saml",
GOOGLE_SAML = "google-saml" GOOGLE_SAML = "google-saml",
AUTH0_SAML = "auth0-saml"
} }
const ssoAuthProviders = [ const ssoAuthProviders = [
@ -33,7 +34,8 @@ const ssoAuthProviders = [
{ label: "Azure / Entra SAML", value: AuthProvider.AZURE_SAML }, { label: "Azure / Entra SAML", value: AuthProvider.AZURE_SAML },
{ label: "JumpCloud SAML", value: AuthProvider.JUMPCLOUD_SAML }, { label: "JumpCloud SAML", value: AuthProvider.JUMPCLOUD_SAML },
{ label: "Keycloak SAML", value: AuthProvider.KEYCLOAK_SAML }, { label: "Keycloak SAML", value: AuthProvider.KEYCLOAK_SAML },
{ label: "Google SAML", value: AuthProvider.GOOGLE_SAML } { label: "Google SAML", value: AuthProvider.GOOGLE_SAML },
{ label: "Auth0 SAML", value: AuthProvider.AUTH0_SAML }
]; ];
const schema = z const schema = z
@ -191,6 +193,15 @@ export const SSOModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDelet
issuer: "Issuer", issuer: "Issuer",
issuerPlaceholder: window.origin issuerPlaceholder: window.origin
}; };
case AuthProvider.AUTH0_SAML:
return {
acsUrl: "Application Callback URL",
entityId: "Audience",
entryPoint: "Identity Provider Login URL",
entryPointPlaceholder: "https://xxx.auth0.com/samlp/xxx",
issuer: "Issuer",
issuerPlaceholder: "urn:xxx-xxx.us.auth0.com"
};
default: default:
return { return {
acsUrl: "ACS URL", acsUrl: "ACS URL",

View File

@ -33,7 +33,7 @@ export const GroupsSection = () => {
if (!subscription?.groups) { if (!subscription?.groups) {
handlePopUpOpen("upgradePlan", { handlePopUpOpen("upgradePlan", {
description: description:
"You can manage users more efficiently with groups if you upgrade your Infisical plan." "You can manage users more efficiently with groups if you upgrade your Infisical plan to an Enterprise license."
}); });
} else { } else {
handlePopUpOpen("group"); handlePopUpOpen("group");

View File

@ -25,7 +25,7 @@ import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@a
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { useDeleteProjectRole, useGetProjectRoles } from "@app/hooks/api"; import { useDeleteProjectRole, useGetProjectRoles } from "@app/hooks/api";
import { TProjectRole } from "@app/hooks/api/roles/types"; import { TProjectRole } from "@app/hooks/api/roles/types";
import { RoleModal } from "@app/pages/organization/RoleByIDPage/components"; import { RoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/RoleModal";
export const ProjectRoleList = () => { export const ProjectRoleList = () => {
const navigate = useNavigate(); const navigate = useNavigate();

View File

@ -201,7 +201,7 @@ export const IdentityProjectAdditionalPrivilegeModifySection = ({
`permissions.${selectedSubject}`, `permissions.${selectedSubject}`,
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-error akhilmhdh: this is because of ts collision with both // @ts-ignore-error akhilmhdh: this is because of ts collision with both
[...rootPolicyValue, ...[]], [...rootPolicyValue, {}],
{ shouldDirty: true, shouldTouch: true } { shouldDirty: true, shouldTouch: true }
); );
} else { } else {

View File

@ -173,7 +173,7 @@ export const MembershipProjectAdditionalPrivilegeModifySection = ({
`permissions.${selectedSubject}`, `permissions.${selectedSubject}`,
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-error akhilmhdh: this is because of ts collision with both // @ts-ignore-error akhilmhdh: this is because of ts collision with both
[...rootPolicyValue, ...[]], [...rootPolicyValue, {}],
{ shouldDirty: true, shouldTouch: true } { shouldDirty: true, shouldTouch: true }
); );
} else { } else {

View File

@ -98,7 +98,7 @@ export const RolePermissionsSection = ({ roleSlug, isDisabled }: Props) => {
`permissions.${selectedSubject}`, `permissions.${selectedSubject}`,
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore-error akhilmhdh: this is because of ts collision with both // @ts-ignore-error akhilmhdh: this is because of ts collision with both
[...rootPolicyValue, ...[]], [...rootPolicyValue, {}],
{ shouldDirty: true, shouldTouch: true } { shouldDirty: true, shouldTouch: true }
); );
} else { } else {

View File

@ -6,7 +6,7 @@ import { AzureAppConfigurationOauthCallbackPage } from "./AzureAppConfigurationO
export const AzureAppConfigurationOauthCallbackPageQueryParamsSchema = z.object({ export const AzureAppConfigurationOauthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { AzureKeyVaultOauthCallbackPage } from "./AzureKeyVaultOauthCallback";
export const AzureKeyVaultOauthCallbackQueryParamsSchema = z.object({ export const AzureKeyVaultOauthCallbackQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { BitbucketOauthCallbackPage } from "./BitbucketOauthCallbackPage";
export const BitbucketOauthCallbackQueryParamsSchema = z.object({ export const BitbucketOauthCallbackQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { GcpSecretManagerOauthCallbackPage } from "./GcpSecretManagerOauthCallba
export const GcpSecretManagerOAuthCallbackPageQueryParamsSchema = z.object({ export const GcpSecretManagerOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,8 +6,8 @@ import { GithubOauthCallbackPage } from "./GithubOauthCallbackPage";
export const GithubOAuthCallbackPageQueryParamsSchema = z.object({ export const GithubOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
installation_id: z.coerce.string().catch(""), installation_id: z.coerce.string().optional().catch(""),
code: z.string().catch("") code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -72,7 +72,7 @@ export const GitlabAuthorizePage = () => {
> >
<div className="flex flex-row items-center"> <div className="flex flex-row items-center">
<div className="flex items-center pb-0.5"> <div className="flex items-center pb-0.5">
<img src="/images/integrations/Gitlab.png" height={28} width={28} alt="Gitlab logo" /> <img src="/images/integrations/GitLab.png" height={28} width={28} alt="Gitlab logo" />
</div> </div>
<span className="ml-2.5">GitLab Integration </span> <span className="ml-2.5">GitLab Integration </span>
<a <a

View File

@ -197,7 +197,7 @@ export const GitlabConfigurePage = () => {
> >
<div className="flex flex-row items-center"> <div className="flex flex-row items-center">
<div className="flex items-center pb-0.5"> <div className="flex items-center pb-0.5">
<img src="/images/integrations/Gitlab.png" height={28} width={28} alt="Gitlab logo" /> <img src="/images/integrations/GitLab.png" height={28} width={28} alt="Gitlab logo" />
</div> </div>
<span className="ml-2.5">GitLab Integration </span> <span className="ml-2.5">GitLab Integration </span>
<a <a

View File

@ -6,7 +6,7 @@ import { GitLabOAuthCallbackPage } from "./GitlabOauthCallbackPage";
export const GitlabOAuthCallbackPageQueryParamsSchema = z.object({ export const GitlabOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { HerokuOAuthCallbackPage } from "./HerokuOauthCallbackPage";
export const HerokuOAuthCallbackPageQueryParamsSchema = z.object({ export const HerokuOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { NetlifyOauthCallbackPage } from "./NetlifyOauthCallbackPage";
export const NetlifyOAuthCallbackPageQueryParamsSchema = z.object({ export const NetlifyOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(

View File

@ -6,7 +6,7 @@ import { VercelOauthCallbackPage } from "./VercelOauthCallbackPage";
export const VercelOAuthCallbackPageQueryParamsSchema = z.object({ export const VercelOAuthCallbackPageQueryParamsSchema = z.object({
state: z.string().catch(""), state: z.string().catch(""),
code: z.string() code: z.coerce.string().catch("")
}); });
export const Route = createFileRoute( export const Route = createFileRoute(