⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 login.php

📁 完美的在线教育系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
 */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 + -