[gnome-software/wip/rancell/reviews] Use UbuntuLoginDialog to get credentials



commit 4be425e86841414c38fc5cd09b3c920318200da2
Author: William Hua <william hua canonical com>
Date:   Mon Feb 8 13:31:01 2016 -0500

    Use UbuntuLoginDialog to get credentials

 src/plugins/gs-plugin-ubuntu-reviews.c |  104 ++++++++++++++++++++++----------
 1 files changed, 72 insertions(+), 32 deletions(-)
---
diff --git a/src/plugins/gs-plugin-ubuntu-reviews.c b/src/plugins/gs-plugin-ubuntu-reviews.c
index d4978ed..51590d2 100644
--- a/src/plugins/gs-plugin-ubuntu-reviews.c
+++ b/src/plugins/gs-plugin-ubuntu-reviews.c
@@ -30,11 +30,17 @@
 #include <gs-plugin.h>
 #include <gs-utils.h>
 
+#include "ubuntu-login-dialog.h"
+
 struct GsPluginPrivate {
        gchar           *db_path;
        sqlite3         *db;
        gsize            db_loaded;
        SoupSession     *session;
+       gchar           *consumer_key;
+       gchar           *consumer_secret;
+       gchar           *token_key;
+       gchar           *token_secret;
 };
 
 typedef struct {
@@ -86,10 +92,14 @@ gs_plugin_get_deps (GsPlugin *plugin)
 void
 gs_plugin_destroy (GsPlugin *plugin)
 {
-       if (plugin->priv->db != NULL)
-               sqlite3_close (plugin->priv->db);
-       if (plugin->priv->session != NULL)
-               g_object_unref (plugin->priv->session);
+       GsPluginPrivate *priv = plugin->priv;
+
+       g_clear_pointer (&priv->token_secret, g_free);
+       g_clear_pointer (&priv->token_key, g_free);
+       g_clear_pointer (&priv->consumer_secret, g_free);
+       g_clear_pointer (&priv->consumer_key, g_free);
+       g_clear_pointer (&priv->db, sqlite3_close);
+       g_clear_object (&priv->session);
 }
 
 static gboolean
@@ -729,15 +739,12 @@ set_request (SoupMessage *message, JsonBuilder *builder)
 }
 
 static gboolean
-send_review (GsPlugin    *plugin,
-             GsReview *review,
-             const gchar *package_name,
-             const gchar *consumer_key,
-             const gchar *consumer_secret,
-             const gchar *token_key,
-             const gchar *token_secret,
-             GError **error)
+set_package_review (GsPlugin *plugin,
+                    GsReview *review,
+                    const gchar *package_name,
+                    GError **error)
 {
+       GsPluginPrivate *priv = plugin->priv;
        gint rating;
        gint n_stars;
        g_autofree gchar *uri;
@@ -775,10 +782,15 @@ send_review (GsPlugin    *plugin,
        json_builder_end_object (builder);
        set_request (msg, builder);
        g_object_unref (builder);
-       sign_message (msg, OA_PLAINTEXT, consumer_key, consumer_secret, token_key, token_secret);
+       sign_message (msg,
+                     OA_PLAINTEXT,
+                     priv->consumer_key,
+                     priv->consumer_secret,
+                     priv->token_key,
+                     priv->token_secret);
 
        /* Send to the server */
-       status_code = soup_session_send_message (plugin->priv->session, msg);
+       status_code = soup_session_send_message (priv->session, msg);
        if (status_code != SOUP_STATUS_OK) {
                g_set_error (error,
                             GS_PLUGIN_ERROR,
@@ -792,29 +804,54 @@ send_review (GsPlugin    *plugin,
 }
 
 static gboolean
-set_package_review (GsPlugin *plugin,
-                    GsReview *review,
-                    const gchar *package_name,
-                    GError **error)
+sign_into_ubuntu (GsPlugin  *plugin,
+                  GError   **error)
 {
-       gboolean result;
+       GsPluginPrivate *priv = plugin->priv;
+       GtkWidget *dialog;
+       gboolean remember;
+       gboolean success;
+
+       if (priv->consumer_key != NULL &&
+           priv->consumer_secret != NULL &&
+           priv->token_key != NULL &&
+           priv->token_secret != NULL)
+               return TRUE;
 
-       /* Write review into database so we can easily access it */
+       g_clear_pointer (&priv->token_secret, g_free);
+       g_clear_pointer (&priv->token_key, g_free);
+       g_clear_pointer (&priv->consumer_secret, g_free);
+       g_clear_pointer (&priv->consumer_key, g_free);
 
-       /* Load OAuth token */
+       dialog = ubuntu_login_dialog_new ();
 
-       /*
-       result = send_review (plugin,
-                             review,
-                             package_name,
-                             consumer_key,
-                             consumer_secret,
-                             token_key,
-                             token_secret,
-                             error);
-       */
+       g_object_set (dialog, "session", plugin->priv->session, NULL);
 
-       return result;
+       switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
+       case GTK_RESPONSE_DELETE_EVENT:
+       case GTK_RESPONSE_CANCEL:
+               success = FALSE;
+               break;
+
+       case GTK_RESPONSE_OK:
+               g_object_get (dialog,
+                             "remember", &remember,
+                             "consumer-key", &priv->consumer_key,
+                             "consumer-secret", &priv->consumer_secret,
+                             "token-key", &priv->token_key,
+                             "token-secret", &priv->token_secret,
+                             NULL);
+
+               if (remember) {
+                       /* FIXME: store credentials somewhere... */
+               }
+
+               success = TRUE;
+               break;
+       }
+
+       gtk_widget_destroy (dialog);
+       return success;
 }
 
 gboolean
@@ -851,6 +888,9 @@ gs_plugin_app_set_review (GsPlugin *plugin,
        if (!setup_networking (plugin, error))
                return FALSE;
 
+       if (!sign_into_ubuntu (plugin, error))
+               return FALSE;
+
        /* set rating for each package */
        for (i = 0; i < sources->len; i++) {
                package_name = g_ptr_array_index (sources, i);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]