[gnome-software/wip/rancell/reviews: 3/3] Use UbuntuLoginDialog to get credentials
- From: William Hua <williamhua src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/wip/rancell/reviews: 3/3] Use UbuntuLoginDialog to get credentials
- Date: Tue, 9 Feb 2016 02:56:47 +0000 (UTC)
commit 1ecb671e684d967fb9b30e4871988189f5949164
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]