Browse Source

new ad ldap datasource

pull/7620/head
Hervé de CHAVIGNY 4 years ago
parent
commit
6c9416a4ee
  1. 106
      packages/server/src/integrations/adldap.ts

106
packages/server/src/integrations/adldap.ts

@ -1,4 +1,4 @@
import { Integration, QueryType, IntegrationBase } from "@budibase/types"
import { Integration, QueryType, IntegrationBase, DatasourceFieldType } from "@budibase/types"
import { IClientConfig, Client } from "ldap-ts-client";
@ -16,8 +16,8 @@ module AdLdapModule {
docs: "https://github.com/saostad/ldap-ts-client#readme",
description:
"LDAP Client to connect your Active Directory LDAP Server.",
friendlyName: "AD Ldap",
type: "Object store",
friendlyName: "AD Ldap",
type: "Non-relational",
datasource: {
url: {
type: "string",
@ -39,21 +39,59 @@ module AdLdapModule {
},
query: {
command: {
readable: true,
displayName: "Get Ldap users",
type: QueryType.JSON,
},
create: {
type: QueryType.FIELDS,
fields: {
key: {
type: DatasourceFieldType.STRING,
required: true,
},
value: {
type: DatasourceFieldType.STRING,
required: true,
}
},
},
read: {
readable: true,
type: QueryType.FIELDS,
fields: {
bucket: {
type: "string",
key: {
type: DatasourceFieldType.STRING,
required: true,
},
},
},
update: {
readable: true,
type: QueryType.FIELDS,
fields: {
key: {
type: DatasourceFieldType.STRING,
required: true,
},
},
},
delete: {
type: QueryType.FIELDS,
fields: {
key: {
type: DatasourceFieldType.STRING,
required: true,
},
},
}
},
}
class AdLdapIntegration implements IntegrationBase {
class AdLdapIntegration {
private readonly config: AdLdapConfig
private client: any
private client;
constructor(config: AdLdapConfig) {
this.config = config
@ -62,20 +100,62 @@ module AdLdapModule {
this.client = new Client(this.config)
}
async read(query: { bucket: string }) {
async ldapContext(query: Function) {
try {
return await query()
} catch (err) {
throw new Error(`Redis error: ${err}`)
} finally {
console.log("end")
}
}
async create(query: { key: string; value: string; ttl: number }) {
return this.ldapContext(async () => {
const response = null
return response
})
}
async read(query: { key: string }) {
return this.ldapContext(async () => {
const response = null
return response
})
}
async update(query: { key: string }) {
return this.ldapContext(async () => {
const response = null
return response
})
}
async delete(query: { key: string }) {
return this.ldapContext(async () => {
const response = null
return response
})
}
async command(query: { bucket: string }) {
return this.ldapContext(async () => {
const response = await this.client.queryAttributes({
attributes: [query.bucket],
attributes: [`${query.bucket}`],
options: {
filter:
"(&(|(objectClass=user)(objectClass=person))(!(objectClass=computer))(!(objectClass=group)))",
filter:"(&(|(objectClass=user)(objectClass=person))(!(objectClass=computer))(!(objectClass=group)))",
scope: "sub",
paged: true,
paged: false
},
base:this.config.baseDN
});
console.log("Ldap users :",response)
// always free-Up after you done the job!
this.client.unbind();
return response
})
}
}

Loading…
Cancel
Save