Profile Pictures!

This commit is contained in:
Wingy 2021-09-15 02:41:44 -04:00
parent 8e79266da4
commit 5ac965eac4
19 changed files with 103 additions and 32 deletions

View file

@ -11,7 +11,7 @@ const SECRET_TOKEN_LIFETIME =
24 * // hours
7 // days
module.exports = (db) => {
module.exports = ({ db, ensurePfp }) => {
const router = express.Router()
router.get('/', verifyAuth(), (req, res) => {
@ -25,15 +25,16 @@ module.exports = (db) => {
router.post('/add', verifyAuth(), async (req, res) => {
if (!req.user.admin) return res.redirect('/')
const username = req.body.newUserUsername.trim()
await db.put({
_id: req.body.newUserUsername.trim(),
_id: username,
admin: false,
wishlist: [],
signupToken: nanoid(SECRET_TOKEN_LENGTH),
expiry: new Date().getTime() + SECRET_TOKEN_LIFETIME
})
await ensurePfp(username)
res.redirect(`/admin-settings/edit/${req.body.newUserUsername.trim()}`)
})

View file

@ -1,8 +1,24 @@
const publicRoute = require('../middlewares/publicRoute')
const express = require('express')
const path = require('path')
const fs = require('fs/promises')
module.exports = ({ db, config }) => {
async function ensurePfp (username) {
const user = await db.get(username)
console.log(user)
if (user.pfp) return
const { rows } = await db.allDocs({ include_docs: true })
const unfilteredPool = await fs.readdir('static/img/default-pfps')
const filteredPool = unfilteredPool.filter(file => !rows.find(row => row.doc.pfp === `${_CC.config.base}img/default-pfps/${file}`))
const pool = filteredPool.length ? filteredPool : unfilteredPool
user.pfp = `${_CC.config.base}img/default-pfps/${_CC._.sample(pool)}`
await db.put(user)
}
const router = express.Router()
router.use('/', express.static(path.join(__dirname, '../static')))
@ -26,7 +42,7 @@ module.exports = ({ db, config }) => {
router.use('/setup', require('./setup')(db))
router.use('/login', require('./login')())
router.use('/login', require('./login')({ ensurePfp }))
router.use('/logout', require('./logout')())
router.use('/resetpw', require('./resetpw')(db))
router.use('/confirm-account', require('./confirm-account')(db))
@ -34,9 +50,9 @@ module.exports = ({ db, config }) => {
router.use('/wishlist', require('./wishlist')(db))
router.use('/supported-sites', require('./supported-sites')())
router.use('/profile', require('./profile')(db))
router.use('/profile', require('./profile')({ db, ensurePfp }))
router.use('/admin-settings', require('./adminSettings')(db))
router.use('/admin-settings', require('./adminSettings')({ db, ensurePfp }))
router.use('/manifest.json', require('./manifest.json')({ config }))

View file

@ -2,10 +2,20 @@ const verifyAuth = require('../../middlewares/verifyAuth')
const bcrypt = require('bcrypt-nodejs')
const express = require('express')
module.exports = (db) => {
module.exports = ({ db, ensurePfp }) => {
const router = express.Router()
router.get('/', verifyAuth(), (req, res) => res.render('profile', { title: `Profile Settings - ${req.user._id}` }))
router.get('/', verifyAuth(), async (req, res) => {
await ensurePfp(req.user._id)
res.render('profile', { title: `Profile Settings - ${req.user._id}` })
})
router.post('/pfp', verifyAuth(), async (req, res) => {
req.user.pfp = req.body.image
await db.put(req.user)
if (!req.user.pfp) await ensurePfp(req.user._id)
req.flash('success', 'Saved profile picture!')
res.redirect(`${_CC.config.base}profile`)
})
router.post('/', verifyAuth(), (req, res) => {
if (req.body.oldPassword && req.body.newPassword) {
bcrypt.compare(req.body.oldPassword, req.user.password, (err, correct) => {