From 4c4868a2b6a0cb40ae4e0ca54863e8b8154d0bfc Mon Sep 17 00:00:00 2001 From: Athou Date: Mon, 8 Aug 2022 16:14:52 +0200 Subject: [PATCH] cleanup demo account every 24h (#1014) --- .../java/com/commafeed/CommaFeedModule.java | 2 + .../backend/service/StartupService.java | 9 +-- .../backend/service/UserService.java | 10 +++ .../backend/task/DemoAccountCleanupTask.java | 64 +++++++++++++++++++ 4 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/commafeed/backend/task/DemoAccountCleanupTask.java diff --git a/src/main/java/com/commafeed/CommaFeedModule.java b/src/main/java/com/commafeed/CommaFeedModule.java index f4c430ad..1e95ccb0 100644 --- a/src/main/java/com/commafeed/CommaFeedModule.java +++ b/src/main/java/com/commafeed/CommaFeedModule.java @@ -18,6 +18,7 @@ import com.commafeed.backend.favicon.AbstractFaviconFetcher; import com.commafeed.backend.favicon.DefaultFaviconFetcher; import com.commafeed.backend.favicon.FacebookFaviconFetcher; import com.commafeed.backend.favicon.YoutubeFaviconFetcher; +import com.commafeed.backend.task.DemoAccountCleanupTask; import com.commafeed.backend.task.OldEntriesCleanupTask; import com.commafeed.backend.task.OldStatusesCleanupTask; import com.commafeed.backend.task.OrphanedContentsCleanupTask; @@ -68,6 +69,7 @@ public class CommaFeedModule extends AbstractModule { taskMultibinder.addBinding().to(OldEntriesCleanupTask.class); taskMultibinder.addBinding().to(OrphanedFeedsCleanupTask.class); taskMultibinder.addBinding().to(OrphanedContentsCleanupTask.class); + taskMultibinder.addBinding().to(DemoAccountCleanupTask.class); ApplicationSettings settings = config.getApplicationSettings(); diff --git a/src/main/java/com/commafeed/backend/service/StartupService.java b/src/main/java/com/commafeed/backend/service/StartupService.java index c22978f4..3c9209a4 100644 --- a/src/main/java/com/commafeed/backend/service/StartupService.java +++ b/src/main/java/com/commafeed/backend/service/StartupService.java @@ -1,18 +1,14 @@ package com.commafeed.backend.service; -import java.util.Arrays; - import javax.inject.Inject; import javax.inject.Singleton; import org.hibernate.Session; import org.hibernate.SessionFactory; -import com.commafeed.CommaFeedApplication; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.UnitOfWork; import com.commafeed.backend.dao.UserDAO; -import com.commafeed.backend.model.UserRole.Role; import io.dropwizard.lifecycle.Managed; import liquibase.Liquibase; @@ -77,10 +73,9 @@ public class StartupService implements Managed { private void initialData() { log.info("Populating database with default values"); try { - userService.register(CommaFeedApplication.USERNAME_ADMIN, "admin", "admin@commafeed.com", Arrays.asList(Role.ADMIN, Role.USER), - true); + userService.createAdminUser(); if (config.getApplicationSettings().getCreateDemoAccount()) { - userService.register(CommaFeedApplication.USERNAME_DEMO, "demo", "demo@commafeed.com", Arrays.asList(Role.USER), true); + userService.createDemoUser(); } } catch (Exception e) { log.error(e.getMessage(), e); diff --git a/src/main/java/com/commafeed/backend/service/UserService.java b/src/main/java/com/commafeed/backend/service/UserService.java index 64743fd1..9b957676 100644 --- a/src/main/java/com/commafeed/backend/service/UserService.java +++ b/src/main/java/com/commafeed/backend/service/UserService.java @@ -1,5 +1,6 @@ package com.commafeed.backend.service; +import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.Optional; @@ -12,6 +13,7 @@ import javax.inject.Singleton; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; +import com.commafeed.CommaFeedApplication; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.FeedCategoryDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; @@ -116,6 +118,14 @@ public class UserService { return user; } + public void createAdminUser() { + register(CommaFeedApplication.USERNAME_ADMIN, "admin", "admin@commafeed.com", Arrays.asList(Role.ADMIN, Role.USER), true); + } + + public void createDemoUser() { + register(CommaFeedApplication.USERNAME_DEMO, "demo", "demo@commafeed.com", Arrays.asList(Role.USER), true); + } + public void unregister(User user) { userSettingsDAO.delete(userSettingsDAO.findByUser(user)); userRoleDAO.delete(userRoleDAO.findAll(user)); diff --git a/src/main/java/com/commafeed/backend/task/DemoAccountCleanupTask.java b/src/main/java/com/commafeed/backend/task/DemoAccountCleanupTask.java new file mode 100644 index 00000000..8b6167e5 --- /dev/null +++ b/src/main/java/com/commafeed/backend/task/DemoAccountCleanupTask.java @@ -0,0 +1,64 @@ +package com.commafeed.backend.task; + +import java.util.concurrent.TimeUnit; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.hibernate.SessionFactory; + +import com.commafeed.CommaFeedApplication; +import com.commafeed.CommaFeedConfiguration; +import com.commafeed.backend.dao.UnitOfWork; +import com.commafeed.backend.dao.UserDAO; +import com.commafeed.backend.model.User; +import com.commafeed.backend.service.UserService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RequiredArgsConstructor(onConstructor = @__({ @Inject })) +@Singleton +@Slf4j +public class DemoAccountCleanupTask extends ScheduledTask { + + private final CommaFeedConfiguration config; + private final SessionFactory sessionFactory; + private final UserDAO userDAO; + private final UserService userService; + + @Override + protected void run() { + if (!config.getApplicationSettings().getCreateDemoAccount()) { + return; + } + + log.info("recreating demo user account"); + UnitOfWork.run(sessionFactory, () -> { + User demoUser = userDAO.findByName(CommaFeedApplication.USERNAME_DEMO); + if (demoUser == null) { + return; + } + + userService.unregister(demoUser); + userService.createDemoUser(); + }); + + } + + @Override + protected long getInitialDelay() { + return 1; + } + + @Override + protected long getPeriod() { + return getTimeUnit().convert(24, TimeUnit.HOURS); + } + + @Override + protected TimeUnit getTimeUnit() { + return TimeUnit.MINUTES; + } + +}