菊池 Blog

移転しました 続・菊池 和彦の足跡

AILight Banner
AILight Blog

プロフィール

菊池 Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

OpenID2.0 を直接blog上で実装してみる(その1)

Final: OpenID Authentication 2.0 - Final

スペック読みながら直接blogにコーディング、通るかどうかはしらん

4.1.1. Key-Value Form Encoding

class KeyValueForm {

     /// Each line begins with a key, followed by a colon, and the value associated with the key.
     const char Separator = ':';
    /// The line is terminated by a single newline (UCS codepoint 10, "\n"). 
    const char NewLine = (char)10;
    ///  A key or value MUST NOT contain a newline and a key also MUST NOT contain a colon. 
    /// Additional characters, including whitespace, MUST NOT be added before or after the colon or newline.
    bool isValidKeyOrValueString( string str ) { 
         // 全部の文字が IsLetterOrDigit って事でいいんかい?
         return str.Chars.TrueForAll( char.isLetterOrDigit );
    }
    public string Encode( IEnumerable< KeyValuePair< string,string > > form )
    {
        StringBuilder sb = new StringBuilder();
        foreach( var kvPair in form ) {
            if( !isValidKeyOrValueString( kvPair.Key ) || !isValidKeyOrValueString(kvPair.Value ) {
                throw new ArgumentException( "form","変なもん持ってくるな" );
           }
            sb.Append( kvPair.Key );
            sb.Append( Separator );
            sb.Append( kvPair.Value );
            sb.Append( NewLine );
        }
        return sb.ToString();
    }
    public IEnumerable<KeyValuePair<string,string>> Decode( string form )
    {
        // 構造検証してないから弱い、そのうち書き直そう
        Dictionary< string,string > result = new Dictionary<string,string>();
        string[] lines = form.Split( NewLine );
        foreach( string line in lines ) {
            string[] kv = line.Split( Separator );
            result.Add( kv[0],kv[1] );
        }
        return result;
    }
}

ここまで読んだー、続きは明日以降

 

#4.1.3で使ってるサンプル見るとValueの文字列の中では WhiteSpece許すみたいねー

投稿日時 : 2007年12月10日 9:13


コメントを追加

タイトル
名前
URL
コメント