Skip to content

Commit 4d7a5f6

Browse files
authored
Add authentik provider (#152)
* Add authentik provider * Add authentik provider * Add authentik provider * Add authentik provider
1 parent b4a953f commit 4d7a5f6

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

.env.example

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ DATABASE_URL="postgresql://splitpro:password@localhost:54321/splitpro"
2323
NEXTAUTH_SECRET="secret"
2424
NEXTAUTH_URL="http://localhost:3000"
2525

26-
# Auth providers
27-
# Specify them separated by commas
28-
# Available providers : GOOGLE,EMAIL
29-
AUTH_PROVIDERS=GOOGLE,EMAIL
30-
3126
# Enable sending invites
3227
ENABLE_SENDING_INVITES=false
3328
#********* END OF REQUIRED ENV VARS *********
@@ -45,6 +40,12 @@ EMAIL_SERVER_PASSWORD=
4540
GOOGLE_CLIENT_ID=
4641
GOOGLE_CLIENT_SECRET=
4742

43+
# Authentic Providder : https://next-auth.js.org/providers/authentik
44+
# Issuer: should include the slug without a trailing slash – e.g., https://my-authentik-domain.com/application/o/splitpro
45+
AUTHENTIK_ID=
46+
AUTHENTIK_SECRET=
47+
AUTHENTIK_ISSUER=
48+
4849
# Storage: any S3 compatible storage will work, for self hosting can use minio
4950
# If you're using minio for dev, you can generate access keys from the console http://localhost:9001/access-keys/new-account
5051
# R2_ACCESS_KEY="access-key"

docker/prod/compose.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ services:
3030
- DATABASE_URL=${DATABASE_URL:?err}
3131
- NEXTAUTH_URL=${NEXTAUTH_URL:?err}
3232
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?err}
33-
- AUTH_PROVIDERS=${AUTH_PROVIDERS:?err}
3433
- ENABLE_SENDING_INVITES=${ENABLE_SENDING_INVITES:?err}
3534
- FROM_EMAIL=${FROM_EMAIL}
3635
- EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST}
@@ -39,6 +38,9 @@ services:
3938
- EMAIL_SERVER_PASSWORD=${EMAIL_SERVER_PASSWORD}
4039
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
4140
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
41+
- AUTHENTIK_ID=${AUTHENTIK_ID}
42+
- AUTHENTIK_SECRET=${AUTHENTIK_SECRET}
43+
- AUTHENTIK_ISSUER=${AUTHENTIK_ISSUER}
4244
- R2_ACCESS_KEY=${R2_ACCESS_KEY}
4345
- R2_SECRET_KEY=${R2_SECRET_KEY}
4446
- R2_BUCKET=${R2_BUCKET}

src/env.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ export const env = createEnv({
3131
EMAIL_SERVER_PASSWORD: z.string().optional(),
3232
GOOGLE_CLIENT_ID: z.string().optional(),
3333
GOOGLE_CLIENT_SECRET: z.string().optional(),
34+
AUTHENTIK_ID: z.string().optional(),
35+
AUTHENTIK_SECRET: z.string().optional(),
36+
AUTHENTIK_ISSUER: z.string().optional(),
3437
R2_ACCESS_KEY: z.string().optional(),
3538
R2_SECRET_KEY: z.string().optional(),
3639
R2_BUCKET: z.string().optional(),
@@ -69,6 +72,9 @@ export const env = createEnv({
6972
EMAIL_SERVER_PASSWORD: process.env.EMAIL_SERVER_PASSWORD,
7073
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
7174
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
75+
AUTHENTIK_ID: process.env.AUTHENTIK_ID,
76+
AUTHENTIK_SECRET: process.env.AUTHENTIK_SECRET,
77+
AUTHENTIK_ISSUER: process.env.AUTHENTIK_ISSUER,
7278
R2_ACCESS_KEY: process.env.R2_ACCESS_KEY,
7379
R2_SECRET_KEY: process.env.R2_SECRET_KEY,
7480
R2_BUCKET: process.env.R2_BUCKET,

src/server/auth.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getServerSession, type DefaultSession, type NextAuthOptions } from 'nex
44
import DiscordProvider from 'next-auth/providers/discord';
55
import GoogleProvider from 'next-auth/providers/google';
66
import EmailProvider from 'next-auth/providers/email';
7+
import AuthentikProvider from 'next-auth/providers/authentik';
78

89
import { env } from '~/env';
910
import { db } from '~/server/db';
@@ -144,6 +145,17 @@ function getProviders() {
144145
);
145146
}
146147

148+
if (env.AUTHENTIK_ID && env.AUTHENTIK_SECRET && env.AUTHENTIK_ISSUER) {
149+
providersList.push(
150+
AuthentikProvider({
151+
clientId: env.AUTHENTIK_ID,
152+
clientSecret: env.AUTHENTIK_SECRET,
153+
issuer: env.AUTHENTIK_ISSUER,
154+
allowDangerousEmailAccountLinking: true,
155+
})
156+
);
157+
}
158+
147159
return providersList;
148160
}
149161

0 commit comments

Comments
 (0)