- Das Modul ist verknüpft mit der Frontenduser-Erweiterung, wo es einige Infos herbezieht, die es wiederum in die PHPBB-Datenbank einschleust.
- Das Modul erstellt einen Benutzernamen und trägt u.a. E-Mail-Adresse und weitere Werte in die Datenbank, die unerlässlich sind.
- Es erstellt aus dem Nutzernamen und weiteren Codeschnipseln MD5-Passwörter, schreibt diese in die DB fürs PHPBB, so dass mit dem Fremd-Einlog-Modul "login.php" verlässlich ins PHPBB aus Contenido heraus eingeloggt werden kann, ohne das Contenido-Passwort des Nutzers kennen zu müssen. Hierfür bitte noch die "xxx" in zwei Dateien unten durch eigenen Codefolgen ersetzen.
- Das Modul sucht, ob unter der genannten Mailadresse schon mal ein Nutzer in der DB für PHPBB angelegt wurde. Falls nein, werden wichtige Werte neu erstellt, ansonsten werden einfach alle Werte in der mit der E-Mail korrespondierenden Zeile überschrieben.
- Ich bin gescheitert bei dem Versuch, die login.php außerhalb des root-Ordners des PHPBB zu platzieren und einzubinden.
- Die hier aufgeführten Skripte funktionieren nur dann, wenn PHPBB im Ordner /cms/extern/forum platziert wird.
- Das integrierte Javascript sorgt dafür, dass der IFrame, in dem PHPBB läuft, immer ausreichend hoch ist.
Ihr müsst Euch dieses Modul ggf. noch anpassen.
Ihr benötigt:
Modul-Output:
Code: Alles auswählen
<?php
// Frontend-Username ermitteln, der an phpBB weitergegeben wird:
$oFeUserCollection = new FrontendUserCollection();
$oFeUser = $oFeUserCollection->loadItem($auth->auth["uid"]);
$username = $oFeUser->get('username');
$loginname = $oFeUser->getProperty("address", "name", $Vorname)." ";
$loginname .= $oFeUser->getProperty("address", "surname", $Nachname);
// Zusätzliche Variablen für PHPBB anlegen
$user_email = $oFeUser->get('username');
$username = $loginname;
$username_clean = htmlentities(strtolower($username)); //wird angelegt, um User mit Sonderzeichen im Namen trotzdem einloggen zu können
$user_password = md5(substr("xxx".$user_email."xxx",0,9));
$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(6, 10));
$group_id = (int) 2;
$user_timezone = (float) '0';
$user_dst = date('I');
$user_lang = 'de_x_sie';
$user_type = USER_NORMAL;
$user_regdate = time();
// Prüfen, ob User schon existiert in PHPBB. Falls ja, neu anlegen, sonst Passwort austauschen
$query = "SELECT * FROM phpbb_users WHERE user_email='$user_email'";
$result = mysql_query($query);
if (!$row= mysql_fetch_array($result)) {
$query2 = "REPLACE INTO phpbb_users (username,username_clean,user_password,user_email,group_id,user_timezone,user_dst,user_lang,user_type,user_actkey,user_regdate) VALUES ('".$username."','".$username_clean."', '".$user_password."', '".$user_email."', ".$group_id.", '".$user_timezone."', '".$user_dst."', '".$user_lang."', '".$user_type."', '".$user_actkey."', '".$user_regdate."')";
mysql_query($query2);
$lastInsertedID = mysql_insert_id();
$query3 = "INSERT INTO phpbb_user_group (group_id,user_id,group_leader,user_pending) VALUES (2,$lastInsertedID,0,0)";
mysql_query($query3);
}
else {
$query2 = "UPDATE phpbb_users SET username = '$username',username_clean = '$username_clean',user_password = '$user_password' WHERE user_email = '$user_email'";
mysql_query($query2);
}
?>
<script type="text/javascript">
//Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
//Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
var iframeids=["forum"]
//Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
var iframehide="no"
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 20 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers
function resizeCaller() {
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++){
if (document.getElementById)
resizeIframe(iframeids)
//reveal iframe for lower end browsers? (see var above):
if ((document.all || document.getElementById) && iframehide=="no"){
var tempobj=document.all? document.all[iframeids] : document.getElementById(iframeids)
tempobj.style.display="block"
}
}
}
function resizeIframe(frameid){
var currentfr=document.getElementById(frameid)
if (currentfr && !window.opera){
currentfr.style.display="block"
if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax
currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight;
else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
currentfr.height = currentfr.Document.body.scrollHeight;
if (currentfr.addEventListener)
currentfr.addEventListener("load", readjustIframe, false)
else if (currentfr.attachEvent){
currentfr.detachEvent("onload", readjustIframe) // Bug fix line
currentfr.attachEvent("onload", readjustIframe)
}
}
}
function readjustIframe(loadevt) {
var crossevt=(window.event)? event : loadevt
var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement
if (iframeroot)
resizeIframe(iframeroot.id);
}
function loadintoIframe(iframeid, url){
if (document.getElementById)
document.getElementById(iframeid).src=url
}
if (window.addEventListener)
window.addEventListener("load", resizeCaller, false)
else if (window.attachEvent)
window.attachEvent("onload", resizeCaller)
else
window.onload=resizeCaller
</script>
<iframe width="620" id="forum" style="border:none;margin:0px;padding:0px;margin-top: -30px;" name="content" src="/cms/extern/forum/login.php?ref=<?php print $user_email; ?>" scrolling="auto" frameborder="0">
</iframe>
dazu noch die login.php im Verzeichnis /cms/extern/forum (bzw. root des PHPBB):
Code: Alles auswählen
<?php
/*
* externes Login script fuer phpBB3
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'config.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
//Abfragen von ggf. uebermittelten Parametern
//Prüfe, ob der ermittelte Name in Contenido existiert (Exploit minimieren)
mysql_connect ($dbhost, $dbuser, $dbpasswd) or die ('Ich konnte keine Verbindung zur Datenbank aufbauen. Fehlermeldung: ' . mysql_error());
mysql_select_db ($dbname);
$user_email = $_GET['ref'];
$user_email_enc = str_replace("@", "%40", $user_email);
$query = "SELECT * FROM con_frontendusers WHERE username='$user_email_enc'";
$result = mysql_query($query);
if (!$row= mysql_fetch_array($result)) {
die('<p style="font-family: Arial, Helvetica, sans-serif;font-size: 12px;">Sie haben keine Berechtigung für dieses Skript.</p>');
} else {
$ident = $row["idfrontenduser"];
}
//jetzt wird der Username zur zugehörigen Mailadresse ausgelesen, die in phpBB hinterlegt ist
$query = "SELECT username,username_clean FROM phpbb_users WHERE user_email='$user_email'";
$result = mysql_query($query);
if ($row= mysql_fetch_array($result)) { $username = $row["username_clean"]; }
$password = substr("xxx".$user_email."xxx",0,9);
$autologin = false;
$viewonline = (!empty($_POST['viewonline'])) ? 0 : 1;
$logout = request_var('mode', '');
$auth->login($username, $password, $autologin, $viewonline);
//Wenn ueber einen Link der mode=logout lautet und eine SID uebergeben wurde, starte das ausloggen des Users
if ($logout == 'logout')
{
$user->session_kill();
}
// Prüfe ob User eingeloggt ist oder nicht
if ($user->data['is_registered'])
{
// ein erfolgreich eingeloggter User wird auf die Startseite geleitet
header ("Location: index.php");
}
else
{
//Wenn er nicht erfolgreich eingeloggt ist, wird er auf trotzdem auf die Seite geschickt, ist aber nicht angemeldet.
header ("Location: index.php");
}
?>
Code: Alles auswählen
<html>
<body>
Bitte anmelden:<br />
<form method="POST" action="login_admin.php">
<p>Benutzername: <input type="text" name="username" size="40"><br />
Passwort: <input type="password" name="password" size="40"><br />
<br />
Mich bei jedem Besuch automatisch anmelden? : <input type="checkbox" name="autologin"><br />
<br />
Online Status verstecken? : <input type="checkbox" name="viewonline"><br />
<br />
<input type="submit" value="Absenden" name="login"></p>
</form>
</body>
</html>