Skip to content

Commit c209f68

Browse files
committed
impr(BB-694): Add schemas for kerberos and basic auth configs
1 parent 57a66a0 commit c209f68

File tree

5 files changed

+246
-70
lines changed

5 files changed

+246
-70
lines changed

extensions/notification/NotificationConfigValidator.js

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,45 @@
11
const joi = require('joi');
22
const { probeServerJoi } = require('../../lib/config/configItems.joi');
33

4-
const authSchema = joi.object({
5-
type: joi.string(),
6-
ssl: joi.boolean(),
7-
protocol: joi.string(),
4+
const sslSchema = joi.object({
5+
ssl: joi.boolean().default(false),
86
ca: joi.string(),
97
client: joi.string(),
108
key: joi.string(),
119
keyPassword: joi.string(),
12-
keytab: joi.string(),
13-
principal: joi.string(),
14-
serviceName: joi.string(),
1510
});
1611

12+
const saslAuthSchema = ssl.append({
13+
protocol: joi.string().valid('SASL_PLAINTEXT', 'SASL_SSL').required(),
14+
});
15+
16+
const kerberosAuthSchema = sasl.append({
17+
type: joi.string().valid('kerberos').required(),
18+
keytab: joi.string().required(),
19+
principal: joi.string().required(),
20+
serviceName: joi.string().required(),
21+
});
22+
23+
const basicAuthSchema = sasl.append({
24+
type: joi.string().valid('basic').required(),
25+
credentialsFile: joi.string().required(),
26+
});
27+
28+
const credentialsFileSchema = joi.object({
29+
username: joi.string().required(),
30+
password: joi.string().required(),
31+
});
32+
33+
const authSchema = joi.alternatives().try(ssl, kerberos, basic).default({});
34+
1735
const destinationSchema = joi.object({
1836
resource: joi.string().required(),
1937
type: joi.string().required(),
2038
host: joi.string().required(),
2139
port: joi.number().optional(),
2240
internalTopic: joi.string(),
2341
topic: joi.string().required(),
24-
auth: authSchema.default({}),
42+
auth: authSchema,
2543
requiredAcks: joi.number().when('type', {
2644
is: joi.string().not('kafka'),
2745
then: joi.forbidden(),
@@ -39,10 +57,10 @@ const joiSchema = joi.object({
3957
monitorNotificationFailures: joi.boolean().default(true),
4058
notificationFailedTopic: joi.string().optional(),
4159
zookeeperPath: joi.string().optional(),
42-
queueProcessor: {
60+
queueProcessor: joi.object({
4361
groupId: joi.string().required(),
4462
concurrency: joi.number().greater(0).default(1000),
45-
},
63+
}),
4664
destinations: joi.array().items(destinationSchema).default([]),
4765
// TODO: BB-625 reset to being required after supporting probeserver in S3C
4866
// for bucket notification proceses
@@ -59,4 +77,7 @@ function configValidator(backbeatConfig, extConfig) {
5977
return validatedConfig;
6078
}
6179

62-
module.exports = configValidator;
80+
module.exports = {
81+
NotificationConfigValidator: configValidator,
82+
authSchema,
83+
};

extensions/notification/destination/KafkaProducer.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
const joi = require('joi');
2+
const { authSchema } = require('../NotificationConfigValidator');
23

34
const BackbeatProducer = require('../../../lib/BackbeatProducer');
45
const authUtil = require('../utils/auth');
56

67
class KafkaProducer extends BackbeatProducer {
78

89
getConfigJoi() {
9-
return super.getConfigJoi().append(
10-
{ auth: joi.object().optional() }
11-
).keys(
12-
{ topic: joi.string() }
13-
);
10+
return super.getConfigJoi()
11+
.append({ auth: authSchema })
12+
.keys({ topic: joi.string() });
1413
}
1514

1615
getClientId() {

extensions/notification/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const NotificationConfigValidator = require('./NotificationConfigValidator');
1+
const { NotificationConfigValidator } = require('./NotificationConfigValidator');
22
const NotificationOplogPopulatorUtils = require('./NotificationOplogPopulatorUtils');
33

44
module.exports = {

tests/unit/notification/KafkaNotificationDestination.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ describe('KafkaNotificationDestination ::', () => {
1212
afterEach(() => {
1313
sinon.restore();
1414
});
15+
1516
it('should properly configure producer', done => {
1617
const destConfig = {
1718
host: 'localhost',

0 commit comments

Comments
 (0)