From 1650e1bb748462d5e47decee6a73e5b9052ef673 Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Sun, 1 Sep 2024 18:56:13 -0600
Subject: [PATCH] feat: add permission to access to git providers
---
.../compose/general/generic/show.tsx | 5 +-
.../remove-git-provider.tsx} | 0
.../settings/git/show-git-providers.tsx | 4 +-
.../settings/github/gitlab-setup.tsx | 135 -
.../settings/users/add-permissions.tsx | 23 +
.../drizzle/0054_short_hellfire_club.sql | 1 +
apps/dokploy/drizzle/meta/0054_snapshot.json | 3539 +++++++++++++++++
apps/dokploy/drizzle/meta/_journal.json | 7 +
.../dashboard/settings/git-providers.tsx | 8 +-
.../server/api/services/application.ts | 1 -
apps/dokploy/server/db/schema/user.ts | 4 +
11 files changed, 3581 insertions(+), 146 deletions(-)
rename apps/dokploy/components/dashboard/settings/{github/remove-github-app.tsx => git/remove-git-provider.tsx} (100%)
delete mode 100644 apps/dokploy/components/dashboard/settings/github/gitlab-setup.tsx
create mode 100644 apps/dokploy/drizzle/0054_short_hellfire_club.sql
create mode 100644 apps/dokploy/drizzle/meta/0054_snapshot.json
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/show.tsx b/apps/dokploy/components/dashboard/compose/general/generic/show.tsx
index 22a5a5400..bbbd42fc6 100644
--- a/apps/dokploy/components/dashboard/compose/general/generic/show.tsx
+++ b/apps/dokploy/components/dashboard/compose/general/generic/show.tsx
@@ -1,7 +1,7 @@
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { api } from "@/utils/api";
-import { GitBranch, LockIcon } from "lucide-react";
+import { CodeIcon, GitBranch, LockIcon } from "lucide-react";
import Link from "next/link";
import { useState } from "react";
import { ComposeFileEditor } from "../compose-file-editor";
@@ -87,8 +87,9 @@ export const ShowProviderFormCompose = ({ composeId }: Props) => {
+
Raw
diff --git a/apps/dokploy/components/dashboard/settings/github/remove-github-app.tsx b/apps/dokploy/components/dashboard/settings/git/remove-git-provider.tsx
similarity index 100%
rename from apps/dokploy/components/dashboard/settings/github/remove-github-app.tsx
rename to apps/dokploy/components/dashboard/settings/git/remove-git-provider.tsx
diff --git a/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx b/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx
index 95244d5ad..a1d94f38c 100644
--- a/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx
+++ b/apps/dokploy/components/dashboard/settings/git/show-git-providers.tsx
@@ -10,7 +10,7 @@ import { AddGithubProvider } from "./add-github-provider";
import { AddBitbucketProvider } from "./add-bitbucket-provider";
import { api } from "@/utils/api";
import Link from "next/link";
-import { RemoveGitProvider } from "../github/remove-github-app";
+import { RemoveGitProvider } from "./remove-git-provider";
import { useUrl } from "@/utils/hooks/use-url";
export const ShowGitProviders = () => {
@@ -32,7 +32,7 @@ export const ShowGitProviders = () => {
Git Providers
- Connect your Git Providers to use it for login.
+ Connect your Git provider for authentication.
diff --git a/apps/dokploy/components/dashboard/settings/github/gitlab-setup.tsx b/apps/dokploy/components/dashboard/settings/github/gitlab-setup.tsx
deleted file mode 100644
index 354348db3..000000000
--- a/apps/dokploy/components/dashboard/settings/github/gitlab-setup.tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Button, buttonVariants } from "@/components/ui/button";
-import {
- Card,
- CardContent,
- CardDescription,
- CardHeader,
- CardTitle,
-} from "@/components/ui/card";
-import { Input } from "@/components/ui/input";
-import { BadgeCheck, ExternalLink } from "lucide-react";
-import Link from "next/link";
-import { api } from "@/utils/api";
-
-export const GitlabSetup = () => {
- const [applicationId, setApplicationId] = useState("");
- const [applicationSecret, setApplicationSecret] = useState("");
- const haveGitlabConfigured = false;
- const [url, setUrl] = useState("");
- // const { data: haveGitlabConfigured } =
- // api.admin.haveGitlabConfigured.useQuery();
- const { data: adminData } = api.admin.one.useQuery();
-
- useEffect(() => {
- const protocolAndHost = `${window.location.protocol}//${window.location.host}`;
-
- setUrl(`${protocolAndHost}`);
- }, [adminData]);
-
- // const createGitlabApp = api.admin.createGitlabApp.useMutation();
-
- const handleCreateApp = async () => {
- // try {
- // // await createGitlabApp.mutateAsync({
- // // applicationId,
- // // applicationSecret,
- // // callbackUrl: `${window.location.origin}/api/gitlab/callback`,
- // // });
- // // Refetch the configuration status
- // // await haveGitlabConfigured.refetch();
- // } catch (error) {
- // console.error("Failed to create GitLab app", error);
- // }
- };
-
- return (
-
-
- Configure GitLab
-
- Setup your GitLab account to access your repositories.
-
-
-
- {haveGitlabConfigured ? (
-
-
-
- GitLab account configured successfully.
-
-
-
-
-
-
- Manage GitLab App
-
-
-
- ) : (
-
-
- To integrate your GitLab account, you need to create a new
- application in your GitLab settings. Follow these steps:
-
-
- -
- Go to your GitLab profile settings{" "}
-
-
-
-
- - Navigate to Applications
- -
- Create a new application with the following details:
-
- - Name: Dokploy
- - Redirect URI: {`${url}/api/gitlab/callback`}
- - Scopes: api, read_user, read_repository
-
-
- -
- After creating, you'll receive an Application ID and Secret
-
-
-
setApplicationId(e.target.value)}
- />
-
setApplicationSecret(e.target.value)}
- />
-
-
- )}
-
-
- );
-};
diff --git a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx
index fd3511ec4..3684c814b 100644
--- a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx
+++ b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx
@@ -40,6 +40,7 @@ const addPermissions = z.object({
canAccessToDocker: z.boolean().optional().default(false),
canAccessToAPI: z.boolean().optional().default(false),
canAccessToSSHKeys: z.boolean().optional().default(false),
+ canAccessToGitProviders: z.boolean().optional().default(false),
});
type AddPermissions = z.infer;
@@ -84,6 +85,7 @@ export const AddUserPermissions = ({ userId }: Props) => {
canAccessToDocker: data.canAccessToDocker,
canAccessToAPI: data.canAccessToAPI,
canAccessToSSHKeys: data.canAccessToSSHKeys,
+ canAccessToGitProviders: data.canAccessToGitProviders,
});
}
}, [form, form.formState.isSubmitSuccessful, form.reset, data]);
@@ -101,6 +103,7 @@ export const AddUserPermissions = ({ userId }: Props) => {
canAccessToDocker: data.canAccessToDocker,
canAccessToAPI: data.canAccessToAPI,
canAccessToSSHKeys: data.canAccessToSSHKeys,
+ canAccessToGitProviders: data.canAccessToGitProviders,
})
.then(async () => {
toast.success("Permissions updated");
@@ -293,6 +296,26 @@ export const AddUserPermissions = ({ userId }: Props) => {
)}
/>
+ (
+
+
+ Access to Git Providers
+
+ Allow to users to access to the Git Providers section
+
+
+
+
+
+
+ )}
+ />
{
return (
- {/* */}
- {/* */}
);
};
@@ -41,7 +37,7 @@ export async function getServerSideProps(
},
};
}
- const { req, res, resolvedUrl } = ctx;
+ const { req, res } = ctx;
const helpers = createServerSideHelpers({
router: appRouter,
ctx: {
@@ -63,7 +59,7 @@ export async function getServerSideProps(
authId: auth.id,
});
- if (!user.canAccessToSSHKeys) {
+ if (!user.canAccessToGitProviders) {
return {
redirect: {
permanent: true,
diff --git a/apps/dokploy/server/api/services/application.ts b/apps/dokploy/server/api/services/application.ts
index ea56e09a1..2bbd5b3c2 100644
--- a/apps/dokploy/server/api/services/application.ts
+++ b/apps/dokploy/server/api/services/application.ts
@@ -146,7 +146,6 @@ export const deployApplication = async ({
}) => {
const application = await findApplicationById(applicationId);
const buildLink = `${await getDokployUrl()}/dashboard/project/${application.projectId}/services/application/${application.applicationId}?tab=deployments`;
- const admin = await findAdmin();
const deployment = await createDeployment({
applicationId: applicationId,
title: titleLog,
diff --git a/apps/dokploy/server/db/schema/user.ts b/apps/dokploy/server/db/schema/user.ts
index 2710be837..fec3d1277 100644
--- a/apps/dokploy/server/db/schema/user.ts
+++ b/apps/dokploy/server/db/schema/user.ts
@@ -34,6 +34,9 @@ export const users = pgTable("user", {
canDeleteServices: boolean("canDeleteServices").notNull().default(false),
canAccessToDocker: boolean("canAccessToDocker").notNull().default(false),
canAccessToAPI: boolean("canAccessToAPI").notNull().default(false),
+ canAccessToGitProviders: boolean("canAccessToGitProviders")
+ .notNull()
+ .default(false),
canAccessToTraefikFiles: boolean("canAccessToTraefikFiles")
.notNull()
.default(false),
@@ -109,6 +112,7 @@ export const apiAssignPermissions = createSchema
canAccessToDocker: true,
canAccessToAPI: true,
canAccessToSSHKeys: true,
+ canAccessToGitProviders: true,
})
.required();