Newer
Older
const controller = (name, method) => require(`./controllers/${name}`)[method]
const param = name => require(`./params/${name}`)

Louis
committed
const AuthServer = require('domain/auth/AuthServer')
const { env, config } = require('bootstrap')
const Router = require('@koa/router')
const multer = require('@koa/multer')
const upload = multer({ dest: '/tmp/' })
const attach = require('koa-mount')

Louis
committed
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 userGate = require('http/middleware/RequiresAuth')
const authRedirect = require('http/middleware/RedirectToLogin')
const device = require('http/middleware/DeviceProperties').extractDevice

Louis
committed
const safemode = require('http/middleware/SafeModeBlock')
const createOIDCServer = require('domain/auth/oidc/OIDCServer')
const v2 = require('./routers/routes_v2')
const well_known = new Router({ prefix: '/.well-known' })
well_known.get('wk.jwks', '/jwks.json', async ctx => {
ctx.set('Cache-Control', `public, max-age=30`)
well_known.get('wk.oidc', '/openid-configuration', controller('oidc', 'mapRoutes'))
web.all('/test/oidc', ctx => {
ctx.body = {
body: ctx.request.body,
query: ctx.request.query,
headers: ctx.request.headers,
}
})
web.use(well_known.allowedMethods())
web.use(well_known.routes())
web.all('/oidc/i/:uid', controller('oidc', 'interaction'))
web.all('/oidc/i/:uid/login', controller('oidc', 'handleLogin'))
web.all('/oidc/i/:uid/confirm', controller('oidc', 'confirm'))
web.all('/oidc/i/:uid/reject', controller('oidc', 'reject'))
web.all(/^\/oidc\/.*/, controller('oidc', 'mapRoutes'))
web.get('/login', controller('auth', 'showLogin'))
web.post('/login', controller('auth', 'login'))
web.get('/logout', controller('auth', 'logout'))
web.get('/reset-password', controller('auth', 'resetPassword'))
web.post('/reset-password', controller('auth', 'handleResetPassword'))
web.get('/auth/authorize', authRedirect, AuthServer.authorize)
web.post('/auth/authorize', AuthServer.authorize)
env('FS_DRIVER', 'local') === 'local' &&
(function () {
const debug = require('debug')('server:routes')
debug('Mounting local file upload routes for signed URLs')
const p = `${config('fs.url')}/:uid/:fid`
web.put(
p,
errors,
includes,
loaders,
userGate,
upload.single('file'),
controller('fs_local', 'uploadFile'),
)
web.get(p, errors, includes, loaders, controller('fs_local', 'serveFile'))
debug(`Mounted GET ${p} to serve local files`)
debug(`Mounted PUT ${p} to upload local files`)
})()
const apiRouter = new Router({ prefix: '/api' })
const apiLegacy = new Router({ prefix: '/api/api' })

Louis
committed
api.use(context)
api.use(profiling)
api.use(errors)
api.get('/', ctx => {
const pkg = require('../../package.json')
ctx.body = {
name: 'Jetsam Data API',
version: pkg.version,
prefix: ctx.path,

Louis
committed
api.post('/metrics', safemode, controller('api/content', 'postMetric'))
api.get('/metrics', controller('api/content', 'getWithin'))

Louis
committed
safemode,
upload.single('featured_image'),
controller('api/storage', 'saveFile'),
)
api.post(
'/images/:imageId/feature',

Louis
committed
safemode,

Louis
committed
safemode,
upload.single('featured_image'),
controller('api/storage', 'saveFile'),
)

Louis
committed
api.post('/feed/:fileId/like', safemode, controller('api/storage', 'like'))
api.post('/feed/:fileId/unlike', safemode, controller('api/storage', 'unlike'))

Louis
committed
api.post('/register', safemode, controller('api/auth', 'register'))

Louis
committed
api.post('/auth/reset-token', safemode, controller('api/auth', 'triggerPasswordReset'))

Louis
committed
safemode,

Louis
committed
api.param('oauthClientId', param('oauth_client'))
api.get('/oauth/clients', controller('api/oauth', 'listClients'))

Louis
committed
api.post('/oauth/clients', safemode, controller('api/oauth', 'createClient'))

Louis
committed
safemode,
controller('api/oauth', 'addClientRedirect'),
)
api.delete(
'/oauth/clients/:oauthClientId/redirects',

Louis
committed
safemode,

Louis
committed
api.get('/self/bundles', controller('api/app', 'getBundles'))

Louis
committed
api.put('/self/:property', safemode, controller('api/user', 'updateOne'))

Louis
committed
api.post('/an/ev', safemode, controller('api/analytics', 'track'))

Louis
committed
api.post('/feedback', safemode, controller('api/feedback', 'send'))
api.use(v2.allowedMethods())
api.use(v2.routes())