diff options
author | Dan Williams <dan@ioncontrol.co> | 2025-04-29 20:54:36 -0500 |
---|---|---|
committer | Dan Williams <dan@ioncontrol.co> | 2025-05-08 20:08:06 -0500 |
commit | ef5cee3ab578c2fde8ca6cc636f10acfdb79f123 (patch) | |
tree | 02510944a5782a9c4047234b747fdc02dd8f31c8 /src/mm-base-sms.c | |
parent | 7262b46a82642b7232ef922b827d77626a93eec0 (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.c | 53 |
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); } |