59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
const { outputProcessing } = require("../../utilities/rowProcessor")
|
|
const { InternalTables } = require("../../db/utils")
|
|
const { getFullUser } = require("../../utilities/users")
|
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
|
|
exports.fetchSelf = async ctx => {
|
|
let userId = ctx.user.userId || ctx.user._id
|
|
/* istanbul ignore next */
|
|
if (!userId) {
|
|
ctx.body = {}
|
|
return
|
|
}
|
|
|
|
const user = await getFullUser(ctx, userId)
|
|
// this shouldn't be returned by the app self
|
|
delete user.roles
|
|
// forward the csrf token from the session
|
|
user.csrfToken = ctx.user.csrfToken
|
|
|
|
if (getAppId()) {
|
|
const db = getAppDB()
|
|
// remove the full roles structure
|
|
delete user.roles
|
|
try {
|
|
const userTable = await db.get(InternalTables.USER_METADATA)
|
|
const metadata = await db.get(userId)
|
|
// make sure there is never a stale csrf token
|
|
delete metadata.csrfToken
|
|
// specifically needs to make sure is enriched
|
|
ctx.body = await outputProcessing(userTable, {
|
|
...user,
|
|
...metadata,
|
|
})
|
|
} catch (err) {
|
|
let response
|
|
// user didn't exist in app, don't pretend they do
|
|
if (user.roleId === BUILTIN_ROLE_IDS.PUBLIC) {
|
|
response = {}
|
|
}
|
|
// user has a role of some sort, return them
|
|
else if (err.status === 404) {
|
|
const metadata = {
|
|
...user,
|
|
_id: userId,
|
|
}
|
|
const dbResp = await db.put(metadata)
|
|
user._rev = dbResp.rev
|
|
response = user
|
|
} else {
|
|
response = user
|
|
}
|
|
ctx.body = response
|
|
}
|
|
} else {
|
|
ctx.body = user
|
|
}
|
|
}
|