|
Packit Service |
ca3877 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit Service |
ca3877 |
/*
|
|
Packit Service |
ca3877 |
* soup-auth.c: HTTP Authentication framework
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Copyright (C) 2001-2003, Ximian, Inc.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
ca3877 |
#include <config.h>
|
|
Packit Service |
ca3877 |
#endif
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include <string.h>
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include "soup-auth.h"
|
|
Packit Service |
ca3877 |
#include "soup.h"
|
|
Packit Service |
ca3877 |
#include "soup-connection-auth.h"
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SECTION:soup-auth
|
|
Packit Service |
ca3877 |
* @short_description: HTTP client-side authentication support
|
|
Packit Service |
ca3877 |
* @see_also: #SoupSession
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* #SoupAuth objects store the authentication data associated with a
|
|
Packit Service |
ca3877 |
* given bit of web space. They are created automatically by
|
|
Packit Service |
ca3877 |
* #SoupSession.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SoupAuth:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* The abstract base class for handling authentication. Specific HTTP
|
|
Packit Service |
ca3877 |
* Authentication mechanisms are implemented by its subclasses, but
|
|
Packit Service |
ca3877 |
* applications never need to be aware of the specific subclasses
|
|
Packit Service |
ca3877 |
* being used.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
typedef struct {
|
|
Packit Service |
ca3877 |
gboolean proxy;
|
|
Packit Service |
ca3877 |
char *host;
|
|
Packit Service |
ca3877 |
} SoupAuthPrivate;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (SoupAuth, soup_auth, G_TYPE_OBJECT)
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
enum {
|
|
Packit Service |
ca3877 |
PROP_0,
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
PROP_SCHEME_NAME,
|
|
Packit Service |
ca3877 |
PROP_REALM,
|
|
Packit Service |
ca3877 |
PROP_HOST,
|
|
Packit Service |
ca3877 |
PROP_IS_FOR_PROXY,
|
|
Packit Service |
ca3877 |
PROP_IS_AUTHENTICATED,
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
LAST_PROP
|
|
Packit Service |
ca3877 |
};
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_auth_init (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_auth_finalize (GObject *object)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuth *auth = SOUP_AUTH (object);
|
|
Packit Service |
ca3877 |
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_free (auth->realm);
|
|
Packit Service |
ca3877 |
g_free (priv->host);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_OBJECT_CLASS (soup_auth_parent_class)->finalize (object);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_auth_set_property (GObject *object, guint prop_id,
|
|
Packit Service |
ca3877 |
const GValue *value, GParamSpec *pspec)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuth *auth = SOUP_AUTH (object);
|
|
Packit Service |
ca3877 |
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
switch (prop_id) {
|
|
Packit Service |
ca3877 |
case PROP_REALM:
|
|
Packit Service |
ca3877 |
g_free (auth->realm);
|
|
Packit Service |
ca3877 |
auth->realm = g_value_dup_string (value);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_HOST:
|
|
Packit Service |
ca3877 |
g_free (priv->host);
|
|
Packit Service |
ca3877 |
priv->host = g_value_dup_string (value);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_IS_FOR_PROXY:
|
|
Packit Service |
ca3877 |
priv->proxy = g_value_get_boolean (value);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
default:
|
|
Packit Service |
ca3877 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_auth_get_property (GObject *object, guint prop_id,
|
|
Packit Service |
ca3877 |
GValue *value, GParamSpec *pspec)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuth *auth = SOUP_AUTH (object);
|
|
Packit Service |
ca3877 |
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
switch (prop_id) {
|
|
Packit Service |
ca3877 |
case PROP_SCHEME_NAME:
|
|
Packit Service |
ca3877 |
g_value_set_string (value, soup_auth_get_scheme_name (auth));
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_REALM:
|
|
Packit Service |
ca3877 |
g_value_set_string (value, soup_auth_get_realm (auth));
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_HOST:
|
|
Packit Service |
ca3877 |
g_value_set_string (value, soup_auth_get_host (auth));
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_IS_FOR_PROXY:
|
|
Packit Service |
ca3877 |
g_value_set_boolean (value, priv->proxy);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
case PROP_IS_AUTHENTICATED:
|
|
Packit Service |
ca3877 |
g_value_set_boolean (value, soup_auth_is_authenticated (auth));
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
default:
|
|
Packit Service |
ca3877 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
ca3877 |
break;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static gboolean
|
|
Packit Service |
ca3877 |
auth_can_authenticate (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
return TRUE;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_auth_class_init (SoupAuthClass *auth_class)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
GObjectClass *object_class = G_OBJECT_CLASS (auth_class);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
auth_class->can_authenticate = auth_can_authenticate;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
object_class->finalize = soup_auth_finalize;
|
|
Packit Service |
ca3877 |
object_class->set_property = soup_auth_set_property;
|
|
Packit Service |
ca3877 |
object_class->get_property = soup_auth_get_property;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* properties */
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SOUP_AUTH_SCHEME_NAME:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* An alias for the #SoupAuth:scheme-name property. (The
|
|
Packit Service |
ca3877 |
* authentication scheme name.)
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
g_object_class_install_property (
|
|
Packit Service |
ca3877 |
object_class, PROP_SCHEME_NAME,
|
|
Packit Service |
ca3877 |
g_param_spec_string (SOUP_AUTH_SCHEME_NAME,
|
|
Packit Service |
ca3877 |
"Scheme name",
|
|
Packit Service |
ca3877 |
"Authentication scheme name",
|
|
Packit Service |
ca3877 |
NULL,
|
|
Packit Service |
ca3877 |
G_PARAM_READABLE));
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SOUP_AUTH_REALM:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* An alias for the #SoupAuth:realm property. (The
|
|
Packit Service |
ca3877 |
* authentication realm.)
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
g_object_class_install_property (
|
|
Packit Service |
ca3877 |
object_class, PROP_REALM,
|
|
Packit Service |
ca3877 |
g_param_spec_string (SOUP_AUTH_REALM,
|
|
Packit Service |
ca3877 |
"Realm",
|
|
Packit Service |
ca3877 |
"Authentication realm",
|
|
Packit Service |
ca3877 |
NULL,
|
|
Packit Service |
ca3877 |
G_PARAM_READWRITE));
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SOUP_AUTH_HOST:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* An alias for the #SoupAuth:host property. (The
|
|
Packit Service |
ca3877 |
* host being authenticated to.)
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
g_object_class_install_property (
|
|
Packit Service |
ca3877 |
object_class, PROP_HOST,
|
|
Packit Service |
ca3877 |
g_param_spec_string (SOUP_AUTH_HOST,
|
|
Packit Service |
ca3877 |
"Host",
|
|
Packit Service |
ca3877 |
"Authentication host",
|
|
Packit Service |
ca3877 |
NULL,
|
|
Packit Service |
ca3877 |
G_PARAM_READWRITE));
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SOUP_AUTH_IS_FOR_PROXY:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* An alias for the #SoupAuth:is-for-proxy property. (Whether
|
|
Packit Service |
ca3877 |
* or not the auth is for a proxy server.)
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
g_object_class_install_property (
|
|
Packit Service |
ca3877 |
object_class, PROP_IS_FOR_PROXY,
|
|
Packit Service |
ca3877 |
g_param_spec_boolean (SOUP_AUTH_IS_FOR_PROXY,
|
|
Packit Service |
ca3877 |
"For Proxy",
|
|
Packit Service |
ca3877 |
"Whether or not the auth is for a proxy server",
|
|
Packit Service |
ca3877 |
FALSE,
|
|
Packit Service |
ca3877 |
G_PARAM_READWRITE));
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SOUP_AUTH_IS_AUTHENTICATED:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* An alias for the #SoupAuth:is-authenticated property.
|
|
Packit Service |
ca3877 |
* (Whether or not the auth has been authenticated.)
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
g_object_class_install_property (
|
|
Packit Service |
ca3877 |
object_class, PROP_IS_AUTHENTICATED,
|
|
Packit Service |
ca3877 |
g_param_spec_boolean (SOUP_AUTH_IS_AUTHENTICATED,
|
|
Packit Service |
ca3877 |
"Authenticated",
|
|
Packit Service |
ca3877 |
"Whether or not the auth is authenticated",
|
|
Packit Service |
ca3877 |
FALSE,
|
|
Packit Service |
ca3877 |
G_PARAM_READABLE));
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_new:
|
|
Packit Service |
ca3877 |
* @type: the type of auth to create (a subtype of #SoupAuth)
|
|
Packit Service |
ca3877 |
* @msg: the #SoupMessage the auth is being created for
|
|
Packit Service |
ca3877 |
* @auth_header: the WWW-Authenticate/Proxy-Authenticate header
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Creates a new #SoupAuth of type @type with the information from
|
|
Packit Service |
ca3877 |
* @msg and @auth_header.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* This is called by #SoupSession; you will normally not create auths
|
|
Packit Service |
ca3877 |
* yourself.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: (nullable): the new #SoupAuth, or %NULL if it could
|
|
Packit Service |
ca3877 |
* not be created
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
SoupAuth *
|
|
Packit Service |
ca3877 |
soup_auth_new (GType type, SoupMessage *msg, const char *auth_header)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuth *auth;
|
|
Packit Service |
ca3877 |
GHashTable *params;
|
|
Packit Service |
ca3877 |
const char *scheme, *realm;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (g_type_is_a (type, SOUP_TYPE_AUTH), NULL);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (auth_header != NULL, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
auth = g_object_new (type,
|
|
Packit Service |
ca3877 |
SOUP_AUTH_IS_FOR_PROXY, (msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED),
|
|
Packit Service |
ca3877 |
SOUP_AUTH_HOST, soup_message_get_uri (msg)->host,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
scheme = soup_auth_get_scheme_name (auth);
|
|
Packit Service |
ca3877 |
if (g_ascii_strncasecmp (auth_header, scheme, strlen (scheme)) != 0) {
|
|
Packit Service |
ca3877 |
g_object_unref (auth);
|
|
Packit Service |
ca3877 |
return NULL;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
params = soup_header_parse_param_list (auth_header + strlen (scheme));
|
|
Packit Service |
ca3877 |
if (!params)
|
|
Packit Service |
ca3877 |
params = g_hash_table_new (NULL, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
realm = g_hash_table_lookup (params, "realm");
|
|
Packit Service |
ca3877 |
if (realm)
|
|
Packit Service |
ca3877 |
auth->realm = g_strdup (realm);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (!SOUP_AUTH_GET_CLASS (auth)->update (auth, msg, params)) {
|
|
Packit Service |
ca3877 |
g_object_unref (auth);
|
|
Packit Service |
ca3877 |
auth = NULL;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
soup_header_free_param_list (params);
|
|
Packit Service |
ca3877 |
return auth;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_update:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @msg: the #SoupMessage @auth is being updated for
|
|
Packit Service |
ca3877 |
* @auth_header: the WWW-Authenticate/Proxy-Authenticate header
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Updates @auth with the information from @msg and @auth_header,
|
|
Packit Service |
ca3877 |
* possibly un-authenticating it. As with soup_auth_new(), this is
|
|
Packit Service |
ca3877 |
* normally only used by #SoupSession.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: %TRUE if @auth is still a valid (but potentially
|
|
Packit Service |
ca3877 |
* unauthenticated) #SoupAuth. %FALSE if something about @auth_params
|
|
Packit Service |
ca3877 |
* could not be parsed or incorporated into @auth at all.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
gboolean
|
|
Packit Service |
ca3877 |
soup_auth_update (SoupAuth *auth, SoupMessage *msg, const char *auth_header)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
GHashTable *params;
|
|
Packit Service |
ca3877 |
const char *scheme, *realm;
|
|
Packit Service |
ca3877 |
gboolean was_authenticated, success;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), FALSE);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_MESSAGE (msg), FALSE);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (auth_header != NULL, FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
scheme = soup_auth_get_scheme_name (auth);
|
|
Packit Service |
ca3877 |
if (g_ascii_strncasecmp (auth_header, scheme, strlen (scheme)) != 0)
|
|
Packit Service |
ca3877 |
return FALSE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
params = soup_header_parse_param_list (auth_header + strlen (scheme));
|
|
Packit Service |
ca3877 |
if (!params)
|
|
Packit Service |
ca3877 |
params = g_hash_table_new (NULL, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
realm = g_hash_table_lookup (params, "realm");
|
|
Packit Service |
ca3877 |
if (realm && auth->realm && strcmp (realm, auth->realm) != 0) {
|
|
Packit Service |
ca3877 |
soup_header_free_param_list (params);
|
|
Packit Service |
ca3877 |
return FALSE;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
was_authenticated = soup_auth_is_authenticated (auth);
|
|
Packit Service |
ca3877 |
success = SOUP_AUTH_GET_CLASS (auth)->update (auth, msg, params);
|
|
Packit Service |
ca3877 |
if (was_authenticated != soup_auth_is_authenticated (auth))
|
|
Packit Service |
ca3877 |
g_object_notify (G_OBJECT (auth), SOUP_AUTH_IS_AUTHENTICATED);
|
|
Packit Service |
ca3877 |
soup_header_free_param_list (params);
|
|
Packit Service |
ca3877 |
return success;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_authenticate:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @username: the username provided by the user or client
|
|
Packit Service |
ca3877 |
* @password: the password provided by the user or client
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Call this on an auth to authenticate it; normally this will cause
|
|
Packit Service |
ca3877 |
* the auth's message to be requeued with the new authentication info.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
void
|
|
Packit Service |
ca3877 |
soup_auth_authenticate (SoupAuth *auth, const char *username, const char *password)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
gboolean was_authenticated;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_return_if_fail (SOUP_IS_AUTH (auth));
|
|
Packit Service |
ca3877 |
g_return_if_fail (username != NULL);
|
|
Packit Service |
ca3877 |
g_return_if_fail (password != NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
was_authenticated = soup_auth_is_authenticated (auth);
|
|
Packit Service |
ca3877 |
SOUP_AUTH_GET_CLASS (auth)->authenticate (auth, username, password);
|
|
Packit Service |
ca3877 |
if (was_authenticated != soup_auth_is_authenticated (auth))
|
|
Packit Service |
ca3877 |
g_object_notify (G_OBJECT (auth), SOUP_AUTH_IS_AUTHENTICATED);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_is_for_proxy:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Tests whether or not @auth is associated with a proxy server rather
|
|
Packit Service |
ca3877 |
* than an "origin" server.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: %TRUE or %FALSE
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
gboolean
|
|
Packit Service |
ca3877 |
soup_auth_is_for_proxy (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return priv->proxy;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_scheme_name:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Returns @auth's scheme name. (Eg, "Basic", "Digest", or "NTLM")
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the scheme name
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
const char *
|
|
Packit Service |
ca3877 |
soup_auth_get_scheme_name (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->scheme_name;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_host:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Returns the host that @auth is associated with.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the hostname
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
const char *
|
|
Packit Service |
ca3877 |
soup_auth_get_host (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return priv->host;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_realm:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Returns @auth's realm. This is an identifier that distinguishes
|
|
Packit Service |
ca3877 |
* separate authentication spaces on a given server, and may be some
|
|
Packit Service |
ca3877 |
* string that is meaningful to the user. (Although it is probably not
|
|
Packit Service |
ca3877 |
* localized.)
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the realm name
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
const char *
|
|
Packit Service |
ca3877 |
soup_auth_get_realm (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return auth->realm;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_info:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Gets an opaque identifier for @auth, for use as a hash key or the
|
|
Packit Service |
ca3877 |
* like. #SoupAuth objects from the same server with the same
|
|
Packit Service |
ca3877 |
* identifier refer to the same authentication domain (eg, the URLs
|
|
Packit Service |
ca3877 |
* associated with them take the same usernames and passwords).
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the identifier
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
char *
|
|
Packit Service |
ca3877 |
soup_auth_get_info (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (SOUP_IS_CONNECTION_AUTH (auth))
|
|
Packit Service |
ca3877 |
return g_strdup (SOUP_AUTH_GET_CLASS (auth)->scheme_name);
|
|
Packit Service |
ca3877 |
else {
|
|
Packit Service |
ca3877 |
return g_strdup_printf ("%s:%s",
|
|
Packit Service |
ca3877 |
SOUP_AUTH_GET_CLASS (auth)->scheme_name,
|
|
Packit Service |
ca3877 |
auth->realm);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_is_authenticated:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Tests if @auth has been given a username and password
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: %TRUE if @auth has been given a username and password
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
gboolean
|
|
Packit Service |
ca3877 |
soup_auth_is_authenticated (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), TRUE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->is_authenticated (auth);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_authorization:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @msg: the #SoupMessage to be authorized
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Generates an appropriate "Authorization" header for @msg. (The
|
|
Packit Service |
ca3877 |
* session will only call this if soup_auth_is_authenticated()
|
|
Packit Service |
ca3877 |
* returned %TRUE.)
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the "Authorization" header, which must be freed.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
char *
|
|
Packit Service |
ca3877 |
soup_auth_get_authorization (SoupAuth *auth, SoupMessage *msg)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (msg != NULL, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->get_authorization (auth, msg);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_is_ready:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @msg: a #SoupMessage
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Tests if @auth is ready to make a request for @msg with. For most
|
|
Packit Service |
ca3877 |
* auths, this is equivalent to soup_auth_is_authenticated(), but for
|
|
Packit Service |
ca3877 |
* some auth types (eg, NTLM), the auth may be sendable (eg, as an
|
|
Packit Service |
ca3877 |
* authentication request) even before it is authenticated.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: %TRUE if @auth is ready to make a request with.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Since: 2.42
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
gboolean
|
|
Packit Service |
ca3877 |
soup_auth_is_ready (SoupAuth *auth,
|
|
Packit Service |
ca3877 |
SoupMessage *msg)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), TRUE);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_MESSAGE (msg), TRUE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (SOUP_AUTH_GET_CLASS (auth)->is_ready)
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->is_ready (auth, msg);
|
|
Packit Service |
ca3877 |
else
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->is_authenticated (auth);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_can_authenticate:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Tests if @auth is able to authenticate by providing credentials to the
|
|
Packit Service |
ca3877 |
* soup_auth_authenticate().
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: %TRUE if @auth is able to accept credentials.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Since: 2.54
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
gboolean
|
|
Packit Service |
ca3877 |
soup_auth_can_authenticate (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->can_authenticate (auth);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_protection_space:
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @source_uri: the URI of the request that @auth was generated in
|
|
Packit Service |
ca3877 |
* response to.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Returns a list of paths on the server which @auth extends over.
|
|
Packit Service |
ca3877 |
* (All subdirectories of these paths are also assumed to be part
|
|
Packit Service |
ca3877 |
* of @auth's protection space, unless otherwise discovered not to
|
|
Packit Service |
ca3877 |
* be.)
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: (element-type utf8) (transfer full): the list of
|
|
Packit Service |
ca3877 |
* paths, which can be freed with soup_auth_free_protection_space().
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
GSList *
|
|
Packit Service |
ca3877 |
soup_auth_get_protection_space (SoupAuth *auth, SoupURI *source_uri)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (SOUP_IS_AUTH (auth), NULL);
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (source_uri != NULL, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return SOUP_AUTH_GET_CLASS (auth)->get_protection_space (auth, source_uri);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_free_protection_space: (skip)
|
|
Packit Service |
ca3877 |
* @auth: a #SoupAuth
|
|
Packit Service |
ca3877 |
* @space: the return value from soup_auth_get_protection_space()
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Frees @space.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
void
|
|
Packit Service |
ca3877 |
soup_auth_free_protection_space (SoupAuth *auth, GSList *space)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_slist_free_full (space, g_free);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_auth_get_saved_users:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: (transfer full) (element-type utf8):
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
GSList *
|
|
Packit Service |
ca3877 |
soup_auth_get_saved_users (SoupAuth *auth)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
return NULL;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
const char *
|
|
Packit Service |
ca3877 |
soup_auth_get_saved_password (SoupAuth *auth, const char *user)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
return NULL;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
void
|
|
Packit Service |
ca3877 |
soup_auth_has_saved_password (SoupAuth *auth, const char *username,
|
|
Packit Service |
ca3877 |
const char *password)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
void
|
|
Packit Service |
ca3877 |
soup_auth_save_password (SoupAuth *auth, const char *username,
|
|
Packit Service |
ca3877 |
const char *password)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
}
|