#include <string.h>
#include "soup-auth-basic.h"
-#include "soup-headers.h"
-#include "soup-message.h"
-#include "soup-misc.h"
-#include "soup-uri.h"
-
-static gboolean update (SoupAuth *auth, SoupMessage *msg, GHashTable *auth_params);
-static GSList *get_protection_space (SoupAuth *auth, SoupURI *source_uri);
-static void authenticate (SoupAuth *auth, const char *username, const char *password);
-static gboolean is_authenticated (SoupAuth *auth);
-static char *get_authorization (SoupAuth *auth, SoupMessage *msg);
+#include "soup.h"
typedef struct {
char *token;
} SoupAuthBasicPrivate;
#define SOUP_AUTH_BASIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_AUTH_BASIC, SoupAuthBasicPrivate))
+/**
+ * SOUP_TYPE_AUTH_BASIC:
+ *
+ * A #GType corresponding to HTTP "Basic" authentication.
+ * #SoupSessions support this by default; if you want to disable
+ * support for it, call soup_session_remove_feature_by_type(),
+ * passing %SOUP_TYPE_AUTH_BASIC.
+ *
+ * Since: 2.34
+ */
+
G_DEFINE_TYPE (SoupAuthBasic, soup_auth_basic, SOUP_TYPE_AUTH)
static void
}
static void
-finalize (GObject *object)
+soup_auth_basic_finalize (GObject *object)
{
SoupAuthBasicPrivate *priv = SOUP_AUTH_BASIC_GET_PRIVATE (object);
G_OBJECT_CLASS (soup_auth_basic_parent_class)->finalize (object);
}
-static void
-soup_auth_basic_class_init (SoupAuthBasicClass *auth_basic_class)
-{
- SoupAuthClass *auth_class = SOUP_AUTH_CLASS (auth_basic_class);
- GObjectClass *object_class = G_OBJECT_CLASS (auth_basic_class);
-
- g_type_class_add_private (auth_basic_class, sizeof (SoupAuthBasicPrivate));
-
- auth_class->scheme_name = "Basic";
- auth_class->strength = 1;
-
- auth_class->update = update;
- auth_class->get_protection_space = get_protection_space;
- auth_class->authenticate = authenticate;
- auth_class->is_authenticated = is_authenticated;
- auth_class->get_authorization = get_authorization;
-
- object_class->finalize = finalize;
-}
-
-
static gboolean
-update (SoupAuth *auth, SoupMessage *msg, GHashTable *auth_params)
+soup_auth_basic_update (SoupAuth *auth, SoupMessage *msg,
+ GHashTable *auth_params)
{
SoupAuthBasicPrivate *priv = SOUP_AUTH_BASIC_GET_PRIVATE (auth);
}
static GSList *
-get_protection_space (SoupAuth *auth, SoupURI *source_uri)
+soup_auth_basic_get_protection_space (SoupAuth *auth, SoupURI *source_uri)
{
char *space, *p;
}
static void
-authenticate (SoupAuth *auth, const char *username, const char *password)
+soup_auth_basic_authenticate (SoupAuth *auth, const char *username,
+ const char *password)
{
SoupAuthBasicPrivate *priv = SOUP_AUTH_BASIC_GET_PRIVATE (auth);
- char *user_pass;
+ char *user_pass, *user_pass_latin1;
int len;
- g_return_if_fail (username != NULL);
- g_return_if_fail (password != NULL);
-
user_pass = g_strdup_printf ("%s:%s", username, password);
+ user_pass_latin1 = g_convert (user_pass, -1, "ISO-8859-1", "UTF-8",
+ NULL, NULL, NULL);
+ if (user_pass_latin1) {
+ memset (user_pass, 0, strlen (user_pass));
+ g_free (user_pass);
+ user_pass = user_pass_latin1;
+ }
len = strlen (user_pass);
+ if (priv->token) {
+ memset (priv->token, 0, strlen (priv->token));
+ g_free (priv->token);
+ }
priv->token = g_base64_encode ((guchar *)user_pass, len);
memset (user_pass, 0, len);
}
static gboolean
-is_authenticated (SoupAuth *auth)
+soup_auth_basic_is_authenticated (SoupAuth *auth)
{
return SOUP_AUTH_BASIC_GET_PRIVATE (auth)->token != NULL;
}
static char *
-get_authorization (SoupAuth *auth, SoupMessage *msg)
+soup_auth_basic_get_authorization (SoupAuth *auth, SoupMessage *msg)
{
SoupAuthBasicPrivate *priv = SOUP_AUTH_BASIC_GET_PRIVATE (auth);
return g_strdup_printf ("Basic %s", priv->token);
}
+
+static void
+soup_auth_basic_class_init (SoupAuthBasicClass *auth_basic_class)
+{
+ SoupAuthClass *auth_class = SOUP_AUTH_CLASS (auth_basic_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (auth_basic_class);
+
+ g_type_class_add_private (auth_basic_class, sizeof (SoupAuthBasicPrivate));
+
+ auth_class->scheme_name = "Basic";
+ auth_class->strength = 1;
+
+ auth_class->update = soup_auth_basic_update;
+ auth_class->get_protection_space = soup_auth_basic_get_protection_space;
+ auth_class->authenticate = soup_auth_basic_authenticate;
+ auth_class->is_authenticated = soup_auth_basic_is_authenticated;
+ auth_class->get_authorization = soup_auth_basic_get_authorization;
+
+ object_class->finalize = soup_auth_basic_finalize;
+}