diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index a54c5040433d..5942c4785fa4 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -101,6 +101,9 @@ RUN chown -R nextjs:nextjs ./apps/web/public && chmod -R 755 ./apps/web/public # Create packages/database directory structure with proper ownership for runtime migrations RUN mkdir -p ./packages/database/migrations && chown -R nextjs:nextjs ./packages/database +COPY --from=installer /app/packages/database/package.json ./packages/database/package.json +RUN chown nextjs:nextjs ./packages/database/package.json && chmod 644 ./packages/database/package.json + COPY --from=installer /app/packages/database/schema.prisma ./packages/database/schema.prisma RUN chown nextjs:nextjs ./packages/database/schema.prisma && chmod 644 ./packages/database/schema.prisma diff --git a/apps/web/app/api/v1/integrations/slack/callback/route.ts b/apps/web/app/api/v1/integrations/slack/callback/route.ts index f254e774d78c..83f731e15b21 100644 --- a/apps/web/app/api/v1/integrations/slack/callback/route.ts +++ b/apps/web/app/api/v1/integrations/slack/callback/route.ts @@ -6,7 +6,7 @@ import { } from "@formbricks/types/integration/slack"; import { responses } from "@/app/lib/api/response"; import { TSessionAuthentication, withV1ApiWrapper } from "@/app/lib/api/with-api-logging"; -import { SLACK_CLIENT_ID, SLACK_CLIENT_SECRET, WEBAPP_URL } from "@/lib/constants"; +import { SLACK_CLIENT_ID, SLACK_CLIENT_SECRET, SLACK_REDIRECT_URI, WEBAPP_URL } from "@/lib/constants"; import { hasUserEnvironmentAccess } from "@/lib/environment/auth"; import { createOrUpdateIntegration, getIntegrationByType } from "@/lib/integration/service"; @@ -56,6 +56,7 @@ export const GET = withV1ApiWrapper({ code, client_id: SLACK_CLIENT_ID, client_secret: SLACK_CLIENT_SECRET, + redirect_uri: SLACK_REDIRECT_URI, }; const formBody: string[] = []; for (const property in formData) { diff --git a/apps/web/lib/constants.ts b/apps/web/lib/constants.ts index 7f2e73e57c69..6b8368f08a8f 100644 --- a/apps/web/lib/constants.ts +++ b/apps/web/lib/constants.ts @@ -63,7 +63,8 @@ export const INVITE_DISABLED = env.INVITE_DISABLED === "1"; export const SLACK_CLIENT_SECRET = env.SLACK_CLIENT_SECRET; export const SLACK_CLIENT_ID = env.SLACK_CLIENT_ID; -export const SLACK_AUTH_URL = `https://slack.com/oauth/v2/authorize?client_id=${env.SLACK_CLIENT_ID}&scope=channels:read,chat:write,chat:write.public,chat:write.customize,groups:read`; +export const SLACK_REDIRECT_URI = `${WEBAPP_URL}/api/v1/integrations/slack/callback`; +export const SLACK_AUTH_URL = `https://slack.com/oauth/v2/authorize?client_id=${env.SLACK_CLIENT_ID}&scope=channels:read,chat:write,chat:write.public,chat:write.customize,groups:read&redirect_uri=${SLACK_REDIRECT_URI}`; export const GOOGLE_SHEETS_CLIENT_ID = env.GOOGLE_SHEETS_CLIENT_ID; export const GOOGLE_SHEETS_CLIENT_SECRET = env.GOOGLE_SHEETS_CLIENT_SECRET; diff --git a/packages/storage/src/service.test.ts b/packages/storage/src/service.test.ts index 282228679af2..b77bca3c388a 100644 --- a/packages/storage/src/service.test.ts +++ b/packages/storage/src/service.test.ts @@ -80,7 +80,7 @@ describe("service.ts", () => { Key: "uploads/images/test-file.jpg", Fields: { "Content-Type": "image/jpeg", - // "Content-Encoding": "base64", + success_action_status: "201", }, Conditions: [["content-length-range", 0, mockMaxSize]], }); @@ -175,7 +175,7 @@ describe("service.ts", () => { Key: "uploads/images/test-file.jpg", Fields: { "Content-Type": "image/jpeg", - // "Content-Encoding": "base64", + success_action_status: "201", }, Conditions: [["content-length-range", 0, mockMaxSize]], }); diff --git a/packages/storage/src/service.ts b/packages/storage/src/service.ts index 1612465eca6e..ee7e0c647da8 100644 --- a/packages/storage/src/service.ts +++ b/packages/storage/src/service.ts @@ -66,7 +66,7 @@ export const getSignedUploadUrl = async ( Key: `${filePath}/${fileName}`, Fields: { "Content-Type": contentType, - // "Content-Encoding": "base64", + success_action_status: "201", }, Conditions: postConditions, });