📄 login.php
字号:
*/function openid_association_request($public) { require_once(api_get_path(SYS_CODE_PATH).'auth/openid/openid.conf.php'); $request = array( 'openid.ns' => OPENID_NS_2_0, 'openid.mode' => 'associate', 'openid.session_type' => 'DH-SHA1', 'openid.assoc_type' => 'HMAC-SHA1' ); if ($request['openid.session_type'] == 'DH-SHA1' || $request['openid.session_type'] == 'DH-SHA256') { $cpub = _openid_dh_long_to_base64($public); $request['openid.dh_consumer_public'] = $cpub; } return $request;}/** * */function openid_authentication_request($claimed_id, $identity, $return_to = '', $assoc_handle = '', $version = 2) { $realm = ($return_to) ? $return_to : api_get_self(); $ns = ($version == 2) ? OPENID_NS_2_0 : OPENID_NS_1_0; $request = array( 'openid.ns' => $ns, 'openid.mode' => 'checkid_setup', 'openid.identity' => $identity, 'openid.claimed_id' => $claimed_id, 'openid.assoc_handle' => $assoc_handle, 'openid.return_to' => $return_to, ); if ($version == 2) { $request['openid.realm'] = $realm; } else { $request['openid.trust_root'] = $realm; } // Simple Registration $request['openid.sreg.required'] = 'nickname,email'; $request['openid.ns.sreg'] = "http://openid.net/extensions/sreg/1.1"; //$request = array_merge($request, module_invoke_all('openid', 'request', $request)); //$request = array_merge($request); return $request;}/** * Attempt to verify the response received from the OpenID Provider. * * @param $op_endpoint The OpenID Provider URL. * @param $response Array of repsonse values from the provider. * * @return boolean */function openid_verify_assertion($op_endpoint, $response) { $valid = FALSE; //TODO $openid_association = Database::get_main_table(TABLE_MAIN_OPENID_ASSOCIATION); $sql = sprintf("SELECT * FROM $openid_association WHERE assoc_handle = '%s'", $response['openid.assoc_handle']); $res = api_sql_query($sql); $association = Database::fetch_object($res); if ($association && isset($association->session_type)) { $keys_to_sign = explode(',', $response['openid.signed']); $self_sig = _openid_signature($association, $response, $keys_to_sign); if ($self_sig == $response['openid.sig']) { $valid = TRUE; } else { $valid = FALSE; } } else { $request = $response; $request['openid.mode'] = 'check_authentication'; $message = _openid_create_message($request); $headers = array('Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8'); $result = openid_http_request($op_endpoint, $headers, 'POST', _openid_encode_message($message)); if (!isset($result->error)) { $response = _openid_parse_message($result->data); if (strtolower(trim($response['is_valid'])) == 'true') { $valid = TRUE; } else { $valid = FALSE; } } } return $valid;}/** * Make a HTTP request - This function has been copied straight over from Drupal 6 code (drupal_http_request) */function openid_http_request($url, $headers = array(), $method = 'GET', $data = NULL, $retry = 3) { $result = new stdClass(); // Parse the URL and make sure we can handle the schema. $uri = parse_url($url); switch ($uri['scheme']) { case 'http': $port = isset($uri['port']) ? $uri['port'] : 80; $host = $uri['host'] . ($port != 80 ? ':'. $port : ''); $fp = @fsockopen($uri['host'], $port, $errno, $errstr, 15); break; case 'https': // Note: Only works for PHP 4.3 compiled with OpenSSL. $port = isset($uri['port']) ? $uri['port'] : 443; $host = $uri['host'] . ($port != 443 ? ':'. $port : ''); $fp = @fsockopen('ssl://'. $uri['host'], $port, $errno, $errstr, 20); break; default: $result->error = 'invalid schema '. $uri['scheme']; return $result; } // Make sure the socket opened properly. if (!$fp) { // When a network error occurs, we make sure that it is a negative number so // it can clash with the HTTP status codes. $result->code = -$errno; $result->error = trim($errstr); return $result; } // Construct the path to act on. $path = isset($uri['path']) ? $uri['path'] : '/'; if (isset($uri['query'])) { $path .= '?'. $uri['query']; } // Create HTTP request. $defaults = array( // RFC 2616: "non-standard ports MUST, default ports MAY be included". // We don't add the port to prevent from breaking rewrite rules checking the // host that do not take into account the port number. 'Host' => "Host: $host", 'User-Agent' => 'User-Agent: Dokeos (+http://dokeos.com/)', 'Content-Length' => 'Content-Length: '. strlen($data) ); // If the server url has a user then attempt to use basic authentication if (isset($uri['user'])) { $defaults['Authorization'] = 'Authorization: Basic '. base64_encode($uri['user'] . (!empty($uri['pass']) ? ":". $uri['pass'] : '')); } foreach ($headers as $header => $value) { $defaults[$header] = $header .': '. $value; } $request = $method .' '. $path ." HTTP/1.0\r\n"; $request .= implode("\r\n", $defaults); $request .= "\r\n\r\n"; if ($data) { $request .= $data ."\r\n"; } $result->request = $request; fwrite($fp, $request); // Fetch response. $response = ''; while (!feof($fp) && $chunk = fread($fp, 1024)) { $response .= $chunk; } fclose($fp); // Parse response. list($split, $result->data) = explode("\r\n\r\n", $response, 2); $split = preg_split("/\r\n|\n|\r/", $split); list($protocol, $code, $text) = explode(' ', trim(array_shift($split)), 3); $result->headers = array(); // Parse headers. while ($line = trim(array_shift($split))) { list($header, $value) = explode(':', $line, 2); if (isset($result->headers[$header]) && $header == 'Set-Cookie') { // RFC 2109: the Set-Cookie response header comprises the token Set- // Cookie:, followed by a comma-separated list of one or more cookies. $result->headers[$header] .= ','. trim($value); } else { $result->headers[$header] = trim($value); } } $responses = array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Time-out', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Large', 415 => 'Unsupported Media Type', 416 => 'Requested range not satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Time-out', 505 => 'HTTP Version not supported' ); // RFC 2616 states that all unknown HTTP codes must be treated the same as the // base code in their class. if (!isset($responses[$code])) { $code = floor($code / 100) * 100; } switch ($code) { case 200: // OK case 304: // Not modified break; case 301: // Moved permanently case 302: // Moved temporarily case 307: // Moved temporarily $location = $result->headers['Location']; if ($retry) { $result = openid_http_request($result->headers['Location'], $headers, $method, $data, --$retry); $result->redirect_code = $result->code; } $result->redirect_url = $location; break; default: $result->error = $text; } $result->code = $code; return $result;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -