summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-11-14 15:39:45 +0000
committerVivien Kraus <vivien@planete-kraus.eu>2021-11-14 16:49:26 +0000
commit17bc5999ce9ee774afd82d8ede33f5a9be61a4af (patch)
treec6c92d342225656f64602db007b49066890bb659 /src/client
parent677aae3ffd5162ea9b630f051d4be17091ed1a16 (diff)
Gui: bind the settings.
Diffstat (limited to 'src/client')
-rw-r--r--src/client/Disfluid-0.h18
-rw-r--r--src/client/libwebidoidc-client.c45
2 files changed, 51 insertions, 12 deletions
diff --git a/src/client/Disfluid-0.h b/src/client/Disfluid-0.h
index b4833c4..5c7adb7 100644
--- a/src/client/Disfluid-0.h
+++ b/src/client/Disfluid-0.h
@@ -83,6 +83,15 @@ void disfluid_api_make_client (const DisfluidApi * api,
void disfluid_client_free (DisfluidClient * client);
/**
+ * disfluid_client_copy:
+ * @client: the client to copy.
+ * @api: the API.
+ * @copy: (out) (transfer full): the copy.
+ */
+void disfluid_client_copy (const DisfluidClient * client,
+ const DisfluidApi * api, DisfluidClient ** copy);
+
+/**
* disfluid_client_get_id:
* @client: the client whose ID to lookup.
* @api: the context API.
@@ -164,6 +173,15 @@ void disfluid_api_make_account_full (const DisfluidApi * api,
void disfluid_account_free (DisfluidAccount * account);
/**
+ * disfluid_account_copy:
+ * @account: the account to copy.
+ * @api: the API.
+ * @copy: (out) (transfer full): the copy.
+ */
+void disfluid_account_copy (const DisfluidAccount * account,
+ const DisfluidApi * api, DisfluidAccount ** copy);
+
+/**
* disfluid_account_get_subject:
* @account: the account whose subject to lookup.
* @api: the context API.
diff --git a/src/client/libwebidoidc-client.c b/src/client/libwebidoidc-client.c
index 4937135..f31c100 100644
--- a/src/client/libwebidoidc-client.c
+++ b/src/client/libwebidoidc-client.c
@@ -107,9 +107,8 @@ disfluid_api_make_client (const struct DisfluidApi *api,
{
scm_jwk = scm_from_utf8_string (jwk);
}
- SCM object =
- scm_call_3 (api->scm_make_client, scm_client_id, scm_redirect_uri,
- scm_jwk);
+ SCM object = scm_call_3 (api->scm_make_client, scm_client_id, scm_jwk,
+ scm_redirect_uri);
scm_dynwind_begin (0);
*client = scm_malloc (sizeof (struct DisfluidClient));
scm_dynwind_unwind_handler (free, *client, 0);
@@ -127,6 +126,17 @@ disfluid_client_free (struct DisfluidClient *client)
free (client);
}
+void
+disfluid_client_copy (const DisfluidClient * client, const DisfluidApi * api,
+ DisfluidClient ** copy)
+{
+ scm_dynwind_begin (0);
+ *copy = scm_malloc (sizeof (struct DisfluidClient));
+ scm_dynwind_unwind_handler (free, *copy, 0);
+ (*copy)->object = scm_gc_protect_object (client->object);
+ scm_dynwind_end ();
+}
+
static size_t
copy_scm_string (SCM string, size_t start, size_t max, char *dest)
{
@@ -188,15 +198,15 @@ struct DisfluidAccount
};
void
-disfluid_api_make_account (const struct DisfluidApi *api,
- struct DisfluidAccount **account,
- const char *subject,
- const char *issuer,
- const char *key_pair,
- const char *id_token_header,
- const char *id_token,
- const char *access_token,
- const char *refresh_token)
+disfluid_api_make_account_full (const struct DisfluidApi *api,
+ struct DisfluidAccount **account,
+ const char *subject,
+ const char *issuer,
+ const char *key_pair,
+ const char *id_token_header,
+ const char *id_token,
+ const char *access_token,
+ const char *refresh_token)
{
SCM scm_subject = scm_from_utf8_string (subject);
SCM scm_issuer = scm_from_utf8_string (issuer);
@@ -224,6 +234,17 @@ disfluid_api_make_account (const struct DisfluidApi *api,
}
void
+disfluid_account_copy (const DisfluidAccount * account,
+ const DisfluidApi * api, DisfluidAccount ** copy)
+{
+ scm_dynwind_begin (0);
+ *copy = scm_malloc (sizeof (struct DisfluidAccount));
+ scm_dynwind_unwind_handler (free, *copy, 0);
+ (*copy)->object = scm_gc_protect_object (account->object);
+ scm_dynwind_end ();
+}
+
+void
disfluid_account_free (struct DisfluidAccount *account)
{
if (account)