Skip to content

Commit 6597948

Browse files
Merge pull request #520 from appwrite/fix-swift-oauth
Fix Swift OAuth cookie
2 parents 4a6de80 + c17fdc0 commit 6597948

File tree

3 files changed

+56
-34
lines changed

3 files changed

+56
-34
lines changed

templates/swift/Sources/OAuth/WebAuthComponent.swift.twig

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class WebAuthComponent {
2323
///
2424
/// Authenticate Session with OAuth2
2525
///
26-
/// Launches a chrome custom tab from the given activity and directs to the given url,
26+
/// Launches a browser window from your app and directs to the given url,
2727
/// suspending until the user returns to the app, at which point the given [onComplete] callback
2828
/// will run, passing the callback url from the intent used to launch the [CallbackActivity],
2929
/// or an [IllegalStateException] in the case the user closed the window or returned to the
@@ -62,12 +62,37 @@ public class WebAuthComponent {
6262
var domain = cookieParts["domain"]!
6363
domain.remove(at: domain.startIndex)
6464

65-
let cookie = HTTPClient.Cookie(
66-
name: cookieParts["key"]!,
67-
value: cookieParts["secret"]!
68-
)
69-
let cookieJson = try! cookie.toJson()
70-
UserDefaults.standard.set(cookieJson, forKey: "\(domain)-cookies")
65+
let key: String = cookieParts["key"]!
66+
let secret: String = cookieParts["secret"]!
67+
let path: String? = cookieParts["path"]
68+
let expires: String? = cookieParts["expires"]
69+
let maxAge: String? = cookieParts["maxAge"]
70+
let sameSite: String? = cookieParts["sameSite"]
71+
let httpOnly: Bool? = cookieParts.keys.contains("httpOnly")
72+
let secure: Bool? = cookieParts.keys.contains("secure")
73+
74+
var cookie = "\(key)=\(secret)"
75+
76+
if let path = path {
77+
cookie += "; path=\(path)"
78+
}
79+
if let expires = expires {
80+
cookie += "; expires=\(expires)"
81+
}
82+
if let maxAge = maxAge {
83+
cookie += "; max-age=\(maxAge)"
84+
}
85+
if let sameSite = sameSite {
86+
cookie += "; sameSite=\(sameSite)"
87+
}
88+
if let httpOnly = httpOnly, httpOnly {
89+
cookie += "; httpOnly"
90+
}
91+
if let secure = secure, secure {
92+
cookie += "; secure"
93+
}
94+
95+
UserDefaults.standard.set([cookie], forKey: "\(domain)-cookies")
7196

7297
WebAuthComponent.onCallback(
7398
scheme: components.scheme!,

templates/swift/example-swiftui/Shared/ExampleViewModel.swift

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,79 +31,76 @@ extension ExampleView {
3131

3232
func register() async {
3333
do {
34-
let response = try await account.create(
34+
let user = try await account.create(
3535
userId: userId,
3636
email: username,
3737
password: password
3838
)
39-
self.userId = response.id
40-
self.response = String(describing: response.toMap())
39+
self.userId = user.id
40+
self.response = String(describing: user.toMap())
4141
} catch {
42-
self.response = String(describing: error)
42+
self.response = error.localizedDescription
4343
}
4444
}
4545

4646
func login() async {
4747
do {
48-
let response = try await account.createSession(
48+
let session = try await account.createEmailSession(
4949
email: username,
5050
password: password
5151
)
52-
self.response = String(describing: response.toMap())
52+
self.response = String(describing: session.toMap())
5353
} catch {
54-
self.response = String(describing: error)
54+
self.response = error.localizedDescription
5555
}
5656
}
5757

5858
func loginWithFacebook() async {
5959
do {
60-
let response = try await account.createOAuth2Session(
61-
provider: "facebook",
62-
success: "\(host)/auth/oauth2/success",
63-
failure: "\(host)/auth/oauth2/failure"
64-
)
65-
self.response = String(describing: response)
60+
_ = try await account.createOAuth2Session(provider: "facebook")
61+
62+
self.response = "Success!"
6663
} catch {
67-
self.response = String(describing: error)
64+
self.response = error.localizedDescription
6865
}
6966
}
7067

7168
func download() async {
7269
do {
73-
let response = try await storage.getFileDownload(
70+
let data = try await storage.getFileDownload(
7471
bucketId: bucketId,
7572
fileId: fileId
7673
)
77-
self.downloadedImage = Image(data: Data(buffer: response))
74+
self.downloadedImage = Image(data: Data(buffer: data))
7875
} catch {
79-
self.response = String(describing: error)
76+
self.response = error.localizedDescription
8077
}
8178
}
8279

8380
func upload(image: OSImage) async {
84-
let imageBuffer = ByteBufferAllocator()
85-
.buffer(data: image.data)
86-
8781
#if os(macOS)
8882
let fileName = "file.tiff"
83+
let mime = "image/tiff"
8984
#else
9085
let fileName = "file.png"
86+
let mime = "image/png"
9187
#endif
9288

93-
let file = File(
94-
name: fileName,
95-
buffer: imageBuffer
89+
let file = InputFile.fromData(
90+
image.data,
91+
filename: fileName,
92+
mimeType: mime
9693
)
9794

9895
do {
99-
let response = try await storage.createFile(
96+
let file = try await storage.createFile(
10097
bucketId: bucketId,
10198
fileId: fileId,
10299
file: file
103100
)
104-
self.response = String(describing: response.toMap())
101+
self.response = String(describing: file.toMap())
105102
} catch {
106-
self.response = String(describing: error)
103+
self.response = error.localizedDescription
107104
}
108105
}
109106

templates/swift/example-uikit/UIKitExample/ViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ViewController: UIViewController {
5858

5959
@IBAction func loginClick(_ sender: Any) async {
6060
do {
61-
let response = try await account.createSession(
61+
let response = try await account.createEmailSession(
6262
6363
password: "password"
6464
)

0 commit comments

Comments
 (0)