diff --git a/packages/backend-core/src/context/identity.ts b/packages/backend-core/src/context/identity.ts
index 84de3b68c9..41f4b1eb66 100644
--- a/packages/backend-core/src/context/identity.ts
+++ b/packages/backend-core/src/context/identity.ts
@@ -27,7 +27,7 @@ export function doInUserContext(user: User, ctx: Ctx, task: any) {
hostInfo: {
ipAddress: ctx.request.ip,
// filled in by koa-useragent package
- userAgent: ctx.userAgent._agent.source,
+ userAgent: ctx.userAgent.source,
},
}
return doInIdentityContext(userContext, task)
diff --git a/packages/backend-core/src/middleware/authenticated.ts b/packages/backend-core/src/middleware/authenticated.ts
index 85aa2293ef..b713f509e0 100644
--- a/packages/backend-core/src/middleware/authenticated.ts
+++ b/packages/backend-core/src/middleware/authenticated.ts
@@ -1,20 +1,26 @@
import { Cookie, Header } from "../constants"
import {
- getCookie,
clearCookie,
- openJwt,
+ getCookie,
isValidInternalAPIKey,
+ openJwt,
} from "../utils"
import { getUser } from "../cache/user"
import { getSession, updateSessionTTL } from "../security/sessions"
import { buildMatcherRegex, matches } from "./matchers"
-import { SEPARATOR, queryGlobalView, ViewName } from "../db"
-import { getGlobalDB, doInTenant } from "../context"
+import { queryGlobalView, SEPARATOR, ViewName } from "../db"
+import { doInTenant, getGlobalDB } from "../context"
import { decrypt } from "../security/encryption"
import * as identity from "../context/identity"
import env from "../environment"
-import { Ctx, EndpointMatcher, SessionCookie, User } from "@budibase/types"
-import { InvalidAPIKeyError, ErrorCode } from "../errors"
+import {
+ Ctx,
+ EndpointMatcher,
+ LoginMethod,
+ SessionCookie,
+ User,
+} from "@budibase/types"
+import { ErrorCode, InvalidAPIKeyError } from "../errors"
import tracer from "dd-trace"
const ONE_MINUTE = env.SESSION_UPDATE_PERIOD
@@ -26,16 +32,18 @@ interface FinaliseOpts {
internal?: boolean
publicEndpoint?: boolean
version?: string
- user?: any
+ user?: User | { tenantId: string }
+ loginMethod?: LoginMethod
}
function timeMinusOneMinute() {
return new Date(Date.now() - ONE_MINUTE).toISOString()
}
-function finalise(ctx: any, opts: FinaliseOpts = {}) {
+function finalise(ctx: Ctx, opts: FinaliseOpts = {}) {
ctx.publicEndpoint = opts.publicEndpoint || false
ctx.isAuthenticated = opts.authenticated || false
+ ctx.loginMethod = opts.loginMethod
ctx.user = opts.user
ctx.internal = opts.internal || false
ctx.version = opts.version
@@ -120,9 +128,10 @@ export default function (
}
const tenantId = ctx.request.headers[Header.TENANT_ID]
- let authenticated = false,
- user = null,
- internal = false
+ let authenticated: boolean = false,
+ user: User | { tenantId: string } | undefined = undefined,
+ internal: boolean = false,
+ loginMethod: LoginMethod | undefined = undefined
if (authCookie && !apiKey) {
const sessionId = authCookie.sessionId
const userId = authCookie.userId
@@ -146,6 +155,7 @@ export default function (
}
// @ts-ignore
user.csrfToken = session.csrfToken
+ loginMethod = LoginMethod.COOKIE
if (session?.lastAccessedAt < timeMinusOneMinute()) {
// make sure we denote that the session is still in use
@@ -170,17 +180,16 @@ export default function (
apiKey,
populateUser
)
- if (valid && foundUser) {
+ if (valid) {
authenticated = true
+ loginMethod = LoginMethod.API_KEY
user = foundUser
- } else if (valid) {
- authenticated = true
- internal = true
+ internal = !foundUser
}
}
if (!user && tenantId) {
user = { tenantId }
- } else if (user) {
+ } else if (user && "password" in user) {
delete user.password
}
// be explicit
@@ -204,7 +213,14 @@ export default function (
}
// isAuthenticated is a function, so use a variable to be able to check authed state
- finalise(ctx, { authenticated, user, internal, version, publicEndpoint })
+ finalise(ctx, {
+ authenticated,
+ user,
+ internal,
+ version,
+ publicEndpoint,
+ loginMethod,
+ })
if (isUser(user)) {
return identity.doInUserContext(user, ctx, next)
diff --git a/packages/builder/src/components/commandPalette/CommandPalette.svelte b/packages/builder/src/components/commandPalette/CommandPalette.svelte
index f48fdf4929..51a688fc72 100644
--- a/packages/builder/src/components/commandPalette/CommandPalette.svelte
+++ b/packages/builder/src/components/commandPalette/CommandPalette.svelte
@@ -22,7 +22,7 @@
} from "stores/builder"
import { themeStore } from "stores/portal"
import { getContext } from "svelte"
- import { Constants } from "@budibase/frontend-core"
+ import { ThemeOptions } from "@budibase/shared-core"
const modalContext = getContext(Context.Modal)
const commands = [
@@ -141,13 +141,13 @@
icon: "ShareAndroid",
action: () => $goto(`./automation/${automation._id}`),
})) ?? []),
- ...Constants.Themes.map(theme => ({
+ ...ThemeOptions.map(themeMeta => ({
type: "Change Builder Theme",
- name: theme.name,
+ name: themeMeta.name,
icon: "ColorPalette",
action: () =>
themeStore.update(state => {
- state.theme = theme.class
+ state.theme = themeMeta.id
return state
}),
})),
diff --git a/packages/builder/src/components/integration/QueryEditor.svelte b/packages/builder/src/components/integration/QueryEditor.svelte
index 97998c3d22..995451b7e3 100644
--- a/packages/builder/src/components/integration/QueryEditor.svelte
+++ b/packages/builder/src/components/integration/QueryEditor.svelte
@@ -3,6 +3,7 @@
import { Label } from "@budibase/bbui"
import { onMount, createEventDispatcher } from "svelte"
import { themeStore } from "stores/portal"
+ import { Theme } from "@budibase/types"
const dispatch = createEventDispatcher()
@@ -116,7 +117,7 @@
readOnly,
autoCloseBrackets: true,
autoCloseTags: true,
- theme: $themeStore.theme.includes("light") ? THEMES.LIGHT : THEMES.DARK,
+ theme: $themeStore.theme === Theme.LIGHT ? THEMES.LIGHT : THEMES.DARK,
}
if (!tab)
diff --git a/packages/builder/src/components/settings/ThemeModal.svelte b/packages/builder/src/components/settings/ThemeModal.svelte
index cd1649fcb4..7bc3c1efa3 100644
--- a/packages/builder/src/components/settings/ThemeModal.svelte
+++ b/packages/builder/src/components/settings/ThemeModal.svelte
@@ -1,15 +1,15 @@
diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Screen/AppThemeSelect.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Screen/AppThemeSelect.svelte
index 75a7598a60..eb7a839b22 100644
--- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Screen/AppThemeSelect.svelte
+++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/_components/Screen/AppThemeSelect.svelte
@@ -1,11 +1,11 @@