From d3012cbde2c169183aafe8e7d2dbf577a38a8d08 Mon Sep 17 00:00:00 2001
From: Olav Morken <olav.morken@uninett.no>
Date: Wed, 22 Apr 2009 07:02:44 +0000
Subject: [PATCH] Change admin-authentication to use the 'admin' authentication
 source, if present.

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1470 44740490-163a-0410-bde0-09ae8108e29a
---
 config-templates/authsources.php | 11 +++++++++++
 lib/SimpleSAML/Utilities.php     | 19 ++++++++++++++-----
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/config-templates/authsources.php b/config-templates/authsources.php
index 1ecc707eb..1370ffc36 100644
--- a/config-templates/authsources.php
+++ b/config-templates/authsources.php
@@ -2,6 +2,17 @@
 
 $config = array(
 
+	/*
+	 * This is a authentication source which handles admin authentication.
+	 */
+	'admin' => array(
+		/*
+		 * The default is to use core:AdminPassword, but it can be replaced with
+		 * any authentication source.
+		 */
+		'core:AdminPassword',
+	),
+
 	'example-sql' => array(
 		'sqlauth:SQL',
 		'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php
index 19a66e9ab..d28987313 100644
--- a/lib/SimpleSAML/Utilities.php
+++ b/lib/SimpleSAML/Utilities.php
@@ -1688,7 +1688,7 @@ class SimpleSAML_Utilities {
 
 		$session = SimpleSAML_Session::getInstance();
 
-		return $session->isValid('login-admin');
+		return $session->isValid('admin') || $session->isValid('login-admin');
 	}
 
 
@@ -1721,11 +1721,20 @@ class SimpleSAML_Utilities {
 			return;
 		}
 
+		$returnTo = SimpleSAML_Utilities::selfURL();
+
 		/* Not authenticated as admin user. Start authentication. */
-		$config = SimpleSAML_Configuration::getInstance();
-		SimpleSAML_Utilities::redirect('/' . $config->getBaseURL() . 'auth/login-admin.php',
-			array('RelayState' => SimpleSAML_Utilities::selfURL())
-		);
+
+		if (SimpleSAML_Auth_Source::getById('admin') !== NULL) {
+			SimpleSAML_Auth_Default::initLogin('admin', $returnTo);
+		} else {
+			/* For backwards-compatibility. */
+
+			$config = SimpleSAML_Configuration::getInstance();
+			SimpleSAML_Utilities::redirect('/' . $config->getBaseURL() . 'auth/login-admin.php',
+				array('RelayState' => $returnTo)
+						       );
+		}
 	}
 
 }
-- 
GitLab