@@ -49,49 +49,32 @@ export interface OAuth2Methods {
4949}
5050
5151export function createOAuthPlugin ( providers : Record < string , OAuthProvider > ) {
52- const stateStore = new Map < string , { provider : string ; timestamp : number } > ( ) ;
53-
54- // Clean up expired states (older than 10 minutes)
55- const cleanupExpiredStates = ( ) => {
56- const now = Date . now ( ) ;
57- const expiryTime = 10 * 60 * 1000 ; // 10 minutes
58- for ( const [ state , data ] of stateStore . entries ( ) ) {
59- if ( now - data . timestamp > expiryTime ) {
60- stateStore . delete ( state ) ;
61- }
62- }
63- } ;
6452
6553 // Generate random state string
66- const generateState = ( ) : string => {
67- const array = new Uint8Array ( 32 ) ;
68- crypto . getRandomValues ( array ) ;
69- return Array . from ( array , ( byte ) => byte . toString ( 16 ) . padStart ( 2 , "0" ) ) . join ( "" ) ;
70- } ;
54+
7155
7256 return new Elysia ( { name : "oauth2" } )
7357 . decorate ( "oauth2" , {
74- createRedirectUrl : ( providerName : string ) : string => {
58+ generateState : ( ) => {
59+ const array = new Uint8Array ( 32 ) ;
60+ crypto . getRandomValues ( array ) ;
61+ return Array . from ( array , ( byte ) => byte . toString ( 16 ) . padStart ( 2 , "0" ) ) . join ( "" ) ;
62+ } ,
63+ createRedirectUrl : ( state : string , providerName : string ) : string => {
7564 const provider = providers [ providerName ] ;
7665 if ( ! provider ) {
7766 throw new Error ( `OAuth provider "${ providerName } " not found` ) ;
7867 }
7968
80- cleanupExpiredStates ( ) ;
8169
82- const state = generateState ( ) ;
83- stateStore . set ( state , {
84- provider : providerName ,
85- timestamp : Date . now ( ) ,
86- } ) ;
8770
8871 const params = new URLSearchParams ( {
8972 client_id : provider . clientId ,
9073 state : state ,
9174 } ) ;
9275
9376 // if (provider.redirectUri) {
94- // params.set("redirect_uri", provider.redirectUri);
77+ // params.set("redirect_uri", provider.redirectUri);
9578 // }
9679
9780 return `${ provider . authorizeUrl } ?${ params . toString ( ) } ` ;
@@ -146,18 +129,5 @@ export function createOAuthPlugin(providers: Record<string, OAuthProvider>) {
146129 refreshToken : data . refresh_token ,
147130 } ;
148131 } ,
149-
150- verifyState : ( state : string ) : boolean => {
151- cleanupExpiredStates ( ) ;
152- return stateStore . has ( state ) ;
153- } ,
154-
155- getStateData : ( state : string ) => {
156- return stateStore . get ( state ) ;
157- } ,
158-
159- removeState : ( state : string ) => {
160- stateStore . delete ( state ) ;
161- } ,
162132 } ) ;
163133}
0 commit comments