gateway-admin-ui/admin-ui/app/provider-config-wizard/grouplookup-id-assertion-provider-config.ts (92 lines of code) (raw):
/*
* 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.
*/
import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
import {ValidationUtils} from '../utils/validation-utils';
export class GroupLookupAssertionProviderConfig extends IdentityAssertionProviderConfig {
private static GROUP_MAPPING = 'Group Mapping';
private static URL = 'LDAP URL';
private static BIND_USER = 'Bind User';
private static BIND_PWD = 'Bind Password';
private static USER_SEARCH_FILTER = 'User Search Filter';
private static USER_BASE = 'User Search Base';
private static GROUP_SEARCH_FILTER = 'Group Search Filter';
private static MEMBER_SEARCH_ATTR = 'Group Member Attribute';
private static GROUP_SEARCH_ATTR = 'Group Name Attribute';
private static displayPropertyNames = [GroupLookupAssertionProviderConfig.URL,
GroupLookupAssertionProviderConfig.BIND_USER,
GroupLookupAssertionProviderConfig.BIND_PWD,
GroupLookupAssertionProviderConfig.USER_BASE,
GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER,
GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER,
GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR,
GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR
];
private static displayPropertyNameBindings: Map<string, string> =
new Map([
[GroupLookupAssertionProviderConfig.GROUP_MAPPING, 'hadoop.security.group.mapping'],
[GroupLookupAssertionProviderConfig.BIND_USER, 'hadoop.security.group.mapping.ldap.bind.user'],
[GroupLookupAssertionProviderConfig.BIND_PWD, 'hadoop.security.group.mapping.ldap.bind.password'],
[GroupLookupAssertionProviderConfig.URL, 'hadoop.security.group.mapping.ldap.url'],
[GroupLookupAssertionProviderConfig.USER_BASE, 'hadoop.security.group.mapping.ldap.base'],
[GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.user'],
[GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.group'],
[GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.member'],
[GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.group.name']
]);
constructor() {
super('HadoopGroupProvider');
this.setParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.GROUP_MAPPING),
'org.apache.hadoop.security.LdapGroupsMapping');
}
getDisplayPropertyNames(): string[] {
return GroupLookupAssertionProviderConfig.displayPropertyNames;
}
getDisplayNamePropertyBinding(name: string) {
return GroupLookupAssertionProviderConfig.displayPropertyNameBindings.get(name);
}
isPasswordParam(name: string): boolean {
return (name === GroupLookupAssertionProviderConfig.BIND_PWD);
}
isValidParamValue(paramName: string): boolean {
let isValid: boolean;
switch (paramName) {
case GroupLookupAssertionProviderConfig.BIND_USER:
isValid = this.isBindUserValid();
break;
case GroupLookupAssertionProviderConfig.URL:
isValid = this.isLdapURLValid();
break;
case GroupLookupAssertionProviderConfig.BIND_PWD:
case GroupLookupAssertionProviderConfig.USER_BASE:
case GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER:
case GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER:
case GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR:
case GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR:
default:
isValid = true;
}
return isValid;
}
private isBindUserValid(): boolean {
let isValid = true;
let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.BIND_USER));
if (url) {
isValid = ValidationUtils.isValidDNTemplate(url);
if (!isValid) {
console.debug(GroupLookupAssertionProviderConfig.BIND_USER + ' value is not a valid DN');
}
}
return isValid;
}
private isLdapURLValid(): boolean {
let isValid = true;
let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.URL));
if (url) {
isValid = ValidationUtils.isValidLdapURL(url);
if (!isValid) {
console.debug(GroupLookupAssertionProviderConfig.URL + ' value is not valid.');
}
} else {
isValid = false; // URL must be specified
}
return isValid;
}
}