Add support for profile photos; default image

This commit is contained in:
garrettmills
2020-05-18 22:55:08 -05:00
parent 2b2e7d2ebe
commit b8a0e957bb
18 changed files with 227 additions and 17 deletions

View File

@@ -1,9 +1,10 @@
const { Controller } = require('libflitter')
const Validator = require('email-validator')
const path = require('path')
class ProfileController extends Controller {
static get services() {
return [...super.services, 'models']
return [...super.services, 'models', 'utility']
}
async fetch(req, res, next) {
@@ -72,6 +73,45 @@ class ProfileController extends Controller {
return res.api()
}
async update_photo(req, res, next) {
const User = this.models.get('auth:User')
let user
if ( req.params.user_id === 'me' ) user = req.user
else user = await User.findById(req.params.user_id)
if ( !user )
return res.status(404)
.message('No user found with the specified ID.')
.api()
if ( !req?.uploads?.photo )
return res.status(400)
.message('Missing required field: file')
.api()
user.photo_file_id = req.uploads.photo.id
await user.save()
return res.api()
}
async get_photo(req, res, next) {
const User = this.models.get('auth:User')
let user
if ( req.params.user_id === 'me' ) user = req.user
else user = await User.findById(req.params.user_id)
if ( !user )
return res.status(404)
.message('No user found with the specified ID.')
.api()
const photo = await user.photo()
if ( photo ) return photo.send(res)
// The user does not have a profile. Send the default.
return res.sendFile(this.utility.path('app/assets/people.png'))
}
}
module.exports = exports = ProfileController