Skip to content

Commit 6e89245

Browse files
committed
Campus Express token auth state fix
1 parent cab5fdd commit 6e89245

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

PennMobile/Dining/Controllers/DiningLoginController.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class DiningLoginController: UIViewController, WKUIDelegate, WKNavigationDelegat
3737
var url = URL(string: urlStr)!
3838
url.appendQueryItem(name: "response_type", value: "code")
3939
url.appendQueryItem(name: "client_id", value: clientId)
40-
url.appendQueryItem(name: "state", value: "abc")
40+
url.appendQueryItem(name: "state", value: stateString)
4141
url.appendQueryItem(name: "scope", value: "read")
4242
url.appendQueryItem(name: "code_challenge", value: codeChallenge)
4343
url.appendQueryItem(name: "code_challenge_method", value: "S256")
@@ -54,6 +54,8 @@ class DiningLoginController: UIViewController, WKUIDelegate, WKNavigationDelegat
5454

5555
private let codeVerifier = String.randomString(length: 64)
5656

57+
private let state = String.randomString(length: 64)
58+
5759
private var codeChallenge: String {
5860
var challenge = hash(string: codeVerifier, encoding: .base64)
5961
challenge.removeAll(where: { $0 == "=" })
@@ -62,11 +64,19 @@ class DiningLoginController: UIViewController, WKUIDelegate, WKNavigationDelegat
6264
return challenge
6365
}
6466

67+
private var stateString: String {
68+
var state = state
69+
state.removeAll(where: { $0 == "=" })
70+
state = state.replacingOccurrences(of: "+", with: "-")
71+
state = state.replacingOccurrences(of: "/", with: "_")
72+
return state
73+
}
74+
6575
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
6676
if let url = navigationResponse.response.url, url.absoluteString.contains("https://pennlabs.org/pennmobile/ios/campus_express_callback/") {
6777
let queryParams = url.queryParameters
6878

69-
guard queryParams["state"] == "abc" else { print("ERROR"); return }
79+
guard queryParams["state"] == stateString else { return }
7080

7181
if let code = queryParams["code"] {
7282
var url = URL(string: "https://prod.campusexpress.upenn.edu/api/v1/oauth/token")!

PennMobile/Dining/SwiftUI/DiningViewModelSwiftUI.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class DiningViewModelSwiftUI: ObservableObject {
2626

2727
init() {
2828
refreshVenues()
29-
refreshBalance()
3029
}
3130

3231
func refreshVenues() {
@@ -79,6 +78,8 @@ class DiningViewModelSwiftUI: ObservableObject {
7978
self.diningBalance = DiningBalance(diningDollars: "0.0", regularVisits: 0, guestVisits: 0, addOnVisits: 0)
8079
return
8180
}
81+
82+
print(diningToken)
8283
DiningAPI.instance.getDiningBalance(diningToken: diningToken) { balance in
8384
guard let balance = balance else {
8485
return

PennMobile/Setup + Navigation/RootViewController.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ class RootViewController: UIViewController, NotificationRequestable, ShowsAlert
115115

116116
UserDBManager.shared.getWhartonStatus { result in
117117
if let isWharton = try? result.get() {
118-
print(isWharton)
119118
UserDefaults.standard.set(isInWharton: isWharton)
120119
}
121120
}

0 commit comments

Comments
 (0)