/**
* signon_auth_session_new:
- * @parent: #SignonIdentity parent object.
+ * @id: the id of the #SignonIdentity to be used. Can be 0, if this session is
+ * not bound to any stored identity.
* @method_name: the name of the authentication method to be used.
* @err: a pointer to a location which will contain the error, in case this
* function fails.
* Returns: a new #SignonAuthSession.
*/
SignonAuthSession *
-signon_auth_session_new (GObject *parent,
+signon_auth_session_new (gint id,
const gchar *method_name,
GError **err)
{
- if (!SIGNON_IS_IDENTITY(parent))
+ DEBUG ("%s %d", G_STRFUNC, __LINE__);
+
+ SignonIdentity *identity = (id == 0) ?
+ signon_identity_new () : signon_identity_new_from_db (id);
+
+ SignonAuthSession *self = SIGNON_AUTH_SESSION(g_object_new (
+ SIGNON_TYPE_AUTH_SESSION,
+ "identity", identity,
+ NULL));
+ g_return_val_if_fail (self != NULL, NULL);
+ /* This will not destroy the identity, as long as it's used by the
+ * SignonAuthSession. */
+ g_object_unref (identity);
+
+ if (!auth_session_priv_init(self, method_name, err))
{
- g_set_error (err,
- signon_error_quark(),
- SIGNON_ERROR_UNKNOWN,
- "Parent object is wrong type");
+ if (*err)
+ g_warning ("%s returned error: %s", G_STRFUNC, (*err)->message);
+
+ g_object_unref (self);
return NULL;
}
- SignonIdentity *identity = SIGNON_IDENTITY(parent);
+
+ return self;
+}
+
+/**
+ * signon_auth_session_new_for_identity:
+ * @identity: #SignonIdentity parent object.
+ * @method_name: the name of the authentication method to be used.
+ * @err: a pointer to a location which will contain the error, in case this
+ * function fails.
+ *
+ * Creates a new #SignonAuthSession, which can be used to authenticate using
+ * the specified method.
+ *
+ * Returns: a new #SignonAuthSession.
+ */
+SignonAuthSession *
+signon_auth_session_new_for_identity (SignonIdentity *identity,
+ const gchar *method_name,
+ GError **err)
+{
+ g_return_val_if_fail (SIGNON_IS_IDENTITY (identity), NULL);
DEBUG ("%s %d", G_STRFUNC, __LINE__);
#define SIGNON_IS_AUTH_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SIGNON_TYPE_AUTH_SESSION))
#define SIGNON_AUTH_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SIGNON_TYPE_AUTH_SESSION, SignonAuthSessionClass))
-typedef struct _SignonAuthSession SignonAuthSession;
typedef struct _SignonAuthSessionPrivate SignonAuthSessionPrivate;
typedef struct _SignonAuthSessionClass SignonAuthSessionClass;
GType signon_auth_session_get_type (void) G_GNUC_CONST;
-SignonAuthSession *signon_auth_session_new(GObject *parent,
+SignonAuthSession *signon_auth_session_new(gint id,
const gchar *method_name,
GError **err);
+SignonAuthSession *
+signon_auth_session_new_for_identity(SignonIdentity *identity,
+ const gchar *method_name,
+ GError **err);
+
const gchar *signon_auth_session_get_method (SignonAuthSession *self);
typedef void (*SignonAuthSessionQueryAvailableMechanismsCb) (
idty = signon_identity_new_from_db (id);
fail_unless (idty != NULL, "Cannot create Identity object");
- auth_session = signon_auth_session_new (G_OBJECT (idty),
- "ssotest",
- &error);
+ auth_session = signon_auth_session_new_for_identity (idty,
+ "ssotest",
+ &error);
fail_unless (auth_session != NULL, "Cannot create AuthSession object");
fail_unless (error == NULL);
idty = signon_identity_new_from_db (id);
fail_unless (idty != NULL);
- auth_session = signon_auth_session_new (G_OBJECT (idty), "ssotest",
- &error);
+ auth_session = signon_auth_session_new_for_identity (idty, "ssotest",
+ &error);
fail_unless (auth_session != NULL);
session_data = g_hash_table_new (g_str_hash, g_str_equal);