void (*cancel) (GSignondPlugin *self);
void (*request_initial) (GSignondPlugin *self,
- GSignondSessionData *session_data,
+ GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism);
void (*request) (GSignondPlugin *self,
GSignondSessionData *session_data);
void
gsignond_plugin_request_initial (GSignondPlugin *self,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism);
void
gsignond_plugin_request (GSignondPlugin *self,
GSignondSessionData *session_data);
void
gsignond_plugin_store (GSignondPlugin *self,
- GSignondDictionary *token_data);
+ GSignondDictionary *identity_method_cache);
void
gsignond_plugin_error (GSignondPlugin *self, GError *error);
void
void gsignond_plugin_request_initial (GSignondPlugin *self,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism)
{
g_return_if_fail (GSIGNOND_IS_PLUGIN (self));
GSIGNOND_PLUGIN_GET_INTERFACE (self)->request_initial (self, session_data,
+ identity_method_cache,
mechanism);
}
}
void gsignond_plugin_store (GSignondPlugin *self,
- GSignondDictionary *token_data)
+ GSignondDictionary *identity_method_cache)
{
- g_signal_emit (self, signals[STORE], 0, token_data);
+ g_signal_emit (self, signals[STORE], 0, identity_method_cache);
}
void gsignond_plugin_error (GSignondPlugin *self, GError *error)
</method>
<method name="requestInitial">
<arg name="sessionData" type="a{sv}" direction="in"/>
+ <arg name="identityMethodCache" type="a{sv}" direction="in"/>
<arg name="mechanism" type="s" direction="in"/>
</method>
<method name="request">
}
}
- /* pass token data to session data */
- if (self->priv->token_data) {
- GVariant *token_data = gsignond_dictionary_to_variant (self->priv->token_data);
- /* FIXME: better add API GSignondSessionData to support(set/get) token data.
- That will be the cleaner solution */
- gsignond_dictionary_set (session_data, "Token", token_data);
- }
-
_ProcessData * data = g_slice_new0 (_ProcessData);
data->self = self;
data->ready_cb = ready_cb;
data->state_change_cb = state_change_cb;
data->userdata = userdata;
gsignond_plugin_proxy_process(self->priv->proxy, self, session_data,
+ self->priv->token_data,
mechanism, data);
return TRUE;
if ( (identity_id = gsignond_identity_info_get_id (identity->priv->info)) !=
GSIGNOND_IDENTITY_INFO_NEW_IDENTITY) {
token_data = gsignond_daemon_load_identity_data (identity->priv->owner, identity_id, method);
- }
+ } else {
+ token_data = gsignond_dictionary_new();
+ }
session = gsignond_auth_session_new (identity->priv->info, method, token_data);
typedef struct {
GSignondAuthSession* auth_session;
GSignondSessionData* session_data;
+ GSignondDictionary* identity_method_cache;
gchar* mechanism;
gpointer userdata;
} GSignondProcessData;
gsignond_process_data_new (
GSignondAuthSession* auth_session,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar* mechanism,
gpointer userdata)
{
GSignondProcessData* data = g_slice_new0 (GSignondProcessData);
data->auth_session = g_object_ref (auth_session);
data->session_data = gsignond_dictionary_copy (session_data);
+ if (identity_method_cache)
+ data->identity_method_cache = gsignond_dictionary_copy (identity_method_cache);
data->mechanism = g_strdup (mechanism);
data->userdata = userdata;
return data;
{
g_object_unref (data->auth_session);
gsignond_dictionary_unref (data->session_data);
+ if (data->identity_method_cache)
+ gsignond_dictionary_unref (data->identity_method_cache);
g_free (data->mechanism);
g_slice_free (GSignondProcessData, data);
}
priv->active_process_userdata);
gsignond_plugin_request_initial (priv->plugin,
next_data->session_data,
+ next_data->identity_method_cache,
next_data->mechanism);
gsignond_process_data_free (next_data);
}
GSignondPluginProxy *self,
GSignondAuthSession *session,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism,
gpointer userdata)
{
if (session == priv->active_session && priv->expecting_request == TRUE) {
priv->expecting_request = FALSE;
- // mechanism is discarded if this is not an initial request
+ // mechanism and identity_method_cache are discarded if this is not an initial request
gsignond_plugin_request (priv->plugin, session_data);
return;
}
g_queue_push_tail (priv->session_queue,
gsignond_process_data_new (session,
- session_data,
+ session_data,
+ identity_method_cache,
mechanism, userdata));
gsignond_auth_session_notify_state_changed (
session, GSIGNOND_PLUGIN_STATE_PROCESS_PENDING,
GSignondPluginProxy *self,
GSignondAuthSession* session,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism,
gpointer userdata);
void
gsignond_plugin_remote_request_initial (
GSignondPlugin *plugin,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism)
{
g_return_if_fail (session_data && plugin &&
GSignondPluginRemote *self = GSIGNOND_PLUGIN_REMOTE (plugin);
GVariant *data = gsignond_dictionary_to_variant (session_data);
+ GVariant *cache;
+ if (identity_method_cache)
+ cache = gsignond_dictionary_to_variant (identity_method_cache);
+ else {
+ GSignondDictionary* empty_cache = gsignond_dictionary_new();
+ cache = gsignond_dictionary_to_variant (empty_cache);
+ gsignond_dictionary_unref(empty_cache);
+ }
gsignond_dbus_remote_plugin_call_request_initial (
- self->priv->dbus_plugin_proxy, data, mechanism, NULL,
+ self->priv->dbus_plugin_proxy, data, cache, mechanism, NULL,
_request_initial_async_cb, self);
}
GSignondPluginDaemon *self,
GDBusMethodInvocation *invocation,
const GVariant *session_data,
+ const GVariant *identity_method_cache,
const gchar *mechanism,
gpointer user_data)
{
GSignondSessionData *data = (GSignondSessionData *)
gsignond_dictionary_new_from_variant ((GVariant *)session_data);
- gsignond_plugin_request_initial (self->priv->plugin, data, mechanism);
+ GSignondSessionData *cache =
+ gsignond_dictionary_new_from_variant ((GVariant *)identity_method_cache);
+ gsignond_plugin_request_initial (self->priv->plugin, data, cache, mechanism);
gsignond_dictionary_unref (data);
+ gsignond_dictionary_unref (cache);
return TRUE;
}
gsignond_digest_plugin_request_initial (
GSignondPlugin *plugin,
GSignondSessionData *session_data,
+ GSignondDictionary *identity_method_cache,
const gchar *mechanism)
{
g_return_if_fail (plugin != NULL);
static void gsignond_password_plugin_request_initial (
GSignondPlugin *self, GSignondSessionData *session_data,
+ GSignondDictionary* identity_method_cache,
const gchar *mechanism)
{
const gchar* username = gsignond_session_data_get_username(session_data);
static void gsignond_ssotest_plugin_request_initial (
GSignondPlugin *plugin, GSignondSessionData *session_data,
+ GSignondDictionary* identity_method_cache,
const gchar *mechanism)
{
gint i;
gsignond_session_data_set_username(data, "user1");
gsignond_session_data_set_secret(data, "password1");
- gsignond_plugin_request_initial(plugin, data, "digest");
+ gsignond_plugin_request_initial(plugin, data, NULL, "digest");
fail_if(result != NULL);
fail_if(ui_action != NULL);
fail_if(error == NULL);
gsignond_dictionary_set_string(data, "Method", "GET");
gsignond_dictionary_set_string(data, "DigestUri", "/test/index.html");
- gsignond_plugin_request_initial(plugin, data, "digest");
+ gsignond_plugin_request_initial(plugin, data, NULL, "digest");
fail_if(result == NULL);
fail_if(ui_action != NULL);
fail_if(error != NULL);
//remove secret so that ui action is required
gsignond_dictionary_remove (data, "Secret");
- gsignond_plugin_request_initial(plugin, data, "digest");
+ gsignond_plugin_request_initial(plugin, data, NULL, "digest");
fail_if(result != NULL);
fail_if(ui_action == NULL);
fail_if(error != NULL);
"abg10b1234ee1f0e8b11d0f600bfb0c093");
gsignond_dictionary_set_string (data, "Method", "GET");
gsignond_dictionary_set_string (data, "DigestUri", "/test/index.html");
- gsignond_plugin_request_initial (plugin, data, "digest");
+ gsignond_plugin_request_initial (plugin, data, NULL, "digest");
gsignond_dictionary_unref (data); data = NULL;
gsignond_plugin_user_action_finished (plugin, ui_data);
// username empty, password not empty
gsignond_session_data_set_secret(data, "megapassword");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
fail_if(result == NULL);
fail_if(ui_action != NULL);
fail_if(error != NULL);
// username and password not empty
gsignond_session_data_set_username(data, "megauser");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
fail_if(result == NULL);
fail_if(ui_action != NULL);
fail_if(error != NULL);
//username and password empty
gsignond_dictionary_unref(data);
data = gsignond_dictionary_new();
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
fail_if(result != NULL);
fail_if(ui_action == NULL);
fail_if(error != NULL);
//username not empty, password empty
gsignond_session_data_set_username(data, "megauser");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
fail_if(result != NULL);
fail_if(ui_action == NULL);
fail_if(error != NULL);
gsignond_session_data_set_username(data, "megauser");
gsignond_session_data_set_secret(data, "megapassword");
- gsignond_plugin_proxy_process(proxy, iface, data, "password",
+ gsignond_plugin_proxy_process(proxy, iface, data, NULL, "password",
proxy);
- gsignond_plugin_proxy_process(proxy, iface, data, "password",
+ gsignond_plugin_proxy_process(proxy, iface, data, NULL, "password",
proxy);
gsignond_dictionary_unref(data);
fail_if(data == NULL);
for (i = 0; i < 9; i++) {
- gsignond_plugin_proxy_process(proxy, iface, data, "mech1",
+ gsignond_plugin_proxy_process(proxy, iface, data, NULL, "mech1",
proxy);
}
gsignond_dictionary_unref(data);
testing_proxy_process = TRUE;
- gsignond_plugin_proxy_process(proxy, test_auth_session, data, "password",
+ gsignond_plugin_proxy_process(proxy, test_auth_session, data, NULL, "password",
proxy);
_run_mainloop ();
testing_proxy_process_cancel = TRUE;
- gsignond_plugin_proxy_process(proxy, test_auth_session, data, "mech1",
+ gsignond_plugin_proxy_process(proxy, test_auth_session, data, NULL, "mech1",
proxy);
_run_mainloop ();
testing_proxy_process_queue = TRUE;
- gsignond_plugin_proxy_process(proxy, test_auth_session, data, "password",
+ gsignond_plugin_proxy_process(proxy, test_auth_session, data, NULL, "password",
proxy);
_run_mainloop ();
testing_proxy_process_queue_cancel = TRUE;
- gsignond_plugin_proxy_process(proxy, test_auth_session, data, "mech1",
+ gsignond_plugin_proxy_process(proxy, test_auth_session, data, NULL, "mech1",
proxy);
_run_mainloop ();
// username empty, password not empty
gsignond_session_data_set_secret(data, "megapassword");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
_run_mainloop ();
fail_if(result == NULL);
// username and password not empty
gsignond_session_data_set_username(data, "megauser");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
_run_mainloop ();
fail_if(result == NULL);
//username and password empty
gsignond_dictionary_unref(data);
data = gsignond_dictionary_new();
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
_run_mainloop ();
fail_if(result != NULL);
//username not empty, password empty
gsignond_session_data_set_username(data, "megauser");
- gsignond_plugin_request_initial(plugin, data, "password");
+ gsignond_plugin_request_initial(plugin, data, NULL, "password");
_run_mainloop ();
fail_if(result != NULL);