Skip to content
This repository has been archived by the owner on Oct 3, 2024. It is now read-only.

Commit

Permalink
Merge pull request #47 from regulaforensics/develop
Browse files Browse the repository at this point in the history
Certificates date
  • Loading branch information
aliaksandr-drozd authored Apr 17, 2024
2 parents 666e167 + c4b40c4 commit b13dfcb
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 48 deletions.
16 changes: 14 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "0.0.47",
"version": "0.0.48",
"author": "Regula Forensics, Inc.",
"name": "@regulaforensics/document-reader-recipes",
"description": "Document Reader Recipes",
Expand Down Expand Up @@ -41,5 +41,8 @@
},
"files": [
"dist"
]
],
"dependencies": {
"date-fns": "^3.6.0"
}
}
20 changes: 20 additions & 0 deletions src/helpers/convert-generalized-date-to-local.helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { parse, format, addMinutes } from 'date-fns'


/**
* Converts a generalized date string to a local date string.
* @param {string} dateStr - Generalized date string
* @returns {string} Local date string
*/
export const convertGeneralizedDateToLocal = (dateStr: string): string => {
const parsedDate = parse(dateStr, "yyMMddHHmmssX", new Date())

const timeZoneOffsetInMinutes = new Date().getTimezoneOffset()

const dateWithTimeZone = addMinutes(parsedDate, -timeZoneOffsetInMinutes)

const timeZoneOffsetInHours = -timeZoneOffsetInMinutes / 60
const timeZoneString = `GMT${timeZoneOffsetInHours >= 0 ? '+' : ''}${timeZoneOffsetInHours}`

return format(dateWithTimeZone, `dd/MM/yyyy HH:mm:ss '${timeZoneString}'`)
}
1 change: 1 addition & 0 deletions src/helpers/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './get-image-dimentions'
export * from './convert-generalized-date-to-local.helper'
2 changes: 1 addition & 1 deletion src/recipes/rfid/rfid-certificates-data/models/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './rfid-certificates-data.model'
export * from './rfid-certificate-data.model'
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { AllowPrimitives } from '@/types'
/**
* Rfid certificates data
*/
export interface iRRfidCertificatesData {
export interface iRRfidCertificate {
/**
* Public key algorithm
* @type {string}
Expand Down Expand Up @@ -37,12 +37,18 @@ export interface iRRfidCertificatesData {
* @type {string}
*/
validFrom: string

/**
* Valid to
* @type {string}
*/
validTo: string
}

/**
* Rfid certificates data
*/
export class RRfidCertificatesData implements iRRfidCertificatesData {
export class RRfidCertificate implements iRRfidCertificate {
/**
* Public key algorithm
* @type {string}
Expand Down Expand Up @@ -83,17 +89,25 @@ export class RRfidCertificatesData implements iRRfidCertificatesData {
@IsString()
validFrom: string

/**
* Valid from
* @type {string}
*/
@IsDefined()
@IsString()
validTo: string

/**
* Create instance of RRfidDataGroupStatus from plain object
* @param {AllowPrimitives<iRRfidCertificatesData>} input - plain object
* @returns {RRfidCertificatesData}
* @param {AllowPrimitives<iRRfidCertificate>} input - plain object
* @returns {RRfidCertificate}
*/
static fromPlain = (input: AllowPrimitives<iRRfidCertificatesData>): RRfidCertificatesData => plainToClass(RRfidCertificatesData, input)
static fromPlain = (input: AllowPrimitives<iRRfidCertificate>): RRfidCertificate => plainToClass(RRfidCertificate, input)

/**
* Gets validation errors of RRfidDataGroupStatus
* @param {RRfidCertificatesData} input - input data
* @param {RRfidCertificate} input - input data
* @returns {ValidationError[]} - array of validation errors
*/
static getValidationErrors = (input: RRfidCertificatesData): ValidationError[] => validateSync(input)
static getValidationErrors = (input: RRfidCertificate): ValidationError[] => validateSync(input)
}
Original file line number Diff line number Diff line change
@@ -1,58 +1,44 @@
import { DocBinaryInfoContainer, ProcessResponse } from '@regulaforensics/document-reader-typings'

import { RRfidCertificatesData } from './models'
import { convertGeneralizedDateToLocal } from '@/helpers'
import { RRfidCertificate } from './models'


/**
* Get Rfid certificates data
* @param {ProcessResponse} input
* @param {string} [defaultValue='UNKNOWN'] - default value
* @returns {RRfidCertificatesData}
* @returns {RRfidCertificate[]}
*/
export const getRfidCertificatesData = (input: ProcessResponse, defaultValue: string = 'UNKNOWN'): RRfidCertificatesData => {
export const getRfidCertificatesData = (input: ProcessResponse, defaultValue: string = 'UNKNOWN'): RRfidCertificate[] => {
const binary = DocBinaryInfoContainer.fromProcessResponse(input)
const result = new RRfidCertificatesData()

result.publicKeyAlgorithm = defaultValue
result.signatureAlgorithm = defaultValue
result.issuer = defaultValue
result.subject = defaultValue
result.validFrom = defaultValue


const result: RRfidCertificate[] = []

binary.forEach((container) => {
const sessionData = container.TDocBinaryInfo.RFID_BINARY_DATA.RFID_Session_Data

sessionData.SecurityObjects.forEach((securityObject) => {
securityObject.SignerInfos.forEach((signerInfo) => {
const issuer = signerInfo.Issuer.FriendlyName.Data
const signatureAlgorithm = signerInfo.SignatureAlgorithm
const publicKeyAlgorithm = signerInfo.DigestAlgorithm
const subject = signerInfo.SubjectKeyIdentifier.Data

if (issuer) {
result.issuer = issuer
}

if (signatureAlgorithm) {
result.signatureAlgorithm = signatureAlgorithm
}

if (publicKeyAlgorithm) {
result.publicKeyAlgorithm = publicKeyAlgorithm
}

if (subject) {
result.subject = subject
}

signerInfo.CertificateChain.forEach((certificate) => {
const validFrom = certificate.Validity.NotBefore.Data
const current = new RRfidCertificate()
current.publicKeyAlgorithm = certificate.SubjectPKAlgorithm ?? defaultValue
current.signatureAlgorithm = certificate.SignatureAlgorithm ?? defaultValue
current.issuer = certificate.Issuer.FriendlyName.Data ?? defaultValue
current.subject = certificate.Subject.FriendlyName.Data ?? defaultValue

if (certificate.Validity.NotBefore.Data) {
current.validFrom = convertGeneralizedDateToLocal(certificate.Validity.NotBefore.Data)
} else {
current.validFrom = defaultValue
}

if (validFrom) {
result.validFrom = validFrom
if (certificate.Validity.NotAfter.Data) {
current.validTo = convertGeneralizedDateToLocal(certificate.Validity.NotAfter.Data)
} else {
current.validTo = defaultValue
}

result.push(current)
})
})
})
Expand Down

0 comments on commit b13dfcb

Please sign in to comment.