Пример #1
0
function plugin_openid_finish_auth($consumer)
{
    global $vars, $_openid_msg;
    $die_message = PLUS_PROTECT_MODE ? 'die_msg' : 'die_message';
    $obj_verify = new auth_openid_plus_verify();
    $session_verify = $obj_verify->auth_session_get();
    //$session_verify['server_url']
    //$session_verify['local_id']
    $page = empty($session_verify['page']) ? '' : rawurldecode($session_verify['page']);
    $author = empty($session_verify['author']) ? '' : rawurldecode($session_verify['author']);
    $obj_verify->auth_session_unset();
    $return_to = get_page_location_uri($page);
    $response = $consumer->complete($return_to);
    /*
    echo '<pre>';
    var_dump($response);
    die();
    */
    switch ($response->status) {
        case Auth_OpenID_CANCEL:
            $die_message($_openid_msg['err_cancel']);
        case Auth_OpenID_FAILURE:
            $die_message($_openid_msg['err_failure'] . $response->message);
        case Auth_OpenID_SUCCESS:
            $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response);
            $sreg = $sreg_resp->contents();
            // $sreg['email'], $sreg['nickname'], $sreg['fullname']
            if (!isset($sreg['nickname'])) {
                if (PLUGIN_OPENID_NO_NICKNAME) {
                    $sreg['nickname'] = 'anonymouse';
                } else {
                    $die_message($_openid_msg['err_nickname']);
                }
            }
            $obj = new auth_openid_plus();
            $obj->response = $sreg;
            // その他の項目を引き渡す
            $obj->response['author'] = $author;
            $obj->response['local_id'] = !empty($response->endpoint->local_id) ? $response->endpoint->local_id : $response->endpoint->claimed_id;
            $obj->response['identity_url'] = $response->getDisplayIdentifier();
            $obj->auth_session_put();
            break;
    }
    // オリジナルの画面に戻る
    header('Location: ' . get_page_location_uri($page));
}
Пример #2
0
function plugin_openid_verify($consumer)
{
    global $vars, $_openid_msg;
    $page = empty($vars['page']) ? '' : '' . $vars['page'];
    $openid = $vars['openid_url'];
    $return_to = get_location_uri('openid', '', 'action=finish_auth');
    $trust_root = get_script_absuri();
    // FIXME: 不正な文字列の場合は、logoff メッセージを設定できない
    $author = empty($vars['author']) ? 'openid' : $vars['author'];
    $auth_request = $consumer->begin($openid);
    if (!$auth_request) {
        Utility::dieMessage($_openid_msg['err_authentication']);
    }
    $sreg_request = Auth_OpenID_SRegRequest::build(array('nickname'), array('fullname', 'email'));
    if ($sreg_request) {
        $auth_request->addExtension($sreg_request);
    }
    $shouldSendRedirect = $auth_request->shouldSendRedirect();
    if ($shouldSendRedirect) {
        $redirect_url = $auth_request->redirectURL($trust_root, $return_to);
        if (Auth_OpenID::isFailure($redirect_url)) {
            Utility::dieMessage(sprintf($_openid_msg['err_redirect'], $redirect_url->message));
        }
    } else {
        $form_id = 'openid_message';
        $form_html = $auth_request->htmlMarkup($trust_root, $return_to, false, array('id' => $form_id));
        if (Auth_OpenID::isFailure($form_html)) {
            Utility::dieMessage(sprintf($_openid_msg['err_redirect'], $form_html->message));
        }
    }
    // v1			v2
    // openid.server	openid2.provider	=> $auth_request->endpoint->server_url	ex. http://www.myopenid.com/server
    // openid.delegate	openid2.local_id	=> $auth_request->endpoint->local_id	ex. http://youraccount.myopenid.com/
    $obj = new auth_openid_plus_verify();
    $obj->response = array('server_url' => $auth_request->endpoint->server_url, 'local_id' => $auth_request->endpoint->local_id, 'page' => $page, 'author' => $author);
    $obj->setSession();
    if ($shouldSendRedirect) {
        Utility::redirect($redirect_url);
    } else {
        //print $form_html;
        Utility::dieMessage($form_html);
    }
}