aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-sms.c
diff options
context:
space:
mode:
authorDan Williams <dan@ioncontrol.co>2025-04-29 20:54:36 -0500
committerDan Williams <dan@ioncontrol.co>2025-05-08 20:08:06 -0500
commitef5cee3ab578c2fde8ca6cc636f10acfdb79f123 (patch)
tree02510944a5782a9c4047234b747fdc02dd8f31c8 /src/mm-base-sms.c
parent7262b46a82642b7232ef922b827d77626a93eec0 (diff)
auth-provider: move auth provider logic into each class
Rather than make all of them rely on MMBaseModem for it. This lets us disentangle dependencies for easier unit testing. For interfaces, rather than casting directly to MMBaseModem use intermediate interfaces (MMIfaceAuth and MMIfaceOpLock) that tests can fake out. Signed-off-by: Dan Williams <dan@ioncontrol.co>
Diffstat (limited to 'src/mm-base-sms.c')
-rw-r--r--src/mm-base-sms.c53
1 files changed, 28 insertions, 25 deletions
diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c
index 202b178f..f7d46321 100644
--- a/src/mm-base-sms.c
+++ b/src/mm-base-sms.c
@@ -36,6 +36,7 @@
#include "mm-log-object.h"
#include "mm-modem-helpers.h"
#include "mm-error-helpers.h"
+#include "mm-auth-provider.h"
static void log_object_iface_init (MMLogObjectInterface *iface);
@@ -60,6 +61,10 @@ struct _MMBaseSmsPrivate {
GDBusConnection *connection;
guint dbus_id;
+ /* The authorization provider */
+ MMAuthProvider *authp;
+ GCancellable *authp_cancellable;
+
/* The modem which owns this SMS */
MMBaseModem *modem;
/* The path where the SMS object is exported */
@@ -324,7 +329,6 @@ generate_submit_pdus (MMBaseSms *self,
typedef struct {
MMBaseSms *self;
- MMBaseModem *modem;
GDBusMethodInvocation *invocation;
MMSmsStorage storage;
} HandleStoreContext;
@@ -333,7 +337,6 @@ static void
handle_store_context_free (HandleStoreContext *ctx)
{
g_object_unref (ctx->invocation);
- g_object_unref (ctx->modem);
g_object_unref (ctx->self);
g_slice_free (HandleStoreContext, ctx);
}
@@ -406,13 +409,13 @@ prepare_sms_to_be_stored (MMBaseSms *self,
}
static void
-handle_store_auth_ready (MMBaseModem *modem,
+handle_store_auth_ready (MMAuthProvider *authp,
GAsyncResult *res,
HandleStoreContext *ctx)
{
GError *error = NULL;
- if (!mm_base_modem_authorize_finish (modem, res, &error)) {
+ if (!mm_auth_provider_authorize_finish (authp, res, &error)) {
mm_dbus_method_invocation_take_error (ctx->invocation, error);
handle_store_context_free (ctx);
return;
@@ -442,7 +445,7 @@ handle_store_auth_ready (MMBaseModem *modem,
}
/* Check if the requested storage is allowed for storing */
- if (!mm_iface_modem_messaging_is_storage_supported_for_storing (MM_IFACE_MODEM_MESSAGING (ctx->modem),
+ if (!mm_iface_modem_messaging_is_storage_supported_for_storing (MM_IFACE_MODEM_MESSAGING (ctx->self->priv->modem),
ctx->storage,
&error)) {
mm_obj_warn (ctx->self, "failed storing SMS message: %s", error->message);
@@ -485,9 +488,6 @@ handle_store (MMBaseSms *self,
ctx = g_slice_new0 (HandleStoreContext);
ctx->self = g_object_ref (self);
ctx->invocation = g_object_ref (invocation);
- g_object_get (self,
- MM_BASE_SMS_MODEM, &ctx->modem,
- NULL);
ctx->storage = (MMSmsStorage)storage;
if (ctx->storage == MM_SMS_STORAGE_UNKNOWN) {
@@ -498,11 +498,12 @@ handle_store (MMBaseSms *self,
g_assert (ctx->storage != MM_SMS_STORAGE_UNKNOWN);
}
- mm_base_modem_authorize (ctx->modem,
- invocation,
- MM_AUTHORIZATION_MESSAGING,
- (GAsyncReadyCallback)handle_store_auth_ready,
- ctx);
+ mm_auth_provider_authorize (self->priv->authp,
+ invocation,
+ MM_AUTHORIZATION_MESSAGING,
+ self->priv->authp_cancellable,
+ (GAsyncReadyCallback)handle_store_auth_ready,
+ ctx);
return TRUE;
}
@@ -511,7 +512,6 @@ handle_store (MMBaseSms *self,
typedef struct {
MMBaseSms *self;
- MMBaseModem *modem;
GDBusMethodInvocation *invocation;
} HandleSendContext;
@@ -519,7 +519,6 @@ static void
handle_send_context_free (HandleSendContext *ctx)
{
g_object_unref (ctx->invocation);
- g_object_unref (ctx->modem);
g_object_unref (ctx->self);
g_slice_free (HandleSendContext, ctx);
}
@@ -586,14 +585,14 @@ prepare_sms_to_be_sent (MMBaseSms *self,
}
static void
-handle_send_auth_ready (MMBaseModem *modem,
+handle_send_auth_ready (MMAuthProvider *authp,
GAsyncResult *res,
HandleSendContext *ctx)
{
MMSmsState state;
GError *error = NULL;
- if (!mm_base_modem_authorize_finish (modem, res, &error)) {
+ if (!mm_auth_provider_authorize_finish (authp, res, &error)) {
mm_dbus_method_invocation_take_error (ctx->invocation, error);
handle_send_context_free (ctx);
return;
@@ -650,15 +649,13 @@ handle_send (MMBaseSms *self,
ctx = g_slice_new0 (HandleSendContext);
ctx->self = g_object_ref (self);
ctx->invocation = g_object_ref (invocation);
- g_object_get (self,
- MM_BASE_SMS_MODEM, &ctx->modem,
- NULL);
- mm_base_modem_authorize (ctx->modem,
- invocation,
- MM_AUTHORIZATION_MESSAGING,
- (GAsyncReadyCallback)handle_send_auth_ready,
- ctx);
+ mm_auth_provider_authorize (self->priv->authp,
+ invocation,
+ MM_AUTHORIZATION_MESSAGING,
+ self->priv->authp_cancellable,
+ (GAsyncReadyCallback)handle_send_auth_ready,
+ ctx);
return TRUE;
}
@@ -2071,6 +2068,10 @@ mm_base_sms_init (MMBaseSms *self)
/* Each SMS is given a unique id to build its own DBus path */
self->priv->dbus_id = id++;
+
+ /* Setup authorization provider */
+ self->priv->authp = mm_auth_provider_get ();
+ self->priv->authp_cancellable = g_cancellable_new ();
}
static void
@@ -2097,6 +2098,8 @@ dispose (GObject *object)
}
g_clear_object (&self->priv->modem);
+ g_cancellable_cancel (self->priv->authp_cancellable);
+ g_clear_object (&self->priv->authp_cancellable);
G_OBJECT_CLASS (mm_base_sms_parent_class)->dispose (object);
}