|
TYPO3 API
SVNRelease
|
00001 <?php 00002 00003 /** 00004 * A PostgreSQL store. 00005 * 00006 * @package OpenID 00007 */ 00008 00009 /** 00010 * Require the base class file. 00011 */ 00012 require_once "Auth/OpenID/SQLStore.php"; 00013 00014 /** 00015 * An SQL store that uses PostgreSQL as its backend. 00016 * 00017 * @package OpenID 00018 */ 00019 class Auth_OpenID_PostgreSQLStore extends Auth_OpenID_SQLStore { 00020 /** 00021 * @access private 00022 */ 00023 function setSQL() 00024 { 00025 $this->sql['nonce_table'] = 00026 "CREATE TABLE %s (server_url VARCHAR(2047) NOT NULL, ". 00027 "timestamp INTEGER NOT NULL, ". 00028 "salt CHAR(40) NOT NULL, ". 00029 "UNIQUE (server_url, timestamp, salt))"; 00030 00031 $this->sql['assoc_table'] = 00032 "CREATE TABLE %s (server_url VARCHAR(2047) NOT NULL, ". 00033 "handle VARCHAR(255) NOT NULL, ". 00034 "secret BYTEA NOT NULL, ". 00035 "issued INTEGER NOT NULL, ". 00036 "lifetime INTEGER NOT NULL, ". 00037 "assoc_type VARCHAR(64) NOT NULL, ". 00038 "PRIMARY KEY (server_url, handle), ". 00039 "CONSTRAINT secret_length_constraint CHECK ". 00040 "(LENGTH(secret) <= 128))"; 00041 00042 $this->sql['set_assoc'] = 00043 array( 00044 'insert_assoc' => "INSERT INTO %s (server_url, handle, ". 00045 "secret, issued, lifetime, assoc_type) VALUES ". 00046 "(?, ?, '!', ?, ?, ?)", 00047 'update_assoc' => "UPDATE %s SET secret = '!', issued = ?, ". 00048 "lifetime = ?, assoc_type = ? WHERE server_url = ? AND ". 00049 "handle = ?" 00050 ); 00051 00052 $this->sql['get_assocs'] = 00053 "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". 00054 "WHERE server_url = ?"; 00055 00056 $this->sql['get_assoc'] = 00057 "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". 00058 "WHERE server_url = ? AND handle = ?"; 00059 00060 $this->sql['remove_assoc'] = 00061 "DELETE FROM %s WHERE server_url = ? AND handle = ?"; 00062 00063 $this->sql['add_nonce'] = 00064 "INSERT INTO %s (server_url, timestamp, salt) VALUES ". 00065 "(?, ?, ?)" 00066 ; 00067 00068 $this->sql['clean_nonce'] = 00069 "DELETE FROM %s WHERE timestamp < ?"; 00070 00071 $this->sql['clean_assoc'] = 00072 "DELETE FROM %s WHERE issued + lifetime < ?"; 00073 } 00074 00075 /** 00076 * @access private 00077 */ 00078 function _set_assoc($server_url, $handle, $secret, $issued, $lifetime, 00079 $assoc_type) 00080 { 00081 $result = $this->_get_assoc($server_url, $handle); 00082 if ($result) { 00083 // Update the table since this associations already exists. 00084 $this->connection->query($this->sql['set_assoc']['update_assoc'], 00085 array($secret, $issued, $lifetime, 00086 $assoc_type, $server_url, $handle)); 00087 } else { 00088 // Insert a new record because this association wasn't 00089 // found. 00090 $this->connection->query($this->sql['set_assoc']['insert_assoc'], 00091 array($server_url, $handle, $secret, 00092 $issued, $lifetime, $assoc_type)); 00093 } 00094 } 00095 00096 /** 00097 * @access private 00098 */ 00099 function blobEncode($blob) 00100 { 00101 return $this->_octify($blob); 00102 } 00103 00104 /** 00105 * @access private 00106 */ 00107 function blobDecode($blob) 00108 { 00109 return $this->_unoctify($blob); 00110 } 00111 } 00112 00113 ?>
1.8.0