diff --git a/.cursor/rules/security-patterns.mdc b/.cursor/rules/security-patterns.mdc
index 85c48c035..9cdbcaa0c 100644
--- a/.cursor/rules/security-patterns.mdc
+++ b/.cursor/rules/security-patterns.mdc
@@ -21,6 +21,7 @@ Coolify implements **defense-in-depth security** with multiple layers of protect
- **Supported Providers**:
- Google OAuth
- Microsoft Azure AD
+ - Clerk
- Authentik
- Discord
- GitHub (via GitHub Apps)
diff --git a/.cursor/rules/technology-stack.mdc b/.cursor/rules/technology-stack.mdc
index 3082b9c3e..81a2e3bb3 100644
--- a/.cursor/rules/technology-stack.mdc
+++ b/.cursor/rules/technology-stack.mdc
@@ -90,7 +90,7 @@ alwaysApply: false
- **Purpose**: OAuth provider integration
- **Providers**:
- GitHub, GitLab, Google
- - Microsoft Azure, Authentik, Discord
+ - Microsoft Azure, Authentik, Discord, Clerk
- Custom OAuth implementations
## Background Processing
diff --git a/app/Models/OauthSetting.php b/app/Models/OauthSetting.php
index bfd332c87..08e08d85b 100644
--- a/app/Models/OauthSetting.php
+++ b/app/Models/OauthSetting.php
@@ -27,6 +27,7 @@ class OauthSetting extends Model
case 'azure':
return filled($this->client_id) && filled($this->client_secret) && filled($this->tenant);
case 'authentik':
+ case 'clerk':
return filled($this->client_id) && filled($this->client_secret) && filled($this->base_url);
default:
return filled($this->client_id) && filled($this->client_secret);
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 0678100df..48c3c3e4f 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -9,6 +9,7 @@ use Illuminate\Foundation\Events\MaintenanceModeEnabled;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use SocialiteProviders\Authentik\AuthentikExtendSocialite;
use SocialiteProviders\Azure\AzureExtendSocialite;
+use SocialiteProviders\Clerk\ClerkExtendSocialite;
use SocialiteProviders\Discord\DiscordExtendSocialite;
use SocialiteProviders\Google\GoogleExtendSocialite;
use SocialiteProviders\Infomaniak\InfomaniakExtendSocialite;
@@ -26,6 +27,7 @@ class EventServiceProvider extends ServiceProvider
SocialiteWasCalled::class => [
AzureExtendSocialite::class.'@handle',
AuthentikExtendSocialite::class.'@handle',
+ ClerkExtendSocialite::class.'@handle',
DiscordExtendSocialite::class.'@handle',
GoogleExtendSocialite::class.'@handle',
InfomaniakExtendSocialite::class.'@handle',
diff --git a/bootstrap/helpers/socialite.php b/bootstrap/helpers/socialite.php
index 2ed1ed1c3..3ae70c9d6 100644
--- a/bootstrap/helpers/socialite.php
+++ b/bootstrap/helpers/socialite.php
@@ -22,15 +22,15 @@ function get_socialite_provider(string $provider)
return Socialite::driver('azure')->setConfig($azure_config);
}
- if ($provider == 'authentik') {
- $authentik_config = new \SocialiteProviders\Manager\Config(
+ if ($provider == 'authentik' || $provider == 'clerk') {
+ $authentik_clerk_config = new \SocialiteProviders\Manager\Config(
$oauth_setting->client_id,
$oauth_setting->client_secret,
$oauth_setting->redirect_uri,
['base_url' => $oauth_setting->base_url],
);
- return Socialite::driver('authentik')->setConfig($authentik_config);
+ return Socialite::driver($provider)->setConfig($authentik_clerk_config);
}
if ($provider == 'google') {
diff --git a/composer.json b/composer.json
index 2495dc1c8..bfe2b98b4 100644
--- a/composer.json
+++ b/composer.json
@@ -39,6 +39,7 @@
"resend/resend-laravel": "^0.17.0",
"sentry/sentry-laravel": "^4.13",
"socialiteproviders/authentik": "^5.2",
+ "socialiteproviders/clerk": "^5.0",
"socialiteproviders/discord": "^4.2",
"socialiteproviders/google": "^4.1",
"socialiteproviders/infomaniak": "^4.0",
diff --git a/composer.lock b/composer.lock
index 5794ac482..22a0b2f35 100644
--- a/composer.lock
+++ b/composer.lock
@@ -7483,6 +7483,17 @@
"time": "2023-11-07T22:21:16+00:00"
},
{
+ "name": "socialiteproviders/clerk",
+ "version": "5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SocialiteProviders/Clerk.git",
+ "reference": "41e123036001ff37851b9622a910010c0e487d6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SocialiteProviders/Clerk/zipball/41e123036001ff37851b9622a910010c0e487d6a",
+ "reference": "41e123036001ff37851b9622a910010c0e487d6a",
"name": "socialiteproviders/discord",
"version": "4.2.0",
"source": {
@@ -7498,12 +7509,13 @@
},
"require": {
"ext-json": "*",
- "php": "^7.4 || ^8.0",
- "socialiteproviders/manager": "~4.0"
+ "php": "^8.0",
+ "socialiteproviders/manager": "^4.4"
},
"type": "library",
"autoload": {
"psr-4": {
+ "SocialiteProviders\\Clerk\\": ""
"SocialiteProviders\\Discord\\": ""
}
},
@@ -7513,6 +7525,13 @@
],
"authors": [
{
+ "name": "Ignacio Cano",
+ "email": "dev@nacho.sh"
+ }
+ ],
+ "description": "Clerk OAuth2 Provider for Laravel Socialite",
+ "keywords": [
+ "clerk",
"name": "Christopher Eklund",
"email": "eklundchristopher@gmail.com"
}
@@ -7526,6 +7545,11 @@
"socialite"
],
"support": {
+ "docs": "https://socialiteproviders.com/clerk",
+ "issues": "https://github.com/socialiteproviders/providers/issues",
+ "source": "https://github.com/socialiteproviders/providers"
+ },
+ "time": "2024-02-19T12:17:59+00:00"
"docs": "https://socialiteproviders.com/discord",
"issues": "https://github.com/socialiteproviders/providers/issues",
"source": "https://github.com/socialiteproviders/providers"
diff --git a/config/services.php b/config/services.php
index d1c4a3699..cb1929bec 100644
--- a/config/services.php
+++ b/config/services.php
@@ -46,6 +46,13 @@ return [
'redirect' => env('AUTHENTIK_REDIRECT_URI'),
],
+ 'clerk' => [
+ 'client_id' => env('CLERK_CLIENT_ID'),
+ 'client_secret' => env('CLERK_CLIENT_SECRET'),
+ 'redirect' => env('CLERK_REDIRECT_URI'),
+ 'base_url' => env('CLERK_BASE_URL'),
+ ],
+
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
diff --git a/database/seeders/OauthSettingSeeder.php b/database/seeders/OauthSettingSeeder.php
index 9adcb04d4..06b37ca44 100644
--- a/database/seeders/OauthSettingSeeder.php
+++ b/database/seeders/OauthSettingSeeder.php
@@ -17,6 +17,7 @@ class OauthSettingSeeder extends Seeder
$providers = collect([
'azure',
'bitbucket',
+ 'clerk',
'discord',
'github',
'gitlab',
diff --git a/lang/ar.json b/lang/ar.json
index 3a0e32fc3..263924c24 100644
--- a/lang/ar.json
+++ b/lang/ar.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "تسجيل الدخول باستخدام Authentik",
"auth.login.azure": "تسجيل الدخول باستخدام Microsoft",
"auth.login.bitbucket": "تسجيل الدخول باستخدام Bitbucket",
+ "auth.login.clerk": "تسجيل الدخول باستخدام Clerk",
"auth.login.discord": "تسجيل الدخول باستخدام Discord",
"auth.login.github": "تسجيل الدخول باستخدام GitHub",
"auth.login.gitlab": "تسجيل الدخول باستخدام Gitlab",
diff --git a/lang/az.json b/lang/az.json
index 4bd437f6a..92f56ddbc 100644
--- a/lang/az.json
+++ b/lang/az.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Authentik ilə daxil ol",
"auth.login.azure": "Azure ilə daxil ol",
"auth.login.bitbucket": "Bitbucket ilə daxil ol",
+ "auth.login.clerk": "Clerk ilə daxil ol",
"auth.login.discord": "Discord ilə daxil ol",
"auth.login.github": "Github ilə daxil ol",
"auth.login.gitlab": "GitLab ilə daxil ol",
diff --git a/lang/cs.json b/lang/cs.json
index 83f7c3c55..00455aa81 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -2,6 +2,7 @@
"auth.login": "Přihlásit se",
"auth.login.azure": "Přihlásit se pomocí Microsoftu",
"auth.login.bitbucket": "Přihlásit se pomocí Bitbucketu",
+ "auth.login.clerk": "Přihlásit se pomocí Clerk",
"auth.login.discord": "Přihlásit se pomocí Discordu",
"auth.login.github": "Přihlásit se pomocí GitHubu",
"auth.login.gitlab": "Přihlásit se pomocí Gitlabu",
diff --git a/lang/de.json b/lang/de.json
index 8388a2b08..9bb11fdb4 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -2,6 +2,7 @@
"auth.login": "Anmelden",
"auth.login.azure": "Mit Microsoft anmelden",
"auth.login.bitbucket": "Mit Bitbucket anmelden",
+ "auth.login.clerk": "Mit Clerk anmelden",
"auth.login.discord": "Mit Discord anmelden",
"auth.login.github": "Mit GitHub anmelden",
"auth.login.gitlab": "Mit GitLab anmelden",
diff --git a/lang/en.json b/lang/en.json
index d127de5a9..ae7c4a2c2 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Login with Authentik",
"auth.login.azure": "Login with Microsoft",
"auth.login.bitbucket": "Login with Bitbucket",
+ "auth.login.clerk": "Login with Clerk",
"auth.login.discord": "Login with Discord",
"auth.login.github": "Login with GitHub",
"auth.login.gitlab": "Login with Gitlab",
diff --git a/lang/es.json b/lang/es.json
index fde5b8805..73363a9bf 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -2,6 +2,7 @@
"auth.login": "Iniciar Sesión",
"auth.login.azure": "Acceder con Microsoft",
"auth.login.bitbucket": "Acceder con Bitbucket",
+ "auth.login.clerk": "Acceder con Clerk",
"auth.login.discord": "Acceder con Discord",
"auth.login.github": "Acceder con GitHub",
"auth.login.gitlab": "Acceder con Gitlab",
diff --git a/lang/fa.json b/lang/fa.json
index 48d7facc3..d68049e77 100644
--- a/lang/fa.json
+++ b/lang/fa.json
@@ -2,6 +2,7 @@
"auth.login": "ورود",
"auth.login.azure": "ورود با مایکروسافت",
"auth.login.bitbucket": "ورود با Bitbucket",
+ "auth.login.clerk": "ورود با Clerk",
"auth.login.discord": "ورود با Discord",
"auth.login.github": "ورود با گیت هاب",
"auth.login.gitlab": "ورود با گیت لب",
diff --git a/lang/fr.json b/lang/fr.json
index ef2b26b9b..2516d0f69 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Connexion avec Authentik",
"auth.login.azure": "Connexion avec Microsoft",
"auth.login.bitbucket": "Connexion avec Bitbucket",
+ "auth.login.clerk": "Connexion avec Clerk",
"auth.login.discord": "Connexion avec Discord",
"auth.login.github": "Connexion avec GitHub",
"auth.login.gitlab": "Connexion avec Gitlab",
diff --git a/lang/id.json b/lang/id.json
index c77d65679..b0e38197a 100644
--- a/lang/id.json
+++ b/lang/id.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Masuk dengan Authentik",
"auth.login.azure": "Masuk dengan Microsoft",
"auth.login.bitbucket": "Masuk dengan Bitbucket",
+ "auth.login.clerk": "Masuk dengan Clerk",
"auth.login.discord": "Masuk dengan Discord",
"auth.login.github": "Masuk dengan GitHub",
"auth.login.gitlab": "Masuk dengan Gitlab",
diff --git a/lang/it.json b/lang/it.json
index f867d2696..c0edc314b 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Accedi con Authentik",
"auth.login.azure": "Accedi con Microsoft",
"auth.login.bitbucket": "Accedi con Bitbucket",
+ "auth.login.clerk": "Accedi con Clerk",
"auth.login.discord": "Accedi con Discord",
"auth.login.github": "Accedi con GitHub",
"auth.login.gitlab": "Accedi con Gitlab",
diff --git a/lang/ja.json b/lang/ja.json
index 7afdb05c1..87d87d99b 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -2,6 +2,7 @@
"auth.login": "ログイン",
"auth.login.azure": "Microsoftでログイン",
"auth.login.bitbucket": "Bitbucketでログイン",
+ "auth.login.clerk": "Clerkでログイン",
"auth.login.discord": "Discordでログイン",
"auth.login.github": "GitHubでログイン",
"auth.login.gitlab": "Gitlabでログイン",
diff --git a/lang/no.json b/lang/no.json
index fa3693f5f..a84f6aa6c 100644
--- a/lang/no.json
+++ b/lang/no.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Logg inn med Authentik",
"auth.login.azure": "Logg inn med Microsoft",
"auth.login.bitbucket": "Logg inn med Bitbucket",
+ "auth.login.clerk": "Logg inn med Clerk",
"auth.login.discord": "Logg inn med Discord",
"auth.login.github": "Logg inn med GitHub",
"auth.login.gitlab": "Logg inn med Gitlab",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index efd97c496..c3a102995 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -3,6 +3,7 @@
"auth.login.authentik": "Entrar com Authentik",
"auth.login.azure": "Entrar com Microsoft",
"auth.login.bitbucket": "Entrar com Bitbucket",
+ "auth.login.clerk": "Entrar com Clerk",
"auth.login.discord": "Entrar com Discord",
"auth.login.github": "Entrar com GitHub",
"auth.login.gitlab": "Entrar com Gitlab",
diff --git a/lang/pt.json b/lang/pt.json
index d39390f7f..80ff8c146 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -2,6 +2,7 @@
"auth.login": "Entrar",
"auth.login.azure": "Entrar com Microsoft",
"auth.login.bitbucket": "Entrar com Bitbucket",
+ "auth.login.clerk": "Entrar com Clerk",
"auth.login.discord": "Entrar com Discord",
"auth.login.github": "Entrar com GitHub",
"auth.login.gitlab": "Entrar com Gitlab",
diff --git a/lang/ro.json b/lang/ro.json
index 499c5d60f..5588ea6f4 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -2,6 +2,7 @@
"auth.login": "Autentificare",
"auth.login.azure": "Autentificare prin Microsoft",
"auth.login.bitbucket": "Autentificare prin Bitbucket",
+ "auth.login.clerk": "Autentificare prin Clerk",
"auth.login.discord": "Autentificare prin Discord",
"auth.login.github": "Autentificare prin GitHub",
"auth.login.gitlab": "Autentificare prin Gitlab",
diff --git a/lang/tr.json b/lang/tr.json
index ef9ad216a..74f693dc9 100644
--- a/lang/tr.json
+++ b/lang/tr.json
@@ -2,6 +2,7 @@
"auth.login": "Giriş",
"auth.login.azure": "Microsoft ile Giriş Yap",
"auth.login.bitbucket": "Bitbucket ile Giriş Yap",
+ "auth.login.clerk": "Clerk ile Giriş Yap",
"auth.login.discord": "Discord ile Giriş Yap",
"auth.login.github": "GitHub ile Giriş Yap",
"auth.login.gitlab": "GitLab ile Giriş Yap",
diff --git a/lang/vi.json b/lang/vi.json
index 050ef337f..46edac599 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -2,6 +2,7 @@
"auth.login": "Đăng Nhập",
"auth.login.azure": "Đăng Nhập Bằng Microsoft",
"auth.login.bitbucket": "Đăng Nhập Bằng Bitbucket",
+ "auth.login.clerk": "Đăng Nhập Bằng Clerk",
"auth.login.discord": "Đăng Nhập Bằng Discord",
"auth.login.github": "Đăng Nhập Bằng GitHub",
"auth.login.gitlab": "Đăng Nhập Bằng Gitlab",
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index 7908b53ee..d46c71e07 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -2,6 +2,7 @@
"auth.login": "登录",
"auth.login.azure": "使用 Microsoft 登录",
"auth.login.bitbucket": "使用 Bitbucket 登录",
+ "auth.login.clerk": "使用 Clerk 登录",
"auth.login.discord": "使用 Discord 登录",
"auth.login.github": "使用 GitHub 登录",
"auth.login.gitlab": "使用 Gitlab 登录",
diff --git a/lang/zh-tw.json b/lang/zh-tw.json
index 470680824..c0784c7b7 100644
--- a/lang/zh-tw.json
+++ b/lang/zh-tw.json
@@ -2,6 +2,7 @@
"auth.login": "登入",
"auth.login.azure": "使用 Microsoft 登入",
"auth.login.bitbucket": "使用 Bitbucket 登入",
+ "auth.login.clerk": "使用 Clerk 登入",
"auth.login.discord": "使用 Discord 登入",
"auth.login.github": "使用 GitHub 登入",
"auth.login.gitlab": "使用 Gitlab 登入",
diff --git a/resources/views/livewire/settings-oauth.blade.php b/resources/views/livewire/settings-oauth.blade.php
index 76d03dc14..f559f57ac 100644
--- a/resources/views/livewire/settings-oauth.blade.php
+++ b/resources/views/livewire/settings-oauth.blade.php
@@ -37,7 +37,7 @@
helper="Optional parameter that supplies a hosted domain (HD) to Google, which
triggers a login hint to be displayed on the OAuth screen with this domain.
Google Documentation"
label="Tenant" />
@endif
- @if ($oauth_setting->provider == 'authentik')
+ @if ($oauth_setting->provider == 'authentik' || $oauth_setting->provider == 'clerk')
@endif