More typing fixes.
This commit is contained in:
parent
2a31aca37a
commit
10c1c18f16
|
@ -83,6 +83,7 @@
|
||||||
"@types/semver": "7.3.7",
|
"@types/semver": "7.3.7",
|
||||||
"@types/tar-fs": "2.0.1",
|
"@types/tar-fs": "2.0.1",
|
||||||
"@types/uuid": "8.3.4",
|
"@types/uuid": "8.3.4",
|
||||||
|
"@types/koa": "2.13.4",
|
||||||
"chance": "1.1.8",
|
"chance": "1.1.8",
|
||||||
"ioredis-mock": "8.9.0",
|
"ioredis-mock": "8.9.0",
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Ctx } from "@budibase/types"
|
import { Ctx } from "@budibase/types"
|
||||||
import { Middleware, Next } from "koa"
|
import type { Middleware, Next } from "koa"
|
||||||
|
|
||||||
// this middleware exists purely to be overridden by middlewares supplied by the @budibase/pro library
|
// this middleware exists purely to be overridden by middlewares supplied by the @budibase/pro library
|
||||||
const middleware = (async (ctx: Ctx, next: Next) => {
|
const middleware = (async (ctx: Ctx, next: Next) => {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import {
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import { ErrorCode, InvalidAPIKeyError } from "../errors"
|
import { ErrorCode, InvalidAPIKeyError } from "../errors"
|
||||||
import tracer from "dd-trace"
|
import tracer from "dd-trace"
|
||||||
|
import type { Middleware, Next } from "koa"
|
||||||
|
|
||||||
const ONE_MINUTE = env.SESSION_UPDATE_PERIOD
|
const ONE_MINUTE = env.SESSION_UPDATE_PERIOD
|
||||||
? parseInt(env.SESSION_UPDATE_PERIOD)
|
? parseInt(env.SESSION_UPDATE_PERIOD)
|
||||||
|
@ -94,6 +95,14 @@ async function checkApiKey(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getHeader(ctx: Ctx, header: Header): string | undefined {
|
||||||
|
const contents = ctx.request.headers[header]
|
||||||
|
if (Array.isArray(contents)) {
|
||||||
|
throw new Error("Unexpected header format")
|
||||||
|
}
|
||||||
|
return contents
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This middleware is tenancy aware, so that it does not depend on other middlewares being used.
|
* This middleware is tenancy aware, so that it does not depend on other middlewares being used.
|
||||||
* The tenancy modules should not be used here and it should be assumed that the tenancy context
|
* The tenancy modules should not be used here and it should be assumed that the tenancy context
|
||||||
|
@ -106,9 +115,9 @@ export default function (
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const noAuthOptions = noAuthPatterns ? buildMatcherRegex(noAuthPatterns) : []
|
const noAuthOptions = noAuthPatterns ? buildMatcherRegex(noAuthPatterns) : []
|
||||||
return async (ctx: Ctx | any, next: any) => {
|
return (async (ctx: Ctx, next: Next) => {
|
||||||
let publicEndpoint = false
|
let publicEndpoint = false
|
||||||
const version = ctx.request.headers[Header.API_VER]
|
const version = getHeader(ctx, Header.API_VER)
|
||||||
// the path is not authenticated
|
// the path is not authenticated
|
||||||
const found = matches(ctx, noAuthOptions)
|
const found = matches(ctx, noAuthOptions)
|
||||||
if (found) {
|
if (found) {
|
||||||
|
@ -116,18 +125,18 @@ export default function (
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
// check the actual user is authenticated first, try header or cookie
|
// check the actual user is authenticated first, try header or cookie
|
||||||
let headerToken = ctx.request.headers[Header.TOKEN]
|
let headerToken = getHeader(ctx, Header.TOKEN)
|
||||||
|
|
||||||
const authCookie =
|
const authCookie =
|
||||||
getCookie<SessionCookie>(ctx, Cookie.Auth) ||
|
getCookie<SessionCookie>(ctx, Cookie.Auth) ||
|
||||||
openJwt<SessionCookie>(headerToken)
|
openJwt<SessionCookie>(headerToken)
|
||||||
let apiKey = ctx.request.headers[Header.API_KEY]
|
let apiKey = getHeader(ctx, Header.API_KEY)
|
||||||
|
|
||||||
if (!apiKey && ctx.request.headers[Header.AUTHORIZATION]) {
|
if (!apiKey && ctx.request.headers[Header.AUTHORIZATION]) {
|
||||||
apiKey = ctx.request.headers[Header.AUTHORIZATION].split(" ")[1]
|
apiKey = ctx.request.headers[Header.AUTHORIZATION].split(" ")[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
const tenantId = ctx.request.headers[Header.TENANT_ID]
|
const tenantId = getHeader(ctx, Header.TENANT_ID)
|
||||||
let authenticated: boolean = false,
|
let authenticated: boolean = false,
|
||||||
user: User | { tenantId: string } | undefined = undefined,
|
user: User | { tenantId: string } | undefined = undefined,
|
||||||
internal: boolean = false,
|
internal: boolean = false,
|
||||||
|
@ -243,5 +252,5 @@ export default function (
|
||||||
ctx.throw(err.status || 403, err)
|
ctx.throw(err.status || 403, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}) as Middleware
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import {
|
||||||
GetTenantIdOptions,
|
GetTenantIdOptions,
|
||||||
TenantResolutionStrategy,
|
TenantResolutionStrategy,
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import { Next, Middleware } from "koa"
|
import type { Next, Middleware } from "koa"
|
||||||
|
|
||||||
export default function (
|
export default function (
|
||||||
allowQueryStringPatterns: EndpointMatcher[],
|
allowQueryStringPatterns: EndpointMatcher[],
|
||||||
|
|
Loading…
Reference in New Issue