mirror of https://github.com/Budibase/budibase.git
committed by
GitHub
22 changed files with 230 additions and 3082 deletions
@ -0,0 +1 @@ |
|||
module.exports = require("./src/tenancy/deprovision") |
|||
@ -0,0 +1,81 @@ |
|||
const { getGlobalUserParams, getAllApps } = require("../db/utils") |
|||
const { getDB, getCouch } = require("../db") |
|||
const { getGlobalDB } = require("./tenancy") |
|||
const { StaticDatabases } = require("../db/constants") |
|||
|
|||
const TENANT_DOC = StaticDatabases.PLATFORM_INFO.docs.tenants |
|||
const PLATFORM_INFO_DB = StaticDatabases.PLATFORM_INFO.name |
|||
|
|||
const removeTenantFromInfoDB = async tenantId => { |
|||
try { |
|||
const infoDb = getDB(PLATFORM_INFO_DB) |
|||
let tenants = await infoDb.get(TENANT_DOC) |
|||
tenants.tenantIds = tenants.tenantIds.filter(id => id !== tenantId) |
|||
|
|||
await infoDb.put(tenants) |
|||
} catch (err) { |
|||
console.error(`Error removing tenant ${tenantId} from info db`, err) |
|||
throw err |
|||
} |
|||
} |
|||
|
|||
const removeUsersFromInfoDB = async tenantId => { |
|||
try { |
|||
const globalDb = getGlobalDB(tenantId) |
|||
const infoDb = getDB(PLATFORM_INFO_DB) |
|||
const allUsers = await globalDb.allDocs( |
|||
getGlobalUserParams(null, { |
|||
include_docs: true, |
|||
}) |
|||
) |
|||
const allEmails = allUsers.rows.map(row => row.doc.email) |
|||
// get the id docs
|
|||
let keys = allUsers.rows.map(row => row.id) |
|||
// and the email docs
|
|||
keys = keys.concat(allEmails) |
|||
// retrieve the docs and delete them
|
|||
const userDocs = await infoDb.allDocs({ |
|||
keys, |
|||
include_docs: true, |
|||
}) |
|||
const toDelete = userDocs.rows.map(row => { |
|||
return { |
|||
...row.doc, |
|||
_deleted: true, |
|||
} |
|||
}) |
|||
await infoDb.bulkDocs(toDelete) |
|||
} catch (err) { |
|||
console.error(`Error removing tenant ${tenantId} users from info db`, err) |
|||
throw err |
|||
} |
|||
} |
|||
|
|||
const removeGlobalDB = async tenantId => { |
|||
try { |
|||
const globalDb = getGlobalDB(tenantId) |
|||
await globalDb.destroy() |
|||
} catch (err) { |
|||
console.error(`Error removing tenant ${tenantId} users from info db`, err) |
|||
throw err |
|||
} |
|||
} |
|||
|
|||
const removeTenantApps = async tenantId => { |
|||
try { |
|||
const apps = await getAllApps(getCouch(), { all: true }) |
|||
const destroyPromises = apps.map(app => getDB(app.appId).destroy()) |
|||
await Promise.allSettled(destroyPromises) |
|||
} catch (err) { |
|||
console.error(`Error removing tenant ${tenantId} apps`, err) |
|||
throw err |
|||
} |
|||
} |
|||
|
|||
// can't live in tenancy package due to circular dependency on db/utils
|
|||
exports.deleteTenant = async tenantId => { |
|||
await removeTenantFromInfoDB(tenantId) |
|||
await removeUsersFromInfoDB(tenantId) |
|||
await removeGlobalDB(tenantId) |
|||
await removeTenantApps(tenantId) |
|||
} |
|||
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
Loading…
Reference in new issue