blob: f6c3cb6812620383597ff3c62eeec4955ccad129 (
plain)
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
|
const express = require('express')
const router = express.Router()
const request = require('request')
const iconv = require('iconv-lite')
const getUserIndex = require('../lib/getUserIndex')
const getURLOfUser = require('../lib/getURLOfUser')
// copied from http://www.meetingpointmco.nl/Roosters-AL/doc/dagroosters/untisscripts.js,
// were using the same code as they do to be sure that we always get the same
// week number.
function getWeekNumber (target) {
const dayNr = (target.getDay() + 6) % 7
target.setDate(target.getDate() - dayNr + 3)
const firstThursday = target.valueOf()
target.setMonth(0, 1)
if (target.getDay() !== 4) {
target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7)
}
return 1 + Math.ceil((firstThursday - target) / 604800000)
}
router.get('/:type/:value', function (req, res, next) {
getUserIndex().then(users => {
const { type, value } = req.params
let { week } = req.query
const user =
users.filter(user => user.type === type && user.value === value)[0]
if (!user) {
next(new Error(`${type}${value} is not in the user index.`))
}
if (!week) {
week = getWeekNumber(new Date())
}
const { index } = user
const url = getURLOfUser(type, index, week)
request(url, { encoding: null }, function (err, data) {
if (err) {
next(err)
return
}
const utf8Body = iconv.decode(data.body, 'ISO-8859-1')
res.status(data.statusCode).end(utf8Body)
})
})
})
module.exports = router
|