From a15982f02e7d9066ac01f184d419c4075738eb3c Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 13:59:08 -0400 Subject: [PATCH 1/9] Update Dockerfile to php 8.2 The Dockerfile is really only used for testing --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3be04d3..a46171d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM php:7.4-apache +FROM php:8.2-apache LABEL maintainer="Mark Tompsett " ENV REFRESHED_AT 2021-06-10 From c0c4a0c380323103f62478284ad0c3f0540b59b9 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:07:01 -0400 Subject: [PATCH 2/9] Modify structure of User results for aliases (it's a string array) --- SilMock/tests/Google/Service/SampleUser.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/SilMock/tests/Google/Service/SampleUser.php b/SilMock/tests/Google/Service/SampleUser.php index 04b9aca..2c5b3e6 100644 --- a/SilMock/tests/Google/Service/SampleUser.php +++ b/SilMock/tests/Google/Service/SampleUser.php @@ -26,13 +26,9 @@ public function setupSampleUser(string $dataFile, bool $withAliases = false): ?G // $newUser->$suspensionReason = ''; // string if ($withAliases) { - $newAliases = new Google_Service_Directory_Aliases(); - $newAlias = new Google_Service_Directory_Alias(); - $newAlias->alias = 'user_alias1@sil.org'; - $newAlias->setKind("personal"); - $newAlias->primaryEmail = $newUser->primaryEmail; - $newAliases->setAliases(array($newAlias)); - $newUser->aliases = $newAliases; // bool + $newUser->aliases = [ 'user_alias1@sil.org', 'user_alias2@sil.org' ]; + } else { + $newUser->aliases = []; } $newDir = new Directory('anyclient', $dataFile); From 151ae4c036df2ba7ef06b08aee3a721dc97e0451 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:08:09 -0400 Subject: [PATCH 3/9] Remove unused variable --- SilMock/Google/Service/Directory/UsersResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SilMock/Google/Service/Directory/UsersResource.php b/SilMock/Google/Service/Directory/UsersResource.php index 2af94f0..14dd999 100644 --- a/SilMock/Google/Service/Directory/UsersResource.php +++ b/SilMock/Google/Service/Directory/UsersResource.php @@ -202,7 +202,7 @@ public function insert($postBody) $newAlias->kind = "personal"; $newAlias->primaryEmail = $postBody->primaryEmail; - $insertedAlias = $usersAliases->insertAssumingUserExists($newAlias); + $usersAliases->insertAssumingUserExists($newAlias); } } From a5019275364d73a8a836ab964b17177cbb941bf3 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:10:07 -0400 Subject: [PATCH 4/9] Update alias related tests, and code style update --- .../tests/Google/Service/DirectoryTest.php | 322 +++++++++--------- 1 file changed, 167 insertions(+), 155 deletions(-) diff --git a/SilMock/tests/Google/Service/DirectoryTest.php b/SilMock/tests/Google/Service/DirectoryTest.php index 9457169..df20412 100644 --- a/SilMock/tests/Google/Service/DirectoryTest.php +++ b/SilMock/tests/Google/Service/DirectoryTest.php @@ -14,12 +14,12 @@ class DirectoryTest extends TestCase { use SampleUser; - public $dataFile = DATAFILE2; + public string $dataFile = DATAFILE2; - public function getProperties($object, $propKeys = null) + public function getProperties($object, $propKeys = null): array { if ($propKeys === null) { - $propKeys = array( + $propKeys = [ "changePasswordAtNextLogin", "hashFunction", "id", @@ -29,10 +29,10 @@ public function getProperties($object, $propKeys = null) "isEnforcedIn2Sv", "isEnrolledIn2Sv", "aliases", - ); + ]; } - $outArray = array(); + $outArray = []; foreach ($propKeys as $key) { $outArray[$key] = $object->$key; @@ -43,13 +43,13 @@ public function getProperties($object, $propKeys = null) public function testDirectory() { - $expectedKeys = array( + $expectedKeys = [ 'asps', 'users', 'users_aliases', 'verificationCodes', 'tokens', - ); + ]; $errorMessage = " *** Directory was not initialized properly"; $directory = new Directory('whatever', $this->dataFile); @@ -64,10 +64,10 @@ public function testDirectory() public function testUsersInsert() { - $newUser = $this->setupSampleUser($this->dataFile, false); + $newUser = $this->setupSampleUser($this->dataFile); $results = $this->getProperties($newUser); - $expected = array( + $expected = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -76,8 +76,8 @@ public function testUsersInsert() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => null, - ); + "aliases" => [], + ]; $msg = " *** Bad returned user"; $this->assertEquals($expected, $results, $msg); @@ -88,7 +88,7 @@ public function testUsersInsert() $dataObj = json_decode($lastDataEntry['data']); $results = $this->getProperties($dataObj); - $expected = array ( + $expected = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -97,19 +97,19 @@ public function testUsersInsert() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => null, - ); + "aliases" => [], + ]; $msg = " *** Bad data from sqlite database"; $this->assertEquals($expected, $results, $msg); } - public function testUsersInsert_WithAlias() + public function testUsersInsert_WithAliases() { $newUser = $this->setupSampleUser($this->dataFile, true); $results = $this->getProperties($newUser); - $expected = array( + $expected = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -118,18 +118,8 @@ public function testUsersInsert_WithAlias() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => array( - 'etag' => null, - 'kind' => null, - 'aliases' => array( - array( - 'alias' => "user_alias1@sil.org", - 'etag' => null, - 'id' => null, - 'kind' => 'personal', - 'primaryEmail' => 'user_test1@sil.org')), - ), - ); + "aliases" => ["user_alias1@sil.org", "user_alias2@sil.org"], + ]; $msg = " *** Bad returned user"; $this->assertEquals($expected, $results, $msg); @@ -137,25 +127,23 @@ public function testUsersInsert_WithAlias() $sqliteData = $sqliteClass->getData('', ''); $sqliteDataValues = array_values($sqliteData); $lastDataEntry = end($sqliteDataValues); - $lastAliases = json_decode($lastDataEntry['data'], true); - - $results = $lastAliases['aliases']['aliases']; - - $expected = array( - array( - "alias" => "user_alias1@sil.org", - "kind" => "personal", - "primaryEmail" => "user_test1@sil.org", - 'etag' => null, - 'id' => null, - ), - ); + $lastAlias = json_decode($lastDataEntry['data'], true); + + $results = $lastAlias; + + $expected = [ + "alias" => "user_alias2@sil.org", + "kind" => "personal", + "primaryEmail" => "user_test1@sil.org", + 'etag' => null, + 'id' => null, + ]; $msg = " *** Bad data from sqlite database"; $this->assertEquals($expected, $results, $msg); } - public function getFixtures() + public function getFixtures(): array { $user4Data = '{"changePasswordAtNextLogin":false,' . '"hashFunction":"SHA-1",' . @@ -173,20 +161,20 @@ public function getFixtures() $alias6->setAlias("users_alias6@sil.org"); $alias6->setId("1"); - $fixtures = array( - array('directory', 'user', '{"primaryEmail":"user_test1@sil.org",' . - '"id":"999990"}'), - array('directory', 'users_alias', json_encode($alias2)), - array('app_engine', 'webapp', 'webapp3 test data'), - array('directory', 'user', $user4Data), - array('directory', 'user', 'user5 test data'), - array('directory', 'users_alias', json_encode($alias6)), - ); - - return $fixtures; + return [ + [ + 'directory', 'user', '{"primaryEmail":"user_test1@sil.org",' . + '"id":"999990"}' + ], + ['directory', 'users_alias', json_encode($alias2)], + ['app_engine', 'webapp', 'webapp3 test data'], + ['directory', 'user', $user4Data], + ['directory', 'user', 'user5 test data'], + ['directory', 'users_alias', json_encode($alias6)], + ]; } - public function getAliasFixture($alias, $email, ?string $id) + public function getAliasFixture($alias, $email, ?string $id): Google_Service_Directory_Alias { $newAlias = new Google_Service_Directory_Alias(); $newAlias->setAlias($alias); @@ -208,7 +196,7 @@ public function testUsersGet() $primaryEmail = 'user_test4@sil.org'; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -218,7 +206,7 @@ public function testUsersGet() "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, "aliases" => null, - ); + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -239,7 +227,7 @@ public function testUsersGet_ById() $userId = '999991'; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => $userId, @@ -249,7 +237,7 @@ public function testUsersGet_ById() "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, "aliases" => null, - ); + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -274,7 +262,7 @@ public function testUsersGet_Aliases() $userId = '999991'; $email = "user_test4@sil.org"; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => $userId, @@ -283,17 +271,17 @@ public function testUsersGet_Aliases() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => array("users_alias1A@sil.org", "users_alias1B@sil.org"), - ); + "aliases" => ["users_alias1A@sil.org", "users_alias1B@sil.org"], + ]; $aliasA = $this->getAliasFixture("users_alias1A@sil.org", $email, null); $aliasB = $this->getAliasFixture("users_alias1B@sil.org", $email, null); - $newFixtures = array( - array('directory', 'users_alias', json_encode($aliasA)), - array('directory', 'users_alias', json_encode($aliasB)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($aliasA)], + ['directory', 'users_alias', json_encode($aliasB)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); @@ -317,10 +305,10 @@ public function testUsersGet_ByAlias() $aliasA = $this->getAliasFixture("users_alias1A@sil.org", $email, null); $aliasB = $this->getAliasFixture("users_alias1B@sil.org", $email, null); - $newFixtures = array( - array('directory', 'users_alias', json_encode($aliasA)), - array('directory', 'users_alias', json_encode($aliasB)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($aliasA)], + ['directory', 'users_alias', json_encode($aliasB)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); @@ -344,7 +332,7 @@ public function testUsersUpdate() $primaryEmail = "user_test4@sil.org"; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -353,8 +341,8 @@ public function testUsersUpdate() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => array(), - ); + "aliases" => [], + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -380,7 +368,7 @@ public function testUsersUpdate_ById() $userId = '999991'; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => $userId, @@ -389,8 +377,8 @@ public function testUsersUpdate_ById() "suspended" => false, "isEnforcedIn2Sv" => false, "isEnrolledIn2Sv" => true, - "aliases" => array(), - ); + "aliases" => [], + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -415,7 +403,7 @@ public function testUsersUpdate_WithAlias() $primaryEmail = "user_test4@sil.org"; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -424,8 +412,8 @@ public function testUsersUpdate_WithAlias() "suspended" => false, "isEnrolledIn2Sv" => true, "isEnforcedIn2Sv" => false, - "aliases" => array('user_alias4B@sil.org'), - ); + "aliases" => ['user_alias4B@sil.org'], + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -455,13 +443,13 @@ public function testUsersUpdate_WithDifferentAliases() $primaryEmail, null ); - $newFixtures = array( - array('directory', 'users_alias', json_encode($aliasFixture)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($aliasFixture)], + ]; $fixturesClass->addFixtures($newFixtures); // Different aliases - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => 999991, @@ -470,8 +458,8 @@ public function testUsersUpdate_WithDifferentAliases() "suspended" => false, "isEnrolledIn2Sv" => true, "isEnforcedIn2Sv" => false, - "aliases" => array('user_alias4C@sil.org', 'user_alias4D@sil.org'), - ); + "aliases" => ['user_alias4C@sil.org', 'user_alias4D@sil.org'], + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -498,14 +486,14 @@ public function testUsersUpdate_NotThere() $userId = 999999; - $userData = array( + $userData = [ "changePasswordAtNextLogin" => false, "hashFunction" => "SHA-1", "id" => $userId, "password" => "testP4ss", "primaryEmail" => "user_test4@sil.org", "suspended" => false, - ); + ]; $fixtures = $this->getFixtures(); $fixturesClass->addFixtures($fixtures); @@ -517,7 +505,6 @@ public function testUsersUpdate_NotThere() $this->expectExceptionCode(201407101130); $newDir->users->update($userId, $newUser); - // the assert is in the doc comment } public function testUsersDelete() @@ -536,22 +523,32 @@ public function testUsersDelete() $sqliteClass = new SqliteUtils($this->dataFile); $results = $sqliteClass->getData('', ''); - $expected = array( - array('id' => 1, 'type' => 'directory', 'class' => 'user', - 'data' => '{"primaryEmail":"user_test1@sil.org",' . - '"id":"999990"}'), - array('id' => 2, 'type' => 'directory', 'class' => 'users_alias', - 'data' => '{"alias":"users_alias2@sil.org","etag":null,' . - '"id":null,"kind":null,' . - '"primaryEmail":"user_test1@sil.org"}'), - array('id' => 3, 'type' => 'app_engine', 'class' => 'webapp', - 'data' => 'webapp3 test data'), - array('id' => 5, 'type' => 'directory', 'class' => 'user', - 'data' => 'user5 test data'), - array('id' => 6, 'type' => 'directory', 'class' => 'users_alias', - 'data' => '{"alias":"users_alias6@sil.org","etag":null,' . - '"id":"1","kind":null,"primaryEmail":null}'), - ); + $expected = [ + [ + 'id' => 1, 'type' => 'directory', 'class' => 'user', + 'data' => '{"primaryEmail":"user_test1@sil.org",' . + '"id":"999990"}' + ], + [ + 'id' => 2, 'type' => 'directory', 'class' => 'users_alias', + 'data' => '{"alias":"users_alias2@sil.org","etag":null,' . + '"id":null,"kind":null,' . + '"primaryEmail":"user_test1@sil.org"}' + ], + [ + 'id' => 3, 'type' => 'app_engine', 'class' => 'webapp', + 'data' => 'webapp3 test data' + ], + [ + 'id' => 5, 'type' => 'directory', 'class' => 'user', + 'data' => 'user5 test data' + ], + [ + 'id' => 6, 'type' => 'directory', 'class' => 'users_alias', + 'data' => '{"alias":"users_alias6@sil.org","etag":null,' . + '"id":"1","kind":null,"primaryEmail":null}' + ], + ]; $msg = " *** Bad database data returned"; $this->assertEquals($expected, $results, $msg); @@ -573,22 +570,32 @@ public function testUsersDelete_ById() $sqliteClass = new SqliteUtils($this->dataFile); $results = $sqliteClass->getData('', ''); - $expected = array( - array('id' => 1, 'type' => 'directory', 'class' => 'user', + $expected = [ + [ + 'id' => 1, 'type' => 'directory', 'class' => 'user', 'data' => '{"primaryEmail":"user_test1@sil.org",' . - '"id":"999990"}'), - array('id' => 2, 'type' => 'directory', 'class' => 'users_alias', + '"id":"999990"}' + ], + [ + 'id' => 2, 'type' => 'directory', 'class' => 'users_alias', 'data' => '{"alias":"users_alias2@sil.org","etag":null,' . - '"id":null,"kind":null,' . - '"primaryEmail":"user_test1@sil.org"}'), - array('id' => 3, 'type' => 'app_engine', 'class' => 'webapp', - 'data' => 'webapp3 test data'), - array('id' => 5, 'type' => 'directory', 'class' => 'user', - 'data' => 'user5 test data'), - array('id' => 6, 'type' => 'directory', 'class' => 'users_alias', + '"id":null,"kind":null,' . + '"primaryEmail":"user_test1@sil.org"}' + ], + [ + 'id' => 3, 'type' => 'app_engine', 'class' => 'webapp', + 'data' => 'webapp3 test data' + ], + [ + 'id' => 5, 'type' => 'directory', 'class' => 'user', + 'data' => 'user5 test data' + ], + [ + 'id' => 6, 'type' => 'directory', 'class' => 'users_alias', 'data' => '{"alias":"users_alias6@sil.org","etag":null,' . - '"id":"1","kind":null,"primaryEmail":null}'), - ); + '"id":"1","kind":null,"primaryEmail":null}' + ], + ]; $msg = " *** Bad database data returned"; $this->assertEquals($expected, $results, $msg); @@ -643,7 +650,7 @@ public function testUsersAliasesInsert_UserNotThere() $newDir = new Directory('anyclient', $this->dataFile); $this->expectExceptionCode(201407110830); - $newAlias = $newDir->users_aliases->insert("no_user@sil.org", $newAlias); + $newDir->users_aliases->insert("no_user@sil.org", $newAlias); } public function testUsersAliasesListUsersAliases_Email() @@ -660,25 +667,25 @@ public function testUsersAliasesListUsersAliases_Email() "1" ); - $newFixtures = array( - array('directory', 'users_alias', json_encode($aliasFixture)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($aliasFixture)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); $aliases = $newDir->users_aliases->listUsersAliases("user_test1@sil.org"); - $results = array(); + $results = []; foreach ($aliases['aliases'] as $nextAlias) { $results[] = json_encode($nextAlias); } - $expected = array( + $expected = [ '{"alias":"users_alias2@sil.org","etag":null,"id":null,' . '"kind":null,"primaryEmail":"user_test1@sil.org"}', '{"alias":"users_alias7@sil.org","etag":null,"id":"1",' . '"kind":null,"primaryEmail":"user_test1@sil.org"}' - ); + ]; $msg = " *** Bad returned Aliases"; $this->assertEquals($expected, $results, $msg); @@ -696,29 +703,31 @@ public function testUsersAliasesListUsersAliases_ID() $aliasB = $this->getAliasFixture("users_alias7b@sil.org", $email, "7"); $aliasC = $this->getAliasFixture("users_alias7c@sil.org", null, "7"); - $newFixtures = array( - array('directory', 'user', - '{"id":"7","primaryEmail":"' . $email . '",' . - '"aliases":[]}'), - array('directory', 'users_alias', json_encode($aliasB)), - array('directory', 'users_alias', json_encode($aliasC)), - ); + $newFixtures = [ + [ + 'directory', 'user', + '{"id":"7","primaryEmail":"' . $email . '",' . + '"aliases":[]}' + ], + ['directory', 'users_alias', json_encode($aliasB)], + ['directory', 'users_alias', json_encode($aliasC)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); $aliases = $newDir->users_aliases->listUsersAliases("7"); - $results = array(); + $results = []; foreach ($aliases['aliases'] as $nextAlias) { $results[] = json_encode($nextAlias); } - $expected = array( + $expected = [ '{"alias":"users_alias7b@sil.org","etag":null,"id":"7","kind":null,' . '"primaryEmail":"user_test7@sil.org"}', '{"alias":"users_alias7c@sil.org","etag":null,"id":"7","kind":null,' . '"primaryEmail":null}', - ); + ]; $msg = " *** Bad returned Aliases"; $this->assertEquals($expected, $results, $msg); @@ -734,9 +743,9 @@ public function testUsersAliasesListUsersAliases_Structure() $email = "user_test1@sil.org"; $alias = $this->getAliasFixture("users_alias7@sil.org", $email, "1"); - $newFixtures = array( - array('directory', 'users_alias', json_encode($alias)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($alias)], + ]; $fixturesClass->addFixtures($newFixtures); @@ -749,14 +758,14 @@ public function testUsersAliasesListUsersAliases_Structure() $results = is_array($aliases['aliases']); $this->assertTrue($results, ' *** The aliases property is not an array'); - $user_aliases = array(); + $user_aliases = []; foreach ($aliases['aliases'] as $alias) { $user_aliases[] = $alias['alias']; } $results = $user_aliases; - $expected = array("users_alias2@sil.org", "users_alias7@sil.org"); + $expected = ["users_alias2@sil.org", "users_alias7@sil.org"]; $msg = " *** Bad returned Aliases"; $this->assertEquals($expected, $results, $msg); } @@ -773,15 +782,15 @@ public function testUsersAliasesListUsersAliases_UserNotThere() "user_test1@sil.org", "1" ); - $newFixtures = array( - array('directory', 'users_alias', json_encode($alias)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($alias)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); $this->expectExceptionCode(201407101420); - $aliases = $newDir->users_aliases->listUsersAliases("no_user@sil.org"); + $newDir->users_aliases->listUsersAliases("no_user@sil.org"); } public function testUsersAliasesDelete() @@ -795,9 +804,9 @@ public function testUsersAliasesDelete() $alias = $this->getAliasFixture("users_alias7@sil.org", $email, "1"); - $newFixtures = array( - array('directory', 'users_alias', json_encode($alias)), - ); + $newFixtures = [ + ['directory', 'users_alias', json_encode($alias)], + ]; $fixturesClass->addFixtures($newFixtures); $newDir = new Directory('anyclient', $this->dataFile); @@ -811,19 +820,22 @@ public function testUsersAliasesDelete() $sqliteUtils = new SqliteUtils($this->dataFile); $results = $sqliteUtils->getData('directory', 'users_alias'); - $expected = array( - array('id' => '6', - 'type' => 'directory', - 'class' => 'users_alias', - 'data' => '{"alias":"users_alias6@sil.org","etag":null,' . - '"id":"1","kind":null,"primaryEmail":null}', - ), - array('id' => '7', + $expected = [ + [ + 'id' => '6', + 'type' => 'directory', + 'class' => 'users_alias', + 'data' => '{"alias":"users_alias6@sil.org","etag":null,' . + '"id":"1","kind":null,"primaryEmail":null}', + ], + [ + 'id' => '7', 'type' => 'directory', 'class' => 'users_alias', 'data' => '{"alias":"users_alias7@sil.org","etag":null,' . - '"id":"1","kind":null,"primaryEmail":"' . $email . '"}'), - ); + '"id":"1","kind":null,"primaryEmail":"' . $email . '"}' + ], + ]; $msg = " *** Mismatching users_aliases in db"; $this->assertEquals($expected, $results, $msg); } From 943b0694f7c808123d76d338473757d06b9c9d69 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:12:06 -0400 Subject: [PATCH 5/9] Update dependencies --- composer.json | 8 +- composer.lock | 1744 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 1294 insertions(+), 458 deletions(-) diff --git a/composer.json b/composer.json index 388cae2..d5f1e71 100644 --- a/composer.json +++ b/composer.json @@ -22,15 +22,15 @@ } ], "require": { - "php": ">=7.4.0", + "php": "^8.2", "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*", - "google/apiclient": "^v1.1.9", - "google/apiclient-services": "^0.176" + "google/apiclient": "^v2.15.0", + "google/apiclient-services": "^v0.308.0" }, "require-dev": { - "phpunit/phpunit": "^9.5.4", + "phpunit/phpunit": "^9.0", "silinternational/psr3-adapters": "^3.0" }, "autoload": { diff --git a/composer.lock b/composer.lock index 69c463c..5993e4f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,38 +4,123 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9848b2bcdc52e08decf9560b177e1056", + "content-hash": "0135ffbfbed3d72a3d3271e1d99f6add", "packages": [ + { + "name": "firebase/php-jwt", + "version": "v6.8.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "48b0210c51718d682e53210c24d25c5a10a2299b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/48b0210c51718d682e53210c24d25c5a10a2299b", + "reference": "48b0210c51718d682e53210c24d25c5a10a2299b", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.8.0" + }, + "time": "2023-06-20T16:45:35+00:00" + }, { "name": "google/apiclient", - "version": "v1.1.9", + "version": "v2.15.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "19d7d735ee4cff0f8c14a234b5094b99d00ef278" + "reference": "49787fa30b8d8313146a61efbf77ed1fede723c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/19d7d735ee4cff0f8c14a234b5094b99d00ef278", - "reference": "19d7d735ee4cff0f8c14a234b5094b99d00ef278", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/49787fa30b8d8313146a61efbf77ed1fede723c2", + "reference": "49787fa30b8d8313146a61efbf77ed1fede723c2", "shasum": "" }, "require": { - "php": ">=5.2.1" + "firebase/php-jwt": "~6.0", + "google/apiclient-services": "~0.200", + "google/auth": "^1.28", + "guzzlehttp/guzzle": "~6.5||~7.0", + "guzzlehttp/psr7": "^1.8.4||^2.2.1", + "monolog/monolog": "^2.9||^3.0", + "php": "^7.4|^8.0", + "phpseclib/phpseclib": "^3.0.2" }, "require-dev": { - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "~2.3" + "cache/filesystem-adapter": "^1.1", + "composer/composer": "^1.10.22", + "phpcompatibility/php-compatibility": "^9.2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.0", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1" + }, + "suggest": { + "cache/filesystem-adapter": "For caching certs and tokens (using Google\\Client::setCache)" }, "type": "library", "extra": { "branch-alias": { - "dev-v1-master": "1.1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { "files": [ - "src/Google/autoload.php" + "src/aliases.php" + ], + "psr-4": { + "Google\\": "src/" + }, + "classmap": [ + "src/aliases.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -49,34 +134,37 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client/issues", - "source": "https://github.com/googleapis/google-api-php-client/tree/v1.1.9" + "source": "https://github.com/googleapis/google-api-php-client/tree/v2.15.0" }, - "time": "2020-07-22T19:51:49+00:00" + "time": "2023-05-18T13:51:33+00:00" }, { "name": "google/apiclient-services", - "version": "v0.176.0", + "version": "v0.308.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "316cbf9b02c575a140d8cbeca48a3ca0070fcd5a" + "reference": "85cf00383e6bf6eca131bd3261b7859ea418a578" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/316cbf9b02c575a140d8cbeca48a3ca0070fcd5a", - "reference": "316cbf9b02c575a140d8cbeca48a3ca0070fcd5a", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/85cf00383e6bf6eca131bd3261b7859ea418a578", + "reference": "85cf00383e6bf6eca131bd3261b7859ea418a578", "shasum": "" }, "require": { - "php": ">=5.4" + "php": "^7.4||^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5" + "phpunit/phpunit": "^5.7||^8.5.13" }, "type": "library", "autoload": { - "psr-0": { - "Google_Service_": "src" + "files": [ + "autoload.php" + ], + "psr-4": { + "Google\\Service\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -89,39 +177,1121 @@ "google" ], "support": { - "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.176.0" + "issues": "https://github.com/googleapis/google-api-php-client-services/issues", + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.308.0" + }, + "time": "2023-07-09T01:06:13+00:00" + }, + { + "name": "google/auth", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-auth-library-php.git", + "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/07f7f6305f1b7df32b2acf6e101c1225c839c7ac", + "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^6.0", + "guzzlehttp/guzzle": "^6.2.1|^7.0", + "guzzlehttp/psr7": "^2.4.5", + "php": "^7.4||^8.0", + "psr/cache": "^1.0||^2.0||^3.0", + "psr/http-message": "^1.1||^2.0" + }, + "require-dev": { + "guzzlehttp/promises": "^1.3", + "kelvinmo/simplejwt": "0.7.0", + "phpseclib/phpseclib": "^3.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0.0", + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "support": { + "docs": "https://googleapis.github.io/google-auth-library-php/main/", + "issues": "https://github.com/googleapis/google-auth-library-php/issues", + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.28.0" + }, + "time": "2023-05-11T21:58:18+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-05-21T14:04:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-05-21T13:50:22+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:11:26+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:44:46+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "3.0.21", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1", + "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1|^2", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": ">=5.6.1" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-dom": "Install the DOM extension to load XML formatted public keys.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib3\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.21" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2023-07-09T15:24:48+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/1.0.2" + }, + "time": "2023-04-10T20:12:12+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, - "time": "2021-05-15T11:18:02+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -148,7 +1318,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -164,20 +1334,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -215,7 +1385,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -223,20 +1393,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "19526a33fb561ef417e822e85f08a00db4059c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17", + "reference": "19526a33fb561ef417e822e85f08a00db4059c17", "shasum": "" }, "require": { @@ -277,9 +1447,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2023-06-25T14:52:30+00:00" }, { "name": "phar-io/manifest", @@ -392,252 +1562,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -652,8 +1595,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -686,7 +1629,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -694,7 +1637,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -939,20 +1882,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.21", + "version": "9.6.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1" + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -963,7 +1906,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -971,22 +1913,19 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -994,7 +1933,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -1025,7 +1964,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" }, "funding": [ { @@ -1035,59 +1975,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2022-06-19T12:14:25+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + }, { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2023-07-10T04:04:23+00:00" }, { "name": "sebastian/cli-parser", @@ -1258,16 +2152,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -1320,7 +2214,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -1328,7 +2222,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -1389,16 +2283,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -1443,7 +2337,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -1451,20 +2345,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -1506,7 +2400,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -1514,20 +2408,20 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -1583,7 +2477,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -1591,7 +2485,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -1828,16 +2722,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -1876,10 +2770,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -1887,7 +2781,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -1946,16 +2840,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -1967,7 +2861,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -1990,7 +2884,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -1998,7 +2892,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2055,20 +2949,20 @@ }, { "name": "silinternational/psr3-adapters", - "version": "3.0.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/silinternational/psr3-adapters.git", - "reference": "9aea95d2fb5a83fcde5340c50a73b508d6daf81d" + "reference": "3f281e39b2925026e8f4b42625c1122198a8a01d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silinternational/psr3-adapters/zipball/9aea95d2fb5a83fcde5340c50a73b508d6daf81d", - "reference": "9aea95d2fb5a83fcde5340c50a73b508d6daf81d", + "url": "https://api.github.com/repos/silinternational/psr3-adapters/zipball/3f281e39b2925026e8f4b42625c1122198a8a01d", + "reference": "3f281e39b2925026e8f4b42625c1122198a8a01d", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.4 || ^8.0", "psr/log": "^1.0" }, "require-dev": { @@ -2103,9 +2997,9 @@ "description": "Various PSR3-compatible logging adapters.", "support": { "issues": "https://github.com/silinternational/psr3-adapters/issues", - "source": "https://github.com/silinternational/psr3-adapters/tree/3.0.2" + "source": "https://github.com/silinternational/psr3-adapters/tree/3.1.0" }, - "time": "2022-01-03T18:24:29+00:00" + "time": "2022-08-24T14:44:38+00:00" }, { "name": "theseer/tokenizer", @@ -2156,64 +3050,6 @@ } ], "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -2222,7 +3058,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.4.0", + "php": "^8.2", "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*" From a2847b4e8ebba841e92c29177833cdec0586a0d9 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:17:56 -0400 Subject: [PATCH 6/9] Update .travis.yml to be PHP 8.2 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a07edd1..f950628 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: php php: - - "7.4" + - "8.2" before_script: - curl -s https://getcomposer.org/installer | php && php composer.phar update From e13711ecb1a2b47f432de1f3ed206794ef8c9938 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 12 Jul 2023 14:19:16 -0400 Subject: [PATCH 7/9] Updated refresh date of Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a46171d..c7c5c2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM php:8.2-apache LABEL maintainer="Mark Tompsett " -ENV REFRESHED_AT 2021-06-10 +ENV REFRESHED_AT 2023-07-12 # Make sure apt has current list/updates RUN apt-get update -y \ From 70557d951158537694ffdeefcdef81fdd23d4b51 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Tue, 25 Jul 2023 10:32:50 -0400 Subject: [PATCH 8/9] Default the enforced and enrolled 2sv values --- SilMock/Google/Service/Directory/UsersResource.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SilMock/Google/Service/Directory/UsersResource.php b/SilMock/Google/Service/Directory/UsersResource.php index 14dd999..b1a3b3e 100644 --- a/SilMock/Google/Service/Directory/UsersResource.php +++ b/SilMock/Google/Service/Directory/UsersResource.php @@ -165,6 +165,8 @@ public function insert($postBody) 'lastLoginTime' => $currentDateTime->format('c'), 'creationTime' => $currentDateTime->format('c'), 'agreedToTerms' => false, + 'isEnforcedIn2Sv' => false, + 'isEnrolledIn2Sv' => false, ); // array_merge will not work, since $postBody is an object which only From 8c34cfc33b0d3b6f57d51948f0d0718205caa061 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Tue, 25 Jul 2023 12:34:19 -0400 Subject: [PATCH 9/9] Get feature testing working with enforced and enrolled values --- .../Google/Service/Directory/UsersResource.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/SilMock/Google/Service/Directory/UsersResource.php b/SilMock/Google/Service/Directory/UsersResource.php index b1a3b3e..95d78fa 100644 --- a/SilMock/Google/Service/Directory/UsersResource.php +++ b/SilMock/Google/Service/Directory/UsersResource.php @@ -165,8 +165,8 @@ public function insert($postBody) 'lastLoginTime' => $currentDateTime->format('c'), 'creationTime' => $currentDateTime->format('c'), 'agreedToTerms' => false, - 'isEnforcedIn2Sv' => false, - 'isEnrolledIn2Sv' => false, + 'isEnforcedIn2Sv' => 'false', + 'isEnrolledIn2Sv' => 'false', ); // array_merge will not work, since $postBody is an object which only @@ -242,6 +242,12 @@ public function update($userKey, $postBody) $dbUserProps[$key] = $value; } } + if (!isset($dbUserProps['isEnforcedIn2Sv'])) { + $dbUserProps['isEnforcedIn2Sv'] = 'false'; + } + if (!isset($dbUserProps['isEnrolledIn2Sv'])) { + $dbUserProps['isEnrolledIn2Sv'] = 'false'; + } // Delete the user's old aliases before adding the new ones $usersAliases = new UsersAliasesResource($this->dbFile); @@ -404,10 +410,11 @@ private function doesUserMatch($entry, $query = '') } if (! is_string($checkValue)) { throw new \Exception(sprintf( - "Expecting a string.\nGot Entry: %s\nGot Field: %s\nGot VALUE: %s", + "Expecting a string.\nGot Entry: %s\nGot Field: %s\nGot VALUE: %s (%s)", var_export($entry, true), var_export($field, true), - var_export($checkValue, true) + var_export($checkValue, true), + gettype($checkValue) )); } if (mb_strpos($checkValue, $value) === 0) {