Skip to content

Commit

Permalink
catalog: move the github and ldap config into their right places
Browse files Browse the repository at this point in the history
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
  • Loading branch information
freben committed Mar 16, 2022
1 parent ce514e4 commit e949d68
Show file tree
Hide file tree
Showing 6 changed files with 287 additions and 38 deletions.
7 changes: 7 additions & 0 deletions .changeset/wild-sheep-mate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/plugin-catalog-backend-module-ldap': patch
---

Made sure to move the catalog-related github and ldap config into their right places
49 changes: 49 additions & 0 deletions plugins/catalog-backend-module-github/config.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed 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.
*/

export interface Config {
catalog?: {
processors?: {
/**
* GithubMultiOrgReaderProcessor configuration
*/
githubMultiOrg?: {
/**
* The configuration parameters for each GitHub org to process.
*/
orgs: Array<{
/**
* The name of the GitHub org to process.
*/
name: string;
/**
* The namespace of the group created for this org.
*
* Defaults to org name if omitted.
*/
groupNamespace?: string;

/**
* The namespace of the users created from this org.
*
* Defaults to empty string if omitted.
*/
userNamespace?: string;
}>;
};
};
};
}
6 changes: 4 additions & 2 deletions plugins/catalog-backend-module-github/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
"@types/lodash": "^4.14.151"
},
"files": [
"dist"
]
"dist",
"config.d.ts"
],
"configSchema": "config.d.ts"
}
215 changes: 215 additions & 0 deletions plugins/catalog-backend-module-ldap/config.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,223 @@
import { JsonValue } from '@backstage/types';

