<?php
	/*
		File		: login.php
		Description	: New login script with LDAP authorization.		

		(c)Copyright 2006 by Tobias 'twobee' Mathes, <twobee at c-base dot org>
	*/

	define('IN_COPPERMINE', true);
	define('LOGIN_PHP', true);

	require_once('include/init.inc.php');
	

	// activate magic_quotes
	set_magic_quotes_runtime(1);

	import_request_variables('gP', 'ext_');
	import_request_variables('C', 'cookie_');


	/* ============== O P T I O N S =========== */

	define('LDAP_SERVER',  $CONFIG['ldapserver']);
	define('LDAP_DN',  $CONFIG['ldapdn']);

	define('LDAP_FORCE_HTTPS', $CONFIG['ldapforcehttps']);
	define('LDAP_DEBUG', 0);

	define('PHP_SELF', $_SERVER['SCRIPT_NAME']);

	define('CPG_DB_SERVER', $CONFIG['dbserver']);
	define('CPG_DB_USER', $CONFIG['dbuser']);
	define('CPG_DB_PASSWORD', $CONFIG['dbpass']);
	define('CPG_DB_NAME', $CONFIG['dbname']);
	define('CPG_DB_USERS', $CONFIG['TABLE_USERS']);
	define('CPG_DB_SESSIONS', $CONFIG['TABLE_PREFIX']."sessions");

	
	/* ============== M A I N =========== */

	// force http request to https
	if  ((LDAP_FORCE_HTTPS) && (!isset($_SERVER['HTTPS'])))
		{
			header("Location: https://" . $_SERVER['HTTP_HOST'] ."/". PHP_SELF);
		}

	if (USER_ID) cpg_die(ERROR, $lang_login_php['err_already_logged_in'], __FILE__, __LINE__);

	$referer = $_GET['referer'] ? $_GET['referer'] : 'index.php';
	if (strpos($referer, "http") !== false) 
		{
		  $referer = "index.php";
		}

	$login_failed = '';
	$cookie_warning = '';



	// process
	if (isset($ext_submitted))
		{
			$_POST['username'] = trim($_POST['username']);
			$_POST['username'] = addslashes($_POST['username']);
			$_POST['password'] = trim($_POST['password']);
			$_POST['password'] = addslashes($_POST['password']);
		

			$ldap_connect = ldap_connect(LDAP_SERVER)
			or die("Could not connect to LDAP server.");

			ldap_set_option($ldap_connect, LDAP_OPT_PROTOCOL_VERSION, 3);
			
			if ($ldap_connect)
				{
				  $ldap_dn = "uid=".$_POST['username'].",".LDAP_DN;
	 		   	  $ldap_bind = ldap_bind($ldap_connect, $ldap_dn, $_POST['password']);

	 		   	  if ($ldap_bind)
	 		   	 	{
						$link = cpg_db_connect();
						$query = "SELECT user_id, user_name, user_active FROM `".CPG_DB_USERS."` WHERE `user_active` = 'YES' AND `user_name` = '".addslashes($_POST['username'])."'";
						$result = mysql_query($query) or die("request failed: " . mysql_error());   
						$fetch_tmp = mysql_fetch_array($result);
						mysql_free_result($result);
						mysql_close($link);			

						if (!isset($fetch_tmp['0']))
							{
							  //user doesn't exists in database
							  // CREATING USER!
							  $link = cpg_db_connect();

							  $sql_ins = "INSERT INTO ".CPG_DB_USERS." ".
			 				  "(user_regdate, user_active, user_name, user_email) ".
			 				  "VALUES (NOW(), 'YES', '" . trim(addslashes($_POST['username'])) . "', '" . trim(addslashes($_POST['username'])) . "@c-base.org')";
			 				  
							  mysql_query($sql_ins) or die("blubb");

							  $query = "SELECT user_id, user_name FROM `".CPG_DB_USERS."` WHERE `user_active` = 'YES' AND `user_name` = '".addslashes($_POST['username'])."'";
							  $result = mysql_query($query) or die("request failed: " . mysql_error());   
							  $fetch_tmp_2 = mysql_fetch_array($result);
							  mysql_free_result($result);
							  
							  mysql_close($link);

							  sleep(5);

		  pageheader('LDAP Login');
		  starttable('-1', $lang_login_php['enter_login_pswd'], 2);
echo <<< EOT
		  <tr>
		  	<td colspan="2" align="center" class="tableb">
		  		<span style="color:red;">$lang_login_php['ldap_user_created_msg']</span>
		  	</td>
		  </tr>
                  <tr>
                    <form action="login.php?referer=$referer" method="post" name="loginbox">
                        <td class="tableb" width="40%">{$lang_login_php['username']}</td>
                        <td class="tableb" width="60%"><input type="text" class="textinput" name="username" style="width: 100%" tabindex="1" /></td>
                        <script language="javascript" type="text/javascript">
                        <!--
                        document.loginbox.username.focus();
                        -->
                        </script>
                  </tr>
                  <tr>
                          <td class="tableb">{$lang_login_php['password']}</td>
                        <td class="tableb"><input type="password" class="textinput" name="password" style="width: 100%" tabindex="2" /></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="center" class="tableb">{$lang_login_php['remember_me']} <input name="remember_me" type="checkbox" class="checkbox" value="1" tabindex="3" /></td>
                  </tr>
                  <tr>
                    <td align="center" class="tablef"><a href="forgot_passwd.php" class="topmenu">{$lang_login_php['forgot_password_link']}</a></td>
                    <td align="left" class="tablef"><input name="submitted" type="submit" class="button" value="{$lang_login_php['login']}" tabindex="4" /></td>
                    </form>
                  </tr>

EOT;

			endtable();
			pagefooter();

							}
						else
							{
							  //user is existing in database

							  if ($USER_DATA = $cpg_udb->login( addslashes($_POST['username']), isset($_POST['remember_me'])))
							  	{
							  		$referer=preg_replace("'&amp;'","&",$referer);
									pageheader($lang_login_php['login'], "<META http-equiv=\"refresh\" content=\"3;url=$referer\">");
									msg_box($lang_login_php['login'], sprintf($lang_login_php['welcome'], $USER_DATA['user_name']), $lang_continue, $referer);
									pagefooter();
									exit;
							  	} 
							  else 
							  	{
							  		log_write("Failed login attempt with Username: {$_POST['username']} from IP {$_SERVER['REMOTE_ADDR']} on " . localised_date(-1,$log_date_fmt),CPG_SECURITY_LOG);
							  		$login_failed = '<tr><td colspan="2" align="center" class="tableh2"><font size="1" color="red"><b>'.$lang_login_php['err_login'].'<b></font></td></tr>';
								}

							}
					}
				else
					{
					  // Back to login formular
						  pageheader('LDAP Login');
						  starttable('-1', $lang_login_php['ldap_group_failure'], 2);
echo <<< EOT
						  <tr>
						  	<td class="tableb">
						  		{$lang_login_php['ldap_group_failure_msg']}
							</td>
						  </tr>
EOT;
						  endtable();
						  pagefooter();
					}
				}
		}

	else
		{
		  pageheader('LDAP Login');
		  starttable('-1', $lang_login_php['enter_login_pswd'], 2);
echo <<< EOT
                  <tr>
                    <form action="login.php?referer=$referer" method="post" name="loginbox">
                        <td class="tableb" width="40%">{$lang_login_php['username']}</td>
                        <td class="tableb" width="60%"><input type="text" class="textinput" name="username" style="width: 100%" tabindex="1" /></td>
                        <script language="javascript" type="text/javascript">
                        <!--
                        document.loginbox.username.focus();
                        -->
                        </script>
                  </tr>
                  <tr>
                          <td class="tableb">{$lang_login_php['password']}</td>
                        <td class="tableb"><input type="password" class="textinput" name="password" style="width: 100%" tabindex="2" /></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="center" class="tableb">{$lang_login_php['remember_me']} <input name="remember_me" type="checkbox" class="checkbox" value="1" tabindex="3" /></td>
                  </tr>
                  <tr>
                    <td align="center" class="tablef"><a href="forgot_passwd.php" class="topmenu">{$lang_login_php['forgot_password_link']}</a></td>
                    <td align="left" class="tablef"><input name="submitted" type="submit" class="button" value="{$lang_login_php['login']}" tabindex="4" /></td>
                    </form>
                  </tr>

EOT;

			endtable();
			pagefooter();
		}

?>
