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

Commit 7b32e74

Browse files
agordeevflovilmart
authored andcommitted
Added support for session token and user authentication. (#60)
* 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. * Made userDisconnected public, as it needs to be accessible outside of the framework. * Swift 3 conformance.
1 parent c01aae2 commit 7b32e74

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

Sources/ParseLiveQuery/Client.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ open class Client: NSObject {
2323
let clientKey: String?
2424

2525
var socket: SRWebSocket?
26-
var userDisconnected = false
26+
public var userDisconnected = false
2727

2828
// This allows us to easily plug in another request ID generation scheme, or more easily change the request id type
2929
// if needed (technically this could be a string).
@@ -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.current()?.sessionToken))
155156
} else if socket == nil || socket?.readyState != .CONNECTING {
156157
if !userDisconnected {
157158
reconnect()

Sources/ParseLiveQuery/Internal/ClientPrivate.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ extension Client: SRWebSocketDelegate {
138138
}
139139

140140
public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
141-
// TODO: Add support for session token and user authetication.
142-
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: ""))
141+
let sessionToken = PFUser.current()?.sessionToken ?? ""
142+
_ = self.sendOperationAsync(.connect(applicationId: applicationId, sessionToken: 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.current()?.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: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,20 @@ 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):
2121
return [ "op": "connect", "applicationId": applicationId, "sessionToken": sessionToken ]
2222

23-
case .subscribe(let requestId, let query):
24-
return [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query) ]
23+
case .subscribe(let requestId, let query, let sessionToken):
24+
var result: [String: Any] = [ "op": "subscribe", "requestId": requestId.value, "query": Dictionary<String, AnyObject>(query: query) ]
25+
if let sessionToken = sessionToken {
26+
result["sessionToken"] = sessionToken
27+
}
28+
return result
2529

2630
case .unsubscribe(let requestId):
2731
return [ "op": "unsubscribe", "requestId": requestId.value ]

0 commit comments

Comments
 (0)