Rework base URL setting
This commit is contained in:
parent
842a516e21
commit
451c7e4863
@ -107,6 +107,31 @@ matrix_http_api_finalize(GObject *gobject)
|
|||||||
G_OBJECT_CLASS(matrix_http_api_parent_class)->finalize(gobject);
|
G_OBJECT_CLASS(matrix_http_api_parent_class)->finalize(gobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_set_url(SoupURI **uri, const gchar *base, const gchar *endpoint)
|
||||||
|
{
|
||||||
|
gchar *url;
|
||||||
|
SoupURI *new_uri;
|
||||||
|
|
||||||
|
if (base[strlen(base) - 1] == '/') {
|
||||||
|
url = g_strdup_printf("%s%s", base, endpoint + 1);
|
||||||
|
} else {
|
||||||
|
url = g_strdup_printf("%s%s", base, endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
new_uri = soup_uri_new(url);
|
||||||
|
|
||||||
|
if (new_uri && SOUP_URI_VALID_FOR_HTTP(new_uri)) {
|
||||||
|
*uri = new_uri;
|
||||||
|
} else {
|
||||||
|
if (new_uri) {
|
||||||
|
soup_uri_free(new_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
*uri = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
matrix_http_api_set_property(GObject *gobject,
|
matrix_http_api_set_property(GObject *gobject,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -126,8 +151,7 @@ matrix_http_api_set_property(GObject *gobject,
|
|||||||
{
|
{
|
||||||
const gchar *base_url;
|
const gchar *base_url;
|
||||||
gchar *last_occurence;
|
gchar *last_occurence;
|
||||||
gchar *url;
|
SoupURI *api_uri;
|
||||||
SoupURI *new_uri;
|
|
||||||
|
|
||||||
base_url = g_value_get_string(value);
|
base_url = g_value_get_string(value);
|
||||||
|
|
||||||
@ -137,45 +161,27 @@ matrix_http_api_set_property(GObject *gobject,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
last_occurence = g_strrstr(base_url, API_ENDPOINT);
|
|
||||||
|
|
||||||
/* Check if the provided URL already ends with the API endpoint */
|
/* Check if the provided URL already ends with the API endpoint */
|
||||||
if (g_strcmp0(last_occurence, API_ENDPOINT) == 0) {
|
if ((last_occurence = g_strrstr(base_url, API_ENDPOINT)) != NULL) {
|
||||||
/* if so, just use it */
|
g_warning("Provided URL (%s) already contains the API endpoint. Please use an URL without it!", base_url);
|
||||||
url = g_strdup(base_url);
|
|
||||||
} else {
|
|
||||||
/* if not, add the API endpoint */
|
|
||||||
|
|
||||||
gchar *url_tmp;
|
return;
|
||||||
|
|
||||||
/* If the provided URL already contains the API
|
|
||||||
* endpoint, but it’s not at the end, print a message,
|
|
||||||
* but still continue */
|
|
||||||
if (last_occurence != NULL) {
|
|
||||||
g_info("Provided URL (%s) already contains the API endpoint but not at the end; appending anyway", base_url);
|
|
||||||
}
|
|
||||||
|
|
||||||
url_tmp = g_strdup(base_url);
|
|
||||||
|
|
||||||
/* Cut trailing slash, if present */
|
|
||||||
if (url_tmp[strlen(url_tmp) - 1] == '/') {
|
|
||||||
url_tmp[strlen(url_tmp) - 1] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
url = g_strdup_printf("%s%s", url_tmp, API_ENDPOINT);
|
|
||||||
g_free(url_tmp);
|
|
||||||
|
|
||||||
g_debug("Set base URL to %s", url);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
new_uri = soup_uri_new(url);
|
_set_url(&api_uri, base_url, API_ENDPOINT);
|
||||||
|
|
||||||
|
if (api_uri) {
|
||||||
|
gchar *api_url;
|
||||||
|
|
||||||
if (new_uri && SOUP_URI_VALID_FOR_HTTP(new_uri)) {
|
|
||||||
if (priv->uri) {
|
if (priv->uri) {
|
||||||
soup_uri_free(priv->uri);
|
soup_uri_free(priv->uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->uri = new_uri;
|
|
||||||
|
priv->uri = api_uri;
|
||||||
|
|
||||||
|
// Free all tokens and IDs, as they won’t be valid for
|
||||||
|
// the new server
|
||||||
g_free(priv->token);
|
g_free(priv->token);
|
||||||
priv->token = NULL;
|
priv->token = NULL;
|
||||||
g_free(priv->refresh_token);
|
g_free(priv->refresh_token);
|
||||||
@ -184,15 +190,20 @@ matrix_http_api_set_property(GObject *gobject,
|
|||||||
priv->homeserver = NULL;
|
priv->homeserver = NULL;
|
||||||
g_free(priv->user_id);
|
g_free(priv->user_id);
|
||||||
priv->user_id = NULL;
|
priv->user_id = NULL;
|
||||||
|
|
||||||
|
api_url = soup_uri_to_string(api_uri, FALSE);
|
||||||
|
|
||||||
|
g_debug("API URL: %s", api_url);
|
||||||
|
|
||||||
|
g_free(api_url);
|
||||||
} else {
|
} else {
|
||||||
if (new_uri) {
|
if (api_uri) {
|
||||||
soup_uri_free(new_uri);
|
soup_uri_free(api_uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_warning("Invalid URL: %s", url);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free(url);
|
g_warning("Invalid URL: %s", base_url);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user