-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheckpassforfait.js
105 lines (93 loc) · 3.15 KB
/
checkpassforfait.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
const express = require('express');
const axios = require('axios');
const app = express();
const db = require('../db');
const forfaitHash = require('../scripts/forfaitHash');
const dayjs = require('dayjs');
const IN_TOKEN = process.env.IN_TOKEN || 'nffjdbfdsjfbdsjert'
const checkValidity = async (day, pass) => {
//return {valid: true, fraudulent: false, firstname: "Jonh", lastname: "Doe", birthdate: "18-07-1991"};
let type = 'DCC';
if(pass.startsWith('DC')) {
type = '2D-DOC';
}
let controlDate = dayjs(day).toISOString().split('.')[0];
var config = {
method: 'post',
url: `https://portail.ppd.tacv.myservices-ingroupe.com/api/document/${type}?controlDate=${controlDate}`,
headers: {
'Authorization': `Bearer ${IN_TOKEN}`,
'Content-Type': 'text/plain'
},
data : string
};
let {data} = await axios(config);
let valid = data.data.dynamic[0].liteVaccinePassValidityStatus == "Valide";
let firstname = data.data.dynamic[0].liteFirstName == "Valide";
let lastname = data.data.dynamic[0].liteLastName == "Valide";
let birthdate = data.data.dynamic[0].liteDateOfBirth == "Valide";
let fraudulent = data.data.static.isBlacklisted;
return {valid, fraudulent, firstname, lastname, birthdate};
}
app.post('/', express.json(), express.query(), async (req, res) => {
const { forfait, pass, exemptionAge, dates } = req.body;
if(!forfaitHash.check(forfait, forfait.hash)) {
res.status(400).json({
error: 'Invalid forfait payload',
});
}
const validDays = [];
let hasInvalidDay = false;
let dayjsDates = dates.map(date => dayjs(date));
let fraud = false;
for (let i = 0; i < dayjsDates.length; i++) {
const day = dayjsDates[i];
if(day.isSame(dayjs(), 'd') && dayjs().get('hour') < 9) {
day.set('hour', 9).set('minute', 0).set('second', 0);
}
let start = new Date().getTime();
try {
var {valid, fraudulent, firstname, lastname, birthdate} = await checkValidity(day, pass);
} catch(err) {
console.log(JSON.stringify({
key: "checkpassforfait-tacvapi-error",
error: err.message,
status: error.response && error.response.status,
}))
return res.status(503).send();
}
let end = new Date().getTime();
fraud = fraudulent;
console.log(JSON.stringify({
key: "checkpassforfait",
mediaId: forfait.mediaId,
forfaitId: forfait.forfaitId,
supportId: forfait.supportId,
resortId: forfait.resortId,
response_time: end - start,
day: day.format("YYYY-MM-DD")
}))
if(valid) {
validDays.push(day.toISOString());
try {
await db.insertForfait({
mediaId: forfait.mediaId,
forfaitId: forfait.forfaitId,
supportId: forfait.supportId,
resortId: forfait.resortId,
dateValidity: day.set('hour', 9).toISOString(),
firstname,
lastname,
birthdate,
})
} catch(err) {
console.log(err);
console.log(JSON.stringify({key: "err-bdd-checkpassforfait"}));
}
} else {
hasInvalidDay = true;
}
}
res.send({validDays, hasInvalidDay, fraudulent: fraud});
})
module.exports = app