A lot of general fixes around getting logged in, setting up users etc.
This commit is contained in:
parent
358b2aef89
commit
83db31f899
|
@ -4,7 +4,9 @@
|
|||
import { onMount } from "svelte"
|
||||
|
||||
let loaded = false
|
||||
$: multiTenancyEnabled = $admin.multiTenancy
|
||||
$: hasAdminUser = !!$admin?.checklist?.adminUser
|
||||
$: tenantSet = $auth.tenantSet
|
||||
|
||||
onMount(async () => {
|
||||
await admin.init()
|
||||
|
@ -14,7 +16,9 @@
|
|||
|
||||
// Force creation of an admin user if one doesn't exist
|
||||
$: {
|
||||
if (loaded && !hasAdminUser) {
|
||||
if (loaded && multiTenancyEnabled && !tenantSet) {
|
||||
$redirect("./auth/org")
|
||||
} else if (loaded && !hasAdminUser) {
|
||||
$redirect("./admin")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,15 +9,18 @@
|
|||
} from "@budibase/bbui"
|
||||
import { goto } from "@roxi/routify"
|
||||
import api from "builderStore/api"
|
||||
import { admin } from "stores/portal"
|
||||
import { admin, auth } from "stores/portal"
|
||||
import PasswordRepeatInput from "components/common/users/PasswordRepeatInput.svelte"
|
||||
import Logo from "assets/bb-emblem.svg"
|
||||
|
||||
let adminUser = {}
|
||||
let error
|
||||
|
||||
$: tenantId = $auth.tenantId
|
||||
|
||||
async function save() {
|
||||
try {
|
||||
adminUser.tenantId = tenantId
|
||||
// Save the admin user
|
||||
const response = await api.post(`/api/admin/users/init`, adminUser)
|
||||
const json = await response.json()
|
||||
|
@ -44,7 +47,6 @@
|
|||
</Body>
|
||||
</Layout>
|
||||
<Layout gap="XS" noPadding>
|
||||
<Input label="Organisation" bind:value={adminUser.tenantId} />
|
||||
<Input label="Email" bind:value={adminUser.email} />
|
||||
<PasswordRepeatInput bind:password={adminUser.password} bind:error />
|
||||
</Layout>
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
<script>
|
||||
import { redirect } from "@roxi/routify"
|
||||
// TODO: need to check if the tenant is already set
|
||||
$redirect("./org")
|
||||
import { auth, admin } from "stores/portal"
|
||||
import { onMount } from "svelte"
|
||||
|
||||
$: tenantSet = $auth.tenantSet
|
||||
$: multiTenancyEnabled = $admin.multiTenancy
|
||||
|
||||
let loaded = false
|
||||
|
||||
$: {
|
||||
console.log(loaded)
|
||||
if (loaded && multiTenancyEnabled && !tenantSet) {
|
||||
$redirect("./org")
|
||||
} else if (loaded) {
|
||||
$redirect("./login")
|
||||
}
|
||||
}
|
||||
|
||||
onMount(async () => {
|
||||
await admin.init()
|
||||
loaded = true
|
||||
})
|
||||
</script>
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
<script>
|
||||
import { Body, Button, Divider, Heading, Input, Layout } from "@budibase/bbui"
|
||||
import { goto } from "@roxi/routify"
|
||||
import { auth } from "stores/portal"
|
||||
import { auth, admin } from "stores/portal"
|
||||
import Logo from "assets/bb-emblem.svg"
|
||||
|
||||
let tenantId = ""
|
||||
|
||||
async function setOrg() {
|
||||
auth.setOrg(tenantId)
|
||||
$goto("./login")
|
||||
// re-init now org selected
|
||||
await admin.init()
|
||||
$goto("../")
|
||||
}
|
||||
|
||||
function handleKeydown(evt) {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
$: {
|
||||
if (!$auth.user) {
|
||||
$redirect("./auth/login")
|
||||
$redirect("./auth")
|
||||
} else if ($auth.user.builder?.global) {
|
||||
$redirect("./portal")
|
||||
} else {
|
||||
|
|
|
@ -90,10 +90,13 @@
|
|||
}
|
||||
loading = false
|
||||
requireAuth = smtpConfig.config.auth != null
|
||||
console.log(requireAuth)
|
||||
// always attach the auth for the forms purpose -
|
||||
// this will be removed later if required
|
||||
smtpConfig.config.auth = {
|
||||
type: "login",
|
||||
if (!smtpDoc.config.auth) {
|
||||
smtpConfig.config.auth = {
|
||||
type: "login",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ import api from "builderStore/api"
|
|||
import { auth } from "stores/portal"
|
||||
|
||||
export function createAdminStore() {
|
||||
const { subscribe, set } = writable({})
|
||||
const admin = writable({})
|
||||
|
||||
async function init() {
|
||||
try {
|
||||
|
@ -20,19 +20,38 @@ export function createAdminStore() {
|
|||
0
|
||||
)
|
||||
|
||||
set({
|
||||
checklist: json,
|
||||
onboardingProgress: (stepsComplete / onboardingSteps.length) * 100,
|
||||
admin.update(store => {
|
||||
store.checklist = json
|
||||
store.onboardingProgress = (stepsComplete / onboardingSteps.length) * 100
|
||||
return store
|
||||
})
|
||||
await multiTenancyEnabled()
|
||||
} catch (err) {
|
||||
set({
|
||||
checklist: null,
|
||||
admin.update( store => {
|
||||
store.checklist = null
|
||||
return store
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function multiTenancyEnabled() {
|
||||
let enabled = false
|
||||
try {
|
||||
const response = await api.get(`/api/admin/tenants/enabled`)
|
||||
const json = await response.json()
|
||||
enabled = json.enabled
|
||||
} catch (err) {
|
||||
// just let it stay disabled
|
||||
}
|
||||
admin.update(store => {
|
||||
store.multiTenancy = enabled
|
||||
return store
|
||||
})
|
||||
return enabled
|
||||
}
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
subscribe: admin.subscribe,
|
||||
init,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ export function createAuthStore() {
|
|||
const auth = writable({
|
||||
user: null,
|
||||
tenantId: "default",
|
||||
tenantSet: false,
|
||||
})
|
||||
const store = derived(auth, $store => {
|
||||
let initials = null
|
||||
|
@ -28,6 +29,7 @@ export function createAuthStore() {
|
|||
return {
|
||||
user: $store.user,
|
||||
tenantId: $store.tenantId,
|
||||
tenantSet: $store.tenantSet,
|
||||
initials,
|
||||
isAdmin,
|
||||
isBuilder,
|
||||
|
@ -46,6 +48,7 @@ export function createAuthStore() {
|
|||
setOrg: tenantId => {
|
||||
auth.update(store => {
|
||||
store.tenantId = tenantId
|
||||
store.tenantSet = true
|
||||
return store
|
||||
})
|
||||
},
|
||||
|
|
|
@ -12,12 +12,11 @@ async function init() {
|
|||
INTERNAL_API_KEY: "budibase",
|
||||
MINIO_ACCESS_KEY: "budibase",
|
||||
MINIO_SECRET_KEY: "budibase",
|
||||
COUCH_DB_USER: "budibase",
|
||||
COUCH_DB_PASSWORD: "budibase",
|
||||
REDIS_URL: "localhost:6379",
|
||||
REDIS_PASSWORD: "budibase",
|
||||
MINIO_URL: "http://localhost:10000/",
|
||||
COUCH_DB_URL: "http://budibase:budibase@localhost:10000/db/",
|
||||
MULTI_TENANCY: false,
|
||||
}
|
||||
let envFile = ""
|
||||
Object.keys(envFileJson).forEach(key => {
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
exports.multiTenancyEnabled = async ctx => {
|
||||
const env = require("../../../environment")
|
||||
|
||||
exports.multiTenancyEnabled = async ctx => {
|
||||
ctx.body = {
|
||||
enabled: !!env.MULTI_TENANCY,
|
||||
}
|
||||
}
|
||||
|
||||
exports.exists = async ctx => {
|
||||
|
|
|
@ -41,6 +41,10 @@ const PUBLIC_ENDPOINTS = [
|
|||
route: "/api/admin/configs/public",
|
||||
method: "GET",
|
||||
},
|
||||
{
|
||||
route: "api/admin/tenants/enabled",
|
||||
method: "GET",
|
||||
}
|
||||
]
|
||||
|
||||
const router = new Router()
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
const Router = require("@koa/router")
|
||||
const controller = require("../../controllers/admin/tenants")
|
||||
const joiValidator = require("../../../middleware/joi-validator")
|
||||
const Joi = require("joi")
|
||||
const { TemplatePurpose, TemplateTypes } = require("../../../constants")
|
||||
const adminOnly = require("../../../middleware/adminOnly")
|
||||
|
||||
const router = Router()
|
||||
|
|
|
@ -2,6 +2,7 @@ const userRoutes = require("./admin/users")
|
|||
const configRoutes = require("./admin/configs")
|
||||
const workspaceRoutes = require("./admin/workspaces")
|
||||
const templateRoutes = require("./admin/templates")
|
||||
const tenantsRoutes = require("./admin/tenants")
|
||||
const emailRoutes = require("./admin/email")
|
||||
const authRoutes = require("./admin/auth")
|
||||
const roleRoutes = require("./admin/roles")
|
||||
|
@ -15,6 +16,7 @@ exports.routes = [
|
|||
authRoutes,
|
||||
appRoutes,
|
||||
templateRoutes,
|
||||
tenantsRoutes,
|
||||
emailRoutes,
|
||||
sessionRoutes,
|
||||
roleRoutes,
|
||||
|
|
|
@ -30,9 +30,7 @@ module.exports = {
|
|||
REDIS_URL: process.env.REDIS_URL,
|
||||
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
||||
INTERNAL_API_KEY: process.env.INTERNAL_API_KEY,
|
||||
/* TODO: to remove - once deployment removed */
|
||||
COUCH_DB_USERNAME: process.env.COUCH_DB_USERNAME,
|
||||
COUCH_DB_PASSWORD: process.env.COUCH_DB_PASSWORD,
|
||||
MULTI_TENANCY: process.env.MULTI_TENANCY,
|
||||
_set(key, value) {
|
||||
process.env[key] = value
|
||||
module.exports[key] = value
|
||||
|
|
Loading…
Reference in New Issue