From fa78244d17d8b0acaed91b7e7b9f9d79f59e0ab0 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Wed, 15 Mar 2017 16:29:25 +0800 Subject: [PATCH] MDL-58220 oauth2: Fix unit tests and add more --- lib/classes/oauth2/issuer.php | 6 ++- lib/tests/oauth2_test.php | 72 ++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/lib/classes/oauth2/issuer.php b/lib/classes/oauth2/issuer.php index 5bbb9e8d049..3f56d7aedc1 100644 --- a/lib/classes/oauth2/issuer.php +++ b/lib/classes/oauth2/issuer.php @@ -144,7 +144,11 @@ class issuer extends persistent { } $validdomains = explode(',', $this->get('alloweddomains')); - list($unused, $emaildomain) = explode('@', $email, 2); + $parts = explode('@', $email, 2); + $emaildomain = ''; + if (count($parts) > 1) { + $emaildomain = $parts[1]; + } foreach ($validdomains as $checkdomain) { $checkdomain = \core_text::strtolower(trim($checkdomain)); diff --git a/lib/tests/oauth2_test.php b/lib/tests/oauth2_test.php index 1831dc26b3d..a8b50c11449 100644 --- a/lib/tests/oauth2_test.php +++ b/lib/tests/oauth2_test.php @@ -74,7 +74,10 @@ class core_oauth2_testcase extends advanced_testcase { $issuer = \core\oauth2\api::create_standard_issuer('microsoft'); $same = \core\oauth2\api::get_issuer($issuer->get('id')); - $this->assertEquals($issuer, $same); + + foreach ($same->properties_definition() as $name => $def) { + $this->assertTrue($issuer->get($name) == $same->get($name)); + } $endpoints = \core\oauth2\api::get_endpoints($issuer); $same = \core\oauth2\api::get_endpoint($endpoints[0]->get('id')); @@ -132,4 +135,71 @@ class core_oauth2_testcase extends advanced_testcase { $client = \core\oauth2\api::get_system_oauth_client($issuer); $this->assertTrue($client->is_logged_in()); } + + /** + * Tests we can enable and disable an issuer. + */ + public function test_enable_disable_issuer() { + global $SESSION; + + $this->resetAfterTest(); + $this->setAdminUser(); + + $issuer = \core\oauth2\api::create_standard_issuer('microsoft'); + + $issuerid = $issuer->get('id'); + + \core\oauth2\api::enable_issuer($issuerid); + $check = \core\oauth2\api::get_issuer($issuer->get('id')); + $this->assertTrue((boolean)$check->get('enabled')); + + \core\oauth2\api::enable_issuer($issuerid); + $check = \core\oauth2\api::get_issuer($issuer->get('id')); + $this->assertTrue((boolean)$check->get('enabled')); + + \core\oauth2\api::disable_issuer($issuerid); + $check = \core\oauth2\api::get_issuer($issuer->get('id')); + $this->assertFalse((boolean)$check->get('enabled')); + + \core\oauth2\api::enable_issuer($issuerid); + $check = \core\oauth2\api::get_issuer($issuer->get('id')); + $this->assertTrue((boolean)$check->get('enabled')); + } + + /** + * Test the alloweddomains for an issuer. + */ + public function test_issuer_alloweddomains() { + global $SESSION; + + $this->resetAfterTest(); + $this->setAdminUser(); + + $issuer = \core\oauth2\api::create_standard_issuer('microsoft'); + + $issuer->set('alloweddomains', ''); + + // Anything is allowed when domain is empty. + $this->assertTrue($issuer->is_valid_login_domain('')); + $this->assertTrue($issuer->is_valid_login_domain('a@b')); + $this->assertTrue($issuer->is_valid_login_domain('longer.example@example.com')); + + $issuer->set('alloweddomains', 'example.com'); + + // One domain - must match exactly - no substrings etc. + $this->assertFalse($issuer->is_valid_login_domain('')); + $this->assertFalse($issuer->is_valid_login_domain('a@b')); + $this->assertFalse($issuer->is_valid_login_domain('longer.example@example')); + $this->assertTrue($issuer->is_valid_login_domain('longer.example@example.com')); + + $issuer->set('alloweddomains', 'example.com,example.net'); + // Multiple domains - must match any exactly - no substrings etc. + $this->assertFalse($issuer->is_valid_login_domain('')); + $this->assertFalse($issuer->is_valid_login_domain('a@b')); + $this->assertFalse($issuer->is_valid_login_domain('longer.example@example')); + $this->assertFalse($issuer->is_valid_login_domain('invalid@email@example.net')); + $this->assertTrue($issuer->is_valid_login_domain('longer.example@example.net')); + $this->assertTrue($issuer->is_valid_login_domain('longer.example@example.com')); + } + }