@platformatic/kafka
Version:
Modern and performant client for Apache Kafka
45 lines (44 loc) • 1.76 kB
JavaScript
import { createPromisifiedCallback, kCallbackPromise } from "../../apis/callbacks.js";
import { AuthenticationError } from "../../errors.js";
import { getCredential } from "./utils.js";
export function jwtValidateAuthenticationBytes(authBytes, callback) {
let authData = {};
try {
if (authBytes.length > 0) {
authData = JSON.parse(authBytes.toString('utf-8'));
}
/* c8 ignore next 8 - Hard to test */
}
catch (e) {
callback(new AuthenticationError('Invalid authBytes in SASL/OAUTHBEARER response', { authBytes }), undefined);
return;
}
if (authData.status === 'invalid_token') {
callback(new AuthenticationError('Invalid SASL/OAUTHBEARER token.', { authData }), undefined);
}
callback(null, authBytes);
}
export function authenticate(authenticateAPI, connection, tokenOrProvider, extensionsOrProvider, callback) {
if (!callback) {
callback = createPromisifiedCallback();
}
getCredential('SASL/OAUTHBEARER token', tokenOrProvider, (error, token) => {
if (error) {
callback(error, undefined);
return;
}
getCredential('SASL/OAUTHBEARER extensions', extensionsOrProvider ?? {}, (error, extensionsMap) => {
if (error) {
return callback(error, undefined);
}
let extensions = '';
if (extensionsMap) {
for (const [key, value] of Object.entries(extensionsMap)) {
extensions += `\x01${key}=${value}`;
}
}
authenticateAPI(connection, Buffer.from(`n,,\x01auth=Bearer ${token}${extensions}\x01\x01`), callback);
});
});
return callback[kCallbackPromise];
}