n8n
Version:
n8n Workflow Automation Tool
253 lines • 11.4 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteAllLdapIdentities = exports.updateLdapUserOnLocalDb = exports.createLdapUserOnLocalDb = exports.createLdapAuthIdentity = exports.getMappingAttributes = exports.formatUrl = exports.getLdapSynchronizations = exports.saveLdapSynchronization = exports.processUsers = exports.mapLdapUserToDbUser = exports.getLdapUsers = exports.getLdapIds = exports.mapLdapAttributesToUser = exports.getUserByEmail = exports.getAuthIdentityByLdapId = exports.escapeFilter = exports.createFilter = exports.resolveBinaryAttributes = exports.resolveEntryBinaryAttributes = exports.validateLdapConfigurationSchema = exports.isLdapLoginEnabled = exports.getLdapLoginLabel = exports.isLdapEnabled = void 0;
const di_1 = require("@n8n/di");
const jsonschema_1 = require("jsonschema");
const Filter_1 = require("ldapts/filters/Filter");
const n8n_workflow_1 = require("n8n-workflow");
const config_1 = __importDefault(require("../config"));
const auth_identity_1 = require("../databases/entities/auth-identity");
const user_1 = require("../databases/entities/user");
const auth_identity_repository_1 = require("../databases/repositories/auth-identity.repository");
const auth_provider_sync_history_repository_1 = require("../databases/repositories/auth-provider-sync-history.repository");
const user_repository_1 = require("../databases/repositories/user.repository");
const Db = __importStar(require("../db"));
const license_1 = require("../license");
const constants_1 = require("./constants");
const isLdapEnabled = () => {
return di_1.Container.get(license_1.License).isLdapEnabled();
};
exports.isLdapEnabled = isLdapEnabled;
const getLdapLoginLabel = () => config_1.default.getEnv(constants_1.LDAP_LOGIN_LABEL);
exports.getLdapLoginLabel = getLdapLoginLabel;
const isLdapLoginEnabled = () => config_1.default.getEnv(constants_1.LDAP_LOGIN_ENABLED);
exports.isLdapLoginEnabled = isLdapLoginEnabled;
const validateLdapConfigurationSchema = (ldapConfig) => {
const { valid, errors } = (0, jsonschema_1.validate)(ldapConfig, constants_1.LDAP_CONFIG_SCHEMA, { nestedErrors: true });
let message = '';
if (!valid) {
message = errors.map((error) => `request.body.${error.path[0]} ${error.message}`).join(',');
}
return { valid, message };
};
exports.validateLdapConfigurationSchema = validateLdapConfigurationSchema;
const resolveEntryBinaryAttributes = (entry) => {
Object.entries(entry)
.filter(([k]) => constants_1.BINARY_AD_ATTRIBUTES.includes(k))
.forEach(([k]) => {
entry[k] = entry[k].toString('hex');
});
return entry;
};
exports.resolveEntryBinaryAttributes = resolveEntryBinaryAttributes;
const resolveBinaryAttributes = (entries) => {
entries.forEach((entry) => (0, exports.resolveEntryBinaryAttributes)(entry));
};
exports.resolveBinaryAttributes = resolveBinaryAttributes;
const createFilter = (filter, userFilter) => {
let _filter = `(&(|(objectClass=person)(objectClass=user))${filter})`;
if (userFilter) {
_filter = `(&${userFilter}${filter}`;
}
return _filter;
};
exports.createFilter = createFilter;
const escapeFilter = (filter) => {
return new Filter_1.Filter().escape(filter);
};
exports.escapeFilter = escapeFilter;
const getAuthIdentityByLdapId = async (idAttributeValue) => {
return await di_1.Container.get(auth_identity_repository_1.AuthIdentityRepository).findOne({
relations: { user: true },
where: {
providerId: idAttributeValue,
providerType: 'ldap',
},
});
};
exports.getAuthIdentityByLdapId = getAuthIdentityByLdapId;
const getUserByEmail = async (email) => {
return await di_1.Container.get(user_repository_1.UserRepository).findOne({
where: { email },
});
};
exports.getUserByEmail = getUserByEmail;
const mapLdapAttributesToUser = (ldapUser, ldapConfig) => {
return [
ldapUser[ldapConfig.ldapIdAttribute],
{
email: ldapUser[ldapConfig.emailAttribute],
firstName: ldapUser[ldapConfig.firstNameAttribute],
lastName: ldapUser[ldapConfig.lastNameAttribute],
},
];
};
exports.mapLdapAttributesToUser = mapLdapAttributesToUser;
const getLdapIds = async () => {
const identities = await di_1.Container.get(auth_identity_repository_1.AuthIdentityRepository).find({
select: ['providerId'],
where: {
providerType: 'ldap',
},
});
return identities.map((i) => i.providerId);
};
exports.getLdapIds = getLdapIds;
const getLdapUsers = async () => {
const identities = await di_1.Container.get(auth_identity_repository_1.AuthIdentityRepository).find({
relations: { user: true },
where: {
providerType: 'ldap',
},
});
return identities.map((i) => i.user);
};
exports.getLdapUsers = getLdapUsers;
const mapLdapUserToDbUser = (ldapUser, ldapConfig, toCreate = false) => {
const user = new user_1.User();
const [ldapId, data] = (0, exports.mapLdapAttributesToUser)(ldapUser, ldapConfig);
Object.assign(user, data);
if (toCreate) {
user.role = 'global:member';
user.password = (0, n8n_workflow_1.randomString)(8);
user.disabled = false;
}
else {
user.disabled = true;
}
return [ldapId, user];
};
exports.mapLdapUserToDbUser = mapLdapUserToDbUser;
const processUsers = async (toCreateUsers, toUpdateUsers, toDisableUsers) => {
const userRepository = di_1.Container.get(user_repository_1.UserRepository);
await Db.transaction(async (transactionManager) => {
return await Promise.all([
...toCreateUsers.map(async ([ldapId, user]) => {
const { user: savedUser } = await userRepository.createUserWithProject(user, transactionManager);
const authIdentity = auth_identity_1.AuthIdentity.create(savedUser, ldapId);
return await transactionManager.save(authIdentity);
}),
...toUpdateUsers.map(async ([ldapId, user]) => {
const authIdentity = await transactionManager.findOneBy(auth_identity_1.AuthIdentity, {
providerId: ldapId,
});
if (authIdentity?.userId) {
await transactionManager.update(user_1.User, { id: authIdentity.userId }, { email: user.email, firstName: user.firstName, lastName: user.lastName });
}
}),
...toDisableUsers.map(async (ldapId) => {
const authIdentity = await transactionManager.findOneBy(auth_identity_1.AuthIdentity, {
providerId: ldapId,
});
if (authIdentity?.userId) {
const user = await transactionManager.findOneBy(user_1.User, { id: authIdentity.userId });
if (user) {
user.disabled = true;
await transactionManager.save(user);
}
await transactionManager.delete(auth_identity_1.AuthIdentity, { userId: authIdentity?.userId });
}
}),
]);
});
};
exports.processUsers = processUsers;
const saveLdapSynchronization = async (data) => {
await di_1.Container.get(auth_provider_sync_history_repository_1.AuthProviderSyncHistoryRepository).save({
...data,
providerType: 'ldap',
}, { transaction: false });
};
exports.saveLdapSynchronization = saveLdapSynchronization;
const getLdapSynchronizations = async (page, perPage) => {
const _page = Math.abs(page);
return await di_1.Container.get(auth_provider_sync_history_repository_1.AuthProviderSyncHistoryRepository).find({
where: { providerType: 'ldap' },
order: { id: 'DESC' },
take: perPage,
skip: _page * perPage,
});
};
exports.getLdapSynchronizations = getLdapSynchronizations;
const formatUrl = (url, port, security) => {
const protocol = ['tls'].includes(security) ? 'ldaps' : 'ldap';
return `${protocol}://${url}:${port}`;
};
exports.formatUrl = formatUrl;
const getMappingAttributes = (ldapConfig) => {
return [
ldapConfig.emailAttribute,
ldapConfig.ldapIdAttribute,
ldapConfig.firstNameAttribute,
ldapConfig.lastNameAttribute,
ldapConfig.emailAttribute,
];
};
exports.getMappingAttributes = getMappingAttributes;
const createLdapAuthIdentity = async (user, ldapId) => {
return await di_1.Container.get(auth_identity_repository_1.AuthIdentityRepository).save(auth_identity_1.AuthIdentity.create(user, ldapId), {
transaction: false,
});
};
exports.createLdapAuthIdentity = createLdapAuthIdentity;
const createLdapUserOnLocalDb = async (data, ldapId) => {
const { user } = await di_1.Container.get(user_repository_1.UserRepository).createUserWithProject({
password: (0, n8n_workflow_1.randomString)(8),
role: 'global:member',
...data,
});
await (0, exports.createLdapAuthIdentity)(user, ldapId);
return user;
};
exports.createLdapUserOnLocalDb = createLdapUserOnLocalDb;
const updateLdapUserOnLocalDb = async (identity, data) => {
const userId = identity?.user?.id;
if (userId) {
const user = await di_1.Container.get(user_repository_1.UserRepository).findOneBy({ id: userId });
if (user) {
await di_1.Container.get(user_repository_1.UserRepository).save({ id: userId, ...data }, { transaction: true });
}
}
};
exports.updateLdapUserOnLocalDb = updateLdapUserOnLocalDb;
const deleteAllLdapIdentities = async () => {
return await di_1.Container.get(auth_identity_repository_1.AuthIdentityRepository).delete({ providerType: 'ldap' });
};
exports.deleteAllLdapIdentities = deleteAllLdapIdentities;
//# sourceMappingURL=helpers.ee.js.map
;