-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
127 lines (112 loc) · 2.67 KB
/
index.js
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
const axios = require('axios');
const { rotate270, vflip } = require('2d-array-rotation');
const { JSDOM } = require('jsdom');
const { stringify } = require('querystring');
require('dotenv').config();
const url = 'https://www.kroky.si/2016/';
const login = async (username, password) => {
console.log(`Logging in as ${username}`);
const response = await axios.post(
url,
stringify({
username,
password,
}),
{
params: {
mod: 'register',
action: 'login',
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
},
);
if (
response.data.includes(
'Dostop zavrnjen, preverite ali ste vpisali pravilne podatke',
)
) {
throw {
statusCode: 401,
name: 'unauthorized',
message: 'Wrong login credentials',
};
}
axios.defaults.headers.common['cookie'] = response.headers['set-cookie'][0];
console.log('Successfully logged in');
};
const getMeals = async (week) => {
const response = await axios.get(url, {
params: {
mod: 'register',
action: 'order',
pos: parseInt(week),
},
});
const { window } = new JSDOM(response.data);
const out = Array.from(
window.document.getElementsByClassName('fancytable')[0].children[1]
.children,
)
.map((row) =>
Array.from(row.children)
.map((cell) => {
const properties = cell.children[0];
return {
id: parseInt(properties?.getAttribute('cat_id')),
name: cell.children[1]?.children[2]?.textContent.replace(
/\t|\n/g,
'',
),
date: properties?.getAttribute('name'),
selected: properties?.getAttribute('checked') != undefined,
};
})
.slice(1, -1)
.filter((cell) => cell.id),
)
.filter((row) => row.length);
if (!out.length) return [];
return vflip(rotate270(out));
};
const selectMeal = async (date, id, xl) => {
const response = await axios.post(
url,
stringify({
date,
c: id,
xl: xl ? 1 : 0,
}),
{
params: {
mod: 'register',
action: 'user2date2menu',
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
},
);
if (response.data.includes('category_id')) {
throw {
statusCode: 404,
name: 'not_found',
message: 'Category id not found',
};
}
if (
response.data.includes('Izbiraš lahko samo jedilnik za prihajajoči teden')
) {
throw {
statusCode: 400,
name: 'bad_request',
message: 'Wrong date',
};
}
};
module.exports = {
login,
getMeals,
selectMeal,
};