implement publicData get methods

This commit is contained in:
srgooglo 2022-10-10 16:18:11 +02:00
parent fced4cdc04
commit 756517145f
3 changed files with 50 additions and 0 deletions

View File

@ -457,7 +457,14 @@ class App extends React.Component {
}
const user = await User.data()
await this.setState({ user })
const publicData = await User.publicData()
app.userData = {
...publicData,
}
}
render() {

View File

@ -15,6 +15,16 @@ export default class User {
return User.bridge.get.user(undefined, { username: token.username, _id: token.user_id })
}
static async publicData() {
const token = await Session.decodedToken()
if (!token) {
return false
}
return User.bridge.get.userPublicData({ username: token.username })
}
static async roles() {
const token = await Session.decodedToken()

View File

@ -13,6 +13,13 @@ const AllowedPublicUpdateFields = [
"description",
]
const AllowedAnonPublicGetters = [
"username",
"fullName",
"avatar",
"roles"
]
const MaxStringsLengths = {
fullName: 120,
email: 320,
@ -188,6 +195,32 @@ export default class UserController extends Controller {
})
}),
},
"/user/public_data": {
middlewares: ["withOptionalAuthentication"],
fn: async (req, res) => {
let user = req.query?.username ?? req.user.username
if (!user) {
return res.status(400).json({
error: "No user provided",
})
}
user = await User.findOne({
username: user,
}).catch(() => null)
if (!user) {
return res.json({
user: null,
})
}
user = _.pick(user, AllowedAnonPublicGetters)
return res.json(user)
}
},
"/self": {
middlewares: ["withAuthentication"],
fn: async (req, res) => {