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.
67 lines
1.9 KiB
67 lines
1.9 KiB
//
|
|
// AuthenticationManager.swift
|
|
// elpha-ios
|
|
//
|
|
// Created by Dwayne Harris on 8/25/18.
|
|
// Copyright © 2018 Elpha. All rights reserved.
|
|
//
|
|
|
|
import CoreData
|
|
import UIKit
|
|
|
|
class AuthenticationManager {
|
|
static 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 []
|
|
}
|
|
}
|
|
}
|
|
|
|
static 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
|
|
}
|
|
}
|
|
}
|
|
|
|
static var token: String? {
|
|
get {
|
|
guard let account = session?.account, let client = session?.client else {
|
|
return nil
|
|
}
|
|
|
|
return KeychainWrapper.standard.string(forKey: "token:\(account.username!)@\(client.host!)")
|
|
}
|
|
}
|
|
|
|
static 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:\(account.username!)@\(client.host!)")
|
|
|
|
return session
|
|
}
|
|
}
|