diff options
Diffstat (limited to 'rest')
-rw-r--r-- | rest/oauth-proxy-call.c | 19 | ||||
-rw-r--r-- | rest/oauth2-proxy.c | 22 |
2 files changed, 25 insertions, 16 deletions
diff --git a/rest/oauth-proxy-call.c b/rest/oauth-proxy-call.c index c90c69d..e238c3c 100644 --- a/rest/oauth-proxy-call.c +++ b/rest/oauth-proxy-call.c @@ -30,7 +30,7 @@ G_DEFINE_TYPE (OAuthProxyCall, oauth_proxy_call, REST_TYPE_PROXY_CALL) -#define OAUTH_ENCODE_STRING(x_) (x_ ? soup_uri_encode( (x_), "!$&'()*+,;=@") : g_strdup ("")) +#define OAUTH_ENCODE_STRING(x_) (x_ ? g_uri_escape_string( (x_), NULL, TRUE) : g_strdup ("")) static char * sign_plaintext (OAuthProxyPrivate *priv) @@ -136,15 +136,24 @@ sign_hmac (OAuthProxy *proxy, RestProxyCall *call, GHashTable *oauth_params) if (priv->oauth_echo) { g_string_append_uri_escaped (text, priv->service_url, NULL, FALSE); } else if (priv->signature_host != NULL) { - SoupURI *url = soup_uri_new (url_str); + GUri *url = g_uri_parse (url_str, G_URI_FLAGS_ENCODED, NULL); + GUri *new_url; gchar *signing_url; - soup_uri_set_host (url, priv->signature_host); - signing_url = soup_uri_to_string (url, FALSE); + new_url = g_uri_build (g_uri_get_flags (url), + g_uri_get_scheme (url), + g_uri_get_userinfo (url), + priv->signature_host, + g_uri_get_port (url), + g_uri_get_path (url), + g_uri_get_query (url), + g_uri_get_fragment (url)); + signing_url = g_uri_to_string (new_url); g_string_append_uri_escaped (text, signing_url, NULL, FALSE); - soup_uri_free (url); + g_uri_unref (new_url); + g_uri_unref (url); g_free (signing_url); } else { g_string_append_uri_escaped (text, url_str, NULL, FALSE); diff --git a/rest/oauth2-proxy.c b/rest/oauth2-proxy.c index 24e5da0..3382f8b 100644 --- a/rest/oauth2-proxy.c +++ b/rest/oauth2-proxy.c @@ -37,8 +37,6 @@ oauth2_proxy_error_quark (void) return g_quark_from_static_string ("rest-oauth2-proxy"); } -#define EXTRA_CHARS_ENCODE "!$&'()*+,;=@" - enum { PROP_0, PROP_CLIENT_ID, @@ -242,8 +240,8 @@ append_query_param (gpointer key, gpointer value, gpointer user_data) char *encoded_val, *encoded_key; char *param; - encoded_val = soup_uri_encode (value, EXTRA_CHARS_ENCODE); - encoded_key = soup_uri_encode (key, EXTRA_CHARS_ENCODE); + encoded_val = g_uri_escape_string (value, NULL, TRUE); + encoded_key = g_uri_escape_string (key, NULL, TRUE); param = g_strdup_printf ("%s=%s", encoded_key, encoded_val); g_free (encoded_key); @@ -295,8 +293,8 @@ oauth2_proxy_build_login_url_full (OAuth2Proxy *proxy, g_hash_table_foreach (extra_params, append_query_param, params); } - encoded_uri = soup_uri_encode (redirect_uri, EXTRA_CHARS_ENCODE); - encoded_id = soup_uri_encode (proxy->priv->client_id, EXTRA_CHARS_ENCODE); + encoded_uri = g_uri_escape_string (redirect_uri, NULL, TRUE); + encoded_id = g_uri_escape_string (proxy->priv->client_id, NULL, TRUE); url = g_strdup_printf ("%s?client_id=%s&redirect_uri=%s&type=user_agent", proxy->priv->auth_endpoint, encoded_id, @@ -378,20 +376,22 @@ oauth2_proxy_extract_access_token (const char *url) { GHashTable *params; char *token = NULL; - SoupURI *soupuri = soup_uri_new (url); + const char *fragment; + GUri *uri = g_uri_parse (url, G_URI_FLAGS_ENCODED, NULL); - if (soupuri->fragment != NULL) { - params = soup_form_decode (soupuri->fragment); + fragment = g_uri_get_fragment (uri); + if (fragment != NULL) { + params = soup_form_decode (fragment); if (params) { char *encoded = g_hash_table_lookup (params, "access_token"); if (encoded) - token = soup_uri_decode (encoded); + token = g_uri_unescape_string (encoded, NULL); g_hash_table_destroy (params); } } - soup_uri_free (soupuri); + g_uri_unref (uri); return token; } |