Skip to content

Commit

Permalink
Remove console.log
Browse files Browse the repository at this point in the history
  • Loading branch information
Gijsdeman committed Dec 1, 2023
1 parent 5e5ffd9 commit 84ab7d4
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/dovecotAPI.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import axios, { AxiosInstance } from 'axios';import { DovecotData, DovecotRequestData, DovecotPermissions, ActiveDirectoryPermissions,} from './types';import { containerConfig } from './index';let dovecotClient: AxiosInstance;/** * Initialize the Dovecot API */export async function initializeDovecotAPI(): Promise<void> { dovecotClient = axios.create({ baseURL: 'http://172.22.1.250:9000/doveadm/v1', headers: { 'Content-Type': 'text/plain', 'Authorization': `X-Dovecot-API ${Buffer.from(containerConfig.DOVEADM_API_KEY).toString('base64')}`, }, });}/** * Get all mailbox subfolders of a mail * @param mail - email to get all subfolders from */async function getMailboxSubFolders(mail: string): Promise<string[]> { const mailboxData: DovecotData[] = ((await dovecotClient.post( '', [[ 'mailboxList', { 'user': mail, }, `mailboxList_${mail}`, ]], )).data)[0][1]; let subFolders: string[] = []; for (let subFolder of mailboxData) { if (subFolder.mailbox.startsWith('Shared')) continue; subFolders.push(subFolder.mailbox); } return subFolders;}/** * Set read and write permissions in dovecot * @param mail - mail for which permissions should be set * @param users - users that will be getting permissions to the above mail * @param permission - permissions that will be set * @param removePermission - whether permissions should be removed or added */export async function setDovecotPermissions(mail: string, users: string[], permission: ActiveDirectoryPermissions, removePermission: boolean) { let mailboxSubFolders: string[] = []; let permissionTag; if (permission == ActiveDirectoryPermissions.mailPermROInbox) { mailboxSubFolders = mailboxSubFolders.concat(['INBOX', 'Inbox']); permissionTag = 'PermROInbox'; } if (permission == ActiveDirectoryPermissions.mailPermROSent) { if (permissionTag === null) { permissionTag = 'PermROSent'; } else { permissionTag = 'PermROInboxSent'; } mailboxSubFolders.push('Sent'); } if (permission == ActiveDirectoryPermissions.mailPermRO || ActiveDirectoryPermissions.mailPermRW) { mailboxSubFolders = await getMailboxSubFolders(mail); permissionTag = 'PermRO'; } // Dovecot API requests are very unclear and badly documented // The idea; you can create an array of requests and send it as one big request const dovecotRequests : DovecotRequestData[] = []; for (const subFolder of mailboxSubFolders) { for (const user of users) { let rights = [ DovecotPermissions.lookup, DovecotPermissions.read, DovecotPermissions.write, DovecotPermissions.write_seen, ]; if (permission === ActiveDirectoryPermissions.mailPermRW) { rights = rights.concat([ DovecotPermissions.write_deleted, DovecotPermissions.insert, DovecotPermissions.post, DovecotPermissions.expunge, DovecotPermissions.create, DovecotPermissions.delete, ]); } const dovecotRequest: DovecotRequestData = [ removePermission ? 'aclRemove' : 'aclSet', { 'user': mail, 'id': `user=${user}`, 'mailbox': subFolder, 'right': rights, }, permission === ActiveDirectoryPermissions.mailPermRW ? `PermRW_${mail}_${user}` : `${permissionTag}_${mail}_${user}`, ]; dovecotRequests.push(dovecotRequest); } } // There is a max size of the requests // Break them up in smaller pieces if necessary // NOTE from Dovecot docs: It is not guaranteed that requests are processed in order or that the doveadm server does not crash const dovecotMaxRequestSize: number = 20; if (dovecotRequests.length > dovecotMaxRequestSize) { for (let requestsDone: number = 0; requestsDone < dovecotRequests.length; requestsDone += dovecotMaxRequestSize) { await dovecotClient.post( '', dovecotRequests.slice(requestsDone, requestsDone + dovecotMaxRequestSize), ); } } else { await dovecotClient.post( '', dovecotRequests, ); }}
import axios, { AxiosInstance } from 'axios';import { DovecotData, DovecotRequestData, DovecotPermissions, ActiveDirectoryPermissions,} from './types';import { containerConfig } from './index';let dovecotClient: AxiosInstance;/** * Initialize the Dovecot API */export async function initializeDovecotAPI(): Promise<void> { dovecotClient = axios.create({ baseURL: 'http://172.22.1.250:9000/doveadm/v1', headers: { 'Content-Type': 'text/plain', 'Authorization': `X-Dovecot-API ${Buffer.from(containerConfig.DOVEADM_API_KEY).toString('base64')}`, }, });}/** * Get all mailbox subfolders of a mail * @param mail - email to get all subfolders from */async function getMailboxSubFolders(mail: string): Promise<string[]> { const mailboxData: DovecotData[] = ((await dovecotClient.post( '', [[ 'mailboxList', { 'user': mail, }, `mailboxList_${mail}`, ]], )).data)[0][1]; let subFolders: string[] = []; for (let subFolder of mailboxData) { if (subFolder.mailbox.startsWith('Shared')) continue; subFolders.push(subFolder.mailbox); } return subFolders;}/** * Set read and write permissions in dovecot * @param mail - mail for which permissions should be set * @param users - users that will be getting permissions to the above mail * @param permission - permissions that will be set * @param removePermission - whether permissions should be removed or added */export async function setDovecotPermissions(mail: string, users: string[], permission: ActiveDirectoryPermissions, removePermission: boolean) { let mailboxSubFolders: string[] = []; let permissionTag; if (permission == ActiveDirectoryPermissions.mailPermROInbox) { mailboxSubFolders = mailboxSubFolders.concat(['INBOX', 'Inbox']); permissionTag = 'PermROInbox'; } if (permission == ActiveDirectoryPermissions.mailPermROSent) { if (permissionTag === null) { permissionTag = 'PermROSent'; } else { permissionTag = 'PermROInboxSent'; } mailboxSubFolders.push('Sent'); } if (permission == ActiveDirectoryPermissions.mailPermRO || ActiveDirectoryPermissions.mailPermRW) { mailboxSubFolders = await getMailboxSubFolders(mail); permissionTag = 'PermRO'; } // Dovecot API requests are very unclear and badly documented // The idea; you can create an array of requests and send it as one big request const dovecotRequests : DovecotRequestData[] = []; for (const subFolder of mailboxSubFolders) { for (const user of users) { let rights = [ DovecotPermissions.lookup, DovecotPermissions.read, DovecotPermissions.write, DovecotPermissions.write_seen, ]; if (permission === ActiveDirectoryPermissions.mailPermRW) { rights = rights.concat([ DovecotPermissions.write_deleted, DovecotPermissions.insert, DovecotPermissions.post, DovecotPermissions.expunge, DovecotPermissions.create, DovecotPermissions.delete, ]); } const dovecotRequest: DovecotRequestData = [ removePermission ? 'aclRemove' : 'aclSet', { 'user': mail, 'id': `user=${user}`, 'mailbox': subFolder, 'right': rights, }, permission === ActiveDirectoryPermissions.mailPermRW ? `PermRW_${mail}_${user}` : `${permissionTag}_${mail}_${user}`, ]; dovecotRequests.push(dovecotRequest); } } // There is a max size of the requests // Break them up in smaller pieces if necessary // NOTE from Dovecot docs: It is not guaranteed that requests are processed in order or that the doveadm server does not crash const dovecotMaxRequestSize: number = 10; if (dovecotRequests.length > dovecotMaxRequestSize) { for (let requestsDone: number = 0; requestsDone < dovecotRequests.length; requestsDone += dovecotMaxRequestSize) { await dovecotClient.post( '', dovecotRequests.slice(requestsDone, requestsDone + dovecotMaxRequestSize), ); } } else { await dovecotClient.post( '', dovecotRequests, ); }}
Expand Down
15 changes: 1 addition & 14 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,6 @@ async function synchronizeUserSOB(activeDirectoryGroup: ActiveDirectoryUser): Pr
attributes: ['memberFlattened'],
})).searchEntries) as unknown as ActiveDirectoryUser[];

