From 98ed317acd2cb7a2f6d47c86141cee3e8d116ae2 Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Tue, 2 Jun 2015 18:23:06 +0200
Subject: [PATCH] Restored still needed file :-)

---
 .../WebAuthN/TextGrid-WebAuth.php             | 163 ++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 info.textgrid.middleware.tgauth.webauth/WebAuthN/TextGrid-WebAuth.php

diff --git a/info.textgrid.middleware.tgauth.webauth/WebAuthN/TextGrid-WebAuth.php b/info.textgrid.middleware.tgauth.webauth/WebAuthN/TextGrid-WebAuth.php
new file mode 100644
index 0000000..3cff6ce
--- /dev/null
+++ b/info.textgrid.middleware.tgauth.webauth/WebAuthN/TextGrid-WebAuth.php
@@ -0,0 +1,163 @@
+<?php
+// #######################################################
+// Author: Martin Haase / DAASI International GmbH / TextGrid
+// Creation date: 2010-09-23
+// Modification date: 2010-10-19
+// Version: 0.2
+// #######################################################
+
+include("../tglib/LDAP.class.php");
+include("../tglib/RBAC.class.php");
+include("../tglib/WebUtils.class.php");
+
+$configfile = "/etc/textgrid/tgauth/conf/config_tgwebauth.xml";
+
+$util = new WebUtils;
+
+$authZinstance = $_REQUEST["authZinstance"];
+
+if ( !(isset($authZinstance)) || strlen($authZinstance) <= 0 ) {
+  $util->printAuthFailure("no_tgauth_instance_heading", 
+		      "no_tgauth_instance_detail", 
+		      null, 
+		      null );
+  exit;
+}
+
+$rbac = new RBAC ( $configfile, $authZinstance );
+
+// Variant 1: Authentication at Community LDAP
+if (isset ($_REQUEST["loginname"]) && strlen($_REQUEST["loginname"]) > 0
+    && isset ($_REQUEST["password"]) && strlen($_REQUEST["password"]) > 0) {
+  // now authenticating
+  $ldap = new LDAP ( $configfile );
+  $AuthNResult = $ldap->authenticate($_REQUEST["loginname"], $_REQUEST["password"]);
+  if (! $AuthNResult["success"]) {
+    $util->printAuthFailure("authn_failure_heading", 
+			$AuthNResult["detail"], 
+			$_REQUEST["loginname"], 
+			null ); 
+    exit;
+  }
+  $ProvidedAttributes = $ldap->getUserAttributes();
+  $_SERVER["REMOTE_USER"] = $AuthNResult["TGID"];
+}
+
+
+// Variant 2: Shibboleth gave us the right REMOTE_USER. 
+// We create a Session here in RBAC, also for Variant1
+if (isset ($_SERVER["REMOTE_USER"])) { // this holds for both shib and ldap authN
+
+  // now creating session, activating roles, etc, in RBAC
+
+  $CSResult = $rbac->createSession( $_SERVER["REMOTE_USER"] );
+  if (isset ($AuthNResult)) {
+    $CSResult["rbachash"]["identity_provider"] = $AuthNResult["LDAPname"];
+  } else {
+    $CSResult["rbachash"]["identity_provider"] = $_SERVER["Shib-Identity-Provider"];
+  }
+
+  if (!$CSResult["success"]) {
+    $util->printAuthFailure("sid_create_failure_heading", 
+			    $CSResult["detail"], 
+			    $_REQUEST["loginname"], 
+			    $CSResult["rbachash"]
+			    ); 
+    exit;
+  }
+  $Sid = $CSResult["rbachash"]["Sid"];
+
+  $AttributeMap = Array ('surname' => 'sn',
+			 'organisation' => 'o',
+			 'givenname' => 'givenName',
+			 'displayname' => 'cn',
+			 'mail' => 'mail'
+			 );
+  if (!isset ($ldap)) {
+    $ProvidedAttributes = Array();
+    // this is the list of attributes Shibboleth might give to us except from remote_user
+    foreach (array ("o", "sn", "givenName", "cn", "mail") as $a) {
+      if (isset($_SERVER[$a])) { $ProvidedAttributes[$a] = $_SERVER[$a];}
+    }
+  }
+} 
+// This is Variant 3: No Session Creation, but just a desire to see (and update) User Attributes
+else if (isset ($_REQUEST["Sid"]) && strlen($_REQUEST["Sid"]) > 0 )  {
+// we might have come directly here using the sid and use an earlier session
+  $Sid = $_REQUEST["Sid"];
+}
+// not enough information, exiting. 
+  else 
+  {
+     
+    // check if we came via Shibboleth, but without an eduPersonPrincipalName 
+    // (which would have been the REMOTE_USER)
+      if (isset( $_SERVER['Shib-Session-ID'] )) {
+	  $util->printAuthFailure("shib_login_failure_heading", 
+				  "shib_login_failure_detail",
+				  "(Shibboleth login, but no ePPN provided)", 
+				  null ); 
+	exit;
+      }
+    else
+      {	
+	$missing = 0;
+	if (!isset($_REQUEST["loginname"]) || strlen($_REQUEST["loginname"]) == 0) {
+	  $missing = 1;
+	}
+	if (!isset($_REQUEST["password"]) || strlen($_REQUEST["password"]) == 0) {
+	  $missing = $missing + 2;
+	}
+  
+	if ($missing == 0) {
+	  $util->printAuthFailure("authn_failure_heading", 
+				  "authn_failure_detail_nothing_to_do",
+				  $_REQUEST["loginname"], 
+				  null ); 
+	  trigger_error("WebAuth does not know what to do (no login or password provided, no remote user, and no session Id), exiting.", E_USER_WARNING);
+	} else if ($missing == 1) {
+	  $util->printAuthFailure("authn_failure_heading", 
+				  "authn_failure_detail_id_missing",
+				  '(null)', 
+				  null ); 
+	} else if ($missing == 2) {
+	  $util->printAuthFailure("authn_failure_heading", 
+				  "authn_failure_detail_password_missing",
+				  $_REQUEST["loginname"], 
+				  null ); 
+	} else if ($missing == 3) {
+	  $util->printAuthFailure("authn_failure_heading", 
+				  "authn_failure_detail_both_missing",
+				  '(null)', 
+				  null ); 
+	}
+	exit;
+      }
+  }
+
+// no matter where we came from we need to retrieve attributes from RBAC
+$attributes = $rbac->getUserAttributes( $Sid );
+
+// if we already have enough attributes and just created a session, possibly update
+// them if there came different ones, and then finally print welcome screen causing 
+// the TextGridLab to take over the Sid
+if ($rbac->enoughUserAttributes( $Sid ) && isset ($_SERVER["REMOTE_USER"])) {
+  $util->printAuthSuccess("authn_succeeded_heading",
+			  isset($_REQUEST["loginname"]) ? $_REQUEST["loginname"] : $_SERVER["REMOTE_USER"],
+			  $CSResult["rbachash"],
+			  $rbac->slcData()
+			  ); 
+  $rbac->updateAttributes ( $ProvidedAttributes, $AttributeMap, $Sid ); //  not vital and second-order
+} else {
+  // now presenting the form, let JavaScript take care for the non-empty-check and the help
+  // the form will return either displaying the Sid or just an ACK
+  if (isset ($_SERVER["REMOTE_USER"])) {
+    $util->printAttributeForm( $attributes, $ProvidedAttributes, $AttributeMap, $Sid, $authZinstance, $_SERVER["REMOTE_USER"], $rbac->ToUversion, $rbac->ToUtext);
+  } else if (isset ($_REQUEST["ePPN"]))  { // direct invocation of userdata modification dialogue
+    $util->printAttributeForm( $attributes, null, null, $Sid, $authZinstance, $_REQUEST["ePPN"], $rbac->ToUversion, $rbac->ToUtext);
+  } else {
+    echo "Could not modify attributes, not enough information";
+  }
+}
+
+?>
-- 
GitLab