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
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
|
|
}
|
|
}
|