[ABANDONED] Mastodon iOS client.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.2 KiB

//
// AuthenticationManager.swift
// elpha-ios
//
// Created by Dwayne Harris on 8/25/18.
// Copyright © 2018 Elpha. All rights reserved.
//
import CoreData
import MastodonKit
import UIKit
class AuthenticationManager {
static let shared = AuthenticationManager()
var sessions: [SessionMO] {
get {
do {
let request = NSFetchRequest<SessionMO>(entityName: "Session")
return try CoreDataManager.shared.context.fetch(request)
} catch {
print("Error fetching Sessions \(error)")
return []
}
}
}
var session: SessionMO? {
get {
let request = NSFetchRequest<SessionMO>(entityName: "Session")
request.predicate = NSPredicate(format: "selected = YES")
do {
let results = try CoreDataManager.shared.context.fetch(request)
return results.first
} catch {
print("Error fetching Session \(error)")
return nil
}
}
}
var token: String? {
get {
guard let account = session?.account else {
return nil
}
return KeychainWrapper.standard.string(forKey: "token:\(String(describing: account.acct))")
}
}
var mkClient: Client? {
get {
guard let client = session?.client else {
return nil
}
return Client(baseURL: "https://\(client.url!)", accessToken: token)
}
}
func saveSession(client: ClientMO, account: AccountMO, token: String) -> SessionMO? {
if let session = self.session {
session.selected = false
}
let session = SessionMO(context: CoreDataManager.shared.context)
session.client = client
session.account = account
session.order = 0
session.createdAt = Date()
session.selected = true
CoreDataManager.shared.saveContext()
KeychainWrapper.standard.set(token, forKey: "token:\(String(describing: account.acct))")
return session
}
}