From a4a62f23b6595166fb660134a258f6569d7f512e Mon Sep 17 00:00:00 2001 From: Laurin Wolf Date: Tue, 26 Apr 2022 09:50:02 +0200 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=F0=9F=94=92=20add=20gitlab=20pro?= =?UTF-8?q?vider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/builder/assets/logos/GitlabLogo.tsx | 13 +++++++++++++ apps/builder/assets/logos/index.tsx | 1 + .../components/auth/SocialLoginButtons.tsx | 18 +++++++++++++++++- apps/builder/pages/api/auth/[...nextauth].ts | 15 +++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 apps/builder/assets/logos/GitlabLogo.tsx diff --git a/apps/builder/assets/logos/GitlabLogo.tsx b/apps/builder/assets/logos/GitlabLogo.tsx new file mode 100644 index 000000000..97d0253c6 --- /dev/null +++ b/apps/builder/assets/logos/GitlabLogo.tsx @@ -0,0 +1,13 @@ +import { IconProps, Icon } from '@chakra-ui/react' + +export const GitlabLogo = (props: IconProps) => ( + + + + + + + + + +) diff --git a/apps/builder/assets/logos/index.tsx b/apps/builder/assets/logos/index.tsx index e582658dd..454eacdcb 100644 --- a/apps/builder/assets/logos/index.tsx +++ b/apps/builder/assets/logos/index.tsx @@ -1,4 +1,5 @@ export * from './GiphyLogo' +export * from './GitlabLogo' export * from './GoogleAnalyticsLogo' export * from './GoogleSheetsLogo' export * from './GtmLogo' diff --git a/apps/builder/components/auth/SocialLoginButtons.tsx b/apps/builder/components/auth/SocialLoginButtons.tsx index 51f167cc9..0c9805cbf 100644 --- a/apps/builder/components/auth/SocialLoginButtons.tsx +++ b/apps/builder/components/auth/SocialLoginButtons.tsx @@ -4,7 +4,7 @@ import { signIn, useSession } from 'next-auth/react' import { useRouter } from 'next/router' import React from 'react' import { stringify } from 'qs' -import { FacebookLogo, GoogleLogo } from 'assets/logos' +import { FacebookLogo, GoogleLogo, GitlabLogo } from 'assets/logos' export const SocialLoginButtons = () => { const { query } = useRouter() @@ -25,6 +25,11 @@ export const SocialLoginButtons = () => { callbackUrl: `/typebots?${stringify(query)}`, }) + const handleGitlabClick = async () => + signIn('gitlab', { + callbackUrl: `/typebots?${stringify(query)}`, + }) + return ( {process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID && ( @@ -60,6 +65,17 @@ export const SocialLoginButtons = () => { Continue with Facebook )} + {process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID && ( + + )} ) } diff --git a/apps/builder/pages/api/auth/[...nextauth].ts b/apps/builder/pages/api/auth/[...nextauth].ts index a7f0583d0..c15527c1a 100644 --- a/apps/builder/pages/api/auth/[...nextauth].ts +++ b/apps/builder/pages/api/auth/[...nextauth].ts @@ -1,6 +1,7 @@ import NextAuth from 'next-auth' import EmailProvider from 'next-auth/providers/email' import GitHubProvider from 'next-auth/providers/github' +import GitlabProvider from 'next-auth/providers/gitlab' import GoogleProvider from 'next-auth/providers/google' import FacebookProvider from 'next-auth/providers/facebook' import prisma from 'libs/prisma' @@ -60,6 +61,20 @@ if ( }) ) +if ( + process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID && + process.env.GITLAB_CLIENT_SECRET +) { + const BASE_URL = process.env.NEXT_PUBLIC_GITLAB_BASE_URL || 'gitlab.com' + providers.push(GitlabProvider({ + clientId: process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID, + clientSecret: process.env.GITLAB_CLIENT_SECRET, + authorization: `${BASE_URL}/oauth/authorize?scope=read_api`, + token: `${BASE_URL}/oauth/token`, + userinfo: `${BASE_URL}/api/v4/user`, + })) +} + const handler = (req: NextApiRequest, res: NextApiResponse) => { if (req.method === 'HEAD') { res.status(200)