From f91ec238b9df4a29be479f8c4673519b29c6c640 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 9 May 2025 10:09:16 +0000 Subject: [PATCH 1/2] chore: introduce class attribute to oauth2 config --- app/config/oAuthProviders.php | 56 ++++++++++++++++++++++++++++----- app/controllers/api/account.php | 5 ++- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/app/config/oAuthProviders.php b/app/config/oAuthProviders.php index 261df5c07e..d8dfc807b1 100644 --- a/app/config/oAuthProviders.php +++ b/app/config/oAuthProviders.php @@ -11,6 +11,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Amazon', ], 'apple' => [ 'name' => 'Apple', @@ -21,6 +22,7 @@ return [ 'form' => 'apple.phtml', // Preparation for adding ability to customized OAuth UI forms, currently handled hardcoded. 'beta' => true, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Apple', ], 'auth0' => [ 'name' => 'Auth0', @@ -31,6 +33,7 @@ return [ 'form' => 'auth0.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Auth0', ], 'authentik' => [ 'name' => 'Authentik', @@ -41,6 +44,7 @@ return [ 'form' => 'authentik.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Authentik', ], 'autodesk' => [ 'name' => 'Autodesk', @@ -51,6 +55,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Autodesk', ], 'bitbucket' => [ 'name' => 'BitBucket', @@ -61,6 +66,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Bitbucket', ], 'bitly' => [ 'name' => 'Bitly', @@ -70,7 +76,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Bitly', ], 'box' => [ 'name' => 'Box', @@ -80,7 +87,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Box', ], 'dailymotion' => [ 'name' => 'Dailymotion', @@ -90,7 +98,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Dailymotion', ], 'discord' => [ 'name' => 'Discord', @@ -101,6 +110,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Discord', ], 'disqus' => [ 'name' => 'Disqus', @@ -111,6 +121,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Disqus', ], 'dropbox' => [ 'name' => 'Dropbox', @@ -121,6 +132,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Dropbox', ], 'etsy' => [ 'name' => 'Etsy', @@ -131,6 +143,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Etsy', ], 'facebook' => [ 'name' => 'Facebook', @@ -141,6 +154,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Facebook', ], 'figma' => [ 'name' => 'Figma', @@ -151,6 +165,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Figma', ], 'github' => [ 'name' => 'GitHub', @@ -161,6 +176,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Github', ], 'gitlab' => [ 'name' => 'GitLab', @@ -171,6 +187,7 @@ return [ 'form' => 'gitlab.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Gitlab', ], 'google' => [ 'name' => 'Google', @@ -181,6 +198,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Google', ], 'linkedin' => [ 'name' => 'LinkedIn', @@ -191,6 +209,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Linkedin', ], 'microsoft' => [ 'name' => 'Microsoft', @@ -201,6 +220,7 @@ return [ 'form' => 'microsoft.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Microsoft', ], 'notion' => [ 'name' => 'Notion', @@ -211,6 +231,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Notion', ], 'oidc' => [ 'name' => 'OpenID Connect', @@ -221,6 +242,7 @@ return [ 'form' => 'oidc.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Oidc', ], 'okta' => [ 'name' => 'Okta', @@ -231,6 +253,7 @@ return [ 'form' => 'okta.phtml', 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Okta', ], 'paypal' => [ 'name' => 'PayPal', @@ -240,7 +263,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Paypal', ], 'paypalSandbox' => [ 'name' => 'PayPal Sandbox', @@ -250,7 +274,8 @@ return [ 'sandbox' => true, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Paypal', ], 'podio' => [ 'name' => 'Podio', @@ -261,6 +286,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Podio', ], 'salesforce' => [ 'name' => 'Salesforce', @@ -271,6 +297,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Salesforce', ], 'slack' => [ 'name' => 'Slack', @@ -281,6 +308,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Slack', ], 'spotify' => [ 'name' => 'Spotify', @@ -291,6 +319,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Spotify', ], 'stripe' => [ 'name' => 'Stripe', @@ -300,7 +329,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Stripe', ], 'tradeshift' => [ 'name' => 'Tradeshift', @@ -311,6 +341,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Tradeshift', ], 'tradeshiftBox' => [ 'name' => 'Tradeshift Sandbox', @@ -321,6 +352,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Tradeshift', ], 'twitch' => [ 'name' => 'Twitch', @@ -331,6 +363,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Twitch', ], 'wordpress' => [ 'name' => 'WordPress', @@ -340,7 +373,8 @@ return [ 'sandbox' => false, 'form' => false, 'beta' => false, - 'mock' => false + 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Wordpress', ], 'yahoo' => [ 'name' => 'Yahoo', @@ -351,6 +385,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Yahoo', ], 'yammer' => [ 'name' => 'Yammer', @@ -361,6 +396,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Yammer', ], 'yandex' => [ 'name' => 'Yandex', @@ -371,6 +407,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Yandex', ], 'zoho' => [ 'name' => 'Zoho', @@ -381,6 +418,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Zoho', ], 'zoom' => [ 'name' => 'Zoom', @@ -391,6 +429,7 @@ return [ 'form' => false, 'beta' => false, 'mock' => false, + 'class' => 'Appwrite\\Auth\\OAuth2\\Zoom', ], // 'instagram' => [ // 'name' => 'Instagram', @@ -399,6 +438,7 @@ return [ // 'enabled' => false, // 'beta' => false, // 'mock' => false, + // 'class' => 'Appwrite\\Auth\\OAuth2\\Instagram', // ], // 'twitter' => [ // 'name' => 'twitter', @@ -407,6 +447,7 @@ return [ // 'enabled' => false, // 'beta' => false, // 'mock' => false, + // 'class' => 'Appwrite\\Auth\\OAuth2\\Twitter', // ], // Keep Last @@ -419,5 +460,6 @@ return [ 'form' => false, 'beta' => false, 'mock' => true, + 'class' => 'Appwrite\\Auth\\OAuth2\\Mock', ], ]; diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 1ee25c0f2c..5939c96d49 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -1212,9 +1212,8 @@ App::get('/v1/account/sessions/oauth2/:provider') throw new Exception(Exception::PROJECT_PROVIDER_DISABLED, 'This provider is disabled. Please configure the provider app ID and app secret key from your ' . APP_NAME . ' console to continue.'); } - $className = 'Appwrite\\Auth\\OAuth2\\' . \ucfirst($provider); - - if (!\class_exists($className)) { + $oAuthProviders = Config::getParam('oAuthProviders'); + if (!\class_exists($oAuthProviders[$provider]['class'])) { throw new Exception(Exception::PROJECT_PROVIDER_UNSUPPORTED); } From 21273c8336883ebcb28dc02494672a0f96710730 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 9 May 2025 10:57:45 +0000 Subject: [PATCH 2/2] fix: undefined classname --- app/controllers/api/account.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 5939c96d49..f55bbb9387 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -1213,7 +1213,8 @@ App::get('/v1/account/sessions/oauth2/:provider') } $oAuthProviders = Config::getParam('oAuthProviders'); - if (!\class_exists($oAuthProviders[$provider]['class'])) { + $className = $oAuthProviders[$provider]['class']; + if (!\class_exists($className)) { throw new Exception(Exception::PROJECT_PROVIDER_UNSUPPORTED); }