@@ -62,11 +62,18 @@ export default {
6262 if ( url . pathname === "/api/switch" && request . method === "POST" ) return dispatchSwitch ( request , env ) ;
6363 return html ( PAGE_HTML ) ;
6464 } catch ( error ) {
65- return json ( { ok : false , error : error . message || "unexpected error" } , 500 ) ;
65+ return json ( { ok : false , error : error . message || "unexpected error" } , error . status || 500 ) ;
6666 }
6767 } ,
6868} ;
6969
70+ class HttpError extends Error {
71+ constructor ( message , status ) {
72+ super ( message ) ;
73+ this . status = status ;
74+ }
75+ }
76+
7077async function startLogin ( request , env ) {
7178 requireEnv ( env , "GITHUB_CLIENT_ID" ) ;
7279 const url = new URL ( request . url ) ;
@@ -868,10 +875,10 @@ function cleanLabel(value, field) {
868875function requireSameOrigin ( request , options = { } ) {
869876 const origin = request . headers . get ( "Origin" ) ;
870877 if ( ! origin ) {
871- if ( options . requireOrigin ) throw new Error ( "Origin header is required" ) ;
878+ if ( options . requireOrigin ) throw new HttpError ( "Origin header is required" , 403 ) ;
872879 return ;
873880 }
874- if ( origin !== new URL ( request . url ) . origin ) throw new Error ( "cross-origin request rejected" ) ;
881+ if ( origin !== new URL ( request . url ) . origin ) throw new HttpError ( "cross-origin request rejected" , 403 ) ;
875882}
876883
877884async function fetchGithubVariable ( token , repository , scope , githubEnvironment , name ) {
0 commit comments