File size: 1,924 Bytes
aec3094 | 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 | import { Get, Post, Put, RestController, GlobalScope } from '@n8n/decorators';
import pick from 'lodash/pick';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { EventService } from '@/events/event.service';
import { NON_SENSIBLE_LDAP_CONFIG_PROPERTIES } from './constants';
import { getLdapSynchronizations } from './helpers.ee';
import { LdapService } from './ldap.service.ee';
import { LdapConfiguration } from './types';
@RestController('/ldap')
export class LdapController {
constructor(
private readonly ldapService: LdapService,
private readonly eventService: EventService,
) {}
@Get('/config')
@GlobalScope('ldap:manage')
async getConfig() {
return await this.ldapService.loadConfig();
}
@Post('/test-connection')
@GlobalScope('ldap:manage')
async testConnection() {
try {
await this.ldapService.testConnection();
} catch (error) {
throw new BadRequestError((error as { message: string }).message);
}
}
@Put('/config')
@GlobalScope('ldap:manage')
async updateConfig(req: LdapConfiguration.Update) {
try {
await this.ldapService.updateConfig(req.body);
} catch (error) {
throw new BadRequestError((error as { message: string }).message);
}
const data = await this.ldapService.loadConfig();
this.eventService.emit('ldap-settings-updated', {
userId: req.user.id,
...pick(data, NON_SENSIBLE_LDAP_CONFIG_PROPERTIES),
});
return data;
}
@Get('/sync')
@GlobalScope('ldap:sync')
async getLdapSync(req: LdapConfiguration.GetSync) {
const { page = '0', perPage = '20' } = req.query;
return await getLdapSynchronizations(parseInt(page, 10), parseInt(perPage, 10));
}
@Post('/sync')
@GlobalScope('ldap:sync')
async syncLdap(req: LdapConfiguration.Sync) {
try {
await this.ldapService.runSync(req.body.type);
} catch (error) {
throw new BadRequestError((error as { message: string }).message);
}
}
}
|