Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /*
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
import { URL } from 'url';
import { CfnBroker } from 'aws-cdk-lib/aws-amazonmq';
import { IValidation } from 'constructs';
export interface ActiveMqLdapAuthorizationProps {
readonly config: CfnBroker.LdapServerMetadataProperty;
}
/**
* Validates if provided string is in form required by [Active MQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html).
*/
export class ActiveMqLdapValidation implements IValidation {
readonly ActiveMqLdapAuthorization: CfnBroker.LdapServerMetadataProperty;
private readonly ditRegex?: RegExp;
errors: string[];
// constructor that accepts the string and property name
constructor(props: ActiveMqLdapAuthorizationProps) {
this.ActiveMqLdapAuthorization = props.config;
this.errors = [];
this.ditRegex =
/^((CN=([^,]*)),)?((((?:CN|OU)=[^,]+,?)+),)?((DC=[^,]+,?)+)$/im;
}
private validateDit(propertyValue: string, propertyName: string): void {
if (this.ditRegex && !this.ditRegex.test(propertyValue)) {
this.errors.push(
`Incorrect LDAP directory information tree: '${propertyValue}' at '${propertyName}'. Should match regular expression: ${this.ditRegex}`,
);
}
}
private validateHosts(hosts: string[]): void {
try {
// add URI parts (protocol and port) that will be added by the ActiveMQ.
hosts.forEach((v) => {
const url = new URL(`ldap://${v}:389`);
console.log('URL', url);
if (
url.hostname !== v ||
!url.protocol.startsWith('ldap') ||
url.port !== '389'
) {
this.errors.push(
`Invalid host: '${hosts}'. ActiveMQ requires host name without protocol and port. Check https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html`,
);
}
});
} catch (e) {
this.errors.push(
'Invalid host. ActiveMQ requires host name without protocol and port. Check https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html',
);
}
}
public validate(): string[] {
this.errors = [];
console.log('userBase', this.ActiveMqLdapAuthorization.userBase);
this.validateDit(this.ActiveMqLdapAuthorization.roleBase, 'roleBase');
this.validateDit(this.ActiveMqLdapAuthorization.userBase, 'userBase');
this.validateDit(
this.ActiveMqLdapAuthorization.serviceAccountUsername,
'serviceAccountUsername',
);
this.validateHosts(this.ActiveMqLdapAuthorization.hosts);
return this.errors;
}
}
|