Repository navigation
Expand file tree
/
Copy pathroutes.js
More file actions
153 lines (123 loc) · 4.35 KB
/
Copy pathroutes.js
File metadata and controls
153 lines (123 loc) · 4.35 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
module.exports = (app, utils) => {
const config = require('../config')
const path = require('path')
app.all('*', (req, res, next) => {
let themeOverride = req.query.theme
if(themeOverride) {
themeOverride = themeOverride.toLowerCase()
req.cookies.theme = themeOverride
res.cookie('theme', themeOverride, { maxAge: 31536000, httpOnly: true })
} else if(!req.cookies.theme && req.cookies.theme !== '') {
req.cookies.theme = config.theme
}
let langOverride = req.query.default_lang
if(langOverride) {
langOverride = langOverride.toLowerCase()
req.cookies.default_lang = langOverride
res.cookie('default_lang', langOverride, { maxAge: 31536000, httpOnly: true })
} else if(!req.cookies.default_lang) {
req.cookies.default_lang = config.default_lang
}
return next()
})
app.get('*', async (req, res, next) => {
if(req.url.startsWith('/w/load.php')) {
return res.sendStatus(404)
}
if(req.url.startsWith('/media')) {
let media
let mime = ''
if(req.url.startsWith('/media/maps_wikimedia_org/')) {
media = await proxyMedia(req, 'maps.wikimedia.org')
} else if(req.url.startsWith('/media/api/rest_v1/media')) {
media = await proxyMedia(req, 'wikimedia.org/api/rest_v1/media')
if(req.url.includes('render/svg/')) {
mime = 'image/svg+xml'
}
} else {
media = await proxyMedia(req)
}
if(media.success === true) {
if(mime != '') {
res.setHeader('Content-Type', mime)
}
return res.sendFile(media.path)
}
return res.sendStatus(404)
}
if(req.url.startsWith('/static/images/project-logos/') || req.url === '/static/images/mobile/copyright/wikipedia.png') {
return res.sendFile(wikilessLogo())
}
if(req.url.startsWith('/static/favicon/wikipedia.ico')) {
return res.sendFile(wikilessFavicon())
}
// fr logos
if(req.url.startsWith('/static/images/mobile/copyright/')) {
return res.sendFile(frLogo(req.url))
}
return next()
})
app.get('/wiki/:page?/:sub_page?', (req, res, next) => {
return handleWikiPage(req, res, '/wiki/')
})
// This route handles wiki-pages starting with forward slash (issue #21))
app.get('/wiki//:page?/:sub_page?', (req, res, next) => {
const page = req.params.page
if(page) {
// issue #25
req.params.page = `/${req.params.page}`
}
return handleWikiPage(req, res, '/wiki/')
})
app.get('/w/:file', (req, res, next) => {
return handleWikiPage(req, res, '/w/')
})
app.get('/wiki/Special:Map/*', (req, res, next) => {
return handleWikiPage(req, res, '/wiki/Map')
})
app.get('/api/rest_v1/page/pdf/:page', async (req, res, next) => {
if(!req.params.page) {
return res.redirect('/')
}
const media = await proxyMedia(req, '/api/rest_v1/page/pdf')
if(media.success === true) {
let filename = `${req.params.page}.pdf`
return res.download(media.path, filename)
}
return res.sendStatus(404)
})
// handle chinese variants
app.get('/zh*', (req, res, next) => {
const pathSplit = req.path.split('/')
const lang = pathSplit[1]
const page = pathSplit[2]
return res.redirect(`/wiki/${page}?lang=${lang}`)
})
app.get('/', (req, res, next) => {
return handleWikiPage(req, res, '/')
})
app.get('/about', (req, res, next) => {
return res.sendFile(path.join(__dirname, '../static/about.html'))
})
app.get('/preferences', (req, res, next) => {
return res.send(preferencesPage(req, res))
})
app.post('/preferences', (req, res, next) => {
const theme = req.body.theme
const default_lang = req.body.default_lang
let back = req.url.split('?back=')[1]
res.cookie('theme', theme, { maxAge: 365 * 24 * 60 * 60 * 1000, httpOnly: true })
res.cookie('default_lang', default_lang, { maxAge: 365 * 24 * 60 * 60 * 1000, httpOnly: true })
if(back === 'undefined' || !back.startsWith('/')) {
back = '/'
}
return res.redirect(back)
})
app.post(/DownloadAsPdf/, (req, res, next) => {
if(!req.body.page) {
return res.redirect('/')
}
const lang = req.body.lang || req.cookies.default_lang || config.default_lang
return res.redirect(`/w/index.php?title=Special%3ADownloadAsPdf&page=${req.body.page}&action=redirect-to-electron&lang=${lang}`)
})
}