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.
78 lines
2.3 KiB
78 lines
2.3 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 sessionCount: Int {
|
|
get {
|
|
do {
|
|
let request = NSFetchRequest<SessionMO>(entityName: "Session")
|
|
return try CoreDataManager.shared.getContext().count(for: request)
|
|
} catch {
|
|
print("Error counting Sessions \(error)")
|
|
return 0
|
|
}
|
|
}
|
|
}
|
|
|
|
var selectedSession: SessionMO? {
|
|
get {
|
|
let request = NSFetchRequest<SessionMO>(entityName: "Session")
|
|
request.predicate = NSPredicate(format: "selected = YES")
|
|
|
|
do {
|
|
let results = try CoreDataManager.shared.getContext().fetch(request)
|
|
return results.first
|
|
} catch {
|
|
print("Error fetching Session \(error)")
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
var selectedSessionToken: String? {
|
|
get {
|
|
guard let session = selectedSession, let account = session.account else {
|
|
return nil
|
|
}
|
|
|
|
return KeychainWrapper.standard.string(forKey: "token:\(String(describing: account.acct))")
|
|
}
|
|
}
|
|
|
|
func getMKClientForSelectedSession() -> Client? {
|
|
guard let session = selectedSession, let client = session.client else {
|
|
return nil
|
|
}
|
|
|
|
return Client(baseURL: "https://\(client.url!)", accessToken: selectedSessionToken)
|
|
}
|
|
|
|
func saveSession(client: ClientMO, account: AccountMO, token: String) -> SessionMO? {
|
|
if let selectedSession = selectedSession {
|
|
selectedSession.selected = false
|
|
}
|
|
|
|
let session = SessionMO(context: CoreDataManager.shared.getContext())
|
|
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
|
|
}
|
|
}
|