fix(api): 🛂 Fix incorrect redirect URI passed to external OIDC providers, normalize issuer URL

This commit is contained in:
Jesse Wierzbinski 2024-06-10 15:58:51 -10:00
parent dae37d47a3
commit b3bace4d53
No known key found for this signature in database
3 changed files with 12 additions and 4 deletions

View file

@ -99,7 +99,11 @@ export const configValidator = z.object({
z.object({
name: z.string().min(1),
id: z.string().min(1),
url: z.string().min(1),
url: z
.string()
.min(1)
// Remove trailing slashes
.transform((arg) => arg.replace(/\/$/, "")),
client_id: z.string().min(1),
client_secret: z.string().min(1),
icon: z.string().min(1).optional(),

View file

@ -1,4 +1,3 @@
import { oauthRedirectUri } from "@/constants";
import { response } from "@/response";
import type { InferInsertModel } from "drizzle-orm";
import {
@ -201,6 +200,7 @@ export class OAuthManager {
async automaticOidcFlow(
flowId: string,
currentUrl: URL,
redirectUrl: URL,
errorFn: (
error: string,
message: string,
@ -234,7 +234,7 @@ export class OAuthManager {
const oidcResponse = await this.getOIDCResponse(
authServer,
this.issuer,
`${oauthRedirectUri(this.issuer.id)}?flow=${flow.id}`,
redirectUrl.toString(),
flow.codeVerifier,
parameters,
);

View file

@ -80,11 +80,15 @@ export default (app: Hono) =>
const userInfo = await manager.automaticOidcFlow(
flowId,
currentUrl,
currentUrl,
(error, message, app) =>
returnError(
{
redirect_uri: flow.application?.redirectUri,
client_id: flow.application?.clientId,
response_type: "code",
scope: flow.application?.scopes,
...manager.processOAuth2Error(app),
link: link ? "true" : undefined,
},
error,
message,