Description: Fix GoogleAuthenticator Author: Jörg Frings-Fürst Origin: upstream, https://gitlab.gnome.org/GNOME/shotwell/commit/db18c371984b80ead9daf4e0ae2058469d2f5524.diff Bug: https://gitlab.gnome.org/GNOME/shotwell/issues/158 Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=934723 Forwarded: not-needed Last-Update: 2019-08-14 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ Index: trunk/plugins/authenticator/shotwell/FlickrPublishingAuthenticator.vala =================================================================== --- trunk.orig/plugins/authenticator/shotwell/FlickrPublishingAuthenticator.vala +++ trunk/plugins/authenticator/shotwell/FlickrPublishingAuthenticator.vala @@ -54,6 +54,12 @@ namespace Publishing.Authenticator.Shotw } public override void on_page_load() { + if (this.load_error != null) { + this.error(); + + return; + } + var uri = new Soup.URI(get_view().get_uri()); if (uri.scheme == "shotwell-auth" && this.auth_code == null) { var form_data = Soup.Form.decode (uri.query); @@ -77,6 +83,8 @@ namespace Publishing.Authenticator.Shotw } internal class Flickr : Publishing.Authenticator.Shotwell.OAuth1.Authenticator { + private WebAuthenticationPane pane; + public Flickr(Spit.Publishing.PluginHost host) { base(API_KEY, API_SECRET, host); } @@ -185,13 +193,17 @@ namespace Publishing.Authenticator.Shotw } private void do_web_authentication(string token) { - var pane = new WebAuthenticationPane(token); + pane = new WebAuthenticationPane(token); host.install_dialog_pane(pane); pane.authorized.connect(this.do_verify_pin); pane.error.connect(this.on_web_login_error); } private void on_web_login_error() { + if (pane.load_error != null) { + host.post_error(pane.load_error); + return; + } host.post_error(new Spit.Publishing.PublishingError.PROTOCOL_ERROR(_("Flickr authorization failed"))); } Index: trunk/plugins/authenticator/shotwell/GoogleAuthenticator.vala =================================================================== --- trunk.orig/plugins/authenticator/shotwell/GoogleAuthenticator.vala +++ trunk/plugins/authenticator/shotwell/GoogleAuthenticator.vala @@ -21,6 +21,12 @@ namespace Publishing.Authenticator.Shotw } public override void on_page_load() { + if (this.load_error != null) { + this.error (); + + return; + } + var uri = new Soup.URI(get_view().get_uri()); if (uri.scheme == REVERSE_CLIENT_ID && this.auth_code == null) { var form_data = Soup.Form.decode (uri.query); @@ -173,6 +179,7 @@ namespace Publishing.Authenticator.Shotw web_auth_pane = new WebAuthenticationPane(user_authorization_url); web_auth_pane.authorized.connect(on_web_auth_pane_authorized); + web_auth_pane.error.connect(on_web_auth_pane_error); host.install_dialog_pane(web_auth_pane); } @@ -185,6 +192,10 @@ namespace Publishing.Authenticator.Shotw do_get_access_tokens(auth_code); } + private void on_web_auth_pane_error() { + host.post_error(web_auth_pane.load_error); + } + private void do_get_access_tokens(string auth_code) { debug("ACTION: exchanging authorization code for access & refresh tokens"); Index: trunk/plugins/common/WebAuthenticationPane.vala =================================================================== --- trunk.orig/plugins/common/WebAuthenticationPane.vala +++ trunk/plugins/common/WebAuthenticationPane.vala @@ -12,6 +12,7 @@ namespace Shotwell.Plugins.Common { } public string login_uri { owned get; construct; } + public Error load_error { get; private set; default = null; } private WebKit.WebView webview; @@ -22,6 +23,7 @@ namespace Shotwell.Plugins.Common { this.webview.get_settings ().enable_plugins = false; this.webview.load_changed.connect (this.on_page_load_changed); + this.webview.load_failed.connect (this.on_page_load_failed); this.webview.context_menu.connect ( () => { return false; }); } @@ -29,11 +31,24 @@ namespace Shotwell.Plugins.Common { protected void set_cursor (Gdk.CursorType type) { var window = webview.get_window (); + if (window == null) + return; + var display = window.get_display (); + if (display == null) + return; + var cursor = new Gdk.Cursor.for_display (display, type); window.set_cursor (cursor); } + private bool on_page_load_failed (WebKit.LoadEvent load_event, string uri, Error error) { + critical ("Failed to load uri %s: %s", uri, error.message); + this.load_error = error; + + return false; + } + private void on_page_load_changed (WebKit.LoadEvent load_event) { switch (load_event) { case WebKit.LoadEvent.STARTED: