Skip to content

Commit b5d8069

Browse files
committed
difficulty map start count at one, captcharequest added createdat and improved indices
1 parent 3d78333 commit b5d8069

File tree

6 files changed

+27
-12
lines changed

6 files changed

+27
-12
lines changed

captchaservice-backend/src/main/java/de/muenchen/captchaservice/entity/CaptchaRequest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
import jakarta.validation.constraints.NotNull;
99
import jakarta.validation.constraints.Size;
1010
import lombok.*;
11+
import org.hibernate.annotations.CreationTimestamp;
1112

1213
import java.time.Instant;
1314

1415
@Entity
1516
@Table(
1617
indexes = {
1718
@Index(name = "idx_captcha_request_source_address_hash", columnList = "sourceAddressHash"),
18-
@Index(name = "idx_captcha_request_expires_at", columnList = "expiresAt")
19+
@Index(name = "idx_captcha_request_source_address_hash_expires_at", columnList = "sourceAddressHash, expiresAt")
1920
}
2021
)
2122

@@ -25,7 +26,6 @@
2526
@ToString(callSuper = true)
2627
@EqualsAndHashCode(callSuper = true)
2728
@NoArgsConstructor
28-
@AllArgsConstructor
2929
public class CaptchaRequest extends BaseEntity {
3030

3131
private static final long serialVersionUID = 1L;
@@ -34,6 +34,10 @@ public class CaptchaRequest extends BaseEntity {
3434
// Variables //
3535
// ========= //
3636

37+
@CreationTimestamp
38+
@Column(updatable = false)
39+
private Instant requestAt;
40+
3741
@Column(nullable = false, length = 64)
3842
@NotNull
3943
@Size(min = 64, max = 64)
@@ -42,4 +46,9 @@ public class CaptchaRequest extends BaseEntity {
4246
@NotNull
4347
private Instant expiresAt;
4448

49+
public CaptchaRequest(String sourceAddressHash, Instant expiresAt) {
50+
this.sourceAddressHash = sourceAddressHash;
51+
this.expiresAt = expiresAt;
52+
}
53+
4554
}

captchaservice-backend/src/main/java/de/muenchen/captchaservice/entity/InvalidatedPayload.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@Table(
1616
indexes = {
1717
@Index(name = "idx_invalidated_payload_payload_hash", columnList = "payloadHash"),
18-
@Index(name = "idx_invalidated_payload_expires_at", columnList = "expiresAt")
18+
@Index(name = "idx_invalidated_payload_payload_hash_expires_at", columnList = "payloadHash, expiresAt")
1919
}
2020
)
2121
// Definition of getter, setter, ...

captchaservice-backend/src/main/java/de/muenchen/captchaservice/service/difficulty/DifficultyService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public long getDifficultyForSourceAddress(final String siteKey, final SourceAddr
4747
.difficultyMap()
4848
.stream()
4949
.sorted((o1, o2) -> Math.toIntExact(o2.minVisits() - o1.minVisits()))
50-
.filter(di -> di.minVisits() <= sourceVisitCount)
50+
.filter(di -> di.minVisits() - 1 <= sourceVisitCount)
5151
.findFirst();
5252
if (difficultyItem.isEmpty()) {
5353
log.error("No difficulty found site {} with {} visits", siteKey, sourceVisitCount);

captchaservice-backend/src/main/resources/application-local.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,13 @@ security:
3939
captcha:
4040
hmac-key: secret
4141
sites:
42+
loadtest:
43+
secret: loadtest
44+
difficulty-map:
45+
- min-visits: 1
46+
max-number: 1
4247
test:
4348
secret: test
4449
difficulty-map:
45-
- min-visits: 0
50+
- min-visits: 1
4651
max-number: 1000

captchaservice-backend/src/main/resources/db/migration/schema/V001__Init.sql

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
CREATE TABLE captcha_request
22
(
33
id UUID NOT NULL,
4+
request_at TIMESTAMP WITH TIME ZONE,
45
source_address_hash VARCHAR(64) NOT NULL,
56
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
67
CONSTRAINT pk_captcharequest PRIMARY KEY (id)
@@ -14,10 +15,10 @@ CREATE TABLE invalidated_payload
1415
CONSTRAINT pk_invalidatedpayload PRIMARY KEY (id)
1516
);
1617

17-
CREATE INDEX idx_captcha_request_expires_at ON captcha_request (expires_at);
18-
1918
CREATE INDEX idx_captcha_request_source_address_hash ON captcha_request (source_address_hash);
2019

21-
CREATE INDEX idx_invalidated_payload_expires_at ON invalidated_payload (expires_at);
20+
CREATE INDEX idx_captcha_request_source_address_hash_expires_at ON captcha_request (source_address_hash, expires_at);
21+
22+
CREATE INDEX idx_invalidated_payload_payload_hash ON invalidated_payload (payload_hash);
2223

23-
CREATE INDEX idx_invalidated_payload_payload_hash ON invalidated_payload (payload_hash);
24+
CREATE INDEX idx_invalidated_payload_payload_hash_expires_at ON invalidated_payload (payload_hash, expires_at);

captchaservice-backend/src/test/resources/application-test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ captcha:
2626
secret: test_secret
2727
source-address-ipv6-cidr: 64
2828
difficulty-map:
29-
- minVisits: 0
29+
- minVisits: 1
3030
maxNumber: 1000
31-
- minVisits: 2
32-
maxNumber: 2000
3331
- minVisits: 3
32+
maxNumber: 2000
33+
- minVisits: 4
3434
maxNumber: 3000

0 commit comments

Comments
 (0)