OSAGO check
This commit is contained in:
parent
a7b0a609ff
commit
b8b8b13b06
@ -1,10 +1,13 @@
|
|||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
|
const https = require('https');
|
||||||
|
const parser = require('node-html-parser');
|
||||||
|
|
||||||
|
const httpsAgent = new https.Agent({
|
||||||
|
rejectUnauthorized: false
|
||||||
|
});
|
||||||
|
|
||||||
class RsaProvider {
|
class RsaProvider {
|
||||||
static async checkOsago(number, vin, timestamp, token) {
|
static async getProcessId(number, vin, dateStr, token) {
|
||||||
let date = new Date(timestamp*1000);
|
|
||||||
let dateStr = `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`;
|
|
||||||
|
|
||||||
let url = 'https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfo.htm';
|
let url = 'https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfo.htm';
|
||||||
let result = await fetch(url, {
|
let result = await fetch(url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@ -14,11 +17,78 @@ class RsaProvider {
|
|||||||
vin: vin,
|
vin: vin,
|
||||||
isBsoRequest: false,
|
isBsoRequest: false,
|
||||||
captcha: token
|
captcha: token
|
||||||
})
|
}),
|
||||||
|
agent: httpsAgent
|
||||||
});
|
});
|
||||||
|
|
||||||
let json = await result.json();
|
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",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"mongodb": "^3.6.1",
|
"mongodb": "^3.6.1",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
|
"node-html-parser": "^2.0.0",
|
||||||
"pubnub": "^4.29.6",
|
"pubnub": "^4.29.6",
|
||||||
"uuid": "^8.3.0"
|
"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) => {
|
router.post('/checkOsago', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { number, vin, date, token } = req.body;
|
const { number, vin, date, token } = req.body;
|
||||||
console.log('Body: ', req.body);
|
|
||||||
let result = await RsaProvider.checkOsago(number, vin, date, token);
|
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) {
|
} catch(ex) {
|
||||||
res.send(makeError(ex.message));
|
res.send(makeError(ex.message));
|
||||||
console.error(ex);
|
console.error(ex);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user