File tree Expand file tree Collapse file tree 3 files changed +96
-12
lines changed Expand file tree Collapse file tree 3 files changed +96
-12
lines changed Original file line number Diff line number Diff line change 1
1
import type { FetchError } from 'ofetch'
2
- import { requireAuthorization } from '~/server/modules/authorization'
3
2
4
3
export default defineOAuthGitHubEventHandler ( {
5
4
config : {
@@ -22,9 +21,36 @@ export default defineOAuthGitHubEventHandler({
22
21
}
23
22
} )
24
23
25
- // Check authorization after setting user session
26
- if ( config . githubAppId || config . authorizedUsers ) {
27
- await requireAuthorization ( event )
24
+ // Check authorization if configured
25
+ if ( ( config . githubAppId || config . authorizedUsers ) && config . authorizedUsers && config . authorizedUsers . trim ( ) !== '' ) {
26
+ const { user : sessionUser } = await getUserSession ( event )
27
+
28
+ if ( ! sessionUser ) {
29
+ throw createError ( {
30
+ statusCode : 401 ,
31
+ statusMessage : 'Authentication required'
32
+ } )
33
+ }
34
+
35
+ const username = sessionUser . login || sessionUser . name || sessionUser . githubId ?. toString ( )
36
+ if ( ! username ) {
37
+ throw createError ( {
38
+ statusCode : 401 ,
39
+ statusMessage : 'Unable to determine user identity'
40
+ } )
41
+ }
42
+
43
+ const authorizedUsers = config . authorizedUsers
44
+ . split ( ',' )
45
+ . map ( user => user . trim ( ) . toLowerCase ( ) )
46
+ . filter ( user => user . length > 0 )
47
+
48
+ if ( authorizedUsers . length > 0 && ! authorizedUsers . includes ( username . toLowerCase ( ) ) ) {
49
+ throw createError ( {
50
+ statusCode : 403 ,
51
+ statusMessage : 'Access denied. User not authorized to access this application.'
52
+ } )
53
+ }
28
54
}
29
55
30
56
// need to check if this is public app (no default org/team/ent)
Original file line number Diff line number Diff line change 1
- import { requireAuthorization } from '~/server/modules/authorization'
2
-
3
1
export default defineOAuthGoogleEventHandler ( {
4
2
async onSuccess ( event , { user, tokens } ) {
3
+ const config = useRuntimeConfig ( event )
4
+
5
5
await setUserSession ( event , {
6
6
user : {
7
7
googleId : user . sub ,
@@ -15,8 +15,37 @@ export default defineOAuthGoogleEventHandler({
15
15
}
16
16
} )
17
17
18
- // Check authorization after setting user session
19
- await requireAuthorization ( event )
18
+ // Check authorization if configured
19
+ if ( config . authorizedUsers && config . authorizedUsers . trim ( ) !== '' ) {
20
+ const { user : sessionUser } = await getUserSession ( event )
21
+
22
+ if ( ! sessionUser ) {
23
+ throw createError ( {
24
+ statusCode : 401 ,
25
+ statusMessage : 'Authentication required'
26
+ } )
27
+ }
28
+
29
+ const username = sessionUser . login || sessionUser . name || sessionUser . email || sessionUser . googleId ?. toString ( )
30
+ if ( ! username ) {
31
+ throw createError ( {
32
+ statusCode : 401 ,
33
+ statusMessage : 'Unable to determine user identity'
34
+ } )
35
+ }
36
+
37
+ const authorizedUsers = config . authorizedUsers
38
+ . split ( ',' )
39
+ . map ( user => user . trim ( ) . toLowerCase ( ) )
40
+ . filter ( user => user . length > 0 )
41
+
42
+ if ( authorizedUsers . length > 0 && ! authorizedUsers . includes ( username . toLowerCase ( ) ) ) {
43
+ throw createError ( {
44
+ statusCode : 403 ,
45
+ statusMessage : 'Access denied. User not authorized to access this application.'
46
+ } )
47
+ }
48
+ }
20
49
21
50
return sendRedirect ( event , '/' )
22
51
} ,
Original file line number Diff line number Diff line change 1
- import { requireAuthorization } from '~/server/modules/authorization'
2
-
3
1
export default defineOAuthMicrosoftEventHandler ( {
4
2
async onSuccess ( event , { user, tokens } ) {
3
+ const config = useRuntimeConfig ( event )
4
+
5
5
await setUserSession ( event , {
6
6
user : {
7
7
microsoftId : user . id ,
@@ -15,8 +15,37 @@ export default defineOAuthMicrosoftEventHandler({
15
15
}
16
16
} )
17
17
18
- // Check authorization after setting user session
19
- await requireAuthorization ( event )
18
+ // Check authorization if configured
19
+ if ( config . authorizedUsers && config . authorizedUsers . trim ( ) !== '' ) {
20
+ const { user : sessionUser } = await getUserSession ( event )
21
+
22
+ if ( ! sessionUser ) {
23
+ throw createError ( {
24
+ statusCode : 401 ,
25
+ statusMessage : 'Authentication required'
26
+ } )
27
+ }
28
+
29
+ const username = sessionUser . login || sessionUser . name || sessionUser . email || sessionUser . microsoftId ?. toString ( )
30
+ if ( ! username ) {
31
+ throw createError ( {
32
+ statusCode : 401 ,
33
+ statusMessage : 'Unable to determine user identity'
34
+ } )
35
+ }
36
+
37
+ const authorizedUsers = config . authorizedUsers
38
+ . split ( ',' )
39
+ . map ( user => user . trim ( ) . toLowerCase ( ) )
40
+ . filter ( user => user . length > 0 )
41
+
42
+ if ( authorizedUsers . length > 0 && ! authorizedUsers . includes ( username . toLowerCase ( ) ) ) {
43
+ throw createError ( {
44
+ statusCode : 403 ,
45
+ statusMessage : 'Access denied. User not authorized to access this application.'
46
+ } )
47
+ }
48
+ }
20
49
21
50
return sendRedirect ( event , '/' )
22
51
} ,
You can’t perform that action at this time.
0 commit comments