[READ-ONLY] Mirror of https://github.com/improsocial/impro An extensible Bluesky client for web impro.social
6

Configure Feed

Select the types of activity you want to include in your feed.

Improve oauth error handling

Grace Kind (Jun 28, 2026, 4:46 PM -0500) ece8f7a3 da970aff

+31 -10
+1 -1
package.json
··· 1 1 { 2 2 "name": "impro", 3 - "version": "0.17.61", 3 + "version": "0.17.62", 4 4 "type": "module", 5 5 "scripts": { 6 6 "start": "rm -rf \"${BUILD_DIR:-build}\" && NODE_ENV=development eleventy --serve",
+30 -9
src/callback.html
··· 19 19 const code = params.get("code"); 20 20 const state = params.get("state"); 21 21 const iss = params.get("iss"); 22 + const errorParam = params.get("error"); 23 + const errorDescription = params.get("error_description"); 24 + 25 + const parsedState = state 26 + ? JSON.parse(decodeURIComponent(state)) 27 + : null; 28 + const returnToFromState = parsedState 29 + ? validateReturnToParam(parsedState.returnTo) 30 + : null; 31 + 32 + if (errorParam) { 33 + const errorParams = new URLSearchParams(); 34 + errorParams.set( 35 + "error_message", 36 + errorDescription 37 + ? `Login failed: ${errorDescription}` 38 + : `Login failed: ${errorParam}`, 39 + ); 40 + if (returnToFromState) { 41 + errorParams.set("returnTo", returnToFromState); 42 + } 43 + window.location.href = "/login?" + errorParams.toString(); 44 + return; 45 + } 22 46 23 47 if (!code || !state || !iss) { 24 48 window.location.href = "/"; 25 49 return; 26 50 } 27 51 28 - const parsedState = JSON.parse(decodeURIComponent(state)); 29 - 30 52 if ( 31 53 parsedState.loopback === true && 32 54 window.env.environment === "development" && ··· 36 58 "http://localhost:8080/callback.html" + window.location.search; 37 59 return; 38 60 } 39 - const returnTo = validateReturnToParam(parsedState.returnTo); 40 61 try { 41 62 await auth.provider.handleOauthCallback(window.location.href); 42 - window.location.href = returnTo ?? "/"; 63 + window.location.href = returnToFromState ?? "/"; 43 64 return; 44 65 } catch (error) { 45 66 console.error("error", error); 46 - const params = new URLSearchParams(); 47 - params.set( 67 + const failureParams = new URLSearchParams(); 68 + failureParams.set( 48 69 "error_message", 49 70 "OAuth callback failed. Please try again.", 50 71 ); 51 - if (returnTo) { 52 - params.set("returnTo", returnTo); 72 + if (returnToFromState) { 73 + failureParams.set("returnTo", returnToFromState); 53 74 } 54 - window.location.href = "/login?" + params.toString(); 75 + window.location.href = "/login?" + failureParams.toString(); 55 76 return; 56 77 } 57 78 }