@backstage/plugin-catalog-backend-module-ldap 0.12.5-next.1 → 0.12.6-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @backstage/plugin-catalog-backend-module-ldap
2
2
 
3
+ ## 0.12.6-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @backstage/plugin-catalog-node@2.2.2-next.0
9
+ - @backstage/backend-plugin-api@1.9.2-next.0
10
+
11
+ ## 0.12.5
12
+
13
+ ### Patch Changes
14
+
15
+ - e9b78e9: Removed the `uuid` dependency and replaced usage with the built-in `crypto.randomUUID()`.
16
+ - Updated dependencies
17
+ - @backstage/catalog-model@1.9.0
18
+ - @backstage/errors@1.3.1
19
+ - @backstage/backend-plugin-api@1.9.1
20
+ - @backstage/plugin-catalog-node@2.2.1
21
+ - @backstage/config@1.3.8
22
+ - @backstage/plugin-catalog-common@1.1.10
23
+
3
24
  ## 0.12.5-next.1
4
25
 
5
26
  ### Patch Changes
@@ -124,7 +124,7 @@ class LdapClient {
124
124
  throw new errors.ForwardedError("Schema check failed", error);
125
125
  }
126
126
  }
127
- // Check a shema for Google-specific patterns
127
+ // Check a schema for Google-specific patterns
128
128
  checkGoogleSchema(rootDSE) {
129
129
  try {
130
130
  const objectClasses = this.parseSchemaValues(rootDSE.objectClasses);
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs.js","sources":["../../src/ldap/client.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ForwardedError } from '@backstage/errors';\nimport { readFile } from 'node:fs/promises';\nimport { Client, Entry, SearchOptions, SearchResult } from 'ldapts';\nimport tlsLib from 'node:tls';\nimport { BindConfig, TLSConfig } from './config';\nimport {\n AEDirVendor,\n ActiveDirectoryVendor,\n DefaultLdapVendor,\n LLDAPVendor,\n FreeIpaVendor,\n LdapVendor,\n GoogleLdapVendor,\n} from './vendors';\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\n/**\n * Basic wrapper for the `ldapjs` library.\n *\n * Helps out with promisifying calls, paging, binding etc.\n *\n * @public\n */\n\nexport class LdapClient {\n private vendor: Promise<LdapVendor> | undefined;\n\n static async create(\n logger: LoggerService,\n target: string,\n bind?: BindConfig,\n tls?: TLSConfig,\n ): Promise<LdapClient> {\n let secureContext;\n if (tls && tls.certs && tls.keys) {\n const cert = await readFile(tls.certs, 'utf-8');\n const key = await readFile(tls.keys, 'utf-8');\n secureContext = tlsLib.createSecureContext({\n cert: cert,\n key: key,\n });\n }\n const tlsOptions: tlsLib.ConnectionOptions = {\n secureContext,\n rejectUnauthorized: tls?.rejectUnauthorized,\n };\n const client = new Client({\n url: target,\n ...(Object.values(tlsOptions).some(v => v !== undefined)\n ? { tlsOptions }\n : undefined),\n });\n\n const ldapClient = new LdapClient(client, logger);\n\n if (bind) {\n try {\n await client.bind(bind.dn, bind.secret);\n } catch (error) {\n await client.unbind();\n throw new ForwardedError(\n `LDAP bind failed for ${bind.dn}, ${error}`,\n error,\n );\n }\n }\n return ldapClient;\n }\n\n private readonly client: Client;\n private readonly logger: LoggerService;\n\n constructor(client: Client, logger: LoggerService) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Performs an LDAP search operation.\n *\n * @param dn - The fully qualified base DN to search within\n * @param options - The search options\n */\n async search(dn: string, options: SearchOptions): Promise<SearchResult> {\n this.logger.debug(`Reading LDAP entries so far`);\n try {\n const ldaptsOptions: SearchOptions = {\n scope: options.scope,\n filter: options.filter,\n attributes: options.attributes,\n sizeLimit: options.sizeLimit,\n timeLimit: options.timeLimit,\n derefAliases: options.derefAliases,\n paged: options.paged,\n };\n\n const result = await this.client.search(dn, ldaptsOptions);\n\n return result;\n } catch (e) {\n throw new ForwardedError(`LDAP search at DN \"${dn}\" failed`, e);\n }\n }\n\n /**\n * Get the Server Vendor.\n * Currently only detects Microsoft Active Directory Servers.\n *\n * @see https://ldapwiki.com/wiki/Determine%20LDAP%20Server%20Vendor\n */\n async getVendor(): Promise<LdapVendor> {\n if (this.vendor) {\n return this.vendor;\n }\n // const clientHost = this.client?.host || '';\n this.vendor = this.getRootDSE()\n .then(root => {\n if (root && root.forestFunctionality) {\n return ActiveDirectoryVendor;\n } else if (root && root.ipaDomainLevel) {\n return FreeIpaVendor;\n } else if (root && 'aeRoot' in root) {\n return AEDirVendor;\n } else if (this.isGoogleLDAP(root)) {\n return GoogleLdapVendor;\n } else if (root && root.vendorName?.toString() === 'LLDAP') {\n return LLDAPVendor;\n }\n return DefaultLdapVendor;\n })\n .catch(err => {\n this.vendor = undefined;\n throw err;\n });\n return this.vendor;\n }\n\n /**\n * Check if the LDAP server is Google LDAP by examining RootDSE and schema\n */\n private isGoogleLDAP(rootDSE: Entry | undefined): boolean {\n if (!rootDSE) {\n return false;\n }\n\n // RootDSE characteristics\n const hasGoogleRootDSEPattern =\n !rootDSE.namingContexts && // No namingContexts\n !rootDSE.supportedControl && // No supportedControl\n !rootDSE.vendorName && // No vendor info\n !rootDSE.vendorVersion &&\n rootDSE.subschemaSubentry === 'cn=subschema';\n\n if (!hasGoogleRootDSEPattern) {\n return false;\n }\n\n try {\n const schemaHasGoogleAttributes = this.checkGoogleSchema(rootDSE);\n return schemaHasGoogleAttributes;\n } catch (error) {\n throw new ForwardedError('Schema check failed', error);\n }\n }\n\n // Check a shema for Google-specific patterns\n private checkGoogleSchema(rootDSE: Entry): boolean {\n try {\n const objectClasses = this.parseSchemaValues(rootDSE.objectClasses);\n const attributeTypes = this.parseSchemaValues(rootDSE.attributeTypes);\n\n // Check if any Google-specific attributes are present\n const hasGoogleAttributes =\n objectClasses.some(oc => oc.includes('googleUid')) ||\n attributeTypes.some(at => at.includes('googleAdminCreated'));\n\n return hasGoogleAttributes;\n } catch (error) {\n this.logger.warn('Error checking schema:', error);\n return false;\n }\n }\n\n private parseSchemaValues(\n schemaValue: Buffer | Buffer[] | string[] | string,\n ): string[] {\n if (!schemaValue) return [];\n\n const values = Array.isArray(schemaValue) ? schemaValue : [schemaValue];\n return values.map(v => v.toString());\n }\n\n /**\n * Get the Root DSE.\n *\n * @see https://ldapwiki.com/wiki/RootDSE\n */\n async getRootDSE(): Promise<Entry | undefined> {\n const result = await this.client.search('', {\n scope: 'base',\n filter: '(objectclass=*)',\n } as SearchOptions);\n if (result && result.searchEntries.length === 1) {\n return result.searchEntries[0];\n }\n return undefined;\n }\n}\n"],"names":["readFile","tlsLib","Client","ForwardedError","ActiveDirectoryVendor","FreeIpaVendor","AEDirVendor","GoogleLdapVendor","LLDAPVendor","DefaultLdapVendor"],"mappings":";;;;;;;;;;;;AAwCO,MAAM,UAAA,CAAW;AAAA,EACd,MAAA;AAAA,EAER,aAAa,MAAA,CACX,MAAA,EACA,MAAA,EACA,MACA,GAAA,EACqB;AACrB,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,IAAA,EAAM;AAChC,MAAA,MAAM,IAAA,GAAO,MAAMA,iBAAA,CAAS,GAAA,CAAI,OAAO,OAAO,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,MAAMA,iBAAA,CAAS,GAAA,CAAI,MAAM,OAAO,CAAA;AAC5C,MAAA,aAAA,GAAgBC,wBAAO,mBAAA,CAAoB;AAAA,QACzC,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,UAAA,GAAuC;AAAA,MAC3C,aAAA;AAAA,MACA,oBAAoB,GAAA,EAAK;AAAA,KAC3B;AACA,IAAA,MAAM,MAAA,GAAS,IAAIC,aAAA,CAAO;AAAA,MACxB,GAAA,EAAK,MAAA;AAAA,MACL,GAAI,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,KAAM,MAAS,CAAA,GACnD,EAAE,UAAA,EAAW,GACb;AAAA,KACL,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AAEhD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,KAAK,MAAM,CAAA;AAAA,MACxC,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,OAAO,MAAA,EAAO;AACpB,QAAA,MAAM,IAAIC,qBAAA;AAAA,UACR,CAAA,qBAAA,EAAwB,IAAA,CAAK,EAAE,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA;AAAA,UACzC;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEiB,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,QAAgB,MAAA,EAAuB;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,EAA+C;AACtE,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,2BAAA,CAA6B,CAAA;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,OAAO,OAAA,CAAQ;AAAA,OACjB;AAEA,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAa,CAAA;AAEzD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,IAAIA,qBAAA,CAAe,CAAA,mBAAA,EAAsB,EAAE,YAAY,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAA,GAAiC;AACrC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,UAAA,EAAW,CAC3B,KAAK,CAAA,IAAA,KAAQ;AACZ,MAAA,IAAI,IAAA,IAAQ,KAAK,mBAAA,EAAqB;AACpC,QAAA,OAAOC,6BAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAgB;AACtC,QAAA,OAAOC,qBAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,IAAQ,QAAA,IAAY,IAAA,EAAM;AACnC,QAAA,OAAOC,mBAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,EAAG;AAClC,QAAA,OAAOC,wBAAA;AAAA,MACT,WAAW,IAAA,IAAQ,IAAA,CAAK,UAAA,EAAY,QAAA,OAAe,OAAA,EAAS;AAC1D,QAAA,OAAOC,mBAAA;AAAA,MACT;AACA,MAAA,OAAOC,yBAAA;AAAA,IACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,MAAA,MAAM,GAAA;AAAA,IACR,CAAC,CAAA;AACH,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,OAAA,EAAqC;AACxD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,uBAAA,GACJ,CAAC,OAAA,CAAQ,cAAA;AAAA,IACT,CAAC,OAAA,CAAQ,gBAAA;AAAA,IACT,CAAC,OAAA,CAAQ,UAAA;AAAA,IACT,CAAC,OAAA,CAAQ,aAAA,IACT,OAAA,CAAQ,iBAAA,KAAsB,cAAA;AAEhC,IAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,yBAAA,GAA4B,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAChE,MAAA,OAAO,yBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIN,qBAAA,CAAe,qBAAA,EAAuB,KAAK,CAAA;AAAA,IACvD;AAAA,EACF;AAAA;AAAA,EAGQ,kBAAkB,OAAA,EAAyB;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,aAAa,CAAA;AAClE,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,cAAc,CAAA;AAGpE,MAAA,MAAM,mBAAA,GACJ,aAAA,CAAc,IAAA,CAAK,CAAA,EAAA,KAAM,GAAG,QAAA,CAAS,WAAW,CAAC,CAAA,IACjD,eAAe,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,oBAAoB,CAAC,CAAA;AAE7D,MAAA,OAAO,mBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,wBAAA,EAA0B,KAAK,CAAA;AAChD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,kBACN,WAAA,EACU;AACV,IAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAC;AAE1B,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW,CAAA;AACtE,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,GAAyC;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,EAAA,EAAI;AAAA,MAC1C,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACQ,CAAA;AAClB,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AAC/C,MAAA,OAAO,MAAA,CAAO,cAAc,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"client.cjs.js","sources":["../../src/ldap/client.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ForwardedError } from '@backstage/errors';\nimport { readFile } from 'node:fs/promises';\nimport { Client, Entry, SearchOptions, SearchResult } from 'ldapts';\nimport tlsLib from 'node:tls';\nimport { BindConfig, TLSConfig } from './config';\nimport {\n AEDirVendor,\n ActiveDirectoryVendor,\n DefaultLdapVendor,\n LLDAPVendor,\n FreeIpaVendor,\n LdapVendor,\n GoogleLdapVendor,\n} from './vendors';\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\n/**\n * Basic wrapper for the `ldapjs` library.\n *\n * Helps out with promisifying calls, paging, binding etc.\n *\n * @public\n */\n\nexport class LdapClient {\n private vendor: Promise<LdapVendor> | undefined;\n\n static async create(\n logger: LoggerService,\n target: string,\n bind?: BindConfig,\n tls?: TLSConfig,\n ): Promise<LdapClient> {\n let secureContext;\n if (tls && tls.certs && tls.keys) {\n const cert = await readFile(tls.certs, 'utf-8');\n const key = await readFile(tls.keys, 'utf-8');\n secureContext = tlsLib.createSecureContext({\n cert: cert,\n key: key,\n });\n }\n const tlsOptions: tlsLib.ConnectionOptions = {\n secureContext,\n rejectUnauthorized: tls?.rejectUnauthorized,\n };\n const client = new Client({\n url: target,\n ...(Object.values(tlsOptions).some(v => v !== undefined)\n ? { tlsOptions }\n : undefined),\n });\n\n const ldapClient = new LdapClient(client, logger);\n\n if (bind) {\n try {\n await client.bind(bind.dn, bind.secret);\n } catch (error) {\n await client.unbind();\n throw new ForwardedError(\n `LDAP bind failed for ${bind.dn}, ${error}`,\n error,\n );\n }\n }\n return ldapClient;\n }\n\n private readonly client: Client;\n private readonly logger: LoggerService;\n\n constructor(client: Client, logger: LoggerService) {\n this.client = client;\n this.logger = logger;\n }\n\n /**\n * Performs an LDAP search operation.\n *\n * @param dn - The fully qualified base DN to search within\n * @param options - The search options\n */\n async search(dn: string, options: SearchOptions): Promise<SearchResult> {\n this.logger.debug(`Reading LDAP entries so far`);\n try {\n const ldaptsOptions: SearchOptions = {\n scope: options.scope,\n filter: options.filter,\n attributes: options.attributes,\n sizeLimit: options.sizeLimit,\n timeLimit: options.timeLimit,\n derefAliases: options.derefAliases,\n paged: options.paged,\n };\n\n const result = await this.client.search(dn, ldaptsOptions);\n\n return result;\n } catch (e) {\n throw new ForwardedError(`LDAP search at DN \"${dn}\" failed`, e);\n }\n }\n\n /**\n * Get the Server Vendor.\n * Currently only detects Microsoft Active Directory Servers.\n *\n * @see https://ldapwiki.com/wiki/Determine%20LDAP%20Server%20Vendor\n */\n async getVendor(): Promise<LdapVendor> {\n if (this.vendor) {\n return this.vendor;\n }\n // const clientHost = this.client?.host || '';\n this.vendor = this.getRootDSE()\n .then(root => {\n if (root && root.forestFunctionality) {\n return ActiveDirectoryVendor;\n } else if (root && root.ipaDomainLevel) {\n return FreeIpaVendor;\n } else if (root && 'aeRoot' in root) {\n return AEDirVendor;\n } else if (this.isGoogleLDAP(root)) {\n return GoogleLdapVendor;\n } else if (root && root.vendorName?.toString() === 'LLDAP') {\n return LLDAPVendor;\n }\n return DefaultLdapVendor;\n })\n .catch(err => {\n this.vendor = undefined;\n throw err;\n });\n return this.vendor;\n }\n\n /**\n * Check if the LDAP server is Google LDAP by examining RootDSE and schema\n */\n private isGoogleLDAP(rootDSE: Entry | undefined): boolean {\n if (!rootDSE) {\n return false;\n }\n\n // RootDSE characteristics\n const hasGoogleRootDSEPattern =\n !rootDSE.namingContexts && // No namingContexts\n !rootDSE.supportedControl && // No supportedControl\n !rootDSE.vendorName && // No vendor info\n !rootDSE.vendorVersion &&\n rootDSE.subschemaSubentry === 'cn=subschema';\n\n if (!hasGoogleRootDSEPattern) {\n return false;\n }\n\n try {\n const schemaHasGoogleAttributes = this.checkGoogleSchema(rootDSE);\n return schemaHasGoogleAttributes;\n } catch (error) {\n throw new ForwardedError('Schema check failed', error);\n }\n }\n\n // Check a schema for Google-specific patterns\n private checkGoogleSchema(rootDSE: Entry): boolean {\n try {\n const objectClasses = this.parseSchemaValues(rootDSE.objectClasses);\n const attributeTypes = this.parseSchemaValues(rootDSE.attributeTypes);\n\n // Check if any Google-specific attributes are present\n const hasGoogleAttributes =\n objectClasses.some(oc => oc.includes('googleUid')) ||\n attributeTypes.some(at => at.includes('googleAdminCreated'));\n\n return hasGoogleAttributes;\n } catch (error) {\n this.logger.warn('Error checking schema:', error);\n return false;\n }\n }\n\n private parseSchemaValues(\n schemaValue: Buffer | Buffer[] | string[] | string,\n ): string[] {\n if (!schemaValue) return [];\n\n const values = Array.isArray(schemaValue) ? schemaValue : [schemaValue];\n return values.map(v => v.toString());\n }\n\n /**\n * Get the Root DSE.\n *\n * @see https://ldapwiki.com/wiki/RootDSE\n */\n async getRootDSE(): Promise<Entry | undefined> {\n const result = await this.client.search('', {\n scope: 'base',\n filter: '(objectclass=*)',\n } as SearchOptions);\n if (result && result.searchEntries.length === 1) {\n return result.searchEntries[0];\n }\n return undefined;\n }\n}\n"],"names":["readFile","tlsLib","Client","ForwardedError","ActiveDirectoryVendor","FreeIpaVendor","AEDirVendor","GoogleLdapVendor","LLDAPVendor","DefaultLdapVendor"],"mappings":";;;;;;;;;;;;AAwCO,MAAM,UAAA,CAAW;AAAA,EACd,MAAA;AAAA,EAER,aAAa,MAAA,CACX,MAAA,EACA,MAAA,EACA,MACA,GAAA,EACqB;AACrB,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,IAAA,EAAM;AAChC,MAAA,MAAM,IAAA,GAAO,MAAMA,iBAAA,CAAS,GAAA,CAAI,OAAO,OAAO,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,MAAMA,iBAAA,CAAS,GAAA,CAAI,MAAM,OAAO,CAAA;AAC5C,MAAA,aAAA,GAAgBC,wBAAO,mBAAA,CAAoB;AAAA,QACzC,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,UAAA,GAAuC;AAAA,MAC3C,aAAA;AAAA,MACA,oBAAoB,GAAA,EAAK;AAAA,KAC3B;AACA,IAAA,MAAM,MAAA,GAAS,IAAIC,aAAA,CAAO;AAAA,MACxB,GAAA,EAAK,MAAA;AAAA,MACL,GAAI,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,KAAM,MAAS,CAAA,GACnD,EAAE,UAAA,EAAW,GACb;AAAA,KACL,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AAEhD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,KAAK,MAAM,CAAA;AAAA,MACxC,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,OAAO,MAAA,EAAO;AACpB,QAAA,MAAM,IAAIC,qBAAA;AAAA,UACR,CAAA,qBAAA,EAAwB,IAAA,CAAK,EAAE,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA;AAAA,UACzC;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEiB,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,QAAgB,MAAA,EAAuB;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,EAA+C;AACtE,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,2BAAA,CAA6B,CAAA;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,OAAO,OAAA,CAAQ;AAAA,OACjB;AAEA,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAI,aAAa,CAAA;AAEzD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,IAAIA,qBAAA,CAAe,CAAA,mBAAA,EAAsB,EAAE,YAAY,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAA,GAAiC;AACrC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,UAAA,EAAW,CAC3B,KAAK,CAAA,IAAA,KAAQ;AACZ,MAAA,IAAI,IAAA,IAAQ,KAAK,mBAAA,EAAqB;AACpC,QAAA,OAAOC,6BAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAgB;AACtC,QAAA,OAAOC,qBAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,IAAQ,QAAA,IAAY,IAAA,EAAM;AACnC,QAAA,OAAOC,mBAAA;AAAA,MACT,CAAA,MAAA,IAAW,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,EAAG;AAClC,QAAA,OAAOC,wBAAA;AAAA,MACT,WAAW,IAAA,IAAQ,IAAA,CAAK,UAAA,EAAY,QAAA,OAAe,OAAA,EAAS;AAC1D,QAAA,OAAOC,mBAAA;AAAA,MACT;AACA,MAAA,OAAOC,yBAAA;AAAA,IACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,MAAA,MAAM,GAAA;AAAA,IACR,CAAC,CAAA;AACH,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,OAAA,EAAqC;AACxD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,uBAAA,GACJ,CAAC,OAAA,CAAQ,cAAA;AAAA,IACT,CAAC,OAAA,CAAQ,gBAAA;AAAA,IACT,CAAC,OAAA,CAAQ,UAAA;AAAA,IACT,CAAC,OAAA,CAAQ,aAAA,IACT,OAAA,CAAQ,iBAAA,KAAsB,cAAA;AAEhC,IAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,yBAAA,GAA4B,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAChE,MAAA,OAAO,yBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIN,qBAAA,CAAe,qBAAA,EAAuB,KAAK,CAAA;AAAA,IACvD;AAAA,EACF;AAAA;AAAA,EAGQ,kBAAkB,OAAA,EAAyB;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,aAAa,CAAA;AAClE,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,cAAc,CAAA;AAGpE,MAAA,MAAM,mBAAA,GACJ,aAAA,CAAc,IAAA,CAAK,CAAA,EAAA,KAAM,GAAG,QAAA,CAAS,WAAW,CAAC,CAAA,IACjD,eAAe,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,oBAAoB,CAAC,CAAA;AAE7D,MAAA,OAAO,mBAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,wBAAA,EAA0B,KAAK,CAAA;AAChD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,kBACN,WAAA,EACU;AACV,IAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAC;AAE1B,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW,CAAA;AACtE,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,GAAyC;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,EAAA,EAAI;AAAA,MAC1C,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACQ,CAAA;AAClB,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AAC/C,MAAA,OAAO,MAAA,CAAO,cAAc,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-backend-module-ldap",
3
- "version": "0.12.5-next.1",
3
+ "version": "0.12.6-next.0",
4
4
  "description": "A Backstage catalog backend module that helps integrate towards LDAP",
5
5
  "backstage": {
6
6
  "role": "backend-plugin-module",
@@ -41,18 +41,18 @@
41
41
  "test": "backstage-cli package test"
42
42
  },
43
43
  "dependencies": {
44
- "@backstage/backend-plugin-api": "1.9.1-next.0",
45
- "@backstage/catalog-model": "1.8.1-next.1",
46
- "@backstage/config": "1.3.8-next.0",
47
- "@backstage/errors": "1.3.1-next.0",
48
- "@backstage/plugin-catalog-common": "1.1.10-next.0",
49
- "@backstage/plugin-catalog-node": "2.2.1-next.1",
44
+ "@backstage/backend-plugin-api": "1.9.2-next.0",
45
+ "@backstage/catalog-model": "1.9.0",
46
+ "@backstage/config": "1.3.8",
47
+ "@backstage/errors": "1.3.1",
48
+ "@backstage/plugin-catalog-common": "1.1.10",
49
+ "@backstage/plugin-catalog-node": "2.2.2-next.0",
50
50
  "@backstage/types": "1.2.2",
51
51
  "ldapts": "^8.0.6",
52
52
  "lodash": "^4.17.21"
53
53
  },
54
54
  "devDependencies": {
55
- "@backstage/cli": "0.36.2-next.1",
55
+ "@backstage/cli": "0.36.3-next.0",
56
56
  "@types/lodash": "^4.14.151"
57
57
  },
58
58
  "configSchema": "config.d.ts",