This is an automated email from the ASF dual-hosted git repository. baodi pushed a commit to branch branch-1.8 in repository https://gitbox.apache.org/repos/asf/pulsar-client-node.git
commit 5453e03e37b4dbf0e4010e0fc4c2bb2c5f2989b7 Author: Baodi Shi <[email protected]> AuthorDate: Sat Feb 25 15:26:53 2023 +0800 Use the certificate provided by the node.js (#301) * Use the certificate provided by the node.js. * Gen cert file when npm install. * Certificate generation is performed only once * Fix code reviews. (cherry picked from commit a89b64fffc44cca2663b4caf954839e6cab2a3d8) --- .gitignore | 1 + index.js => GenCertFile.js | 27 ++---------------- index.js | 3 +- package.json | 2 +- src/Client.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 8936209..b6ad8df 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ report/ *.tgz pkg/linux/pulsar-cpp/ lib/ +src/cert.pem diff --git a/index.js b/GenCertFile.js similarity index 52% copy from index.js copy to GenCertFile.js index 84449cf..99e816c 100644 --- a/index.js +++ b/GenCertFile.js @@ -17,29 +17,6 @@ * under the License. */ -const PulsarBinding = require('./src/pulsar-binding'); -const AuthenticationTls = require('./src/AuthenticationTls.js'); -const AuthenticationAthenz = require('./src/AuthenticationAthenz.js'); -const AuthenticationToken = require('./src/AuthenticationToken.js'); -const AuthenticationOauth2 = require('./src/AuthenticationOauth2.js'); +const Client = require('./src/Client.js'); -const LogLevel = { - DEBUG: 0, - INFO: 1, - WARN: 2, - ERROR: 3, - toString: (level) => Object.keys(LogLevel).find((key) => LogLevel[key] === level), -}; - -const Pulsar = { - Client: PulsarBinding.Client, - Message: PulsarBinding.Message, - MessageId: PulsarBinding.MessageId, - AuthenticationTls, - AuthenticationAthenz, - AuthenticationToken, - AuthenticationOauth2, - LogLevel, -}; - -module.exports = Pulsar; +Client.genCertFile(); diff --git a/index.js b/index.js index 84449cf..2f5b9e0 100644 --- a/index.js +++ b/index.js @@ -22,6 +22,7 @@ const AuthenticationTls = require('./src/AuthenticationTls.js'); const AuthenticationAthenz = require('./src/AuthenticationAthenz.js'); const AuthenticationToken = require('./src/AuthenticationToken.js'); const AuthenticationOauth2 = require('./src/AuthenticationOauth2.js'); +const Client = require('./src/Client.js'); const LogLevel = { DEBUG: 0, @@ -32,7 +33,7 @@ const LogLevel = { }; const Pulsar = { - Client: PulsarBinding.Client, + Client, Message: PulsarBinding.Message, MessageId: PulsarBinding.MessageId, AuthenticationTls, diff --git a/package.json b/package.json index 6f8426a..9f07fde 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "example": "examples" }, "scripts": { - "install": "node-pre-gyp install --fallback-to-build", + "install": "node-pre-gyp install --fallback-to-build && node GenCertFile.js", "configure": "node-pre-gyp configure", "build": "npm run format && node-pre-gyp build", "build:debug": "npm run format && node-pre-gyp rebuild --debug", diff --git a/src/Client.js b/src/Client.js new file mode 100644 index 0000000..5932e13 --- /dev/null +++ b/src/Client.js @@ -0,0 +1,68 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +const fs = require('fs'); +const tls = require('tls'); +const os = require('os'); +const PulsarBinding = require('./pulsar-binding'); + +const certsFilePath = `${__dirname}/cert.pem`; + +class Client { + constructor(params) { + if (!params.tlsTrustCertsFilePath) { + // eslint-disable-next-line no-param-reassign + params.tlsTrustCertsFilePath = certsFilePath; + } + this.client = new PulsarBinding.Client(params); + } + + createProducer(params) { + return this.client.createProducer(params); + } + + subscribe(params) { + return this.client.subscribe(params); + } + + createReader(params) { + return this.client.createReader(params); + } + + close() { + this.client.close(); + } + + static setLogHandler(params) { + PulsarBinding.Client.setLogHandler(params); + } + + static genCertFile() { + fs.rmSync(certsFilePath, { force: true }); + const fd = fs.openSync(certsFilePath, 'a'); + try { + tls.rootCertificates.forEach((cert) => { + fs.appendFileSync(fd, cert + os.EOL); + }); + } finally { + fs.closeSync(fd); + } + } +} + +module.exports = Client;
