11<?php namespace App \libs \Auth ;
2- use Illuminate \Support \Facades \Config ;
3-
42/**
53 * Copyright 2021 OpenStack Foundation
64 * Licensed under the Apache License, Version 2.0 (the "License");
1412 * limitations under the License.
1513 **/
1614
15+ use Illuminate \Support \Facades \Config ;
16+ use Illuminate \Support \Facades \Log ;
17+ use Illuminate \Support \Facades \Request ;
18+
1719/**
1820 * Class SocialLoginProviders
1921 * @package App\libs\Auth
@@ -25,44 +27,109 @@ final class SocialLoginProviders
2527 const LinkedIn = "linkedin " ;
2628 const Google = "google " ;
2729 const OKTA = 'okta ' ;
28-
29- const AUTH0 = 'auth0 ' ;
30+ const LFID = 'lfid ' ;
3031
3132 const ValidProviders = [
3233 self ::Facebook,
3334 self ::LinkedIn,
3435 self ::Apple,
3536 //self::Google
3637 self ::OKTA ,
37- self ::AUTH0 ,
38+ self ::LFID ,
3839 ];
3940
4041 /**
4142 * @param string $provider
4243 * @return bool
4344 */
44- public static function isSupportedProvider (string $ provider ):bool {
45+ public static function isSupportedProvider (string $ provider ): bool
46+ {
4547 return in_array ($ provider , self ::ValidProviders);
4648 }
4749
48- /**
49- * @param string $provider
50- * @return bool
51- */
52- public static function isEnabledProvider (string $ provider ):bool {
53- return !empty (Config::get ("services. " .$ provider .".client_id " , null )) &&
54- !empty (Config::get ("services. " .$ provider .".client_secret " , null ));
55- }
56-
5750 /**
5851 * @return string[]
5952 */
60- public static function buildSupportedProviders ():array {
53+ public static function buildSupportedProviders (): array
54+ {
6155 $ res = [];
62- foreach (self ::ValidProviders as $ provider ){
63- if (self ::isEnabledProvider ($ provider ))
64- $ res [$ provider ] = ucfirst ($ provider );
56+ $ tenant = trim (Request::get ('tenant ' , '' ));
57+ $ allowed_3rd_party_providers = self ::toList (
58+ Config::get ("tenants. $ tenant.allowed_3rd_party_providers " , '' )
59+ );
60+
61+ Log::debug ("SocialLoginProviders::buildSupportedProviders " , ["tenant " => $ tenant , "allowed_3rd_party_providers " => $ allowed_3rd_party_providers ]);
62+ foreach (self ::ValidProviders as $ provider ) {
63+ Log::debug ("SocialLoginProviders::buildSupportedProviders " , ["tenant " => $ tenant , "provider " => $ provider ]);
64+
65+ if (!self ::isEnabledProvider ($ provider )) {
66+ Log::warning ("SocialLoginProviders::buildSupportedProviders provider is not enabled. " , ["tenant " => $ tenant , "provider " => $ provider ]);
67+ continue ;
68+ }
69+
70+ // check if the 3rd party provider has defined some exclusive tenants ...
71+ $ tenants = self ::toList (
72+ Config::get ("services. $ provider.tenants " , '' )
73+ );
74+
75+ Log::debug (sprintf ("SocialLoginProviders::buildSupportedProviders provider %s is enabled " , $ provider ));
76+ // 1. check if we have exclusive tenants defined at provider level
77+ if (count ($ tenants ) > 0 && !in_array ($ tenant , $ tenants )) {
78+ // tenant is not defined on the exclusive collection of the provider
79+ Log::warning
80+ (
81+ sprintf
82+ (
83+ "SocialLoginProviders::buildSupportedProviders provider %s is not enabled for tenant %s " ,
84+ $ provider ,
85+ $ tenant
86+ ),
87+ ["tenants " => $ tenants ]
88+ );
89+ continue ;
90+ }
91+ // 2. check if the tenant has that provider enabled
92+ if (count ($ tenants ) == 0 && !empty ($ tenant ) && !in_array ($ provider , $ allowed_3rd_party_providers )) {
93+ Log::warning
94+ (
95+ sprintf
96+ (
97+ "SocialLoginProviders::buildSupportedProviders provider %s is not enabled for tenant %s " ,
98+ $ provider ,
99+ $ tenant
100+ ),
101+ ["allowed_3rd_party_providers " => $ allowed_3rd_party_providers ]
102+ );
103+ continue ;
104+ }
105+
106+ Log::debug (sprintf ("SocialLoginProviders::buildSupportedProviders provider %s is added " , $ provider ));
107+ $ res [$ provider ] = ucfirst ($ provider );
65108 }
109+
66110 return $ res ;
67111 }
112+
113+ private static function toList ($ value ): array
114+ {
115+ if (is_array ($ value )) {
116+ return array_values (array_filter (array_map ('trim ' , $ value ), static fn ($ v ) => $ v !== '' ));
117+ }
118+ if (is_string ($ value )) {
119+ if ($ value === '' ) return [];
120+ return array_values (array_filter (array_map ('trim ' , explode (', ' , $ value )), static fn ($ v ) => $ v !== '' ));
121+ }
122+ return [];
123+ }
124+
125+ /**
126+ * @param string $provider
127+ * @return bool
128+ */
129+ public static function isEnabledProvider (string $ provider ): bool
130+ {
131+ return !empty (Config::get ("services. " . $ provider . ".client_id " , null )) &&
132+ !empty (Config::get ("services. " . $ provider . ".client_secret " , null ));
133+ }
134+
68135}
0 commit comments