Skip to content

Commit 3b4dcd0

Browse files
committed
chore: add tenant logic
chore: define custom provider for LFID
1 parent 930c37a commit 3b4dcd0

File tree

7 files changed

+98
-16
lines changed

7 files changed

+98
-16
lines changed

app/Providers/AppServiceProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use App\libs\Utils\TextUtils;
1616
use Illuminate\Support\Facades\App;
1717
use Illuminate\Support\Facades\Config;
18+
use Illuminate\Support\Facades\Event;
1819
use Illuminate\Support\Facades\Log;
1920
use Illuminate\Support\ServiceProvider;
2021
use Illuminate\Support\Facades\Validator;
@@ -127,6 +128,11 @@ public function boot()
127128

128129
return true;
129130
});
131+
132+
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
133+
// custom tenants for AUTH0 providers
134+
$event->extendSocialite('lfid', \SocialiteProviders\Auth0\Provider::class);
135+
});
130136
}
131137

132138
/**

app/libs/Auth/SocialLoginProviders.php

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php namespace App\libs\Auth;
22
use Illuminate\Support\Facades\Config;
3+
use Illuminate\Support\Facades\Request;
34

45
/**
56
* Copyright 2021 OpenStack Foundation
@@ -25,16 +26,15 @@ final class SocialLoginProviders
2526
const LinkedIn = "linkedin";
2627
const Google = "google";
2728
const OKTA = 'okta';
28-
29-
const AUTH0 = 'auth0';
29+
const LFID = 'lfid';
3030

3131
const ValidProviders = [
3232
self::Facebook,
3333
self::LinkedIn,
3434
self::Apple,
3535
//self::Google
3636
self::OKTA,
37-
self::AUTH0,
37+
self::LFID,
3838
];
3939

4040
/**
@@ -59,9 +59,24 @@ public static function isEnabledProvider(string $provider):bool{
5959
*/
6060
public static function buildSupportedProviders():array{
6161
$res = [];
62+
$tenant = null;
63+
$allowed_3rd_party_providers = [];
64+
if(Request::has("tenant")){
65+
$tenant = trim(Request::get("tenant"));
66+
$allowed_3rd_party_providers = explode(',',Config::get("tenants.".$tenant.".allowed_3rd_party_providers",""));
67+
}
68+
6269
foreach(self::ValidProviders as $provider){
63-
if(self::isEnabledProvider($provider))
70+
// check if the 3rd party provider has defined some exclusive tenants ...
71+
$tenants = explode(',', Config::get("services.".$provider.".tenants",""));
72+
// check first its enabled ...
73+
if(self::isEnabledProvider($provider)) {
74+
if(count($tenants) > 0){ // check if we have tenants defined at provider level
75+
if(empty($tenant) || !in_array($tenant, $tenants)) continue;
76+
} // else check if the tenant has that provider enabled
77+
else if(!empty($tenant) && !in_array($tenant, $allowed_3rd_party_providers)) continue;
6478
$res[$provider] = ucfirst($provider);
79+
}
6580
}
6681
return $res;
6782
}

app/libs/OAuth2/Discovery/DiscoveryDocumentBuilder.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,9 @@ public function addUserInfoEncryptionEncSupported($enc)
261261
* @return $this
262262
*/
263263
public function addAvailableThirdPartyIdentityProviders(){
264-
foreach(SocialLoginProviders::ValidProviders as $provider)
265-
if(SocialLoginProviders::isEnabledProvider($provider))
266-
$this->addArrayValue("third_party_identity_providers", $provider);
264+
$providers = SocialLoginProviders::buildSupportedProviders();
265+
foreach($providers as $provider => $value)
266+
$this->addArrayValue("third_party_identity_providers", $provider);
267267
return $this;
268268
}
269269

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"s-ichikawa/laravel-sendgrid-driver": "^4.0",
5151
"smarcet/jose4php": "2.0.0",
5252
"socialiteproviders/apple": "^5.6.1",
53+
"socialiteproviders/auth0": "^4.2",
5354
"socialiteproviders/facebook": "^4.1.0",
5455
"socialiteproviders/google": "^4.1.0",
5556
"socialiteproviders/linkedin": "^5.0.0",

composer.lock

Lines changed: 51 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/services.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
<?php
2+
$custom_auth0_tenants = [
3+
'lfid' => [
4+
'client_id' => env('LFID_CLIENT_ID'),
5+
'client_secret' => env('LFID_CLIENT_SECRET'),
6+
'redirect' => env('LFID_REDIRECT_URI'),
7+
'base_url' => env('LFID_BASE_URL'),
8+
'tenants' => env('LFID_TENANTS','lf'),
9+
]
10+
];
211

3-
return [
12+
return array_merge([
413

514
/*
615
|--------------------------------------------------------------------------
@@ -66,10 +75,4 @@
6675
'base_url' => env("OKTA_BASE_URL"),
6776
'redirect' => env('OKTA_REDIRECT_URI')
6877
],
69-
'auth0' => [
70-
'client_id' => env('AUTH0_CLIENT_ID'),
71-
'client_secret' => env('AUTH0_CLIENT_SECRET'),
72-
'redirect' => env('AUTH0_REDIRECT_URI'),
73-
'base_url' => env('AUTH0_BASE_URL'),
74-
]
75-
];
78+
], $custom_auth0_tenants);

config/tenants.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
return [
4+
'lf' => [
5+
'allowed_3rd_party_providers' => env('LFID_ALLOWED_3RD_PARTY_PROVIDERS', '')
6+
],
7+
];

0 commit comments

Comments
 (0)