-1

Question2Answer provides the option to implement Single Sign On. I want to integrate it into an existing installation of Typo3 (for Typo3 front end users). The questions I have:

  • Do I need a certain Typo3 plugin for SSO?
  • How could an implementation of Q2A's qa-external-users.php look like for Typo3?

1 Answer 1

0

A working first attempt: the functions qa_* of qa-external-users.php now just call the corresponding t3_* functions in the following script.

typo3.php:

<?php

function connect() {

    static $t3_db_connection = null;

    if (!$t3_db_connection) {

        $conf = include '/YOUR/PATH/TO/TYPO3/typo3conf/LocalConfiguration.php';

        $t3_db_connection = mysql_connect(
            $conf['DB']['host'],
            $conf['DB']['username'],
            $conf['DB']['password']
        );

        if(!$t3_db_connection) {
            die('Could not connect: ' . mysql_error());
        }

        mysql_select_db($conf['DB']['database']);
    }
    return $t3_db_connection;
}

function logged_in_userid() {
        $con = connect();
        $cookie = $_COOKIE["fe_typo_user"];
        $result = mysql_fetch_assoc(mysql_query("SELECT ses_userid FROM fe_sessions WHERE ses_id = '$cookie'", $con));
    return $result['ses_userid'];
}

function t3_get_logged_in_user() {

    $con = connect();
    $userid = logged_in_userid();
    $result = mysql_fetch_assoc(mysql_query("SELECT * FROM fe_users WHERE uid = '$userid' AND deleted = 0", $con));
    $username = $result['username'];
    $usergroup = $result['usergroup'];
    $blocked = $result['disable'];
    $publicusername = $result['name'];
    $email = $result['email'];
    $groups = explode(',', $usergroup);

    return !$userid ? null : array(
        'userid' => $userid,
        'publicusername' => $publicusername,
        'email' => $email,
        //'passsalt' => ?????,
        'level' => in_array(6, $groups) ? QA_USER_LEVEL_SUPER : QA_USER_LEVEL_BASIC, // TODO add other group ids
        'blocked' => $blocked
    );
}

function t3_get_user_email($userid) {
    $con = connect();
        $result = mysql_fetch_assoc(mysql_query("SELECT email FROM fe_users WHERE uid = '$userid' AND deleted = 0", $con));
        $email = $result['email'];

    return !$email ? null : $email;
}

function t3_get_userids_from_public($publicusernames) {

    $publictouserid = array();

    if (count($publicusernames)) {
        $con = connect();
        $escapedusernames = array();
        foreach ($publicusernames as $publicusername)
            $escapedusernames[] = "'".mysql_real_escape_string($publicusername, $con)."'";

        $results = mysql_query(
            'SELECT name, uid FROM fe_users WHERE name IN ('.implode(',', $escapedusernames).')', $con);

        while ($result = mysql_fetch_assoc($results))
            $publictouserid[$result['name']] = $result['uid'];
    }

    return $publictouserid;
}

function t3_get_public_from_userids($userids) {

        $useridtopublic = array();

        if (count($userids)) {
                $con = connect();
                $escapeduserids = array();
                foreach ($userids as $userid)
                        $escapeduserids[] = "'".mysql_real_escape_string($userid, $con)."'";

                $results = mysql_query(
                        'SELECT name, uid FROM fe_users WHERE uid IN ('.implode(',', $escapeduserids).')', $con);

                while ($result = mysql_fetch_assoc($results))
                        $useridtopublic[$result['uid']] = $result['name'];
        }

        return $useridtopublic;
}

?>

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .