| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // @ts-check
- import Settings from '@overleaf/settings'
- import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
- import AuthenticationController from '../Authentication/AuthenticationController.mjs'
- import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
- import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
- import HistoryController from './HistoryController.mjs'
- const rateLimiters = {
- downloadProjectRevision: new RateLimiter('download-project-revision', {
- points: 30,
- duration: 60 * 60,
- }),
- getProjectBlob: new RateLimiter('get-project-blob', {
- // Download project in full once per hour
- points: Settings.maxEntitiesPerProject,
- duration: 60 * 60,
- }),
- flushHistory: new RateLimiter('flush-project-history', {
- points: 30,
- duration: 60,
- }),
- }
- function apply(webRouter, privateApiRouter) {
- // Blobs
- webRouter.head(
- '/project/:project_id/blob/:hash',
- RateLimiterMiddleware.rateLimit(rateLimiters.getProjectBlob),
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.headBlob
- )
- webRouter.get(
- '/project/:project_id/blob/:hash',
- RateLimiterMiddleware.rateLimit(rateLimiters.getProjectBlob),
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.getBlob
- )
- // History diffs
- webRouter.get(
- '/project/:Project_id/updates',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.proxyToHistoryApiAndInjectUserDetails
- )
- webRouter.get(
- '/project/:Project_id/doc/:doc_id/diff',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.proxyToHistoryApi
- )
- webRouter.get(
- '/project/:Project_id/diff',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.proxyToHistoryApiAndInjectUserDetails
- )
- webRouter.get(
- '/project/:Project_id/filetree/diff',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.proxyToHistoryApi
- )
- // File and project restore
- webRouter.post(
- '/project/:project_id/restore_file',
- AuthorizationMiddleware.ensureUserCanWriteProjectContent,
- HistoryController.restoreFileFromV2
- )
- webRouter.post(
- '/project/:project_id/revert_file',
- AuthorizationMiddleware.ensureUserCanWriteProjectContent,
- HistoryController.revertFile
- )
- webRouter.post(
- '/project/:project_id/revert-project',
- AuthorizationMiddleware.ensureUserCanWriteProjectContent,
- HistoryController.revertProject
- )
- // History download
- webRouter.get(
- '/project/:project_id/version/:version/zip',
- RateLimiterMiddleware.rateLimit(rateLimiters.downloadProjectRevision),
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.downloadZipOfVersion
- )
- // History flush and resync
- webRouter.post(
- '/project/:Project_id/flush',
- RateLimiterMiddleware.rateLimit(rateLimiters.flushHistory),
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.proxyToHistoryApi
- )
- privateApiRouter.post(
- '/project/:Project_id/history/resync',
- AuthenticationController.requirePrivateApiAuth(),
- HistoryController.resyncProjectHistory
- )
- // History labels
- webRouter.get(
- '/project/:Project_id/labels',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.getLabels
- )
- webRouter.post(
- '/project/:Project_id/labels',
- AuthorizationMiddleware.ensureUserCanWriteOrReviewProjectContent,
- HistoryController.createLabel
- )
- webRouter.delete(
- '/project/:Project_id/labels/:label_id',
- AuthorizationMiddleware.ensureUserCanWriteOrReviewProjectContent,
- HistoryController.deleteLabel
- )
- // History snapshot
- webRouter.get(
- '/project/:project_id/latest/history',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.getLatestHistory
- )
- webRouter.get(
- '/project/:project_id/changes',
- AuthorizationMiddleware.blockRestrictedUserFromProject,
- AuthorizationMiddleware.ensureUserCanReadProject,
- HistoryController.getChanges
- )
- }
- export default { apply }
|