Skip to content

Commit 68fcf35

Browse files
committed
feat: merge all route to single file
Signed-off-by: BoHong Li <raccoon@hackmd.io>
1 parent 80859f6 commit 68fcf35

File tree

15 files changed

+353
-298
lines changed

15 files changed

+353
-298
lines changed

app.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,7 @@ app.locals.enableDropBoxSave = config.isDropboxEnable
206206
app.locals.enableGitHubGist = config.isGitHubEnable
207207
app.locals.enableGitlabSnippets = config.isGitlabSnippetsEnable
208208

209-
app.use(require('./lib/web/baseRouter'))
210-
app.use(require('./lib/web/statusRouter'))
211-
app.use(require('./lib/web/auth'))
212-
app.use(require('./lib/web/historyRouter'))
213-
app.use(require('./lib/web/userRouter'))
214-
app.use(require('./lib/web/imageRouter'))
215-
app.use(require('./lib/web/noteRouter'))
209+
app.use(require('./lib/web/routes').router)
216210

217211
// response not found if no any route matxches
218212
app.get('*', function (req, res) {

lib/realtime.js

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const get = require('lodash/get')
1414
// core
1515
const config = require('./config')
1616
const logger = require('./logger')
17-
const history = require('./history')
17+
const history = require('./web/history')
1818
const models = require('./models')
1919

2020
// ot
@@ -247,59 +247,62 @@ async function _updateNoteAsync (note) {
247247
}
248248

249249
// TODO: test it
250-
function getStatus (callback) {
251-
models.Note.count().then(function (notecount) {
252-
var distinctaddresses = []
253-
var regaddresses = []
254-
var distinctregaddresses = []
255-
Object.keys(users).forEach(function (key) {
256-
var user = users[key]
257-
if (!user) return
258-
let found = false
259-
for (let i = 0; i < distinctaddresses.length; i++) {
260-
if (user.address === distinctaddresses[i]) {
261-
found = true
262-
break
263-
}
264-
}
265-
if (!found) {
266-
distinctaddresses.push(user.address)
267-
}
268-
if (user.login) {
269-
regaddresses.push(user.address)
250+
function getStatus () {
251+
return models.Note.count()
252+
.then(function (notecount) {
253+
var distinctaddresses = []
254+
var regaddresses = []
255+
var distinctregaddresses = []
256+
Object.keys(users).forEach(function (key) {
257+
var user = users[key]
258+
if (!user) return
270259
let found = false
271-
for (let i = 0; i < distinctregaddresses.length; i++) {
272-
if (user.address === distinctregaddresses[i]) {
260+
for (let i = 0; i < distinctaddresses.length; i++) {
261+
if (user.address === distinctaddresses[i]) {
273262
found = true
274263
break
275264
}
276265
}
277266
if (!found) {
278-
distinctregaddresses.push(user.address)
267+
distinctaddresses.push(user.address)
279268
}
280-
}
281-
})
282-
models.User.count().then(function (regcount) {
283-
// eslint-disable-next-line standard/no-callback-literal
284-
return callback ? callback({
285-
onlineNotes: Object.keys(notes).length,
286-
onlineUsers: Object.keys(users).length,
287-
distinctOnlineUsers: distinctaddresses.length,
288-
notesCount: notecount,
289-
registeredUsers: regcount,
290-
onlineRegisteredUsers: regaddresses.length,
291-
distinctOnlineRegisteredUsers: distinctregaddresses.length,
292-
isConnectionBusy: connectProcessQueue.lock,
293-
connectionSocketQueueLength: connectProcessQueue.queue.length,
294-
isDisconnectBusy: disconnectProcessQueue.lock,
295-
disconnectSocketQueueLength: disconnectProcessQueue.queue.length
296-
}) : null
269+
if (user.login) {
270+
regaddresses.push(user.address)
271+
let found = false
272+
for (let i = 0; i < distinctregaddresses.length; i++) {
273+
if (user.address === distinctregaddresses[i]) {
274+
found = true
275+
break
276+
}
277+
}
278+
if (!found) {
279+
distinctregaddresses.push(user.address)
280+
}
281+
}
282+
})
283+
284+
return models.User.count()
285+
.then(function (regcount) {
286+
return {
287+
onlineNotes: Object.keys(notes).length,
288+
onlineUsers: Object.keys(users).length,
289+
distinctOnlineUsers: distinctaddresses.length,
290+
notesCount: notecount,
291+
registeredUsers: regcount,
292+
onlineRegisteredUsers: regaddresses.length,
293+
distinctOnlineRegisteredUsers: distinctregaddresses.length,
294+
isConnectionBusy: connectProcessQueue.lock,
295+
connectionSocketQueueLength: connectProcessQueue.queue.length,
296+
isDisconnectBusy: disconnectProcessQueue.lock,
297+
disconnectSocketQueueLength: disconnectProcessQueue.queue.length
298+
}
299+
})
300+
.catch(function (err) {
301+
return logger.error('count user failed: ' + err)
302+
})
297303
}).catch(function (err) {
298-
return logger.error('count user failed: ' + err)
304+
return logger.error('count note failed: ' + err)
299305
})
300-
}).catch(function (err) {
301-
return logger.error('count note failed: ' + err)
302-
})
303306
}
304307

305308
// TODO: test it

lib/response.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ const config = require('./config')
1414
const logger = require('./logger')
1515
const models = require('./models')
1616
const utils = require('./utils')
17-
const history = require('./history')
17+
const history = require('./web/history')
1818

1919
// public
20+
exports.responseError = responseError
2021
exports.errorForbidden = errorForbidden
2122
exports.errorNotFound = errorNotFound
2223
exports.errorBadRequest = errorBadRequest
@@ -33,6 +34,7 @@ exports.publishNoteActions = publishNoteActions
3334
exports.publishSlideActions = publishSlideActions
3435
exports.githubActions = githubActions
3536
exports.gitlabActions = gitlabActions
37+
exports.checkViewPermission = checkViewPermission
3638

3739
function errorForbidden (res) {
3840
const { req } = res

lib/web/baseRouter.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

lib/web/errorPage/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict'
2+
3+
const config = require('../../config')
4+
const { responseError } = require('../../response')
5+
6+
exports.errorForbidden = (req, res) => {
7+
if (req.user) {
8+
return responseError(res, '403', 'Forbidden', 'oh no.')
9+
}
10+
11+
req.flash('error', 'You are not allowed to access this page. Maybe try logging in?')
12+
res.redirect(config.serverURL + '/')
13+
}
14+
15+
exports.errorNotFound = (req, res) => {
16+
responseError(res, '404', 'Not Found', 'oops.')
17+
}
18+
19+
exports.errorInternalError = (req, res) => {
20+
responseError(res, '500', 'Internal Error', 'wtf.')
21+
}

lib/history.js renamed to lib/web/history/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
var LZString = require('@hackmd/lz-string')
55

66
// core
7-
var config = require('./config')
8-
var logger = require('./logger')
9-
var response = require('./response')
10-
var models = require('./models')
7+
var config = require('../../config')
8+
var logger = require('../../logger')
9+
var response = require('../../response')
10+
var models = require('../../models')
1111

1212
function getHistory (userid, callback) {
1313
models.User.findOne({

lib/web/historyRouter.js

Lines changed: 0 additions & 18 deletions
This file was deleted.

lib/web/homepage/index.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict'
2+
3+
const fs = require('fs')
4+
const path = require('path')
5+
const config = require('../../config')
6+
const { User } = require('../../models')
7+
const logger = require('../../logger')
8+
9+
exports.showIndex = async (req, res) => {
10+
const isLogin = req.isAuthenticated()
11+
const deleteToken = ''
12+
13+
const data = {
14+
signin: isLogin,
15+
infoMessage: req.flash('info'),
16+
errorMessage: req.flash('error'),
17+
privacyStatement: fs.existsSync(path.join(config.docsPath, 'privacy.md')),
18+
termsOfUse: fs.existsSync(path.join(config.docsPath, 'terms-of-use.md')),
19+
deleteToken: deleteToken
20+
}
21+
22+
if (!isLogin) {
23+
return res.render('index.ejs', data)
24+
}
25+
26+
const user = await User.findOne({
27+
where: {
28+
id: req.user.id
29+
}
30+
})
31+
if (user) {
32+
data.deleteToken = user.deleteToken
33+
return res.render('index.ejs', data)
34+
}
35+
36+
logger.error(`error: user not found with id ${req.user.id}`)
37+
return res.render('index.ejs', data)
38+
}

lib/web/noteRouter.js

Lines changed: 0 additions & 28 deletions
This file was deleted.

lib/web/routes.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
'use strict'
2+
3+
const { Router } = require('express')
4+
5+
const { wrap, urlencodedParser, markdownParser } = require('./utils')
6+
7+
// load controller
8+
const indexController = require('./homepage')
9+
const errorPageController = require('./errorPage')
10+
const statusController = require('./status')
11+
const historyController = require('./history')
12+
const userController = require('./user')
13+
const response = require('../response')
14+
const appRouter = Router()
15+
16+
// register route
17+
18+
// get index
19+
appRouter.get('/', wrap(indexController.showIndex))
20+
21+
// ----- error page -----
22+
// get 403 forbidden
23+
appRouter.get('/403', errorPageController.errorForbidden)
24+
// get 404 not found
25+
appRouter.get('/404', errorPageController.errorNotFound)
26+
// get 500 internal error
27+
appRouter.get('/500', errorPageController.errorInternalError)
28+
29+
appRouter.get('/status', wrap(statusController.getStatus))
30+
appRouter.get('/config', statusController.getConfig)
31+
32+
// register auth module
33+
appRouter.use(require('./auth'))
34+
35+
// get history
36+
appRouter.get('/history', historyController.historyGet)
37+
// post history
38+
appRouter.post('/history', urlencodedParser, historyController.historyPost)
39+
// post history by note id
40+
appRouter.post('/history/:noteId', urlencodedParser, historyController.historyPost)
41+
// delete history
42+
appRouter.delete('/history', historyController.historyDelete)
43+
// delete history by note id
44+
appRouter.delete('/history/:noteId', historyController.historyDelete)
45+
46+
// user
47+
// get me info
48+
appRouter.get('/me', wrap(userController.getMe))
49+
50+
// delete the currently authenticated user
51+
appRouter.get('/me/delete/:token?', wrap(userController.deleteUser))
52+
53+
// export the data of the authenticated user
54+
appRouter.get('/me/export', userController.exportMyData)
55+
56+
appRouter.get('/user/:username/avatar.svg', userController.getMyAvatar)
57+
58+
// register image upload module
59+
appRouter.use(require('./imageRouter'))
60+
61+
// get new note
62+
appRouter.get('/new', response.newNote)
63+
// post new note with content
64+
appRouter.post('/new', markdownParser, response.newNote)
65+
// get publish note
66+
appRouter.get('/s/:shortid', response.showPublishNote)
67+
// publish note actions
68+
appRouter.get('/s/:shortid/:action', response.publishNoteActions)
69+
// get publish slide
70+
appRouter.get('/p/:shortid', response.showPublishSlide)
71+
// publish slide actions
72+
appRouter.get('/p/:shortid/:action', response.publishSlideActions)
73+
// get note by id
74+
appRouter.get('/:noteId', response.showNote)
75+
// note actions
76+
appRouter.get('/:noteId/:action', response.noteActions)
77+
// note actions with action id
78+
appRouter.get('/:noteId/:action/:actionId', response.noteActions)
79+
80+
exports.router = appRouter

0 commit comments

Comments
 (0)