export interface Config {
/**
* LdapOrgEntityProvider / LdapOrgReaderProcessor configuration
*/
ldap?: {
/**
* The configuration parameters for each single LDAP provider.
*/
providers: Array<{
/**
* The prefix of the target that this matches on, e.g.
* "ldaps://ds.example.net", with no trailing slash.
*/
target: string;

/**
* The settings to use for the bind command. If none are specified,
* the bind command is not issued.
*/
bind?: {
/**
* The DN of the user to auth as.
*
* E.g. "uid=ldap-robot,ou=robots,ou=example,dc=example,dc=net"
*/
dn: string;
/**
* The secret of the user to auth as (its password).
*
* @visibility secret
*/
secret: string;
};

/**
* The settings that govern the reading and interpretation of users.
*/
users: {
/**
* The DN under which users are stored.
*
* E.g. "ou=people,ou=example,dc=example,dc=net"
*/
dn: string;
/**
* The search options to use. The default is scope "one" and
* attributes "*" and "+".
*
* It is common to want to specify a filter, to narrow down the set
* of matching items.
*/
options: {
scope?: 'base' | 'one' | 'sub';
filter?: string;
attributes?: string | string[];
sizeLimit?: number;
timeLimit?: number;
derefAliases?: number;
typesOnly?: boolean;
paged?:
| boolean
| {
pageSize?: number;
pagePause?: boolean;
};
};
/**
* JSON paths (on a.b.c form) and hard coded values to set on those
* paths.
*
* This can be useful for example if you want to hard code a
* namespace or similar on the generated entities.
*/
set?: { [key: string]: JsonValue };
/**
* Mappings from well known entity fields, to LDAP attribute names
*/
map?: {
/**
* The name of the attribute that holds the relative
* distinguished name of each entry. Defaults to "uid".
*/
rdn?: string;
/**
* The name of the attribute that shall be used for the value of
* the metadata.name field of the entity. Defaults to "uid".
*/
name?: string;
/**
* The name of the attribute that shall be used for the value of
* the metadata.description field of the entity.
*/
description?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.displayName field of the entity. Defaults to
* "cn".
*/
displayName?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.email field of the entity. Defaults to
* "mail".
*/
email?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.picture field of the entity.
*/
picture?: string;
/**
* The name of the attribute that shall be used for the values of
* the spec.memberOf field of the entity. Defaults to "memberOf".
*/
memberOf?: string;
};
};

/**
* The settings that govern the reading and interpretation of groups.
*/
groups: {
/**
* The DN under which groups are stored.
*
* E.g. "ou=people,ou=example,dc=example,dc=net"
*/
dn: string;
/**
* The search options to use. The default is scope "one" and
* attributes "*" and "+".
*
* It is common to want to specify a filter, to narrow down the set
* of matching items.
*/
options: {
scope?: 'base' | 'one' | 'sub';
filter?: string;
attributes?: string | string[];
sizeLimit?: number;
timeLimit?: number;
derefAliases?: number;
typesOnly?: boolean;
paged?:
| boolean
| {
pageSize?: number;
pagePause?: boolean;
};
};
/**
* JSON paths (on a.b.c form) and hard coded values to set on those
* paths.
*
* This can be useful for example if you want to hard code a
* namespace or similar on the generated entities.
*/
set?: { [key: string]: JsonValue };
/**
* Mappings from well known entity fields, to LDAP attribute names
*/
map?: {
/**
* The name of the attribute that holds the relative
* distinguished name of each entry. Defaults to "cn".
*/
rdn?: string;
/**
* The name of the attribute that shall be used for the value of
* the metadata.name field of the entity. Defaults to "cn".
*/
name?: string;
/**
* The name of the attribute that shall be used for the value of
* the metadata.description field of the entity. Defaults to
* "description".
*/
description?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.type field of the entity. Defaults to "groupType".
*/
type?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.displayName field of the entity. Defaults to
* "cn".
*/
displayName?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.email field of the entity.
*/
email?: string;
/**
* The name of the attribute that shall be used for the value of
* the spec.profile.picture field of the entity.
*/
picture?: string;
/**
* The name of the attribute that shall be used for the values of
* the spec.parent field of the entity. Defaults to "memberOf".
*/
memberOf?: string;
/**
* The name of the attribute that shall be used for the values of
* the spec.children field of the entity. Defaults to "member".
*/
members?: string;
};
};
}>;
};

/**
* Configuration options for the catalog plugin.
*
* TODO(freben): Deprecate this entire block
*/
catalog?: {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,26 @@ export class LdapOrgReaderProcessor implements CatalogProcessor {
private readonly userTransformer?: UserTransformer;

static fromConfig(
config: Config,
configRoot: Config,
options: {
logger: Logger;
groupTransformer?: GroupTransformer;
userTransformer?: UserTransformer;
},
) {
const c = config.getOptionalConfig('catalog.processors.ldapOrg');
// TODO(freben): Deprecate the old catalog.processors.ldapOrg config
const config =
configRoot.getOptionalConfig('ldap') ||
configRoot.getOptionalConfig('catalog.processors.ldapOrg');
if (!config) {
throw new TypeError(
`There is no LDAP configuration. Please add it as "ldap.providers".`,
);
}

return new LdapOrgReaderProcessor({
...options,
providers: c ? readLdapConfig(c) : [],
providers: readLdapConfig(config),
});
}

Expand Down
33 changes: 0 additions & 33 deletions plugins/catalog-backend/config.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,38 +105,5 @@ export interface Config {
allow: Array<string>;
}>;
}>;

/**
* List of processor-specific options and attributes
*/
processors?: {
/**
* GithubMultiOrgReaderProcessor configuration
*/
githubMultiOrg?: {
/**
* The configuration parameters for each GitHub org to process.
*/
orgs: Array<{
/**
* The name of the GitHub org to process.
*/
name: string;
/**
* The namespace of the group created for this org.
*
* Defaults to org name if omitted.
*/
groupNamespace?: string;

/**
* The namespace of the users created from this org.
*
* Defaults to empty string if omitted.
*/
userNamespace?: string;
}>;
};
};
};
}

0 comments on commit e949d68

Please sign in to comment.