Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit 99a2253

Browse files
authored
Merge pull request #1996 from RocketChat/fix/invalid-session-support
[FIX] Invalid session support
2 parents 55e6e86 + c07e6bb commit 99a2253

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

Rocket.Chat/Managers/Socket/Response/SocketError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extension SocketError {
1515

1616
init(rawValue: String) {
1717
switch rawValue {
18-
case "403":
18+
case "403", "401":
1919
self = .invalidSession
2020
default:
2121
self = .other(rawValue)

Rocket.Chat/Managers/Socket/Response/SocketHandlers.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,41 @@ extension SocketManager {
5353

5454
fileprivate func handleError(_ result: SocketResponse, socket: WebSocket) {
5555
let error = SocketError(json: result.result["error"])
56+
switch error.error {
57+
case .invalidSession:
58+
guard !isPresentingInvalidSessionAlert else {
59+
return
60+
}
61+
62+
let invalidSessionAlert = UIAlertController(
63+
title: localized("alert.socket_error.invalid_user.title"),
64+
message: localized("alert.socket_error.invalid_user.message"),
65+
preferredStyle: .alert
66+
)
67+
68+
invalidSessionAlert.addAction(UIAlertAction(title: localized("global.ok"), style: .default, handler: { _ in
69+
self.isPresentingInvalidSessionAlert = false
70+
AppManager.reloadApp()
71+
}))
72+
73+
func present() {
74+
isPresentingInvalidSessionAlert = true
75+
76+
let alertWindow = UIWindow.topWindow
77+
alertWindow.windowLevel = UIWindowLevelAlert + 1
78+
alertWindow.rootViewController?.present(invalidSessionAlert, animated: true)
79+
}
80+
81+
API.current()?.client(PushClient.self).deletePushToken()
82+
83+
AuthManager.logout {
84+
AuthManager.recoverAuthIfNeeded()
85+
DispatchQueue.main.async(execute: present)
86+
}
87+
default:
88+
break
89+
}
90+
5691
Log.debug("[ERROR][SocketManager]: \(error.message)")
5792
}
5893

Rocket.Chat/Managers/Socket/SocketManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ final class SocketManager {
5555

5656
internal var internalConnectionHandler: SocketCompletion?
5757
internal var connectionHandlers = NSMapTable<NSString, AnyObject>(keyOptions: .strongMemory, valueOptions: .weakMemory)
58+
internal var isPresentingInvalidSessionAlert = false
5859

5960
// MARK: Connection
6061

0 commit comments

Comments
 (0)