| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 'use strict';
- const { Ven } = require('../db');
- const { v4 } = require('uuid');
- const { vtnId } = require('../config');
- const logger = require('../logger');
- async function registerParty(
- obj,
- clientCertificateCn,
- clientCertificateFingerprint,
- ) {
- logger.info(
- 'registerParty',
- obj,
- clientCertificateCn,
- clientCertificateFingerprint,
- );
- const requestVenId = obj.venId;
- if (!requestVenId) {
- const error = new Error('No VenID in request.');
- error.responseCode = 452;
- throw error;
- }
- if (requestVenId !== clientCertificateFingerprint) {
- // as per certification item #512, venId MUST be case-sensitive
- const error = new Error('VenID does not match certificate.');
- error.responseCode = 452;
- throw error;
- }
- if (!clientCertificateCn) {
- const error = new Error('Could not determine CN from client certificate.');
- error.responseCode = 452;
- throw error;
- }
- let registrationId, venId;
- const existingDbRecordByVenId = await Ven.findOne({
- where: { ven_id: requestVenId },
- });
- const existingDbRecordByCommonName = await Ven.findOne({
- where: { common_name: clientCertificateCn },
- });
- if (existingDbRecordByVenId) {
- if (existingDbRecordByVenId.common_name !== clientCertificateCn) {
- const error = new Error('Client certificate CN mismatch.');
- error.responseCode = 452;
- throw error;
- }
- registrationId = existingDbRecordByVenId.data.registrationId;
- venId = existingDbRecordByVenId.ven_id;
- } else if (existingDbRecordByCommonName) {
- const error = new Error('Ven already exists with that CN.');
- error.responseCode = 452;
- throw error;
- } else {
- registrationId = v4().replace(/-/g, '');
- venId = requestVenId;
- const newVen = new Ven();
- newVen.common_name = clientCertificateCn;
- newVen.ven_id = requestVenId;
- newVen.data = {
- registrationId: registrationId,
- };
- await newVen.save();
- }
- return {
- responseRequestId: obj.requestId || '',
- responseCode: 200,
- responseDescription: 'OK',
- registrationId: registrationId,
- venId: venId,
- vtnId: vtnId,
- pollFreqDuration: 'PT10S',
- };
- }
- module.exports = {
- registerParty,
- };
|