-rw-r--r-- | lib/params.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/params.cc b/lib/params.cc index ea86d3a..7a572c1 100644 --- a/lib/params.cc +++ b/lib/params.cc | |||
@@ -54,55 +54,68 @@ namespace opkele { | |||
54 | #endif /* POSTELS_LAW */ | 54 | #endif /* POSTELS_LAW */ |
55 | } | 55 | } |
56 | } | 56 | } |
57 | 57 | ||
58 | void params_t::sign(secret_t secret,string& sig,const string& slist,const char *prefix) const { | 58 | void params_t::sign(secret_t secret,string& sig,const string& slist,const char *prefix) const { |
59 | string kv; | 59 | string kv; |
60 | string::size_type p = 0; | 60 | string::size_type p = 0; |
61 | while(true) { | 61 | while(true) { |
62 | string::size_type co = slist.find(',',p); | 62 | string::size_type co = slist.find(',',p); |
63 | string f = (co==string::npos)?slist.substr(p):slist.substr(p,co-p); | 63 | string f = (co==string::npos)?slist.substr(p):slist.substr(p,co-p); |
64 | kv += f; | 64 | kv += f; |
65 | kv += ':'; | 65 | kv += ':'; |
66 | if(prefix) f.insert(0,prefix); | 66 | if(prefix) f.insert(0,prefix); |
67 | kv += get_param(f); | 67 | kv += get_param(f); |
68 | kv += '\n'; | 68 | kv += '\n'; |
69 | if(co==string::npos) | 69 | if(co==string::npos) |
70 | break; | 70 | break; |
71 | p = co+1; | 71 | p = co+1; |
72 | } | 72 | } |
73 | unsigned int md_len = 0; | 73 | unsigned int md_len = 0; |
74 | unsigned char *md = HMAC( | 74 | unsigned char *md = HMAC( |
75 | EVP_sha1(), | 75 | EVP_sha1(), |
76 | &(secret.front()),secret.size(), | 76 | &(secret.front()),secret.size(), |
77 | (const unsigned char *)kv.data(),kv.length(), | 77 | (const unsigned char *)kv.data(),kv.length(), |
78 | 0,&md_len); | 78 | 0,&md_len); |
79 | sig = util::encode_base64(md,md_len); | 79 | sig = util::encode_base64(md,md_len); |
80 | } | 80 | } |
81 | 81 | ||
82 | string params_t::append_query(const string& url,const char *prefix) const { | 82 | string params_t::append_query(const string& url,const char *prefix) const { |
83 | string rv = url; | 83 | string rv = url; |
84 | bool p = true; | 84 | bool p = true; |
85 | if(rv.find('?')==string::npos) { | 85 | if(rv.find('?')==string::npos) { |
86 | rv += '?'; | 86 | rv += '?'; |
87 | p = false; | 87 | p = false; |
88 | } | 88 | } |
89 | for(const_iterator i=begin();i!=end();++i) { | 89 | for(const_iterator i=begin();i!=end();++i) { |
90 | if(p) | 90 | if(p) |
91 | rv += '&'; | 91 | rv += '&'; |
92 | else | 92 | else |
93 | p = true; | 93 | p = true; |
94 | rv += prefix; | 94 | rv += prefix; |
95 | rv += i->first; | 95 | rv += i->first; |
96 | rv += '='; | 96 | rv += '='; |
97 | rv += util::url_encode(i->second); | 97 | rv += util::url_encode(i->second); |
98 | } | 98 | } |
99 | return rv; | 99 | return rv; |
100 | } | 100 | } |
101 | 101 | ||
102 | string params_t::query_string(const char *prefix) const { | ||
103 | string rv; | ||
104 | for(const_iterator i=begin();i!=end();++i) { | ||
105 | if(!rv.empty()) | ||
106 | rv += '&'; | ||
107 | rv += prefix; | ||
108 | rv += i->first; | ||
109 | rv += '='; | ||
110 | rv += util::url_encode(i->second); | ||
111 | } | ||
112 | return rv; | ||
113 | } | ||
114 | |||
102 | ostream& operator << (ostream& o,const params_t& p) { | 115 | ostream& operator << (ostream& o,const params_t& p) { |
103 | for(params_t::const_iterator i=p.begin();i!=p.end();++i) | 116 | for(params_t::const_iterator i=p.begin();i!=p.end();++i) |
104 | o << i->first << ':' << i->second << '\n'; | 117 | o << i->first << ':' << i->second << '\n'; |
105 | return o; | 118 | return o; |
106 | } | 119 | } |
107 | 120 | ||
108 | } | 121 | } |