Skip to content

Commit d71e01f

Browse files
committed
error handling
1 parent 36090b8 commit d71e01f

File tree

2 files changed

+109
-74
lines changed

2 files changed

+109
-74
lines changed

Sources/App/Core/Cognito.swift

Lines changed: 108 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -5,110 +5,145 @@ import SotoCognitoIdentity
55

66

77
struct Cognito {
8-
@Sendable
8+
@Sendable
99
static func authenticate(req: Request, username: String, password: String) async throws -> CognitoAuthenticateResponse {
1010
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
11-
let awsCognitoConfiguration = CognitoConfiguration(
12-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
13-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
14-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
15-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
16-
adminClient: true
17-
)
18-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
19-
let response = try await req.application.cognito.authenticatable.authenticate(username: username, password: password)
20-
try awsClient.syncShutdown()
21-
return response
11+
do {
12+
let awsCognitoConfiguration = CognitoConfiguration(
13+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
14+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
15+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
16+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
17+
adminClient: true
18+
)
19+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
20+
let response = try await req.application.cognito.authenticatable.authenticate(username: username, password: password)
21+
try awsClient.syncShutdown()
22+
return response
23+
} catch {
24+
try awsClient.syncShutdown()
25+
throw error
26+
}
2227
}
2328

2429
@Sendable
2530
static func authenticateToken(req: Request, sessionID: String, accessToken: String) async throws -> Void {
2631
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
27-
let awsCognitoConfiguration = CognitoConfiguration(
28-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
29-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
30-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
31-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
32-
adminClient: true
33-
)
34-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
35-
let _ = try await req.application.cognito.authenticatable.authenticate(accessToken: sessionID, on: req.eventLoop)
36-
try awsClient.syncShutdown()
32+
do {
33+
let awsCognitoConfiguration = CognitoConfiguration(
34+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
35+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
36+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
37+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
38+
adminClient: true
39+
)
40+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
41+
let _ = try await req.application.cognito.authenticatable.authenticate(accessToken: sessionID, on: req.eventLoop)
42+
try awsClient.syncShutdown()
43+
} catch {
44+
try awsClient.syncShutdown()
45+
throw error
46+
}
3747
}
3848

3949
@Sendable
4050
static func signup(req: Request, username: String, password: String) async throws {
4151
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
42-
let awsCognitoConfiguration = CognitoConfiguration(
43-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
44-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
45-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
46-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
47-
adminClient: true
48-
)
49-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
50-
_ = try await req.application.cognito.authenticatable.signUp(username: username, password: password, attributes: [:], on:req.eventLoop)
51-
try awsClient.syncShutdown()
52+
do {
53+
let awsCognitoConfiguration = CognitoConfiguration(
54+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
55+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
56+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
57+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
58+
adminClient: true
59+
)
60+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
61+
_ = try await req.application.cognito.authenticatable.signUp(username: username, password: password, attributes: [:], on:req.eventLoop)
62+
try awsClient.syncShutdown()
63+
} catch {
64+
try awsClient.syncShutdown()
65+
throw error
66+
}
5267
}
5368

5469
@Sendable
5570
static func forgotPassword(req: Request, username: String) async throws {
5671
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
57-
let awsCognitoConfiguration = CognitoConfiguration(
58-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
59-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
60-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
61-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
62-
adminClient: true
63-
)
64-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
65-
try await req.application.cognito.authenticatable.forgotPassword(username: username)
66-
try awsClient.syncShutdown()
72+
do {
73+
let awsCognitoConfiguration = CognitoConfiguration(
74+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
75+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
76+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
77+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
78+
adminClient: true
79+
)
80+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
81+
try await req.application.cognito.authenticatable.forgotPassword(username: username)
82+
try awsClient.syncShutdown()
83+
} catch {
84+
try awsClient.syncShutdown()
85+
throw error
86+
}
6787
}
6888

6989
@Sendable
7090
static func resetPassword(req: Request, username: String, password: String, confirmationCode: String) async throws {
7191
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
72-
let awsCognitoConfiguration = CognitoConfiguration(
73-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
74-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
75-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
76-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
77-
adminClient: true
78-
)
79-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
80-
try await req.application.cognito.authenticatable.confirmForgotPassword(username: username, newPassword: password, confirmationCode: confirmationCode)
81-
try awsClient.syncShutdown()
92+
do {
93+
let awsCognitoConfiguration = CognitoConfiguration(
94+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
95+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
96+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
97+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
98+
adminClient: true
99+
)
100+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
101+
try await req.application.cognito.authenticatable.confirmForgotPassword(username: username, newPassword: password, confirmationCode: confirmationCode)
102+
try awsClient.syncShutdown()
103+
} catch {
104+
try awsClient.syncShutdown()
105+
throw error
106+
}
82107
}
83108

84109
@Sendable
85110
static func confirmSignUp(req: Request, username: String, confirmationCode: String) async throws {
86111
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
87-
let awsCognitoConfiguration = CognitoConfiguration(
88-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
89-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
90-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
91-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
92-
adminClient: true
93-
)
94-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
95-
try await req.application.cognito.authenticatable.confirmSignUp(username: username, confirmationCode: confirmationCode)
96-
try awsClient.syncShutdown()
112+
do {
113+
let awsCognitoConfiguration = CognitoConfiguration(
114+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
115+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
116+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
117+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
118+
adminClient: true
119+
)
120+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
121+
try await req.application.cognito.authenticatable.confirmSignUp(username: username, confirmationCode: confirmationCode)
122+
try awsClient.syncShutdown()
123+
} catch {
124+
try awsClient.syncShutdown()
125+
throw error
126+
}
97127
}
98128

99129
@Sendable
100130
static func deleteUser(req: Request) async throws {
101131
let awsClient = AWSClient(httpClientProvider: .shared(req.application.http.client.shared))
102-
let awsCognitoConfiguration = CognitoConfiguration(
103-
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
104-
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
105-
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
106-
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
107-
adminClient: true
108-
)
109-
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
110-
let request = try CognitoIdentityProvider.DeleteUserRequest(accessToken: req.auth.require(AuthenticatedUser.self).sessionID)
111-
try await req.application.cognito.authenticatable.configuration.cognitoIDP.deleteUser(request)
112-
try awsClient.syncShutdown()
132+
do {
133+
let awsCognitoConfiguration = CognitoConfiguration(
134+
userPoolId: Environment.get("AWS_COGNITO_POOL_ID")!,
135+
clientId: Environment.get("AWS_COGNITO_CLIENT_ID")!,
136+
clientSecret: Environment.get("AWS_COGNITO_CLIENT_SECRET")!,
137+
cognitoIDP: CognitoIdentityProvider(client: awsClient, region: .useast2),
138+
adminClient: true
139+
)
140+
req.application.cognito.authenticatable = CognitoAuthenticatable(configuration: awsCognitoConfiguration)
141+
let request = try CognitoIdentityProvider.DeleteUserRequest(accessToken: req.auth.require(AuthenticatedUser.self).sessionID)
142+
try await req.application.cognito.authenticatable.configuration.cognitoIDP.deleteUser(request)
143+
try awsClient.syncShutdown()
144+
} catch {
145+
try awsClient.syncShutdown()
146+
throw error
147+
}
113148
}
114149
}

Sources/App/Core/SiteURL.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ enum SiteURL: Resourceable, Sendable {
263263
return "ready-for-swift-6"
264264

265265
case .resetPassword:
266-
return "reset"
266+
return "reset-password"
267267

268268
case .rssPackages:
269269
return "packages.rss"

0 commit comments

Comments
 (0)