// // MastodonController.swift // Tusker // // Created by Shadowfacts on 8/15/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation import MastodonKit class MastodonController { static let shared = MastodonController() var userDefaults = UserDefaults() var client: Client! var clientID: String! var clientSecret: String! 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) self.client.run(loginReq) { result in guard case let .success(loginSettings, _) = result else { fatalError() } print("access token: \(loginSettings.accessToken)") } } } 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 completion() return } 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() } } }