Merge branch 'master' into develop
This commit is contained in:
commit
abbd8c5c8b
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"version": "2.6.19-alpha.54",
|
||||
"version": "2.6.23",
|
||||
"npmClient": "yarn",
|
||||
"packages": [
|
||||
"packages/backend-core",
|
||||
|
|
|
@ -86,6 +86,7 @@ const getCurrentIdentity = async (): Promise<Identity> => {
|
|||
installationId,
|
||||
tenantId,
|
||||
environment,
|
||||
realTenantId: context.getTenantId(),
|
||||
hostInfo: userContext.hostInfo,
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit cd06642b860111aa1bd3443ee10076ca3abf03c3
|
||||
Subproject commit 65a626155bbb4702b8dd4dbe06e99f2c47d47698
|
|
@ -14,6 +14,7 @@ import {
|
|||
SearchFilters,
|
||||
Table,
|
||||
} from "@budibase/types"
|
||||
import { db as dbCore } from "@budibase/backend-core"
|
||||
|
||||
enum SortOrder {
|
||||
ASCENDING = "ascending",
|
||||
|
@ -121,7 +122,11 @@ function typeCoercion(filters: SearchFilters, table: Table) {
|
|||
const searchParam = filters[key]
|
||||
if (typeof searchParam === "object") {
|
||||
for (let [property, value] of Object.entries(searchParam)) {
|
||||
const column = table.schema[property]
|
||||
// We need to strip numerical prefixes here, so that we can look up
|
||||
// the correct field name in the schema
|
||||
const columnName = dbCore.removeKeyNumbering(property)
|
||||
const column = table.schema[columnName]
|
||||
|
||||
// convert string inputs
|
||||
if (!column || typeof value !== "string") {
|
||||
continue
|
||||
|
|
|
@ -38,6 +38,9 @@ const SCHEMA: Integration = {
|
|||
type: "password",
|
||||
required: true,
|
||||
},
|
||||
role: {
|
||||
type: "string",
|
||||
},
|
||||
warehouse: {
|
||||
type: "string",
|
||||
required: true,
|
||||
|
|
|
@ -7,7 +7,7 @@ import {
|
|||
InternalTables,
|
||||
} from "../../db/utils"
|
||||
import { isEqual } from "lodash"
|
||||
import { ContextUser, UserMetadata, User } from "@budibase/types"
|
||||
import { ContextUser, UserMetadata, User, Database } from "@budibase/types"
|
||||
|
||||
export function combineMetadataAndUser(
|
||||
user: ContextUser,
|
||||
|
@ -51,8 +51,10 @@ export function combineMetadataAndUser(
|
|||
return null
|
||||
}
|
||||
|
||||
export async function rawUserMetadata() {
|
||||
const db = context.getAppDB()
|
||||
export async function rawUserMetadata(db?: Database) {
|
||||
if (!db) {
|
||||
db = context.getAppDB()
|
||||
}
|
||||
return (
|
||||
await db.allDocs(
|
||||
getUserMetadataParams(null, {
|
||||
|
@ -64,30 +66,36 @@ export async function rawUserMetadata() {
|
|||
|
||||
export async function syncGlobalUsers() {
|
||||
// sync user metadata
|
||||
const db = context.getAppDB()
|
||||
const resp = await Promise.all([getGlobalUsers(), rawUserMetadata()])
|
||||
const users = resp[0] as User[]
|
||||
const metadata = resp[1] as UserMetadata[]
|
||||
const toWrite = []
|
||||
for (let user of users) {
|
||||
const combined = combineMetadataAndUser(user, metadata)
|
||||
if (combined) {
|
||||
toWrite.push(combined)
|
||||
}
|
||||
}
|
||||
let foundEmails: string[] = []
|
||||
for (let data of metadata) {
|
||||
if (!data._id) {
|
||||
const dbs = [context.getDevAppDB(), context.getProdAppDB()]
|
||||
for (let db of dbs) {
|
||||
if (!(await db.exists())) {
|
||||
continue
|
||||
}
|
||||
const alreadyExisting = data.email && foundEmails.indexOf(data.email) !== -1
|
||||
const globalId = getGlobalIDFromUserMetadataID(data._id)
|
||||
if (!users.find(user => user._id === globalId) || alreadyExisting) {
|
||||
toWrite.push({ ...data, _deleted: true })
|
||||
const resp = await Promise.all([getGlobalUsers(), rawUserMetadata(db)])
|
||||
const users = resp[0] as User[]
|
||||
const metadata = resp[1] as UserMetadata[]
|
||||
const toWrite = []
|
||||
for (let user of users) {
|
||||
const combined = combineMetadataAndUser(user, metadata)
|
||||
if (combined) {
|
||||
toWrite.push(combined)
|
||||
}
|
||||
}
|
||||
if (data.email) {
|
||||
foundEmails.push(data.email)
|
||||
let foundEmails: string[] = []
|
||||
for (let data of metadata) {
|
||||
if (!data._id) {
|
||||
continue
|
||||
}
|
||||
const alreadyExisting =
|
||||
data.email && foundEmails.indexOf(data.email) !== -1
|
||||
const globalId = getGlobalIDFromUserMetadataID(data._id)
|
||||
if (!users.find(user => user._id === globalId) || alreadyExisting) {
|
||||
toWrite.push({ ...data, _deleted: true })
|
||||
}
|
||||
if (data.email) {
|
||||
foundEmails.push(data.email)
|
||||
}
|
||||
}
|
||||
await db.bulkDocs(toWrite)
|
||||
}
|
||||
await db.bulkDocs(toWrite)
|
||||
}
|
||||
|
|
|
@ -122,11 +122,8 @@ export async function getGlobalUsers(
|
|||
delete user.forceResetPassword
|
||||
return user
|
||||
})
|
||||
if (!appId) {
|
||||
return globalUsers
|
||||
}
|
||||
|
||||
if (opts?.noProcessing) {
|
||||
if (opts?.noProcessing || !appId) {
|
||||
return globalUsers
|
||||
} else {
|
||||
// pass in the groups, meaning we don't actually need to retrieve them for
|
||||
|
|
Loading…
Reference in New Issue