console.log('--------------------------------');
console.log(activeDirectoryPermissionGroup);

// Construct list in database with DN of all committees they are in
// Get existing list of committees, add new DN as string
for (const members of activeDirectoryPermissionGroup) {
Expand All @@ -156,7 +153,6 @@ async function synchronizeUserSOB(activeDirectoryGroup: ActiveDirectoryUser): Pr
scope: 'sub',
attributes: ['mail'],
})).searchEntries as unknown as ActiveDirectoryUser[];
console.log(memberResults, activeDirectoryGroup);
await editLocalUserPermissions(memberResults[0].mail, activeDirectoryGroup.mail);
}
}
Expand Down Expand Up @@ -347,6 +343,7 @@ async function getUserDataFromActiveDirectory(): Promise<void> {
* Synchronise LDAP users with Mailcow mailboxes and users stores in local DB
*/
async function synchronizeUsersWithActiveDirectory(): Promise<void> {

for (const activeDirectoryUser of activeDirectoryUsers) {
try {
if (!activeDirectoryUser.mail || activeDirectoryUser.mail.length === 0) continue;
Expand All @@ -367,8 +364,6 @@ async function synchronizeUsersWithActiveDirectory(): Promise<void> {
localUser.isActive = isActive;
}

// console.log('start checking mailcow user');

if (!mailcowUser.exists) {
console.log(`Adding Mailcow user ${mail} (active: ${isActive})`);
await createMailcowUser(mail, displayName, isActive, 256);
Expand All @@ -377,29 +372,21 @@ async function synchronizeUsersWithActiveDirectory(): Promise<void> {
mailcowUser.displayName = displayName;
}

// console.log('start checking local user active');

if (localUser.isActive !== isActive) {
console.log(`Set ${mail} to active state ${isActive} in local user database`);
await updateLocalUserActivity(mail, isActive, 0);
}

// console.log('start checking mailcow user active');

if (mailcowUser.isActive !== isActive) {
console.log(`Set ${mail} to active state ${isActive} in Mailcow`);
await editMailcowUser(mail, { active: isActive });
}

// console.log('start checking mailcow displayname');

if (mailcowUser.displayName !== displayName) {
console.log(`Changed displayname for ${mail} to ${displayName} in Mailcow`);
await editMailcowUser(mail, { name: displayName });
}

// console.log('start checking loal displayname');

if (localUser.displayName !== displayName) {
console.log(`Changed displayname for ${mail} to ${displayName} in local database`);
await editLocalUserDisplayName(mail, displayName);
Expand Down

0 comments on commit 84ab7d4

Please sign in to comment.