1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
Description: Fix GoogleAuthenticator
Author: Jörg Frings-Fürst <debian@jff.email>
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:
|