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

Commit 9a39262

Browse files
committed
Added support for session token and user authentication.
Added using of sessionToken for both Connect and Subscribe messages. sessionToken is taken from PFUser.currentUser() directly and passes only if it's not nil.
1 parent c01aae2 commit 9a39262

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

Sources/ParseLiveQuery/Client.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ extension Client {
151151
subscriptions.append(subscriptionRecord)
152152

153153
if socket?.readyState == .OPEN {
154-
_ = sendOperationAsync(.subscribe(requestId: subscriptionRecord.requestId, query: query as! PFQuery<PFObject>))
154+
_ = sendOperationAsync(.subscribe(requestId: subscriptionRecord.requestId, query: query as! PFQuery<PFObject>,
155+
sessionToken: PFUser.currentUser()?.sessionToken))
155156
} else if socket == nil || socket?.readyState != .CONNECTING {
156157
if !userDisconnected {
157158
reconnect()

Sources/ParseLiveQuery/Internal/ClientPrivate.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ extension Client: SRWebSocketDelegate {
139139

140140
public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
141141
// TODO: Add support for session token and user authetication.
142-
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: ""))
142+
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: PFUser.currentUser()?.sessionToken))
143143
}
144144

145145
public func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {
@@ -227,8 +227,9 @@ extension Client {
227227

228228
switch response {
229229
case .connected:
230+
let sessionToken = PFUser.currentUser()?.sessionToken
230231
self.subscriptions.forEach {
231-
_ = self.sendOperationAsync(.subscribe(requestId: $0.requestId, query: $0.query))
232+
_ = self.sendOperationAsync(.subscribe(requestId: $0.requestId, query: $0.query, sessionToken: sessionToken))
232233
}
233234

234235
case .redirect:

Sources/ParseLiveQuery/Internal/Operation.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,21 @@ import Parse
1212

1313
enum ClientOperation {
1414
case connect(applicationId: String, sessionToken: String)
15-
case subscribe(requestId: Client.RequestId, query: PFQuery<PFObject>)
15+
case subscribe(requestId: Client.RequestId, query: PFQuery<PFObject>, sessionToken: String?)
1616
case unsubscribe(requestId: Client.RequestId)
1717

1818
var JSONObjectRepresentation: [String : Any] {
1919
switch self {
2020
case .connect(let applicationId, let sessionToken):
21+
var result: [String: Any] = [ "op": "connect", "applicationId": applicationId ]
2122
return [ "op": "connect", "applicationId": applicationId, "sessionToken": sessionToken ]
23+
if let sessionToken = sessionToken {
24+
result["sessionToken"] = sessionToken
25+
}
26+
return result
2227

23-
case .subscribe(let requestId, let query):
24-
return [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query) ]
28+
case .subscribe(let requestId, let query, let sessionToken):
29+
return [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query), "sessionToken": sessionToken ]
2530

2631
case .unsubscribe(let requestId):
2732
return [ "op": "unsubscribe", "requestId": requestId.value ]

0 commit comments

Comments
 (0)