Fork of OAuth4Tw to use mbed's official EthernetInterface and HTTPClient
Fork of OAuth4Tw by
oauth.h@0:0048b264a3ad, 2011-12-12 (annotated)
- Committer:
- takahashim
- Date:
- Mon Dec 12 18:47:10 2011 +0000
- Revision:
- 0:0048b264a3ad
publish library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
takahashim | 0:0048b264a3ad | 1 | /** |
takahashim | 0:0048b264a3ad | 2 | * @brief OAuth.net implementation in POSIX-C. |
takahashim | 0:0048b264a3ad | 3 | * @file oauth.h |
takahashim | 0:0048b264a3ad | 4 | * @author Robin Gareus <robin@gareus.org> |
takahashim | 0:0048b264a3ad | 5 | * |
takahashim | 0:0048b264a3ad | 6 | * Copyright 2007-2010 Robin Gareus <robin@gareus.org> |
takahashim | 0:0048b264a3ad | 7 | * |
takahashim | 0:0048b264a3ad | 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
takahashim | 0:0048b264a3ad | 9 | * of this software and associated documentation files (the "Software"), to deal |
takahashim | 0:0048b264a3ad | 10 | * in the Software without restriction, including without limitation the rights |
takahashim | 0:0048b264a3ad | 11 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
takahashim | 0:0048b264a3ad | 12 | * copies of the Software, and to permit persons to whom the Software is |
takahashim | 0:0048b264a3ad | 13 | * furnished to do so, subject to the following conditions: |
takahashim | 0:0048b264a3ad | 14 | * |
takahashim | 0:0048b264a3ad | 15 | * The above copyright notice and this permission notice shall be included in |
takahashim | 0:0048b264a3ad | 16 | * all copies or substantial portions of the Software. |
takahashim | 0:0048b264a3ad | 17 | * |
takahashim | 0:0048b264a3ad | 18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
takahashim | 0:0048b264a3ad | 19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
takahashim | 0:0048b264a3ad | 20 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
takahashim | 0:0048b264a3ad | 21 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
takahashim | 0:0048b264a3ad | 22 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
takahashim | 0:0048b264a3ad | 23 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
takahashim | 0:0048b264a3ad | 24 | * THE SOFTWARE. |
takahashim | 0:0048b264a3ad | 25 | * |
takahashim | 0:0048b264a3ad | 26 | */ |
takahashim | 0:0048b264a3ad | 27 | #ifndef _OAUTH_H |
takahashim | 0:0048b264a3ad | 28 | #define _OAUTH_H 1 |
takahashim | 0:0048b264a3ad | 29 | |
takahashim | 0:0048b264a3ad | 30 | #include <vector> |
takahashim | 0:0048b264a3ad | 31 | #include <string> |
takahashim | 0:0048b264a3ad | 32 | |
takahashim | 0:0048b264a3ad | 33 | #include <stdlib.h> |
takahashim | 0:0048b264a3ad | 34 | |
takahashim | 0:0048b264a3ad | 35 | #ifndef DOXYGEN_IGNORE |
takahashim | 0:0048b264a3ad | 36 | // liboauth version |
takahashim | 0:0048b264a3ad | 37 | #define LIBOAUTH_VERSION "0.8.9" |
takahashim | 0:0048b264a3ad | 38 | #define LIBOAUTH_VERSION_MAJOR 0 |
takahashim | 0:0048b264a3ad | 39 | #define LIBOAUTH_VERSION_MINOR 8 |
takahashim | 0:0048b264a3ad | 40 | #define LIBOAUTH_VERSION_MICRO 9 |
takahashim | 0:0048b264a3ad | 41 | |
takahashim | 0:0048b264a3ad | 42 | //interface revision number |
takahashim | 0:0048b264a3ad | 43 | //http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html |
takahashim | 0:0048b264a3ad | 44 | #define LIBOAUTH_CUR 7 |
takahashim | 0:0048b264a3ad | 45 | #define LIBOAUTH_REV 0 |
takahashim | 0:0048b264a3ad | 46 | #define LIBOAUTH_AGE 7 |
takahashim | 0:0048b264a3ad | 47 | #endif |
takahashim | 0:0048b264a3ad | 48 | |
takahashim | 0:0048b264a3ad | 49 | #ifdef __GNUC__ |
takahashim | 0:0048b264a3ad | 50 | # define OA_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y) |
takahashim | 0:0048b264a3ad | 51 | #else |
takahashim | 0:0048b264a3ad | 52 | # define OA_GCC_VERSION_AT_LEAST(x,y) 0 |
takahashim | 0:0048b264a3ad | 53 | #endif |
takahashim | 0:0048b264a3ad | 54 | |
takahashim | 0:0048b264a3ad | 55 | #ifndef attribute_deprecated |
takahashim | 0:0048b264a3ad | 56 | #if OA_GCC_VERSION_AT_LEAST(3,1) |
takahashim | 0:0048b264a3ad | 57 | # define attribute_deprecated __attribute__((deprecated)) |
takahashim | 0:0048b264a3ad | 58 | #else |
takahashim | 0:0048b264a3ad | 59 | # define attribute_deprecated |
takahashim | 0:0048b264a3ad | 60 | #endif |
takahashim | 0:0048b264a3ad | 61 | #endif |
takahashim | 0:0048b264a3ad | 62 | |
takahashim | 0:0048b264a3ad | 63 | /** \enum OAuthMethod |
takahashim | 0:0048b264a3ad | 64 | * signature method to used for signing the request. |
takahashim | 0:0048b264a3ad | 65 | */ |
takahashim | 0:0048b264a3ad | 66 | typedef enum { |
takahashim | 0:0048b264a3ad | 67 | OA_HMAC=0, ///< use HMAC-SHA1 request signing method |
takahashim | 0:0048b264a3ad | 68 | OA_RSA, ///< use RSA signature |
takahashim | 0:0048b264a3ad | 69 | OA_PLAINTEXT ///< use plain text signature (for testing only) |
takahashim | 0:0048b264a3ad | 70 | } OAuthMethod; |
takahashim | 0:0048b264a3ad | 71 | |
takahashim | 0:0048b264a3ad | 72 | /** |
takahashim | 0:0048b264a3ad | 73 | * Base64 encode and return size data in 'src'. The caller must free the |
takahashim | 0:0048b264a3ad | 74 | * returned string. |
takahashim | 0:0048b264a3ad | 75 | * |
takahashim | 0:0048b264a3ad | 76 | * @param size The size of the data in src |
takahashim | 0:0048b264a3ad | 77 | * @param src The data to be base64 encode |
takahashim | 0:0048b264a3ad | 78 | * @return encoded string otherwise NULL |
takahashim | 0:0048b264a3ad | 79 | */ |
takahashim | 0:0048b264a3ad | 80 | std::string oauth_encode_base64(const unsigned char *src, int size); |
takahashim | 0:0048b264a3ad | 81 | |
takahashim | 0:0048b264a3ad | 82 | /** |
takahashim | 0:0048b264a3ad | 83 | * Decode the base64 encoded string 'src' into the memory pointed to by |
takahashim | 0:0048b264a3ad | 84 | * 'dest'. |
takahashim | 0:0048b264a3ad | 85 | * |
takahashim | 0:0048b264a3ad | 86 | * @param dest Pointer to memory for holding the decoded string. |
takahashim | 0:0048b264a3ad | 87 | * Must be large enough to receive the decoded string. |
takahashim | 0:0048b264a3ad | 88 | * @param src A base64 encoded string. |
takahashim | 0:0048b264a3ad | 89 | * @return the length of the decoded string if decode |
takahashim | 0:0048b264a3ad | 90 | * succeeded otherwise 0. |
takahashim | 0:0048b264a3ad | 91 | */ |
takahashim | 0:0048b264a3ad | 92 | std::string oauth_decode_base64(const char *src); |
takahashim | 0:0048b264a3ad | 93 | |
takahashim | 0:0048b264a3ad | 94 | /** |
takahashim | 0:0048b264a3ad | 95 | * Escape 'string' according to RFC3986 and |
takahashim | 0:0048b264a3ad | 96 | * http://oauth.net/core/1.0/#encoding_parameters. |
takahashim | 0:0048b264a3ad | 97 | * |
takahashim | 0:0048b264a3ad | 98 | * @param string The data to be encoded |
takahashim | 0:0048b264a3ad | 99 | * @return encoded string otherwise NULL |
takahashim | 0:0048b264a3ad | 100 | * The caller must free the returned string. |
takahashim | 0:0048b264a3ad | 101 | */ |
takahashim | 0:0048b264a3ad | 102 | std::string oauth_url_escape(const char *string); |
takahashim | 0:0048b264a3ad | 103 | |
takahashim | 0:0048b264a3ad | 104 | /** |
takahashim | 0:0048b264a3ad | 105 | * Parse RFC3986 encoded 'string' back to unescaped version. |
takahashim | 0:0048b264a3ad | 106 | * |
takahashim | 0:0048b264a3ad | 107 | * @param string The data to be unescaped |
takahashim | 0:0048b264a3ad | 108 | * @param olen unless NULL the length of the returned string is stored there. |
takahashim | 0:0048b264a3ad | 109 | * @return decoded string or NULL |
takahashim | 0:0048b264a3ad | 110 | * The caller must free the returned string. |
takahashim | 0:0048b264a3ad | 111 | */ |
takahashim | 0:0048b264a3ad | 112 | std::string oauth_url_unescape(const char *string); |
takahashim | 0:0048b264a3ad | 113 | |
takahashim | 0:0048b264a3ad | 114 | |
takahashim | 0:0048b264a3ad | 115 | /** |
takahashim | 0:0048b264a3ad | 116 | * returns base64 encoded HMAC-SHA1 signature for |
takahashim | 0:0048b264a3ad | 117 | * given message and key. |
takahashim | 0:0048b264a3ad | 118 | * both data and key need to be urlencoded. |
takahashim | 0:0048b264a3ad | 119 | * |
takahashim | 0:0048b264a3ad | 120 | * the returned string needs to be freed by the caller |
takahashim | 0:0048b264a3ad | 121 | * |
takahashim | 0:0048b264a3ad | 122 | * @param m message to be signed |
takahashim | 0:0048b264a3ad | 123 | * @param k key used for signing |
takahashim | 0:0048b264a3ad | 124 | * @return signature string. |
takahashim | 0:0048b264a3ad | 125 | */ |
takahashim | 0:0048b264a3ad | 126 | std::string oauth_sign_hmac_sha1 (const char *m, const char *k); |
takahashim | 0:0048b264a3ad | 127 | |
takahashim | 0:0048b264a3ad | 128 | /** |
takahashim | 0:0048b264a3ad | 129 | * same as \ref oauth_sign_hmac_sha1 but allows |
takahashim | 0:0048b264a3ad | 130 | * to specify length of message and key (in case they contain null chars). |
takahashim | 0:0048b264a3ad | 131 | * |
takahashim | 0:0048b264a3ad | 132 | * @param m message to be signed |
takahashim | 0:0048b264a3ad | 133 | * @param ml length of message |
takahashim | 0:0048b264a3ad | 134 | * @param k key used for signing |
takahashim | 0:0048b264a3ad | 135 | * @param kl length of key |
takahashim | 0:0048b264a3ad | 136 | * @return signature string. |
takahashim | 0:0048b264a3ad | 137 | */ |
takahashim | 0:0048b264a3ad | 138 | std::string oauth_sign_hmac_sha1_raw(const char *m, const size_t ml, const char *k, const size_t kl); |
takahashim | 0:0048b264a3ad | 139 | |
takahashim | 0:0048b264a3ad | 140 | /** |
takahashim | 0:0048b264a3ad | 141 | * returns plaintext signature for the given key. |
takahashim | 0:0048b264a3ad | 142 | * |
takahashim | 0:0048b264a3ad | 143 | * the returned string needs to be freed by the caller |
takahashim | 0:0048b264a3ad | 144 | * |
takahashim | 0:0048b264a3ad | 145 | * @param m message to be signed |
takahashim | 0:0048b264a3ad | 146 | * @param k key used for signing |
takahashim | 0:0048b264a3ad | 147 | * @return signature string |
takahashim | 0:0048b264a3ad | 148 | */ |
takahashim | 0:0048b264a3ad | 149 | std::string oauth_sign_plaintext(const char *m, const char *k); |
takahashim | 0:0048b264a3ad | 150 | |
takahashim | 0:0048b264a3ad | 151 | /** |
takahashim | 0:0048b264a3ad | 152 | * returns RSA-SHA1 signature for given data. |
takahashim | 0:0048b264a3ad | 153 | * the returned signature needs to be freed by the caller. |
takahashim | 0:0048b264a3ad | 154 | * |
takahashim | 0:0048b264a3ad | 155 | * @param m message to be signed |
takahashim | 0:0048b264a3ad | 156 | * @param k private-key PKCS and Base64-encoded |
takahashim | 0:0048b264a3ad | 157 | * @return base64 encoded signature string. |
takahashim | 0:0048b264a3ad | 158 | */ |
takahashim | 0:0048b264a3ad | 159 | //std::string oauth_sign_rsa_sha1 (const char *m, const char *k); |
takahashim | 0:0048b264a3ad | 160 | |
takahashim | 0:0048b264a3ad | 161 | /** |
takahashim | 0:0048b264a3ad | 162 | * verify RSA-SHA1 signature. |
takahashim | 0:0048b264a3ad | 163 | * |
takahashim | 0:0048b264a3ad | 164 | * returns the output of EVP_VerifyFinal() for a given message, |
takahashim | 0:0048b264a3ad | 165 | * cert/pubkey and signature. |
takahashim | 0:0048b264a3ad | 166 | * |
takahashim | 0:0048b264a3ad | 167 | * @param m message to be verified |
takahashim | 0:0048b264a3ad | 168 | * @param c public-key or x509 certificate |
takahashim | 0:0048b264a3ad | 169 | * @param s base64 encoded signature |
takahashim | 0:0048b264a3ad | 170 | * @return 1 for a correct signature, 0 for failure and -1 if some other error occurred |
takahashim | 0:0048b264a3ad | 171 | */ |
takahashim | 0:0048b264a3ad | 172 | int oauth_verify_rsa_sha1(const char *m, const char *c, const char *s); |
takahashim | 0:0048b264a3ad | 173 | |
takahashim | 0:0048b264a3ad | 174 | /** |
takahashim | 0:0048b264a3ad | 175 | * url-escape strings and concatenate with '&' separator. |
takahashim | 0:0048b264a3ad | 176 | * The number of strings to be concatenated must be |
takahashim | 0:0048b264a3ad | 177 | * given as first argument. |
takahashim | 0:0048b264a3ad | 178 | * all arguments thereafter must be of type (char *) |
takahashim | 0:0048b264a3ad | 179 | * |
takahashim | 0:0048b264a3ad | 180 | * @param len the number of arguments to follow this parameter |
takahashim | 0:0048b264a3ad | 181 | * |
takahashim | 0:0048b264a3ad | 182 | * @return pointer to memory holding the concatenated |
takahashim | 0:0048b264a3ad | 183 | * strings - needs to be free(d) by the caller. or NULL |
takahashim | 0:0048b264a3ad | 184 | * in case we ran out of memory. |
takahashim | 0:0048b264a3ad | 185 | */ |
takahashim | 0:0048b264a3ad | 186 | std::string oauth_catenc(int len, ...); |
takahashim | 0:0048b264a3ad | 187 | |
takahashim | 0:0048b264a3ad | 188 | /** |
takahashim | 0:0048b264a3ad | 189 | * splits the given url into a parameter array. |
takahashim | 0:0048b264a3ad | 190 | * (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse) |
takahashim | 0:0048b264a3ad | 191 | * (see \ref oauth_split_post_paramters for a more generic version) |
takahashim | 0:0048b264a3ad | 192 | * |
takahashim | 0:0048b264a3ad | 193 | * @param url the url or query-string to parse; may be NULL |
takahashim | 0:0048b264a3ad | 194 | * @param argv pointer to a (char *) array where the results are stored. |
takahashim | 0:0048b264a3ad | 195 | * The array is re-allocated to match the number of parameters and each |
takahashim | 0:0048b264a3ad | 196 | * parameter-string is allocated with strdup. - The memory needs to be freed |
takahashim | 0:0048b264a3ad | 197 | * by the caller. |
takahashim | 0:0048b264a3ad | 198 | * |
takahashim | 0:0048b264a3ad | 199 | * @return number of parameter(s) in array. |
takahashim | 0:0048b264a3ad | 200 | */ |
takahashim | 0:0048b264a3ad | 201 | void oauth_split_url_parameters(const char *url, char ***argv); |
takahashim | 0:0048b264a3ad | 202 | |
takahashim | 0:0048b264a3ad | 203 | /** |
takahashim | 0:0048b264a3ad | 204 | * splits the given url into a parameter array. |
takahashim | 0:0048b264a3ad | 205 | * (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse) |
takahashim | 0:0048b264a3ad | 206 | * |
takahashim | 0:0048b264a3ad | 207 | * @param url the url or query-string to parse. |
takahashim | 0:0048b264a3ad | 208 | * @param argv pointer to a (char *) array where the results are stored. |
takahashim | 0:0048b264a3ad | 209 | * The array is re-allocated to match the number of parameters and each |
takahashim | 0:0048b264a3ad | 210 | * parameter-string is allocated with strdup. - The memory needs to be freed |
takahashim | 0:0048b264a3ad | 211 | * by the caller. |
takahashim | 0:0048b264a3ad | 212 | * @param qesc use query parameter escape (vs post-param-escape) - if set |
takahashim | 0:0048b264a3ad | 213 | * to 1 all '+' are treated as spaces ' ' |
takahashim | 0:0048b264a3ad | 214 | * |
takahashim | 0:0048b264a3ad | 215 | * @return number of parameter(s) in array. |
takahashim | 0:0048b264a3ad | 216 | */ |
takahashim | 0:0048b264a3ad | 217 | void oauth_split_post_paramters(const char *url, char ***argv, short qesc); |
takahashim | 0:0048b264a3ad | 218 | |
takahashim | 0:0048b264a3ad | 219 | /** |
takahashim | 0:0048b264a3ad | 220 | * build a url query string from an array. |
takahashim | 0:0048b264a3ad | 221 | * |
takahashim | 0:0048b264a3ad | 222 | * @param argc the total number of elements in the array |
takahashim | 0:0048b264a3ad | 223 | * @param start element in the array at which to start concatenating. |
takahashim | 0:0048b264a3ad | 224 | * @param argv parameter-array to concatenate. |
takahashim | 0:0048b264a3ad | 225 | * @return url string needs to be freed by the caller. |
takahashim | 0:0048b264a3ad | 226 | * |
takahashim | 0:0048b264a3ad | 227 | */ |
takahashim | 0:0048b264a3ad | 228 | std::string oauth_serialize_url (std::vector<std::string> const &argv, int start); |
takahashim | 0:0048b264a3ad | 229 | |
takahashim | 0:0048b264a3ad | 230 | /** |
takahashim | 0:0048b264a3ad | 231 | * encode query parameters from an array. |
takahashim | 0:0048b264a3ad | 232 | * |
takahashim | 0:0048b264a3ad | 233 | * @param argc the total number of elements in the array |
takahashim | 0:0048b264a3ad | 234 | * @param start element in the array at which to start concatenating. |
takahashim | 0:0048b264a3ad | 235 | * @param argv parameter-array to concatenate. |
takahashim | 0:0048b264a3ad | 236 | * @param sep separator for parameters (usually "&") |
takahashim | 0:0048b264a3ad | 237 | * @param mod - bitwise modifiers: |
takahashim | 0:0048b264a3ad | 238 | * 1: skip all values that start with "oauth_" |
takahashim | 0:0048b264a3ad | 239 | * 2: skip all values that don't start with "oauth_" |
takahashim | 0:0048b264a3ad | 240 | * 4: double quotation marks are added around values (use with sep ", " for HTTP Authorization header). |
takahashim | 0:0048b264a3ad | 241 | * @return url string needs to be freed by the caller. |
takahashim | 0:0048b264a3ad | 242 | */ |
takahashim | 0:0048b264a3ad | 243 | std::string oauth_serialize_url_sep (std::vector<std::string> const &argv, int start, char const *sep, int mod); |
takahashim | 0:0048b264a3ad | 244 | |
takahashim | 0:0048b264a3ad | 245 | /** |
takahashim | 0:0048b264a3ad | 246 | * build a query parameter string from an array. |
takahashim | 0:0048b264a3ad | 247 | * |
takahashim | 0:0048b264a3ad | 248 | * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv). |
takahashim | 0:0048b264a3ad | 249 | * It strips the leading host/path, which is usually the first |
takahashim | 0:0048b264a3ad | 250 | * element when using oauth_split_url_parameters on an URL. |
takahashim | 0:0048b264a3ad | 251 | * |
takahashim | 0:0048b264a3ad | 252 | * @param argc the total number of elements in the array |
takahashim | 0:0048b264a3ad | 253 | * @param argv parameter-array to concatenate. |
takahashim | 0:0048b264a3ad | 254 | * @return url string needs to be freed by the caller. |
takahashim | 0:0048b264a3ad | 255 | */ |
takahashim | 0:0048b264a3ad | 256 | std::string oauth_serialize_url_parameters (std::vector<std::string> const &argv); |
takahashim | 0:0048b264a3ad | 257 | |
takahashim | 0:0048b264a3ad | 258 | /** |
takahashim | 0:0048b264a3ad | 259 | * generate a random string between 15 and 32 chars length |
takahashim | 0:0048b264a3ad | 260 | * and return a pointer to it. The value needs to be freed by the |
takahashim | 0:0048b264a3ad | 261 | * caller |
takahashim | 0:0048b264a3ad | 262 | * |
takahashim | 0:0048b264a3ad | 263 | * @return zero terminated random string. |
takahashim | 0:0048b264a3ad | 264 | */ |
takahashim | 0:0048b264a3ad | 265 | std::string oauth_gen_nonce(); |
takahashim | 0:0048b264a3ad | 266 | |
takahashim | 0:0048b264a3ad | 267 | /** |
takahashim | 0:0048b264a3ad | 268 | * string compare function for oauth parameters. |
takahashim | 0:0048b264a3ad | 269 | * |
takahashim | 0:0048b264a3ad | 270 | * used with qsort. needed to normalize request parameters. |
takahashim | 0:0048b264a3ad | 271 | * see http://oauth.net/core/1.0/#anchor14 |
takahashim | 0:0048b264a3ad | 272 | */ |
takahashim | 0:0048b264a3ad | 273 | int oauth_cmpstringp(const void *p1, const void *p2); |
takahashim | 0:0048b264a3ad | 274 | |
takahashim | 0:0048b264a3ad | 275 | |
takahashim | 0:0048b264a3ad | 276 | /** |
takahashim | 0:0048b264a3ad | 277 | * search array for parameter key. |
takahashim | 0:0048b264a3ad | 278 | * @param argv length of array to search |
takahashim | 0:0048b264a3ad | 279 | * @param argc parameter array to search |
takahashim | 0:0048b264a3ad | 280 | * @param key key of parameter to check. |
takahashim | 0:0048b264a3ad | 281 | * |
takahashim | 0:0048b264a3ad | 282 | * @return FALSE (0) if array does not contain a parameter with given key, TRUE (1) otherwise. |
takahashim | 0:0048b264a3ad | 283 | */ |
takahashim | 0:0048b264a3ad | 284 | bool oauth_param_exists(std::vector<std::string> const &argv, char const *key); |
takahashim | 0:0048b264a3ad | 285 | |
takahashim | 0:0048b264a3ad | 286 | /** |
takahashim | 0:0048b264a3ad | 287 | * free array args |
takahashim | 0:0048b264a3ad | 288 | * |
takahashim | 0:0048b264a3ad | 289 | * @param argcp pointer to array length int |
takahashim | 0:0048b264a3ad | 290 | * @param argvp pointer to array values to be free()d |
takahashim | 0:0048b264a3ad | 291 | */ |
takahashim | 0:0048b264a3ad | 292 | void oauth_free_array(int *argcp, std::vector<std::string> *argvp); |
takahashim | 0:0048b264a3ad | 293 | |
takahashim | 0:0048b264a3ad | 294 | /** |
takahashim | 0:0048b264a3ad | 295 | * calculate OAuth-signature for a given HTTP request URL, parameters and oauth-tokens. |
takahashim | 0:0048b264a3ad | 296 | * |
takahashim | 0:0048b264a3ad | 297 | * if 'postargs' is NULL a "GET" request is signed and the |
takahashim | 0:0048b264a3ad | 298 | * signed URL is returned. Else this fn will modify 'postargs' |
takahashim | 0:0048b264a3ad | 299 | * to point to memory that contains the signed POST-variables |
takahashim | 0:0048b264a3ad | 300 | * and returns the base URL. |
takahashim | 0:0048b264a3ad | 301 | * |
takahashim | 0:0048b264a3ad | 302 | * both, the return value and (if given) 'postargs' need to be freed |
takahashim | 0:0048b264a3ad | 303 | * by the caller. |
takahashim | 0:0048b264a3ad | 304 | * |
takahashim | 0:0048b264a3ad | 305 | * @param url The request URL to be signed. append all GET or POST |
takahashim | 0:0048b264a3ad | 306 | * query-parameters separated by either '?' or '&' to this parameter. |
takahashim | 0:0048b264a3ad | 307 | * |
takahashim | 0:0048b264a3ad | 308 | * @param postargs This parameter points to an area where the return value |
takahashim | 0:0048b264a3ad | 309 | * is stored. If 'postargs' is NULL, no value is stored. |
takahashim | 0:0048b264a3ad | 310 | * |
takahashim | 0:0048b264a3ad | 311 | * @param method specify the signature method to use. It is of type |
takahashim | 0:0048b264a3ad | 312 | * \ref OAuthMethod and most likely \ref OA_HMAC. |
takahashim | 0:0048b264a3ad | 313 | * |
takahashim | 0:0048b264a3ad | 314 | * @param http_method The HTTP request method to use (ie "GET", "PUT",..) |
takahashim | 0:0048b264a3ad | 315 | * If NULL is given as 'http_method' this defaults to "GET" when |
takahashim | 0:0048b264a3ad | 316 | * 'postargs' is also NULL and when postargs is not NULL "POST" is used. |
takahashim | 0:0048b264a3ad | 317 | * |
takahashim | 0:0048b264a3ad | 318 | * @param c_key consumer key |
takahashim | 0:0048b264a3ad | 319 | * @param c_secret consumer secret |
takahashim | 0:0048b264a3ad | 320 | * @param t_key token key |
takahashim | 0:0048b264a3ad | 321 | * @param t_secret token secret |
takahashim | 0:0048b264a3ad | 322 | * |
takahashim | 0:0048b264a3ad | 323 | * @return the signed url or NULL if an error occurred. |
takahashim | 0:0048b264a3ad | 324 | * |
takahashim | 0:0048b264a3ad | 325 | */ |
takahashim | 0:0048b264a3ad | 326 | std::string oauth_sign_url2 (const char *url, std::string *postargs, |
takahashim | 0:0048b264a3ad | 327 | OAuthMethod method, |
takahashim | 0:0048b264a3ad | 328 | const char *http_method, //< HTTP request method |
takahashim | 0:0048b264a3ad | 329 | const char *c_key, //< consumer key - posted plain text |
takahashim | 0:0048b264a3ad | 330 | const char *c_secret, //< consumer secret - used as 1st part of secret-key |
takahashim | 0:0048b264a3ad | 331 | const char *t_key, //< token key - posted plain text in URL |
takahashim | 0:0048b264a3ad | 332 | const char *t_secret //< token secret - used as 2st part of secret-key |
takahashim | 0:0048b264a3ad | 333 | ); |
takahashim | 0:0048b264a3ad | 334 | |
takahashim | 0:0048b264a3ad | 335 | /** |
takahashim | 0:0048b264a3ad | 336 | * @deprecated Use oauth_sign_url2() instead. |
takahashim | 0:0048b264a3ad | 337 | */ |
takahashim | 0:0048b264a3ad | 338 | std::string oauth_sign_url (const char *url, std::string *postargs, |
takahashim | 0:0048b264a3ad | 339 | OAuthMethod method, |
takahashim | 0:0048b264a3ad | 340 | const char *c_key, //< consumer key - posted plain text |
takahashim | 0:0048b264a3ad | 341 | const char *c_secret, //< consumer secret - used as 1st part of secret-key |
takahashim | 0:0048b264a3ad | 342 | const char *t_key, //< token key - posted plain text in URL |
takahashim | 0:0048b264a3ad | 343 | const char *t_secret //< token secret - used as 2st part of secret-key |
takahashim | 0:0048b264a3ad | 344 | ) attribute_deprecated; |
takahashim | 0:0048b264a3ad | 345 | |
takahashim | 0:0048b264a3ad | 346 | |
takahashim | 0:0048b264a3ad | 347 | /** |
takahashim | 0:0048b264a3ad | 348 | * the back-end behind by /ref oauth_sign_array2. |
takahashim | 0:0048b264a3ad | 349 | * however it does not serialize the signed URL again. |
takahashim | 0:0048b264a3ad | 350 | * The user needs to call /ref oauth_serialize_url (oA) |
takahashim | 0:0048b264a3ad | 351 | * and /ref oauth_free_array to do so. |
takahashim | 0:0048b264a3ad | 352 | * |
takahashim | 0:0048b264a3ad | 353 | * This allows to split parts of the URL to be used for |
takahashim | 0:0048b264a3ad | 354 | * OAuth HTTP Authorization header: |
takahashim | 0:0048b264a3ad | 355 | * see http://oauth.net/core/1.0a/#consumer_req_param |
takahashim | 0:0048b264a3ad | 356 | * the oauthtest2 example code does so. |
takahashim | 0:0048b264a3ad | 357 | * |
takahashim | 0:0048b264a3ad | 358 | * |
takahashim | 0:0048b264a3ad | 359 | * @param argcp pointer to array length int |
takahashim | 0:0048b264a3ad | 360 | * @param argvp pointer to array values |
takahashim | 0:0048b264a3ad | 361 | * (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" .. |
takahashim | 0:0048b264a3ad | 362 | * the array is modified: fi. oauth_ parameters are added) |
takahashim | 0:0048b264a3ad | 363 | * These arrays can be generated with /ref oauth_split_url_parameters |
takahashim | 0:0048b264a3ad | 364 | * or /ref oauth_split_post_paramters. |
takahashim | 0:0048b264a3ad | 365 | * |
takahashim | 0:0048b264a3ad | 366 | * @param postargs This parameter points to an area where the return value |
takahashim | 0:0048b264a3ad | 367 | * is stored. If 'postargs' is NULL, no value is stored. |
takahashim | 0:0048b264a3ad | 368 | * |
takahashim | 0:0048b264a3ad | 369 | * @param method specify the signature method to use. It is of type |
takahashim | 0:0048b264a3ad | 370 | * \ref OAuthMethod and most likely \ref OA_HMAC. |
takahashim | 0:0048b264a3ad | 371 | * |
takahashim | 0:0048b264a3ad | 372 | * @param http_method The HTTP request method to use (ie "GET", "PUT",..) |
takahashim | 0:0048b264a3ad | 373 | * If NULL is given as 'http_method' this defaults to "GET" when |
takahashim | 0:0048b264a3ad | 374 | * 'postargs' is also NULL and when postargs is not NULL "POST" is used. |
takahashim | 0:0048b264a3ad | 375 | * |
takahashim | 0:0048b264a3ad | 376 | * @param c_key consumer key |
takahashim | 0:0048b264a3ad | 377 | * @param c_secret consumer secret |
takahashim | 0:0048b264a3ad | 378 | * @param t_key token key |
takahashim | 0:0048b264a3ad | 379 | * @param t_secret token secret |
takahashim | 0:0048b264a3ad | 380 | * |
takahashim | 0:0048b264a3ad | 381 | * @return void |
takahashim | 0:0048b264a3ad | 382 | * |
takahashim | 0:0048b264a3ad | 383 | */ |
takahashim | 0:0048b264a3ad | 384 | void oauth_sign_array2_process (std::vector<std::string> *argvp, |
takahashim | 0:0048b264a3ad | 385 | std::string *postargs, |
takahashim | 0:0048b264a3ad | 386 | OAuthMethod method, |
takahashim | 0:0048b264a3ad | 387 | const char *http_method, //< HTTP request method |
takahashim | 0:0048b264a3ad | 388 | const char *c_key, //< consumer key - posted plain text |
takahashim | 0:0048b264a3ad | 389 | const char *c_secret, //< consumer secret - used as 1st part of secret-key |
takahashim | 0:0048b264a3ad | 390 | const char *t_key, //< token key - posted plain text in URL |
takahashim | 0:0048b264a3ad | 391 | const char *t_secret //< token secret - used as 2st part of secret-key |
takahashim | 0:0048b264a3ad | 392 | ); |
takahashim | 0:0048b264a3ad | 393 | |
takahashim | 0:0048b264a3ad | 394 | /** |
takahashim | 0:0048b264a3ad | 395 | * same as /ref oauth_sign_url |
takahashim | 0:0048b264a3ad | 396 | * with the url already split into parameter array |
takahashim | 0:0048b264a3ad | 397 | * |
takahashim | 0:0048b264a3ad | 398 | * @param argcp pointer to array length int |
takahashim | 0:0048b264a3ad | 399 | * @param argvp pointer to array values |
takahashim | 0:0048b264a3ad | 400 | * (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" .. |
takahashim | 0:0048b264a3ad | 401 | * the array is modified: fi. oauth_ parameters are added) |
takahashim | 0:0048b264a3ad | 402 | * These arrays can be generated with /ref oauth_split_url_parameters |
takahashim | 0:0048b264a3ad | 403 | * or /ref oauth_split_post_paramters. |
takahashim | 0:0048b264a3ad | 404 | * |
takahashim | 0:0048b264a3ad | 405 | * @param postargs This parameter points to an area where the return value |
takahashim | 0:0048b264a3ad | 406 | * is stored. If 'postargs' is NULL, no value is stored. |
takahashim | 0:0048b264a3ad | 407 | * |
takahashim | 0:0048b264a3ad | 408 | * @param method specify the signature method to use. It is of type |
takahashim | 0:0048b264a3ad | 409 | * \ref OAuthMethod and most likely \ref OA_HMAC. |
takahashim | 0:0048b264a3ad | 410 | * |
takahashim | 0:0048b264a3ad | 411 | * @param http_method The HTTP request method to use (ie "GET", "PUT",..) |
takahashim | 0:0048b264a3ad | 412 | * If NULL is given as 'http_method' this defaults to "GET" when |
takahashim | 0:0048b264a3ad | 413 | * 'postargs' is also NULL and when postargs is not NULL "POST" is used. |
takahashim | 0:0048b264a3ad | 414 | * |
takahashim | 0:0048b264a3ad | 415 | * @param c_key consumer key |
takahashim | 0:0048b264a3ad | 416 | * @param c_secret consumer secret |
takahashim | 0:0048b264a3ad | 417 | * @param t_key token key |
takahashim | 0:0048b264a3ad | 418 | * @param t_secret token secret |
takahashim | 0:0048b264a3ad | 419 | * |
takahashim | 0:0048b264a3ad | 420 | * @return the signed url or NULL if an error occurred. |
takahashim | 0:0048b264a3ad | 421 | */ |
takahashim | 0:0048b264a3ad | 422 | std::string oauth_sign_array2 (std::vector<std::string> *argvp, |
takahashim | 0:0048b264a3ad | 423 | std::string *postargs, |
takahashim | 0:0048b264a3ad | 424 | OAuthMethod method, |
takahashim | 0:0048b264a3ad | 425 | const char *http_method, //< HTTP request method |
takahashim | 0:0048b264a3ad | 426 | const char *c_key, //< consumer key - posted plain text |
takahashim | 0:0048b264a3ad | 427 | const char *c_secret, //< consumer secret - used as 1st part of secret-key |
takahashim | 0:0048b264a3ad | 428 | const char *t_key, //< token key - posted plain text in URL |
takahashim | 0:0048b264a3ad | 429 | const char *t_secret //< token secret - used as 2st part of secret-key |
takahashim | 0:0048b264a3ad | 430 | ); |
takahashim | 0:0048b264a3ad | 431 | |
takahashim | 0:0048b264a3ad | 432 | /** |
takahashim | 0:0048b264a3ad | 433 | * @deprecated Use oauth_sign_array2() instead. |
takahashim | 0:0048b264a3ad | 434 | */ |
takahashim | 0:0048b264a3ad | 435 | char *oauth_sign_array( |
takahashim | 0:0048b264a3ad | 436 | std::vector<std::string> *argvp, |
takahashim | 0:0048b264a3ad | 437 | char **postargs, |
takahashim | 0:0048b264a3ad | 438 | OAuthMethod method, |
takahashim | 0:0048b264a3ad | 439 | const char *c_key, //< consumer key - posted plain text |
takahashim | 0:0048b264a3ad | 440 | const char *c_secret, //< consumer secret - used as 1st part of secret-key |
takahashim | 0:0048b264a3ad | 441 | const char *t_key, //< token key - posted plain text in URL |
takahashim | 0:0048b264a3ad | 442 | const char *t_secret //< token secret - used as 2st part of secret-key |
takahashim | 0:0048b264a3ad | 443 | ) attribute_deprecated; |
takahashim | 0:0048b264a3ad | 444 | |
takahashim | 0:0048b264a3ad | 445 | /** |
takahashim | 0:0048b264a3ad | 446 | * do a HTTP POST request, wait for it to finish |
takahashim | 0:0048b264a3ad | 447 | * and return the content of the reply. |
takahashim | 0:0048b264a3ad | 448 | * (requires libcurl or a command-line HTTP client) |
takahashim | 0:0048b264a3ad | 449 | * |
takahashim | 0:0048b264a3ad | 450 | * If compiled <b>without</b> libcurl this function calls |
takahashim | 0:0048b264a3ad | 451 | * a command-line executable defined in the environment variable |
takahashim | 0:0048b264a3ad | 452 | * OAUTH_HTTP_CMD - it defaults to |
takahashim | 0:0048b264a3ad | 453 | * <tt>curl -sA 'liboauth-agent/0.1' -d '%%p' '%%u'</tt> |
takahashim | 0:0048b264a3ad | 454 | * where %%p is replaced with the postargs and %%u is replaced with |
takahashim | 0:0048b264a3ad | 455 | * the URL. |
takahashim | 0:0048b264a3ad | 456 | * |
takahashim | 0:0048b264a3ad | 457 | * bash & wget example: |
takahashim | 0:0048b264a3ad | 458 | * <tt>export OAUTH_HTTP_CMD="wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "</tt> |
takahashim | 0:0048b264a3ad | 459 | * |
takahashim | 0:0048b264a3ad | 460 | * NOTE: This function uses the curl's default HTTP-POST Content-Type: |
takahashim | 0:0048b264a3ad | 461 | * application/x-www-form-urlencoded which is the only option allowed |
takahashim | 0:0048b264a3ad | 462 | * by oauth core 1.0 spec. Experimental code can use the Environment variable |
takahashim | 0:0048b264a3ad | 463 | * to transmit custom HTTP headers or parameters. |
takahashim | 0:0048b264a3ad | 464 | * |
takahashim | 0:0048b264a3ad | 465 | * WARNING: this is a tentative function. it's convenient and handy for testing |
takahashim | 0:0048b264a3ad | 466 | * or developing OAuth code. But don't rely on this function |
takahashim | 0:0048b264a3ad | 467 | * to become a stable part of this API. It does not do |
takahashim | 0:0048b264a3ad | 468 | * much error checking for one thing.. |
takahashim | 0:0048b264a3ad | 469 | * |
takahashim | 0:0048b264a3ad | 470 | * @param u url to query |
takahashim | 0:0048b264a3ad | 471 | * @param p postargs to send along with the HTTP request. |
takahashim | 0:0048b264a3ad | 472 | * @return replied content from HTTP server. needs to be freed by caller. |
takahashim | 0:0048b264a3ad | 473 | */ |
takahashim | 0:0048b264a3ad | 474 | std::string oauth_http_post(const char *u, const char *p); |
takahashim | 0:0048b264a3ad | 475 | |
takahashim | 0:0048b264a3ad | 476 | #endif |