[librest] Support multipart/form-data requests in OAuthProxyCall
- From: Ross Burton <rburton src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librest] Support multipart/form-data requests in OAuthProxyCall
- Date: Tue, 19 Feb 2013 19:52:36 +0000 (UTC)
commit 94c72cf7bbaa33bad91652961768baf1293e5181
Author: Timm Bäder <baedert gmail com>
Date: Fri Feb 8 22:47:13 2013 +0100
Support multipart/form-data requests in OAuthProxyCall
If the user uploads a file using a multipart/form-data request,
the that parameter must not be used to encode the request.
rest/oauth-proxy-call.c | 25 +++++++++++++++++++++++--
1 files changed, 23 insertions(+), 2 deletions(-)
---
diff --git a/rest/oauth-proxy-call.c b/rest/oauth-proxy-call.c
index 884c8c2..63c859f 100644
--- a/rest/oauth-proxy-call.c
+++ b/rest/oauth-proxy-call.c
@@ -120,8 +120,12 @@ sign_hmac (OAuthProxy *proxy, RestProxyCall *call, GHashTable *oauth_params)
OAuthProxyPrivate *priv;
RestProxyCallPrivate *callpriv;
char *key, *signature, *ep, *eep;
+ const char *content_type;
GString *text;
GHashTable *all_params;
+ RestParamsIter params_iter;
+ RestParam *param;
+ gboolean encode_query_params = TRUE;
priv = PROXY_GET_PRIVATE (proxy);
callpriv = call->priv;
@@ -147,11 +151,28 @@ sign_hmac (OAuthProxy *proxy, RestProxyCall *call, GHashTable *oauth_params)
}
g_string_append_c (text, '&');
+
+
+ /* If one of the call's parameters is a multipart/form-data parameter, the
+ signature base string must be generated with only the oauth parameters */
+ rest_params_iter_init(¶ms_iter, callpriv->params);
+ while(rest_params_iter_next(¶ms_iter, (gpointer)&key, (gpointer)¶m)) {
+ content_type = rest_param_get_content_type(param);
+ if (strcmp(content_type, "multipart/form-data") == 0){
+ encode_query_params = FALSE;
+ break;
+ }
+ }
+
+
+
/* Merge the OAuth parameters with the query parameters */
all_params = g_hash_table_new (g_str_hash, g_str_equal);
merge_hashes (all_params, oauth_params);
- if (!priv->oauth_echo)
- merge_params (all_params, callpriv->params);
+ if (encode_query_params && !priv->oauth_echo) {
+ merge_params (all_params, callpriv->params);
+ }
+
ep = encode_params (all_params);
eep = OAUTH_ENCODE_STRING (ep);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]