OAuthライブラリのストレージエンジンの例の翻訳
http://oauth.googlecode.com/svn/code/php/example/SimpleOAuthDataStore.php
をとりあえず、翻訳してみたので載せておきます。
ライセンスはMIT ライセンスです。
http://oauth.googlecode.com/svn/code/php/LICENSE.txt
<?php /* とてもナイーブな dbm-based oauth ストレージ * * 注意: これは参照だけのためのもので、 * セキュリティ上の穴があり簡単にトークンシークレットを取得できます。 */ class SimpleOAuthDataStore extends OAuthDataStore { private $dbh; /** * コンストラクタ * @param $path gdbmのパス */ function __construct($path = "oauth.gdbm") { // dbをオープンする $this->dbh = dba_popen($path, 'c', 'gdbm'); } /** * デストラクタ */ function __destruct() { // dbを閉じる dba_close($this->dbh); } /** * コンシューマー検索 * @param string $consumer_key コンシューマーキー * @return OAuthConsumer 成功時: コンシューマ 失敗時: NULL */ function lookup_consumer($consumer_key) { // コンシューマーキー取得 $rv = dba_fetch("consumer_$consumer_key", $this->dbh); // 失敗のときはNULL if ($rv === FALSE) { return NULL; } // シリアライズされていたものを元に戻す $obj = unserialize($rv); // OAuthConsumerでなければNULL if (!($obj instanceof OAuthConsumer)) { return NULL; } // OAuthCOnsumerを返す return $obj; } /** * トークン検索 * @param $consumer コンシューマ(この例では未使用) * @param string $token_type トークンタイプ * @param string $token トークン文字列 * @return OAuthToken 成功時: トークン 失敗時: NULL */ function lookup_token($consumer, $token_type, $token) { // トークン取得 $rv = dba_fetch("${token_type}_${token}", $this->dbh); // 失敗 if ($rv === FALSE) { return NULL; } // アンシリアライズ $obj = unserialize($rv); // OAuthTokenではない if (!($obj instanceof OAuthToken)) { return NULL; } // OAuthTokenを返す return $obj; } /** * 空トークン検索 * @param $consumer コンシューマ(この例では未使用) * @param string $token トークン文字列 * @param string $nonce 空文字列 * @param string $timestamp タイムスタンプ * @return bool true 空トークンあり false 空トークン無しなので登録 */ function lookup_nonce($consumer, $token, $nonce, $timestamp) { // 空トークンがある? if (dba_exists("nonce_$nonce", $this->dbh)) { // TRUE return TRUE; } else { // ないときはTRUEにする dba_insert("nonce_$nonce", "1", $this->dbh); return FALSE; } } /** * トークン生成 * @param $consumer コンシューマ(この例では未使用) * @param string $type タイプ デフォルト "request" * @return OAuthToken 失敗時は OAuthException例外 */ function new_token($consumer, $type="request") { // 時間をmd5したものをキーにする $key = md5(time()); // シークレットはtime()+time() $secret = time() + time(); // トークンを作成 $token = new OAuthToken($key, md5(md5($secret))); // DB登録 if (!dba_insert("${type}_$key", serialize($token), $this->dbh)) { throw new OAuthException("doooom!"); } return $token; } /** * リクエストトークン生成 * @param $consumer コンシューマ(この例では未使用) * @return OAuthToken 失敗時は OAuthException例外 */ function new_request_token($consumer) { return $this->new_token($consumer, "request"); } /** * アクセストークン生成 * @param $consumer コンシューマ(この例では未使用) * @return OAuthToken 失敗時は OAuthException例外 */ function new_access_token($token, $consumer) { $token = $this->new_token($consumer, 'access'); // 対応リクエストトークンを削除 dba_delete("request_" . $token->key, $this->dbh); return $token; } }