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
|
/* Copyright 2016 Software Freedom Conservancy Inc.
* Copyright 2017 Jens Georg <mail@jensge.org>
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
namespace Publishing.Authenticator.Shotwell.OAuth1 {
internal abstract class Authenticator : GLib.Object, Spit.Publishing.Authenticator {
protected GLib.HashTable<string, Variant> params;
protected Publishing.RESTSupport.OAuth1.Session session;
protected Spit.Publishing.PluginHost host;
protected Authenticator(string api_key, string api_secret, Spit.Publishing.PluginHost host) {
base();
this.host = host;
params = new GLib.HashTable<string, Variant>(str_hash, str_equal);
params.insert("ConsumerKey", api_key);
params.insert("ConsumerSecret", api_secret);
session = new Publishing.RESTSupport.OAuth1.Session();
session.set_api_credentials(api_key, api_secret);
session.authenticated.connect(on_session_authenticated);
}
~Authenticator() {
session.authenticated.disconnect(on_session_authenticated);
}
// Methods from Authenticator interface
public abstract void authenticate();
public abstract bool can_logout();
public GLib.HashTable<string, Variant> get_authentication_parameter() {
return this.params;
}
public abstract void logout ();
public abstract void refresh();
public void invalidate_persistent_session() {
set_persistent_access_phase_token("");
set_persistent_access_phase_token_secret("");
set_persistent_access_phase_username("");
}
protected bool is_persistent_session_valid() {
return (get_persistent_access_phase_username() != null &&
get_persistent_access_phase_token() != null &&
get_persistent_access_phase_token_secret() != null);
}
protected string? get_persistent_access_phase_username() {
return host.get_config_string("access_phase_username", null);
}
protected void set_persistent_access_phase_username(string username) {
host.set_config_string("access_phase_username", username);
}
protected string? get_persistent_access_phase_token() {
return host.get_config_string("access_phase_token", null);
}
protected void set_persistent_access_phase_token(string token) {
host.set_config_string("access_phase_token", token);
}
protected string? get_persistent_access_phase_token_secret() {
return host.get_config_string("access_phase_token_secret", null);
}
protected void set_persistent_access_phase_token_secret(string secret) {
host.set_config_string("access_phase_token_secret", secret);
}
protected void on_session_authenticated() {
params.insert("AuthToken", session.get_access_phase_token());
params.insert("AuthTokenSecret", session.get_access_phase_token_secret());
params.insert("Username", session.get_username());
set_persistent_access_phase_token(session.get_access_phase_token());
set_persistent_access_phase_token_secret(session.get_access_phase_token_secret());
set_persistent_access_phase_username(session.get_username());
this.authenticated();
}
}
}
|