1717 */
1818class TenantBootstrapper
1919{
20+ private static $ landlordValues = [];
21+
2022 private $ encrypter = null ;
2123
2224 private $ pdo = null ;
2325
24- private $ originalValues = null ;
26+ private $ app = null ;
27+
28+ public static $ landlordKeysToSave = [
29+ 'APP_URL ' ,
30+ 'APP_KEY ' ,
31+ 'LOG_PATH ' ,
32+ 'DB_USERNAME ' ,
33+ 'DB_PASSWORD ' ,
34+ 'REDIS_PREFIX ' ,
35+ 'CACHE_SETTING_PREFIX ' ,
36+ 'SCRIPT_MICROSERVICE_CALLBACK ' ,
37+ ];
2538
2639 public function bootstrap (Application $ app )
2740 {
2841 if (!$ this ->env ('MULTITENANCY ' )) {
2942 return ;
3043 }
44+ $ this ->app = $ app ;
3145
32- // We need to save the original values for running horizon
33- $ this ->saveOriginalValues ();
46+ self ::saveLandlordValues ($ app );
3447
3548 $ tenantData = null ;
3649
@@ -49,26 +62,26 @@ public function bootstrap(Application $app)
4962
5063 return ;
5164 }
52- $ this ->setTenantEnvironmentVariables ($ app , $ tenantData );
65+
66+ // Set storage path
67+ $ app ->useStoragePath ($ app ->basePath ('storage/tenant_ ' . $ tenantData ['id ' ]));
68+
69+ $ this ->setTenantEnvironmentVariables ($ tenantData );
5370
5471 // Use tenant's translation files. Doing this here so it's available in cached filesystems.php
5572 $ app ->useLangPath (resource_path ('lang/tenant_ ' . $ tenantData ['id ' ]));
5673
57- $ tenantData ['original_values ' ] = $ this -> getOriginalValue () ;
74+ $ tenantData ['original_values ' ] = self :: $ landlordValues ;
5875 Tenant::setBootstrappedTenant ($ app , $ tenantData );
5976 }
6077
61- private function setTenantEnvironmentVariables ($ app , $ tenantData )
78+ private function setTenantEnvironmentVariables ($ tenantData )
6279 {
6380 // Additional configs are set in SwitchTenant.php
6481
65- $ tenantId = $ tenantData ['id ' ];
6682 $ config = json_decode ($ tenantData ['config ' ], true );
6783
68- $ this ->set ('APP_CONFIG_CACHE ' , $ app ->basePath ('storage/tenant_ ' . $ tenantId . '/config.php ' ));
69- // Do not override packages cache path for now. Wait until the License service is updated.
70- // $this->set('APP_PACKAGES_CACHE', $app->basePath('storage/tenant_' . $tenantId . '/packages.php'));
71- $ this ->set ('LARAVEL_STORAGE_PATH ' , $ app ->basePath ('storage/tenant_ ' . $ tenantId ));
84+ $ this ->set ('APP_CONFIG_CACHE ' , $ this ->app ->storagePath ('config.php ' ));
7285 $ this ->set ('APP_URL ' , $ config ['app.url ' ]);
7386 $ this ->set ('APP_KEY ' , $ this ->decrypt ($ config ['app.key ' ]));
7487 $ this ->set ('DB_DATABASE ' , $ tenantData ['database ' ]);
@@ -83,51 +96,48 @@ private function setTenantEnvironmentVariables($app, $tenantData)
8396 }
8497
8598 $ this ->set ('DB_PASSWORD ' , $ password );
86- $ this ->set ('REDIS_PREFIX ' , $ this ->getOriginalValue ('REDIS_PREFIX ' ) . 'tenant- ' . $ tenantId . ': ' );
87- $ this ->set ('LOG_PATH ' , $ app ->basePath ('storage/tenant_ ' . $ tenantId . '/logs/processmaker.log ' ));
99+ $ this ->set ('LOG_PATH ' , $ this ->app ->storagePath ('logs/processmaker.log ' ));
88100 }
89101
90- private function saveOriginalValues ( )
102+ public static function saveLandlordValues ( $ app )
91103 {
92- if ($ this ->env ('ORIGINAL_VALUES ' )) {
104+ if ($ app ->has ('landlordValues ' )) {
105+ self ::$ landlordValues = $ app ->make ('landlordValues ' );
106+
93107 return ;
94108 }
95- $ toSave = [
96- 'APP_URL ' ,
97- 'APP_KEY ' ,
98- 'DB_USERNAME ' ,
99- 'DB_PASSWORD ' ,
100- 'REDIS_PREFIX ' ,
101- 'CACHE_SETTING_PREFIX ' ,
102- 'SCRIPT_MICROSERVICE_CALLBACK ' ,
103- ];
104- $ values = [];
105- foreach ($ toSave as $ key ) {
106- $ values [$ key ] = $ this ->env ($ key );
109+
110+ foreach (self ::$ landlordKeysToSave as $ key ) {
111+ self ::$ landlordValues [$ key ] = $ _SERVER [$ key ] ?? '' ;
107112 }
108- $ this ->set ('ORIGINAL_VALUES ' , serialize ($ values ));
109113 }
110114
111- private function getOriginalValue ($ key = null )
115+ private function getOriginalValue ($ key )
112116 {
113- if (!$ this ->originalValues ) {
114- $ this ->originalValues = unserialize ($ this ->env ('ORIGINAL_VALUES ' ));
115- }
116- if (!$ key ) {
117- return $ this ->originalValues ;
117+ if (!isset (self ::$ landlordValues [$ key ])) {
118+ return '' ;
118119 }
119120
120- return $ this -> originalValues [$ key ];
121+ return self :: $ landlordValues [$ key ];
121122 }
122123
123124 private function env ($ key , $ default = null )
124125 {
125- return Env::get ($ key , $ default );
126+ $ value = $ _SERVER [$ key ] ?? $ default ;
127+ if ($ value === 'true ' ) {
128+ $ value = true ;
129+ } elseif ($ value === 'false ' ) {
130+ $ value = false ;
131+ }
132+
133+ return $ value ;
126134 }
127135
128136 private function set ($ key , $ value )
129137 {
130- Env::getRepository ()->set ($ key , $ value );
138+ // Env::getRepository() is immutable but will use values from $_SERVER and $_ENV
139+ $ _SERVER [$ key ] = $ value ;
140+ $ _ENV [$ key ] = $ value ;
131141 }
132142
133143 private function decrypt ($ value )
0 commit comments