| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- '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',
- };
- }
- async function query(obj, clientCertificateCn, clientCertificateFingerprint) {
- logger.info('query', obj, clientCertificateCn, clientCertificateFingerprint);
- let registrationId, venId;
- const existingDbRecordByVenId = await Ven.findOne({
- where: { ven_id: clientCertificateFingerprint },
- });
- 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;
- }
- return {
- responseRequestId: obj.requestId || '',
- responseCode: 200,
- responseDescription: 'OK',
- registrationId: registrationId,
- venId: venId,
- vtnId: vtnId,
- pollFreqDuration: 'PT10S',
- };
- }
- module.exports = {
- query,
- registerParty,
- };
|