`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;
 |