diff --git a/Tusker.xcodeproj/xcuserdata/shadowfacts.xcuserdatad/xcschemes/xcschememanagement.plist b/Tusker.xcodeproj/xcuserdata/shadowfacts.xcuserdatad/xcschemes/xcschememanagement.plist
index ad87b120..0d45b3f4 100644
--- a/Tusker.xcodeproj/xcuserdata/shadowfacts.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Tusker.xcodeproj/xcuserdata/shadowfacts.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,7 +7,7 @@
Tusker.xcscheme
orderHint
- 3
+ 0
SuppressBuildableAutocreation
diff --git a/Tusker/Controllers/MastodonController.swift b/Tusker/Controllers/MastodonController.swift
index 12055823..5e48a338 100644
--- a/Tusker/Controllers/MastodonController.swift
+++ b/Tusker/Controllers/MastodonController.swift
@@ -17,48 +17,57 @@ class MastodonController {
var client: Client!
- var clientID: String!
- var clientSecret: String!
+ lazy var clientID: String? = self.userDefaults.string(forKey: "clientID")
+ lazy var clientSecret: String? = self.userDefaults.string(forKey: "clientSecret")
+
+ lazy var accessToken: String? = self.userDefaults.string(forKey: "accessToken")
private init() {
}
func connect() {
- // TODO: OAuth
let url = ProcessInfo.processInfo.environment["mastodon_url"]!
- let username = ProcessInfo.processInfo.environment["mastodon_username"]!
- let password = ProcessInfo.processInfo.environment["mastodon_password"]!
- client = Client(baseURL: url)
-
- register() {
- let loginReq = Login.silent(clientID: self.clientID, clientSecret: self.clientSecret, scopes: [.read, .write, .follow], username: username, password: password)
+ if let accessToken = accessToken {
+ client = Client(baseURL: url, accessToken: accessToken)
+ } else {
+ client = Client(baseURL: url)
- self.client.run(loginReq) { result in
- guard case let .success(loginSettings, _) = result else { fatalError() }
- print("access token: \(loginSettings.accessToken)")
- }
+ login()
}
}
private func register(completion: @escaping () -> Void) {
- if let clientId = userDefaults.string(forKey: "clientID"),
- let clientSecret = userDefaults.string(forKey: "clientSecret") {
- self.clientID = clientId
- self.clientSecret = clientSecret
+ if clientID != nil,
+ clientSecret != nil {
completion()
- return
+ } else {
+ let registerRequest = Clients.register(clientName: "Tusker", scopes: [.read, .write, .follow])
+
+ client.run(registerRequest) { result in
+ guard case let .success(application, _) = result else { fatalError() }
+ self.clientID = application.clientID
+ self.clientSecret = application.clientSecret
+ self.userDefaults.set(self.clientID, forKey: "clientID")
+ self.userDefaults.set(self.clientSecret, forKey: "clientSecret")
+ completion()
+ }
}
+ }
+
+ private func login() {
+ // TODO: OAuth
+ let username = ProcessInfo.processInfo.environment["mastodon_username"]!
+ let password = ProcessInfo.processInfo.environment["mastodon_password"]!
- let registerRequest = Clients.register(clientName: "Tusker", scopes: [.read, .write, .follow])
-
- client.run(registerRequest) { result in
- guard case let .success(application, _) = result else { fatalError() }
- self.clientID = application.clientID
- self.clientSecret = application.clientSecret
- self.userDefaults.set(self.clientID, forKey: "clientID")
- self.userDefaults.set(self.clientSecret, forKey: "clientSecret")
- completion()
+ register() {
+ let loginReq = Login.silent(clientID: self.clientID!, clientSecret: self.clientSecret!, scopes: [.read, .write, .follow], username: username, password: password)
+
+ self.client.run(loginReq) { result in
+ guard case let .success(loginSettings, _) = result else { fatalError() }
+ self.accessToken = loginSettings.accessToken
+ self.userDefaults.set(self.accessToken, forKey: "accessToken")
+ }
}
}