| const express = require('express'); |
|
|
| const { |
| getSharedMessages, |
| createSharedLink, |
| updateSharedLink, |
| getSharedLinks, |
| deleteSharedLink, |
| } = require('~/models/Share'); |
| const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); |
| const { isEnabled } = require('~/server/utils'); |
| const router = express.Router(); |
|
|
| |
| |
| |
| const allowSharedLinks = |
| process.env.ALLOW_SHARED_LINKS === undefined || isEnabled(process.env.ALLOW_SHARED_LINKS); |
|
|
| if (allowSharedLinks) { |
| const allowSharedLinksPublic = |
| process.env.ALLOW_SHARED_LINKS_PUBLIC === undefined || |
| isEnabled(process.env.ALLOW_SHARED_LINKS_PUBLIC); |
| router.get( |
| '/:shareId', |
| allowSharedLinksPublic ? (req, res, next) => next() : requireJwtAuth, |
| async (req, res) => { |
| try { |
| const share = await getSharedMessages(req.params.shareId); |
|
|
| if (share) { |
| res.status(200).json(share); |
| } else { |
| res.status(404).end(); |
| } |
| } catch (error) { |
| res.status(500).json({ message: 'Error getting shared messages' }); |
| } |
| }, |
| ); |
| } |
|
|
| |
| |
| |
| router.get('/', requireJwtAuth, async (req, res) => { |
| try { |
| let pageNumber = req.query.pageNumber || 1; |
| pageNumber = parseInt(pageNumber, 10); |
|
|
| if (isNaN(pageNumber) || pageNumber < 1) { |
| return res.status(400).json({ error: 'Invalid page number' }); |
| } |
|
|
| let pageSize = req.query.pageSize || 25; |
| pageSize = parseInt(pageSize, 10); |
|
|
| if (isNaN(pageSize) || pageSize < 1) { |
| return res.status(400).json({ error: 'Invalid page size' }); |
| } |
| const isPublic = req.query.isPublic === 'true'; |
| res.status(200).send(await getSharedLinks(req.user.id, pageNumber, pageSize, isPublic)); |
| } catch (error) { |
| res.status(500).json({ message: 'Error getting shared links' }); |
| } |
| }); |
|
|
| router.post('/', requireJwtAuth, async (req, res) => { |
| try { |
| const created = await createSharedLink(req.user.id, req.body); |
| if (created) { |
| res.status(200).json(created); |
| } else { |
| res.status(404).end(); |
| } |
| } catch (error) { |
| res.status(500).json({ message: 'Error creating shared link' }); |
| } |
| }); |
|
|
| router.patch('/', requireJwtAuth, async (req, res) => { |
| try { |
| const updated = await updateSharedLink(req.user.id, req.body); |
| if (updated) { |
| res.status(200).json(updated); |
| } else { |
| res.status(404).end(); |
| } |
| } catch (error) { |
| res.status(500).json({ message: 'Error updating shared link' }); |
| } |
| }); |
|
|
| router.delete('/:shareId', requireJwtAuth, async (req, res) => { |
| try { |
| const deleted = await deleteSharedLink(req.user.id, { shareId: req.params.shareId }); |
| if (deleted) { |
| res.status(200).json(deleted); |
| } else { |
| res.status(404).end(); |
| } |
| } catch (error) { |
| res.status(500).json({ message: 'Error deleting shared link' }); |
| } |
| }); |
|
|
| module.exports = router; |
|
|