<?php
ini_set
('include_path''/usr/local/src/php-openid-2.1.1');
require_once 
'Auth/OpenID/Consumer.php';
require_once 
'Auth/OpenID/FileStore.php';
require_once 
'Auth/OpenID/SReg.php';

define('SERVER_URI',            'http://zuzara.org/pub/mixiopenid/');
define('SERVER_URI_RETURNTO',   SERVER_URI '?action=finished');
define('OPENID_IDENTIFIER',     'http://mixi.jp/');
define('FILE_STORE_DIR',        '/tmp/openid/'); // 0777

session_start();

$nickname null;
$openid   null;
$action   = (isset($_GET['action']) ? $_GET['action'] : null);
switch (
$action) {
    case 
'finished':
        
$consumer = new Auth_OpenID_Consumer(new Auth_OpenID_FileStore(FILE_STORE_DIR));
        
$response $consumer->complete(SERVER_URI_RETURNTO);

        if (
$response->status == Auth_OpenID_CANCEL) {
            die(
'Verification cancelled.');
        } else if (
$response->status == Auth_OpenID_FAILURE) {
            die(
"OpenID authentication failed: " $response->message);
        } else if (
$response->status == Auth_OpenID_SUCCESS) {
            
$openid $response->getDisplayIdentifier();
            
$sregResponse Auth_OpenID_SRegResponse::fromSuccessResponse($response);

            
$sreg $sregResponse->contents();
            if (isset(
$sreg['nickname'])) {
                
$nickname $sreg['nickname'];
            }
        }
        break;
    case 
'login':
        
$consumer = new Auth_OpenID_Consumer(new Auth_OpenID_FileStore(FILE_STORE_DIR));
        
$req $consumer->begin(OPENID_IDENTIFIER);
        if (!
$req) {
            die(
"Authentication error; not a valid OpenID.");
        }
        
$sregRequest Auth_OpenID_SRegRequest::build(array('nickname'));
        if (
$sregRequest) {
            
$req->addExtension($sregRequest);
        }
        
$formHtml $req->htmlMarkup(SERVER_URISERVER_URI_RETURNTOfalse, array('id' => 'openid_message'));

        if (
Auth_OpenID::isFailure($formHtml)) {
            die(
"Could not redirect to server: " $formHtml->message);
        } else {
            echo 
$formHtml;
            exit;
        }
    default:
        break;
}
?>
<html>
<head>
<title>mixi OpenID test</title>
<style type="text/css">
img { border: 0px; }
</style>
</head>
<body>
<h1>mixi OpenID test</h1>
<?php if (strcmp($action'finished') === 0): ?>
<p><?php echo "your nickname: " htmlspecialchars($nicknameENT_QUOTES) . ", id: " htmlspecialchars($openidENT_QUOTES); ?></p>
<?php else: ?>
<a href="?action=login"><img src="mixi_login_button.gif" alt="mixi OpenID login" /></a>
<?php endif; ?>
</body>
</html>