// // 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! // 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 createClient(completion: @escaping () -> Void) { guard let url = LocalData.shared.instanceURL else { fatalError("Can't connect without instance URL") } client = Client(baseURL: url) if let refreshToken = LocalData.shared.refreshToken { // client.accessToken = accessToken // completion() authorize(authorizationCode: refreshToken, completion: completion) } else { register(completion: completion) } } private func register(completion: @escaping () -> Void) { guard LocalData.shared.clientID == nil, LocalData.shared.clientSecret == nil else { completion() return } let registerRequest = Clients.register(clientName: "Tusker", redirectURI: "tusker://oauth", scopes: [.read, .write, .follow]) client.run(registerRequest) { result in guard case let .success(application, _) = result else { fatalError() } LocalData.shared.clientID = application.clientID LocalData.shared.clientSecret = application.clientSecret completion() } } func authorize(authorizationCode: String, completion: @escaping () -> Void) { // let parameters = [ // Parameter(name: "client_id", value: LocalData.shared.clientID), // Parameter(name: "client_secret", value: LocalData.shared.clientSecret), // Parameter(name: "grant_type", value: "refresh_token"), // Parameter(name: "refresh_token", value: LocalData.shared.refreshToken) // ] // let method = HTTPMethod.post(.parameters(parameters)) let authorizeRequest = Login.authorize(code: authorizationCode, clientID: LocalData.shared.clientID!, clientSecret: LocalData.shared.clientSecret!) client.run(authorizeRequest) { result in guard case let .success(settings, _) = result else { fatalError() } LocalData.shared.refreshToken = settings.refreshToken LocalData.shared.accessToken = settings.accessToken self.client.accessToken = settings.accessToken completion() } } // private func login() { // // TODO: OAuth // let username = ProcessInfo.processInfo.environment["mastodon_username"]! // let password = ProcessInfo.processInfo.environment["mastodon_password"]! // // 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") // } // } // } }