From d668fbe5935524bf9540efafb8c4e27db45ba906 Mon Sep 17 00:00:00 2001 From: Roland Bernard <rolbernard@unibz.it> Date: Sun, 16 May 2021 23:07:20 +0200 Subject: [PATCH] Geting user images no longer requires verification --- server/src/v1/user.ts | 92 ++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/server/src/v1/user.ts b/server/src/v1/user.ts index 2fa51c7..e670ca6 100644 --- a/server/src/v1/user.ts +++ b/server/src/v1/user.ts @@ -39,6 +39,53 @@ user.get('/name/:username', async (req, res) => { } }); +function sendRangedData(req: Request, res: Response, data: Buffer) { + res.setHeader('Accept-Ranges', 'bytes'); + const range = req.range(data.length); + if (typeof range === 'object' && range.type === 'bytes' && range.length === 1) { + res.status(206); + res.setHeader('Content-Range', `${range[0].start}\-${range[0].end}/${data.length}`); + res.send(data.slice(range[0].start, range[0].end+1)); + } else { + res.status(200); + res.send(data); + } +} + +user.get('/:uuid/image', async (req, res) => { + try { + const id = req.params.uuid; + if (validate(id)) { + const user = await database('users') + .select({ + image: 'users.image' + }) + .where({ id: id }); + if (user.length >= 1 && user[0].image) { + res.setHeader('Content-Type', 'image/png'); + sendRangedData(req, res, user[0].image); + } else if (user.length >= 1) { + res.status(404).send(); + } else { + res.status(404).json({ + status: 'error', + message: 'user not found', + }); + } + } else { + res.status(400).json({ + status: 'error', + message: 'malformed uuid', + }); + } + } catch (e) { + res.status(400).json({ + status: 'error', + message: 'failed get user', + }); + } +}); + user.use(requireVerification); user.get('/', async (req, res) => { @@ -258,49 +305,4 @@ user.get('/:uuid', async (req, res) => { } }); -function sendRangedData(req: Request, res: Response, data: Buffer) { - res.setHeader('Accept-Ranges', 'bytes'); - const range = req.range(data.length); - if (typeof range === 'object' && range.type === 'bytes' && range.length === 1) { - res.status(206); - res.setHeader('Content-Range', `${range[0].start}\-${range[0].end}/${data.length}`); - res.send(data.slice(range[0].start, range[0].end+1)); - } else { - res.status(200); - res.send(data); - } -} - -user.get('/:uuid/image', async (req, res) => { - try { - const id = req.params.uuid; - if (validate(id)) { - const user = await database('users') - .select({ - image: 'users.image' - }) - .where({ id: id }); - if (user.length >= 1) { - res.setHeader('Content-Type', 'image/png'); - sendRangedData(req, res, user[0].image); - } else { - res.status(404).json({ - status: 'error', - message: 'user not found', - }); - } - } else { - res.status(400).json({ - status: 'error', - message: 'malformed uuid', - }); - } - } catch (e) { - res.status(400).json({ - status: 'error', - message: 'failed get user', - }); - } -}); - export default user; -- GitLab