[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.

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