-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSakaiAPIClient.swift
More file actions
75 lines (61 loc) · 2.2 KB
/
SakaiAPIClient.swift
File metadata and controls
75 lines (61 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//
// Sakai.swift
// Sakai
//
// Created by Alastair Hendricks on 2018/05/20.
//
import Foundation
import Result
import Moya
import WebKit
public typealias NetworkServiceResponse<T: Decodable> = (Result<T, SakaiError>) -> Void
final public class SakaiAPIClient: NSObject {
public let announcements: AnnouncementService = AnnouncementService()
public let session: SessionService = SessionService()
public let site: SiteService = SiteService()
public let content: ContentService = ContentService()
public let chat: ChatService = ChatService()
public let calendar: CalendarService = CalendarService()
public let assignement: AssignmentService = AssignmentService()
public let webContent: WebContentService = WebContentService()
public let syllabus: SyllabusService = SyllabusService()
public let gradebook: GradebookService = GradebookService()
public internal(set) var loggedInUserSession: SakaiSession?
internal var username: String? = nil
internal var password: String? = nil
public internal(set) var baseURL: URL? = nil
public var processPool: WKProcessPool = WKProcessPool()
internal var errorReportingEngine: SakaiErrorReportingEngine?
public class var shared: SakaiAPIClient {
struct Static {
static let instance: SakaiAPIClient = SakaiAPIClient()
}
return Static.instance
}
public override init() {
super.init()
}
public func start(configuration: SakaiConfiguration, username: String, password: String) {
self.baseURL = configuration.baseURL
self.username = username
self.password = password
}
public func teardown() {
self.baseURL = nil
self.username = nil
self.password = nil
self.loggedInUserSession = nil
}
public func ensureUserIsAuthorized() -> Bool {
guard let session: SakaiSession = loggedInUserSession else {
return false
}
let currentTimestamp = Time.getCurrentTimestamp()
let lastRefreshed = session.lastAccessedTime/1000
let timeElapsed = currentTimestamp-lastRefreshed
if timeElapsed >= 60 {
return false
}
return true
}
}