OSAGO check
This commit is contained in:
parent
a7b0a609ff
commit
b8b8b13b06
@ -1,10 +1,13 @@
|
||||
const fetch = require('node-fetch');
|
||||
const https = require('https');
|
||||
const parser = require('node-html-parser');
|
||||
|
||||
const httpsAgent = new https.Agent({
|
||||
rejectUnauthorized: false
|
||||
});
|
||||
|
||||
class RsaProvider {
|
||||
static async checkOsago(number, vin, timestamp, token) {
|
||||
let date = new Date(timestamp*1000);
|
||||
let dateStr = `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`;
|
||||
|
||||
static async getProcessId(number, vin, dateStr, token) {
|
||||
let url = 'https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfo.htm';
|
||||
let result = await fetch(url, {
|
||||
method: 'POST',
|
||||
@ -14,11 +17,78 @@ class RsaProvider {
|
||||
vin: vin,
|
||||
isBsoRequest: false,
|
||||
captcha: token
|
||||
})
|
||||
}),
|
||||
agent: httpsAgent
|
||||
});
|
||||
|
||||
let json = await result.json();
|
||||
console.log(json);
|
||||
if(!json.validCaptcha) {
|
||||
throw Error('Invalid captcha token');
|
||||
}
|
||||
|
||||
if(!json.processId) {
|
||||
throw Error('Process ID is null');
|
||||
}
|
||||
|
||||
return json.processId;
|
||||
}
|
||||
|
||||
static async getReportHtml(number, vin, dateStr, processId) {
|
||||
let url = 'https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfoData.htm';
|
||||
let result = await fetch(url, {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams({
|
||||
requestDate: dateStr,
|
||||
licensePlate: number,
|
||||
vin: vin,
|
||||
isBsoRequest: false,
|
||||
processId
|
||||
}),
|
||||
agent: httpsAgent
|
||||
});
|
||||
|
||||
return await result.text();
|
||||
}
|
||||
|
||||
static parseReport(html) {
|
||||
let root = parser.parse(html);
|
||||
if(!root) {
|
||||
throw Error('Failed to parse dkbm response');
|
||||
}
|
||||
|
||||
let tr = root.querySelector('.data-row');
|
||||
if(tr) {
|
||||
let data = tr.childNodes.filter(n => n.nodeType == 1);
|
||||
let result = {
|
||||
number: data[1].rawText,
|
||||
name: data[2].rawText,
|
||||
status: data[3].rawText,
|
||||
restrictions: data[9].rawText,
|
||||
insurant: data[10].rawText,
|
||||
owner: data[11].rawText,
|
||||
usageRegion: data[13].rawText
|
||||
};
|
||||
|
||||
let vehicleData = data[5].querySelectorAll('td');
|
||||
if(vehicleData.length > 0) {
|
||||
result.plateNumber = vehicleData[3].rawText;
|
||||
result.vin = vehicleData[5].rawText;
|
||||
}
|
||||
|
||||
return result;
|
||||
} else {
|
||||
throw Error('Failed to find data in dkbm response');
|
||||
}
|
||||
}
|
||||
|
||||
static async checkOsago(number, vin, timestamp, token) {
|
||||
let date = new Date(timestamp*1000);
|
||||
let dateStr = `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`;
|
||||
let processId = await this.getProcessId(number, vin, dateStr, token);
|
||||
let reportHtml = await this.getReportHtml(number, vin, dateStr, processId);
|
||||
let report = this.parseReport(reportHtml);
|
||||
report.date = timestamp;
|
||||
return report;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
3088
package-lock.json
generated
3088
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -19,6 +19,7 @@
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongodb": "^3.6.1",
|
||||
"node-fetch": "^2.6.1",
|
||||
"node-html-parser": "^2.0.0",
|
||||
"pubnub": "^4.29.6",
|
||||
"uuid": "^8.3.0"
|
||||
},
|
||||
|
||||
@ -161,8 +161,19 @@ router.get('/shared_report', cors({ origin: 'https://auto.aliencat.pro' }), asyn
|
||||
router.post('/checkOsago', async (req, res) => {
|
||||
try {
|
||||
const { number, vin, date, token } = req.body;
|
||||
console.log('Body: ', req.body);
|
||||
|
||||
let result = await RsaProvider.checkOsago(number, vin, date, token);
|
||||
console.log(result);
|
||||
|
||||
let collection = req.db.collection('vehicles');
|
||||
let filter = number ? { number } : { vin1: vin };
|
||||
await collection.updateOne(filter, { $push: { osagoContracts: result } });
|
||||
let vehicle = await collection.findOne(filter);
|
||||
if(vehicle) {
|
||||
res.send({ success: true, data: vehicle });
|
||||
} else {
|
||||
res.status(204).send(makeError('There is no vehicle with such plate number or VIN'));
|
||||
}
|
||||
} catch(ex) {
|
||||
res.send(makeError(ex.message));
|
||||
console.error(ex);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user