PHPで。
最近仕事で2-legged OAuthに触れる機会があったので、その延長でOpenSocialのサービスプロバイダっぽいのを個人的に作ってみる。
HTTPメソッド
クライアントがPUTとかDELETEとかのメソッドを使えない場合、リクエストヘッダーに"X-HTTP-Method-Override"を含めるらしい。
もしかしたらGDataだけの仕様かも知れないけど。
ファイアウォールが PUT を通さないようなら,"X-HTTP-Method-Override: PUT" のように上書きヘッダ (Override Header) をセットする
http://teahut.sakura.ne.jp/w/hiki.cgi?GData%2FProtocol
POST / HTTP/1.0 X-HTTP-Method-Override: PUT Content-Length: 15 putputputputput
POSTとかPUTとかの生データは、"php://input"で取れるらしい。
<?php $_HEADER = apache_request_headers(); $http_method = isset($_HEADER['HTTP_X_HTTP_METHOD_OVERRIDE']) ? $_HEADER['HTTP_X_HTTP_METHOD_OVERRIDE'] : @$_SERVER['REQUEST_METHOD']; // HTTPメソッド if(in_array($http_method,array('GET','POST','PUT','DELETE'))===false){ header('HTTP/1.0 501 Not Implemented'); echo "501 Not Implemented\n"; exit(); } $input = file_get_contents('php://input');
認証方式
認証方式は、とりあえずこんな感じでやりたい。
上の3つは出来た。
WSSEもOAuthも、生のIDとパスワードをサーバ側で持ってなきゃいけないから、コンシューマとしてハッシュを作るのと同じ事をしてハッシュ同士を比較するだけ。
RSA-SHA1はいまいち解らない。
RSA自体よく解ってない。
長いから詳しくは書かないけど、認証別の分岐は多分こんな感じ。
<?php // Basic if(isset($_HEADER['Authorization']) && strpos($_HEADER['Authorization'],'Basic ')===0){ $auth_method = 'basic'; // WSSE }elseif(isset($_HEADER['X-WSSE']) || isset($_HEADER['X-Wsse'])){ $auth_method = 'wsse'; // OAuth Header }elseif(isset($_HEADER['Authorization']) && strpos($_HEADER['Authorization'],'OAuth ')===0){ $auth_method = 'oauth_header'; // OAuth Get }elseif(isset($_GET['oauth_signature_method'])){ $auth_method = 'oauth_get'; }
↓流れ。
- HTTPメソッドチェック
- NG -> 501 Not Implemented
- 認証方式チェック
- 認証
- NG -> 401 Unauthorized
- OK -> 200 OK
ここまで出来た。
はてな記法
昨日登録して、今回初めてはてな記法を使ってみた。
PHPのソースコードをハイライトしてくれる"スーパーpre記法"、素晴らしい。
それにしてもpre以外の部分は、1行空けても空行を入れてくれない。
1行をpで書いてあって、やたらと見づらい。
改行じゃなくて段落だし。
編集のtextareaで2行改行しておけば1行空行が入るっぽい。
もしくは空けた空行にスペースを入れておくか。
brを続けて書くとHTML4.01に準拠しないって奴の対策なのかな?
とりあえず、空行にスペースを入れるEmEditorのマクロを作るのが無難かな。
pre内にはスペース入れない!とかってちょっと面倒だけど。
はてな記法一覧 - はてなダイアリーのヘルプ
http://hatenadiary.g.hatena.ne.jp/keyword/%e3%81%af%e3%81%a6%e3%81%aa%e8%a8%98%e6%b3%95%e4%b8%80%e8%a6%a7
はてなダイアリーで日記を書く際、空改行ができません。<br>をいれると良いそうですが、文章を書いている時それがとても面倒です。良い方法があれば教えてください。 ち.. - 人力検索はてな
http://q.hatena.ne.jp/1132997136