`roles` in config renamed to `defaultRoles`. These are used if no `roles` are provided in production.yaml
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const config = require('../lib/config');
 | 
						|
const log = require('../lib/log');
 | 
						|
const knex = require('../lib/knex');
 | 
						|
const subscriptions = require('../models/subscriptions');
 | 
						|
const { SubscriptionStatus } = require('../../shared/lists');
 | 
						|
const contextHelpers = require('../lib/context-helpers');
 | 
						|
 | 
						|
const checkPeriod = 60 * 1000;
 | 
						|
 | 
						|
async function run() {
 | 
						|
    while (true) {
 | 
						|
        await knex.transaction(async tx => {
 | 
						|
            const currentTs = Date.now();
 | 
						|
 | 
						|
            const lsts = await tx('lists').select(['id']);
 | 
						|
            for (const list of lsts) {
 | 
						|
 | 
						|
                if (config.gdpr.deleteSubscriptionAfterUnsubscribe.enabled) {
 | 
						|
                    await tx(subscriptions.getSubscriptionTableName(list.id))
 | 
						|
                        .whereIn('status', [SubscriptionStatus.UNSUBSCRIBED, SubscriptionStatus.COMPLAINED])
 | 
						|
                        .where('unsubscribed', '<=', new Date(currentTs - config.gdpr.deleteSubscriptionAfterUnsubscribe.secondsAfterUnsubscribe * 1000))
 | 
						|
                        .del();
 | 
						|
                }
 | 
						|
 | 
						|
                if (config.gdpr.deleteDataAfterUnsubscribe.enabled) {
 | 
						|
                    const groupedFieldsMap = await subscriptions.getGroupedFieldsMapTx(tx, list.id);
 | 
						|
 | 
						|
                    const purgedEntity = {};
 | 
						|
                    subscriptions.purgeSensitiveData(purgedEntity, groupedFieldsMap);
 | 
						|
 | 
						|
                    await tx(subscriptions.getSubscriptionTableName(list.id))
 | 
						|
                        .whereNotNull('email')
 | 
						|
                        .whereIn('status', [SubscriptionStatus.UNSUBSCRIBED, SubscriptionStatus.COMPLAINED])
 | 
						|
                        .where('unsubscribed', '<=', new Date(currentTs - config.gdpr.deleteDataAfterUnsubscribe.secondsAfterUnsubscribe * 1000))
 | 
						|
                        .update(purgedEntity);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        });
 | 
						|
 | 
						|
        const nextCycle = new Promise(resolve => {
 | 
						|
            setTimeout(resolve, checkPeriod);
 | 
						|
        });
 | 
						|
        await nextCycle;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function start() {
 | 
						|
    if (config.gdpr.deleteDataAfterUnsubscribe.enabled || config.gdpr.deleteDataAfterUnsubscribe.enabled) {
 | 
						|
        log.info('GDPR', 'Starting GDPR cleanup service');
 | 
						|
        run().catch(err => {
 | 
						|
            log.error('GDPR', err);
 | 
						|
        });
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
module.exports.start = start;
 |