Skip to content

Commit 9ce91ed

Browse files
committed
Fixes issue when determining sender from CA-signed certificate
Signed-off-by: hfuss <[email protected]>
1 parent 8d91e4b commit 9ce91ed

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

src/lib/cert.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,20 @@ export const init = async () => {
3434
log.debug("Reading cert file");
3535
cert = (await fs.readFile(path.join(utils.constants.DATA_DIRECTORY, utils.constants.CERT_FILE))).toString();
3636

37-
log.debug("Loaded cert");
38-
log.debug(cert);
39-
40-
log.debug("Deriving peer ID from cert");
41-
const certData = utils.getCertData(cert);
42-
peerID = utils.getPeerID(certData.organization, certData.organizationUnit);
43-
4437
let caCertPath = path.join(utils.constants.DATA_DIRECTORY, utils.constants.CA_FILE);
4538
if (await utils.fileExists(caCertPath)) {
4639
log.debug("Reading CA file");
4740
certBundle = (await fs.readFile(caCertPath)).toString() + cert;
4841
log.debug("Loaded CA + cert");
49-
log.debug(certBundle);
5042
} else {
5143
certBundle = cert;
44+
log.debug("Loaded cert");
5245
}
46+
log.debug("\n" + certBundle);
47+
48+
log.debug("Deriving peer ID from cert");
49+
const certData = utils.getCertData(cert);
50+
peerID = utils.getPeerID(certData.organization, certData.organizationUnit);
5351

5452
await loadPeerCAs();
5553
};

src/lib/utils.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { X509 } from 'jsrsasign';
2222
import { ICertData, IFile } from './interfaces';
2323
import { Logger } from './logger';
2424
import RequestError from './request-error';
25+
import { TLSSocket } from "tls";
2526

2627
export const constants = {
2728
LOG_LEVEL: process.env.LOG_LEVEL || 'info',
@@ -149,4 +150,9 @@ export const getCertData = (cert: string): ICertData => {
149150
certData.organizationUnit = ou[1];
150151
}
151152
return certData;
152-
};
153+
};
154+
155+
export const extractPeerSenderFromRequest = (req: Request): string => {
156+
const cert = ((req.socket) as TLSSocket).getPeerCertificate();
157+
return getPeerID(cert.subject.O, cert.subject.OU);
158+
};

src/routers/p2p.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ router.head('/ping', (_req, res) => {
3131

3232
router.post('/messages', async (req: Request, res, next) => {
3333
try {
34-
const cert = req.client.getPeerCertificate();
35-
const sender = utils.getPeerID(cert.issuer.O, cert.issuer.OU);
34+
const sender = utils.extractPeerSenderFromRequest(req);
3635
const message = await utils.extractMessageFromMultipartForm(req);
3736
eventEmitter.emit('event', {
3837
id: uuidV4(),
@@ -48,8 +47,7 @@ router.post('/messages', async (req: Request, res, next) => {
4847

4948
router.put('/blobs/*', async (req: Request, res, next) => {
5049
try {
51-
const cert = req.client.getPeerCertificate();
52-
const sender = utils.getPeerID(cert.issuer.O, cert.issuer.OU);
50+
const sender = utils.extractPeerSenderFromRequest(req);
5351
const file = await utils.extractFileFromMultipartForm(req);
5452
const blobPath = path.join(utils.constants.RECEIVED_BLOBS_SUBDIRECTORY, sender, req.params[0]);
5553
const metadata = await blobsHandler.storeBlob(file, blobPath);

0 commit comments

Comments
 (0)