Skip to content

Commit 6fcfacd

Browse files
Add getEnvVariable utility method to fix Laravel config caching issue (#293)
* create a `getEnvVariable` utility and use it * add/update tests * clean up tests * formatting * Update lib/WorkOS.php Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
1 parent fe4f23b commit 6fcfacd

2 files changed

Lines changed: 90 additions & 4 deletions

File tree

lib/WorkOS.php

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ public static function getApiKey()
4343
return self::$apiKey;
4444
}
4545

46-
if (getenv("WORKOS_API_KEY")) {
47-
self::$apiKey = getenv("WORKOS_API_KEY");
46+
$envValue = self::getEnvVariable("WORKOS_API_KEY");
47+
if ($envValue) {
48+
self::$apiKey = $envValue;
4849
return self::$apiKey;
4950
}
5051

@@ -71,8 +72,9 @@ public static function getClientId()
7172
return self::$clientId;
7273
}
7374

74-
if (getenv("WORKOS_CLIENT_ID")) {
75-
self::$clientId = getenv("WORKOS_CLIENT_ID");
75+
$envValue = self::getEnvVariable("WORKOS_CLIENT_ID");
76+
if ($envValue) {
77+
self::$clientId = $envValue;
7678
return self::$clientId;
7779
}
7880

@@ -135,4 +137,29 @@ public static function getVersion()
135137
{
136138
return self::$version;
137139
}
140+
141+
/**
142+
* Get environment variable with fallback to cached config sources.
143+
* Checks in order: getenv(), $_ENV, $_SERVER
144+
*
145+
* @param string $key Environment variable name
146+
* @return string|false The environment variable value or false if not found
147+
*/
148+
private static function getEnvVariable($key)
149+
{
150+
$value = getenv($key);
151+
if ($value !== false && $value !== '') {
152+
return $value;
153+
}
154+
155+
if (isset($_ENV[$key]) && $_ENV[$key] !== '') {
156+
return $_ENV[$key];
157+
}
158+
159+
if (isset($_SERVER[$key]) && $_SERVER[$key] !== '') {
160+
return $_SERVER[$key];
161+
}
162+
163+
return false;
164+
}
138165
}

tests/WorkOS/WorkOSTest.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace WorkOS;
4+
5+
use PHPUnit\Framework\TestCase;
6+
7+
class WorkOSTest extends TestCase
8+
{
9+
protected function setUp(): void
10+
{
11+
WorkOS::setApiKey(null);
12+
WorkOS::setClientId(null);
13+
14+
putenv("WORKOS_API_KEY=");
15+
putenv("WORKOS_CLIENT_ID=");
16+
17+
unset($_ENV['WORKOS_API_KEY']);
18+
unset($_ENV['WORKOS_CLIENT_ID']);
19+
unset($_SERVER['WORKOS_API_KEY']);
20+
unset($_SERVER['WORKOS_CLIENT_ID']);
21+
}
22+
23+
protected function tearDown(): void
24+
{
25+
WorkOS::setApiKey(null);
26+
WorkOS::setClientId(null);
27+
28+
putenv("WORKOS_API_KEY=");
29+
putenv("WORKOS_CLIENT_ID=");
30+
31+
unset($_ENV['WORKOS_API_KEY']);
32+
unset($_ENV['WORKOS_CLIENT_ID']);
33+
unset($_SERVER['WORKOS_API_KEY']);
34+
unset($_SERVER['WORKOS_CLIENT_ID']);
35+
}
36+
37+
public function testGetApiKeyFromEnvSuperglobal()
38+
{
39+
$_ENV['WORKOS_API_KEY'] = "pk_test_env_superglobal";
40+
41+
$this->assertEquals("pk_test_env_superglobal", WorkOS::getApiKey());
42+
}
43+
44+
public function testGetClientIdFromEnvSuperglobal()
45+
{
46+
$_ENV['WORKOS_CLIENT_ID'] = "client_test_env_superglobal";
47+
48+
$this->assertEquals("client_test_env_superglobal", WorkOS::getClientId());
49+
}
50+
51+
public function testLaravelConfigCachingScenario()
52+
{
53+
$_ENV['WORKOS_API_KEY'] = "pk_test_laravel_cached";
54+
$_ENV['WORKOS_CLIENT_ID'] = "client_test_laravel_cached";
55+
56+
$this->assertEquals("pk_test_laravel_cached", WorkOS::getApiKey());
57+
$this->assertEquals("client_test_laravel_cached", WorkOS::getClientId());
58+
}
59+
}

0 commit comments

Comments
 (0)