Rework Matrix3PidCredential in Vala
This commit is contained in:
parent
132ea9c426
commit
ecdd3a7dcd
@ -118,12 +118,6 @@ namespace Matrix {
|
|||||||
public Json.Node? get_json_node();
|
public Json.Node? get_json_node();
|
||||||
}
|
}
|
||||||
|
|
||||||
[CCode (cheader_filename = "matrix-types.h")]
|
|
||||||
public class @3PidCredential {
|
|
||||||
public Json.Node? get_json_node()
|
|
||||||
throws Matrix.Error;
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cheader_filename = "utils.h", cname = "_json_node_deep_copy")]
|
[CCode (cheader_filename = "utils.h", cname = "_json_node_deep_copy")]
|
||||||
public Json.Node?
|
public Json.Node?
|
||||||
_json_node_deep_copy(Json.Node? node);
|
_json_node_deep_copy(Json.Node? node);
|
||||||
|
@ -358,4 +358,58 @@ namespace Matrix {
|
|||||||
return builder.get_root();
|
return builder.get_root();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to hold 3rd party credential related data.
|
||||||
|
*/
|
||||||
|
public class @3PidCredential : JsonCompact {
|
||||||
|
/**
|
||||||
|
* The Identity Server used for this credential.
|
||||||
|
*/
|
||||||
|
public string? id_server { get; set; default = null; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The session identifier got from the Identity Server.
|
||||||
|
*/
|
||||||
|
public string? session_id { get; set; default = null; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The client secret that was used in the session with the
|
||||||
|
* Identity Server.
|
||||||
|
*/
|
||||||
|
public string? client_secret { get; set; default = null; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get 3rd party credential related data as a JSON node.
|
||||||
|
*/
|
||||||
|
public override Json.Node?
|
||||||
|
get_json_node()
|
||||||
|
throws Matrix.Error
|
||||||
|
{
|
||||||
|
if ((id_server == null)
|
||||||
|
|| (session_id == null)
|
||||||
|
|| (client_secret == null))
|
||||||
|
{
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"All fields of a 3PID credential must be filled!");
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder = new Json.Builder();
|
||||||
|
|
||||||
|
builder.begin_object();
|
||||||
|
|
||||||
|
builder.set_member_name("id_server");
|
||||||
|
builder.add_string_value(id_server);
|
||||||
|
|
||||||
|
builder.set_member_name("session_id");
|
||||||
|
builder.add_string_value(session_id);
|
||||||
|
|
||||||
|
builder.set_member_name("client_secret");
|
||||||
|
builder.add_string_value(client_secret);
|
||||||
|
|
||||||
|
builder.end_object();
|
||||||
|
|
||||||
|
return builder.get_root();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,261 +247,6 @@ G_DEFINE_QUARK(matrix-error-quark, matrix_error);
|
|||||||
* Receipt types of acknowledgment.
|
* Receipt types of acknowledgment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* Matrix3PidCredential:
|
|
||||||
*
|
|
||||||
* An opaque structure to store credentials to use with Identity
|
|
||||||
* Server communication.
|
|
||||||
*/
|
|
||||||
struct _Matrix3PidCredential {
|
|
||||||
gchar *id_server;
|
|
||||||
gchar *session_id;
|
|
||||||
gchar *client_secret;
|
|
||||||
guint refcount;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE(Matrix3PidCredential, matrix_3pid_credential,
|
|
||||||
(GBoxedCopyFunc)matrix_3pid_credential_ref,
|
|
||||||
(GBoxedFreeFunc)matrix_3pid_credential_unref);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_new:
|
|
||||||
*
|
|
||||||
* Create a new #Matrix3PidCredential object with reference count
|
|
||||||
* of 1.
|
|
||||||
*
|
|
||||||
* Returns: (transfer full): a new #Matrix3PidCredential
|
|
||||||
*/
|
|
||||||
Matrix3PidCredential *
|
|
||||||
matrix_3pid_credential_new(void)
|
|
||||||
{
|
|
||||||
Matrix3PidCredential *credential;
|
|
||||||
|
|
||||||
credential = g_new0(Matrix3PidCredential, 1);
|
|
||||||
credential->refcount = 1;
|
|
||||||
|
|
||||||
return credential;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
matrix_3pid_credential_free(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
g_free(credential->id_server);
|
|
||||||
g_free(credential->session_id);
|
|
||||||
g_free(credential->client_secret);
|
|
||||||
g_free(credential);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_ref:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
*
|
|
||||||
* Increase reference count of @credential by one.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): the same #Matrix3PidCredential
|
|
||||||
*/
|
|
||||||
Matrix3PidCredential *
|
|
||||||
matrix_3pid_credential_ref(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
credential->refcount++;
|
|
||||||
|
|
||||||
return credential;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_unref:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
*
|
|
||||||
* Decrease reference count of @credential by one. If reference count
|
|
||||||
* reaches zero, @credential gets freed.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
matrix_3pid_credential_unref(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
if (--credential->refcount == 0) {
|
|
||||||
matrix_3pid_credential_free(credential);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_set_id_server:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
* @id_server: the Identity Server to use
|
|
||||||
*
|
|
||||||
* Set the Identity Server to use for this credential.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
matrix_3pid_credential_set_id_server(Matrix3PidCredential *credential,
|
|
||||||
const gchar *id_server)
|
|
||||||
{
|
|
||||||
g_free(credential->id_server);
|
|
||||||
credential->id_server = g_strdup(id_server);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_get_id_server:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
*
|
|
||||||
* Get the Identity Server used for this credential.
|
|
||||||
*
|
|
||||||
* Returns: the Identity Server's name. The returned value is owned by
|
|
||||||
* @credential and should not be freed nor modified
|
|
||||||
*/
|
|
||||||
const gchar *
|
|
||||||
matrix_3pid_credential_get_id_server(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
return credential->id_server;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_set_session_id:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
* @session_id: the session identifier given by the Identity Server
|
|
||||||
*
|
|
||||||
* Set the session identifier got from the Identity Server.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
matrix_3pid_credential_set_session_id(Matrix3PidCredential *credential,
|
|
||||||
const gchar *session_id)
|
|
||||||
{
|
|
||||||
g_free(credential->session_id);
|
|
||||||
credential->session_id = g_strdup(session_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_get_session_id:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
*
|
|
||||||
* Get the session identifier for this credential.
|
|
||||||
*
|
|
||||||
* Returns: the session identifier. The returned value is owned by
|
|
||||||
* @credential and should not be freed nor modified.
|
|
||||||
*/
|
|
||||||
const gchar *
|
|
||||||
matrix_3pid_credential_get_session_id(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
return credential->session_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_set_client_secret:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
* @client_secret: the client secret used in the session with the
|
|
||||||
* Identity Server
|
|
||||||
*
|
|
||||||
* Set the client secret that was used in the session with the
|
|
||||||
* Identity Server.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
matrix_3pid_credential_set_client_secret(Matrix3PidCredential *credential,
|
|
||||||
const gchar *client_secret)
|
|
||||||
{
|
|
||||||
g_free(credential->client_secret);
|
|
||||||
credential->client_secret = g_strdup(client_secret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_get_client_secret:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
*
|
|
||||||
* Get the client secret that was used in the session with the
|
|
||||||
* Identity Server.
|
|
||||||
*
|
|
||||||
* Returns: the client secret. The returned value is owned by
|
|
||||||
* @credential and should not be freed nor modified.
|
|
||||||
*/
|
|
||||||
const gchar *
|
|
||||||
matrix_3pid_credential_get_client_secret(Matrix3PidCredential *credential)
|
|
||||||
{
|
|
||||||
return credential->client_secret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_get_json_node:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
* @error: return location for a #GError, or %NULL
|
|
||||||
*
|
|
||||||
* Get the JSON representation of @credential as a #JsonNode. If any
|
|
||||||
* fields of @credential are empty, it will yield an error, as all
|
|
||||||
* fields are mandatory. In this case, the return value is %NULL.
|
|
||||||
*
|
|
||||||
* Returns: (transfer full) (allow-none): the #JsonNode representation
|
|
||||||
* of @credential
|
|
||||||
*/
|
|
||||||
JsonNode *
|
|
||||||
matrix_3pid_credential_get_json_node(Matrix3PidCredential *credential,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
JsonBuilder *builder;
|
|
||||||
JsonNode *node;
|
|
||||||
|
|
||||||
if (!credential->id_server
|
|
||||||
|| !credential->session_id
|
|
||||||
|| !credential->client_secret) {
|
|
||||||
g_set_error(error,
|
|
||||||
MATRIX_ERROR, MATRIX_ERROR_INCOMPLETE,
|
|
||||||
"All fields of the 3PID credential must be filled!");
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
builder = json_builder_new();
|
|
||||||
json_builder_begin_object(builder);
|
|
||||||
|
|
||||||
json_builder_set_member_name(builder, "id_server");
|
|
||||||
json_builder_add_string_value(builder, credential->id_server);
|
|
||||||
|
|
||||||
json_builder_set_member_name(builder, "session_id");
|
|
||||||
json_builder_add_string_value(builder, credential->session_id);
|
|
||||||
|
|
||||||
json_builder_set_member_name(builder, "client_secret");
|
|
||||||
json_builder_add_string_value(builder, credential->client_secret);
|
|
||||||
|
|
||||||
json_builder_end_object(builder);
|
|
||||||
node = json_builder_get_root(builder);
|
|
||||||
g_object_unref(builder);
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matrix_3pid_credential_get_json_data:
|
|
||||||
* @credential: a #Matrix3PidCredential
|
|
||||||
* @datalen: (out): storage location for the length of the JSON data,
|
|
||||||
* or %NULL
|
|
||||||
* @error: a #GError
|
|
||||||
*
|
|
||||||
* Get the JSON representation of @credential as a string. If any
|
|
||||||
* fields of @credential is %NULL, this function returns %NULL and
|
|
||||||
* fills @error wich %MATRIX_ERROR_INCOMPLETE.
|
|
||||||
*
|
|
||||||
* Returns: (transfer full) (allow-none): the JSON representation of
|
|
||||||
* @credential, or %NULL
|
|
||||||
*/
|
|
||||||
gchar *
|
|
||||||
matrix_3pid_credential_get_json_data(Matrix3PidCredential *credential,
|
|
||||||
gsize *datalen,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
JsonGenerator *generator;
|
|
||||||
JsonNode *node;
|
|
||||||
gchar *data;
|
|
||||||
|
|
||||||
if ((node = matrix_3pid_credential_get_json_node(
|
|
||||||
credential, error)) == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
generator = json_generator_new();
|
|
||||||
json_generator_set_root(generator, node);
|
|
||||||
json_node_free(node);
|
|
||||||
|
|
||||||
data = json_generator_to_data(generator, datalen);
|
|
||||||
g_object_unref(generator);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MatrixPusher:
|
* MatrixPusher:
|
||||||
*
|
*
|
||||||
|
@ -129,29 +129,6 @@ typedef enum {
|
|||||||
MATRIX_ACCOUNT_KIND_GUEST
|
MATRIX_ACCOUNT_KIND_GUEST
|
||||||
} MatrixAccountKind;
|
} MatrixAccountKind;
|
||||||
|
|
||||||
typedef struct _Matrix3PidCredential Matrix3PidCredential;
|
|
||||||
|
|
||||||
GType matrix_3pid_credential_get_type(void);
|
|
||||||
#define MATRIX_TYPE_3PID_CREDENTIAL (matrix_3pid_credential_get_type())
|
|
||||||
|
|
||||||
Matrix3PidCredential *matrix_3pid_credential_new(void);
|
|
||||||
Matrix3PidCredential *matrix_3pid_credential_ref(Matrix3PidCredential *credential);
|
|
||||||
void matrix_3pid_credential_unref(Matrix3PidCredential *credential);
|
|
||||||
void matrix_3pid_credential_set_id_server(Matrix3PidCredential *credential,
|
|
||||||
const gchar *id_server);
|
|
||||||
const gchar *matrix_3pid_credential_get_id_server(Matrix3PidCredential *credential);
|
|
||||||
void matrix_3pid_credential_set_session_id(Matrix3PidCredential *credential,
|
|
||||||
const gchar *session_id);
|
|
||||||
const gchar *matrix_3pid_credential_get_session_id(Matrix3PidCredential *credential);
|
|
||||||
void matrix_3pid_credential_set_client_secret(Matrix3PidCredential *credential,
|
|
||||||
const gchar *client_secret);
|
|
||||||
const gchar *matrix_3pid_credential_get_client_secret(Matrix3PidCredential *credential);
|
|
||||||
JsonNode *matrix_3pid_credential_get_json_node(Matrix3PidCredential *credential,
|
|
||||||
GError **error);
|
|
||||||
gchar *matrix_3pid_credential_get_json_data(Matrix3PidCredential *credential,
|
|
||||||
gsize *datalen,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
typedef struct _MatrixPusher MatrixPusher;
|
typedef struct _MatrixPusher MatrixPusher;
|
||||||
|
|
||||||
GType matrix_pusher_get_type(void);
|
GType matrix_pusher_get_type(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user