Stephan Richter
3 months ago
19 changed files with 271 additions and 54 deletions
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
/* © SRSoftware 2024 */ |
||||
package de.srsoftware.oidc.api.data; |
||||
|
||||
import java.time.Instant; |
||||
import java.time.temporal.ChronoUnit; |
||||
|
||||
public class Lock { |
||||
private int attempts; |
||||
private Instant releaseTime; |
||||
|
||||
public Lock() { |
||||
this.attempts = 0; |
||||
} |
||||
|
||||
public Lock count() { |
||||
attempts++; |
||||
if (attempts > 13) attempts = 13; |
||||
var seconds = 5; |
||||
for (long i = 0; i < attempts; i++) seconds *= 2; |
||||
releaseTime = Instant.now().plusSeconds(seconds).truncatedTo(ChronoUnit.SECONDS); |
||||
return this; |
||||
} |
||||
|
||||
public int attempts() { |
||||
return attempts; |
||||
} |
||||
|
||||
public Instant releaseTime() { |
||||
return releaseTime; |
||||
} |
||||
} |
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
/* © SRSoftware 2024 */ |
||||
package de.srsoftware.utils; |
||||
|
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import org.json.JSONObject; |
||||
|
||||
public class Error<T> implements Result<T> { |
||||
private final String cause; |
||||
private Map<String, Object> metadata; |
||||
|
||||
public Error(String cause) { |
||||
this.cause = cause; |
||||
} |
||||
|
||||
public String cause() { |
||||
return cause; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isError() { |
||||
return true; |
||||
} |
||||
|
||||
public static <T> Error<T> message(String cause, Object... tokens) { |
||||
var err = new Error<T>(cause); |
||||
err.metadata = new HashMap<>(); |
||||
for (int i = 0; i < tokens.length - 1; i += 2) { |
||||
err.metadata.put(tokens[i].toString(), tokens[i + 1]); |
||||
} |
||||
return err; |
||||
} |
||||
|
||||
public JSONObject json() { |
||||
var json = new JSONObject(Map.of("error", cause)); |
||||
if (metadata != null) json.put("metadata", metadata); |
||||
return json; |
||||
} |
||||
} |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
/* © SRSoftware 2024 */ |
||||
package de.srsoftware.utils; |
||||
|
||||
|
||||
public class Payload<T> implements Result<T> { |
||||
private final T object; |
||||
|
||||
public Payload(T object) { |
||||
this.object = object; |
||||
} |
||||
|
||||
public static <T> Payload<T> of(T object) { |
||||
return new Payload<>(object); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isError() { |
||||
return false; |
||||
} |
||||
|
||||
public T get() { |
||||
return object; |
||||
} |
||||
} |
Loading…
Reference in new issue