@@ -10,6 +10,8 @@ export function registerGitHubOAuth(server: FastifyInstance, config: Config) {
10
10
11
11
const urls = {
12
12
localAuthorize : "/login/oauth/authorize" ,
13
+ localMembershipError : "/login/oauth/error-membership" ,
14
+ localGenericError : "/login/oauth/error" ,
13
15
githubAuthorize : "https://github.com/login/oauth/authorize" ,
14
16
githubToken : "https://github.com/login/oauth/access_token" ,
15
17
githubOrgMembers : `https://api.github.com/orgs/${ config . githubOrgName } /members` ,
@@ -144,18 +146,26 @@ export function registerGitHubOAuth(server: FastifyInstance, config: Config) {
144
146
//
145
147
server . addHook < RoutePrams > ( "preValidation" , async ( req , res ) => {
146
148
try {
149
+ if ( req . url === urls . localMembershipError ) {
150
+ return denyAccess ( res , "It appears you are not a member of the required GitHub organization." )
151
+ }
152
+
153
+ if ( req . url === urls . localGenericError ) {
154
+ return denyAccess ( res , "It appears that the authentication request was initiated or processed incorrectly." )
155
+ }
156
+
157
+ if ( req . url === urls . localAuthorize ) {
158
+ return redirectToGitHub ( req , res )
159
+ }
160
+
147
161
if ( req . cookies [ cookieNames . state ] && req . cookies [ cookieNames . user ] ) {
148
- if ( req . query . state ) {
162
+ if ( req . query . state || req . query . code ) {
149
163
const state = retrieveState ( req , res )
150
164
return res . redirect ( 302 , state . path )
151
165
}
152
166
return
153
167
}
154
168
155
- if ( req . url === urls . localAuthorize ) {
156
- return redirectToGitHub ( req , res )
157
- }
158
-
159
169
const code = req . query . code
160
170
161
171
if ( ! code ) {
@@ -168,13 +178,13 @@ export function registerGitHubOAuth(server: FastifyInstance, config: Config) {
168
178
const members = await getGitHubOrgMemberships ( )
169
179
170
180
if ( ! members . find ( member => member . id === user . id ) ) {
171
- return denyAccess ( res , "It appears you are not a member of the required GitHub organization." )
181
+ return res . redirect ( 302 , urls . localMembershipError )
172
182
}
173
183
174
184
return succeed ( res , user , state . path )
175
185
} catch ( error ) {
176
186
console . error ( error )
177
- return denyAccess ( res , "It appears that the authentication request was initiated or processed incorrectly." )
187
+ return res . redirect ( 302 , urls . localGenericError )
178
188
}
179
189
} )
180
190
}
0 commit comments