Skip to content

Commit 1631ffd

Browse files
Merge branch 'hotfix/0.10.1'
2 parents 45b3a8a + 0b00b25 commit 1631ffd

File tree

4 files changed

+78
-3
lines changed

4 files changed

+78
-3
lines changed

src/main/java/app/fyreplace/api/data/dev/DataSeeder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
import app.fyreplace.api.data.Subscription;
1616
import app.fyreplace.api.data.User;
1717
import app.fyreplace.api.data.Vote;
18+
import app.fyreplace.api.services.RandomService;
1819
import io.quarkus.elytron.security.common.BcryptUtil;
1920
import io.quarkus.runtime.ShutdownEvent;
2021
import io.quarkus.runtime.StartupEvent;
2122
import jakarta.enterprise.context.ApplicationScoped;
2223
import jakarta.enterprise.event.Observes;
24+
import jakarta.inject.Inject;
2325
import jakarta.transaction.Transactional;
2426
import java.io.IOException;
2527
import org.eclipse.microprofile.config.inject.ConfigProperty;
@@ -33,6 +35,9 @@ public final class DataSeeder {
3335
@ConfigProperty(name = "app.posts.starting-life")
3436
int postsStartingLife;
3537

38+
@Inject
39+
RandomService randomService;
40+
3641
public void onStartup(@Observes final StartupEvent event) {
3742
if (localDev) {
3843
insertData();
@@ -110,6 +115,13 @@ public User createUser(
110115
email.persist();
111116
user.mainEmail = email;
112117
user.persist();
118+
119+
if (!active) {
120+
final var randomCode = new RandomCode();
121+
randomCode.email = email;
122+
randomCode.code = BcryptUtil.bcryptHash(randomService.generateCode(RandomCode.LENGTH));
123+
randomCode.persist();
124+
}
113125
}
114126

115127
sleep();

src/main/java/app/fyreplace/api/tasks/CleanupTasks.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.fyreplace.api.tasks;
22

33
import app.fyreplace.api.data.Comment;
4+
import app.fyreplace.api.data.Email;
45
import app.fyreplace.api.data.Post;
56
import app.fyreplace.api.data.RandomCode;
67
import app.fyreplace.api.data.User;
@@ -14,7 +15,6 @@
1415

1516
@ApplicationScoped
1617
public final class CleanupTasks {
17-
1818
@Scheduled(cron = "0 0 0 * * ?")
1919
@Transactional
2020
public void scrubSoftDeletedEntities() {
@@ -43,6 +43,13 @@ public void removeOldRandomCodes() {
4343
RandomCode.delete("dateCreated < ?1", Instant.now().minus(RandomCode.LIFETIME));
4444
}
4545

46+
@Scheduled(cron = "0 15 * * * ?")
47+
@Transactional
48+
public void removeOldUnverifiedEmails() {
49+
Email.delete(
50+
"from Email e where verified = false and (select count(*) from RandomCode where email.id = e.id) = 0");
51+
}
52+
4653
private String scrubConditions(final String... fields) {
4754
return "scrubbed = false and ("
4855
+ Stream.concat(Stream.of(""), Arrays.stream(fields).map(field -> field + '.'))

src/test/java/app/fyreplace/api/testing/tasks/cleanup/RemoveOldRandomCodesTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import app.fyreplace.api.services.RandomService;
99
import app.fyreplace.api.tasks.CleanupTasks;
1010
import app.fyreplace.api.testing.UserTestsBase;
11+
import io.quarkus.elytron.security.common.BcryptUtil;
1112
import io.quarkus.test.junit.QuarkusTest;
1213
import jakarta.inject.Inject;
1314
import jakarta.transaction.Transactional;
@@ -28,10 +29,10 @@ public final class RemoveOldRandomCodesTests extends UserTestsBase {
2829
public void removeOldRandomCodes() {
2930
final var randomCode = new RandomCode();
3031
randomCode.email = requireNonNull(User.findByUsername("user_0")).mainEmail;
31-
randomCode.code = randomService.generateCode(RandomCode.LENGTH);
32+
randomCode.code = BcryptUtil.bcryptHash(randomService.generateCode(RandomCode.LENGTH));
3233
randomCode.persist();
3334
final var randomCodeCount = RandomCode.count();
34-
RandomCode.update("dateCreated", Instant.now().minus(Duration.ofDays(2)));
35+
RandomCode.update("dateCreated = ?1 where id = ?2", Instant.now().minus(Duration.ofDays(2)), randomCode.id);
3536
cleanupTasks.removeOldRandomCodes();
3637
assertEquals(randomCodeCount - 1, RandomCode.count());
3738
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package app.fyreplace.api.testing.tasks.cleanup;
2+
3+
import static java.util.Objects.requireNonNull;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
import app.fyreplace.api.data.Email;
7+
import app.fyreplace.api.data.RandomCode;
8+
import app.fyreplace.api.data.User;
9+
import app.fyreplace.api.services.RandomService;
10+
import app.fyreplace.api.tasks.CleanupTasks;
11+
import app.fyreplace.api.testing.UserTestsBase;
12+
import io.quarkus.elytron.security.common.BcryptUtil;
13+
import io.quarkus.test.junit.QuarkusTest;
14+
import jakarta.inject.Inject;
15+
import jakarta.transaction.Transactional;
16+
import org.junit.jupiter.api.Test;
17+
18+
@QuarkusTest
19+
public final class RemoveOldUnverifiedEmailsTests extends UserTestsBase {
20+
@Inject
21+
RandomService randomService;
22+
23+
@Inject
24+
CleanupTasks cleanupTasks;
25+
26+
@Test
27+
@Transactional
28+
public void removeOldUnverifiedEmails() {
29+
final var email = new Email();
30+
email.user = requireNonNull(User.findByUsername("user_0"));
31+
email.email = "unverified@example";
32+
email.verified = false;
33+
email.persist();
34+
final var emailCount = Email.count();
35+
cleanupTasks.removeOldUnverifiedEmails();
36+
assertEquals(emailCount - 1, Email.count());
37+
}
38+
39+
@Test
40+
@Transactional
41+
public void removeNewUnverifiedEmails() {
42+
final var email = new Email();
43+
email.user = requireNonNull(User.findByUsername("user_0"));
44+
email.email = "unverified@example";
45+
email.verified = false;
46+
email.persist();
47+
final var emailCount = Email.count();
48+
final var randomCode = new RandomCode();
49+
randomCode.email = email;
50+
randomCode.code = BcryptUtil.bcryptHash(randomService.generateCode(RandomCode.LENGTH));
51+
randomCode.persist();
52+
cleanupTasks.removeOldUnverifiedEmails();
53+
assertEquals(emailCount, Email.count());
54+
}
55+
}

0 commit comments

Comments
 (0)