All files / lib/routes index.ts

100% Statements 40/40
100% Branches 0/0
100% Functions 1/1
100% Lines 40/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98                          16x 16x   16x             16x                               16x                   16x   16x 16x 16x 16x   16x   16x 16x   16x 16x 16x 16x 16x   16x 16x 16x   16x   16x 16x   16x   16x 16x     16x 16x 16x 16x 16x 16x 16x   16x 16x 16x 16x 16x 16x    
import { Express } from 'express'
import Crowi from 'server/crowi'
 
import multer from 'multer'
 
import form from '../form'
 
import Admin from './admin'
import API from './api'
import Login from './login'
import Me from './me'
 
export default (crowi: Crowi, app: Express) => {
  const controllers = crowi.controllers
  const middlewares = crowi.middlewares
 
  const routes = {
    Admin: Admin(crowi, app, form),
    API: API(crowi, app, form),
    Login: Login(crowi, app, form),
    Me: Me(crowi, app, form),
  }
 
  const uploads = multer({ dest: crowi.tmpDir + 'uploads' })
 
  const {
    Page: page,
    Login: login,
    Logout: logout,
    Me: me,
    Installer: installer,
    User: user,
    Attachment: attachment,
    Search: search,
    Share: share,
    ShareAccess: shareAccess,
    Notification: notification,
    Backlink: backlink,
    Slack: slack,
  } = controllers
 
  const {
    LoginRequired: loginRequired,
    FileAccessRightOrLoginRequired: fileAccessRightOrLoginRequired,
    EncodeSpace: encodeSpace,
    AccessTokenParser: accessTokenParser,
    CsrfVerify: csrf,
    ApplicationNotInstalled: applicationNotInstalled,
    ApplicationInstalled: applicationInstalled,
  } = middlewares
 
  app.use(routes.Admin)
  app.use(routes.Login)
  app.use(routes.Me)
  app.use('/_api', routes.API)
 
  app.get('/', loginRequired, page.pageListShow)
 
  app.get('/installer', applicationNotInstalled, installer.index)
  app.post('/installer/createAdmin', applicationNotInstalled, form.register, csrf, installer.createAdmin)
 
  app.post('/register', form.register, csrf, login.register)
  app.get('/register', applicationInstalled, login.register)
  app.get('/google/callback', login.googleCallback)
  app.get('/github/callback', login.githubCallback)
  app.get('/logout', logout.logout)
 
  app.get('/:id([0-9a-z]{24})', loginRequired, page.api.redirector)
  app.get('/_r/:id([0-9a-z]{24})', loginRequired, page.api.redirector) // alias
  app.get('/files/:id([0-9a-z]{24})', fileAccessRightOrLoginRequired, attachment.api.redirector)
 
  app.get('/_notifications', accessTokenParser, loginRequired, notification.notificationPage)
 
  app.get('/_search', loginRequired, search.searchPage)
  app.get('/_api/search', accessTokenParser, loginRequired, search.api.search)
 
  app.get('/_share/:uuid([0-9a-z-]{36})', share.pageShow)
 
  app.get('/user/:username([^/]+)/bookmarks', loginRequired, page.userBookmarkList)
  app.get('/user/:username([^/]+)/recent-create', loginRequired, page.userRecentCreatedList)
 
  // HTTP RPC Styled API (に徐々に移行していいこうと思う)
  app.get('/_api/backlink.list', accessTokenParser, loginRequired, backlink.api.list)
  app.get('/_api/check_username', user.api.checkUsername)
  app.get('/_api/shares/accesses.list', accessTokenParser, loginRequired, shareAccess.api.list)
  app.get('/_api/user/recentlyViewed', loginRequired, user.api.getRecentlyViewedPages)
  app.get('/_api/users.list', accessTokenParser, loginRequired, user.api.list)
  app.post('/_api/me/picture/upload', loginRequired, uploads.single('userPicture'), me.api.uploadPicture)
  app.post('/_api/slack/event', slack.api.handleEvent)
 
  app.post('/_/edit', form.revision, loginRequired, csrf, page.pageEdit)
  app.get('/trash/$', loginRequired, page.deletedPageListShow)
  app.get('/trash/*/$', loginRequired, page.deletedPageListShow)
  app.get('/*/$', loginRequired, encodeSpace, page.pageListShow)
  app.get('/user/:username([^/]+)', loginRequired, page.userPageShow)
  app.get('/*', loginRequired, encodeSpace, page.pageShow)
}