From acdf11ebc49dbc86ef85eedae5facc2a1d3f1434 Mon Sep 17 00:00:00 2001
From: Louis Capitanchik <contact@louiscap.co>
Date: Thu, 13 May 2021 03:00:36 +0100
Subject: [PATCH] Set up v2 router

---
 src/http/middleware/groups.js | 15 +++++++
 src/http/routers/routes_v2.js | 77 +++++++++++++++++++++++++++++++++++
 src/vendor/sentry.js          |  2 +-
 3 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 src/http/middleware/groups.js
 create mode 100644 src/http/routers/routes_v2.js

diff --git a/src/http/middleware/groups.js b/src/http/middleware/groups.js
new file mode 100644
index 0000000..8fd1ec9
--- /dev/null
+++ b/src/http/middleware/groups.js
@@ -0,0 +1,15 @@
+const context = require('http/middleware/ThreadContextWrapper')
+const errors = require('http/middleware/ErrorHandler')
+const includes = require('http/middleware/ParseIncludes')
+const profiling = require('http/middleware/Profiler')
+const loaders = require('http/middleware/MountLoaders')
+const device = require('http/middleware/DeviceProperties').extractDevice
+
+exports.apiMiddlewareGroup = [
+	context,
+	profiling,
+	errors,
+	includes,
+	loaders,
+	device,
+]
diff --git a/src/http/routers/routes_v2.js b/src/http/routers/routes_v2.js
new file mode 100644
index 0000000..cc55705
--- /dev/null
+++ b/src/http/routers/routes_v2.js
@@ -0,0 +1,77 @@
+const Router = require('@koa/router')
+const { apiMiddlewareGroup } = require('../middleware/groups')
+const router = new Router()
+
+const controller = (path, handler) => require(`../controllers/${path}`)[handler]
+const param = name => require(`../params/${name}`)
+
+apiMiddlewareGroup.forEach(middleware => router.use(middleware))
+
+router.post('/auth/login')
+router.post('/auth/register')
+router.post('/auth/password-reset')
+
+router.get('/self')
+router.get('/self/bundles')
+router.get('/self/:property')
+
+router.get('/metrics')
+router.post('/metrics')
+
+router.get('/images')
+router.post('/images')
+router.post('/images/:imageId/share')
+
+router.post('/an/ev', controller('api/analytics', 'track'))
+
+api.post('/metrics', controller('api/content', 'postMetric'))
+api.get('/metrics', controller('api/content', 'getWithin'))
+
+api.get('/images', controller('api/storage', 'getFiles'))
+api.post(
+	'/images',
+	upload.single('featured_image'),
+	controller('api/storage', 'saveFile'),
+)
+api.post('/images/:imageId/feature', controller('api/storage', 'featureImage'))
+
+/** @deprecated */
+api.post(
+	'/feature',
+	upload.single('featured_image'),
+	controller('api/storage', 'saveFile'),
+)
+
+api.get('/feed', controller('api/storage', 'feed'))
+api.post('/feed/:fileId/like', controller('api/storage', 'like'))
+api.post('/feed/:fileId/unlike', controller('api/storage', 'unlike'))
+
+api.post('/register', controller('api/auth', 'register'))
+api.post('/login', controller('api/auth', 'login'))
+
+api.post('/auth/reset-token', controller('api/auth', 'triggerPasswordReset'))
+api.post('/auth/reset-password', controller('api/auth', 'handlePasswordReset'))
+
+api.param('oauthClientId', param('oauth_client'))
+
+api.get('/oauth/clients', controller('api/oauth', 'listClients'))
+api.post('/oauth/clients', controller('api/oauth', 'createClient'))
+api.post(
+	'/oauth/clients/:oauthClientId/redirects',
+	controller('api/oauth', 'addClientRedirect'),
+)
+api.delete(
+	'/oauth/clients/:oauthClientId/redirects',
+	controller('api/oauth', 'removeClientRedirect'),
+)
+
+api.get('/self', controller('api/user', 'self'))
+api.get('/self/bundles', controller('api/app', 'getBundles'))
+api.put('/self/:property', controller('api/user', 'updateOne'))
+
+api.post('/an/id', async ctx => {})
+api.post('/an/ev', controller('api/analytics', 'track'))
+
+api.post('/feedback', controller('api/feedback', 'send'))
+
+module.exports = router
diff --git a/src/vendor/sentry.js b/src/vendor/sentry.js
index 84f12e2..afd80ed 100644
--- a/src/vendor/sentry.js
+++ b/src/vendor/sentry.js
@@ -1,7 +1,7 @@
 const Sentry = require('@sentry/node')
 const Tracing = require('@sentry/tracing')
 
-const blockedPaths = new Set(['/api/.secure/jwks', '/api'])
+const blockedPaths = new Set(['/api/.secure/jwks', '/api', '/api/an/ev'])
 
 exports.configure = function () {
 	const pkg = require('../../package.json')
-- 
GitLab