use string templates for URI construction

This commit is contained in:
Sebastian Stenzel
2024-01-19 17:40:39 +01:00
parent 24293b316f
commit 729f38866f

View File

@@ -32,6 +32,7 @@ import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
@@ -62,6 +63,7 @@ public class RegisterDeviceController implements FxController {
private final P384KeyPair deviceKeyPair;
private final CompletableFuture<ReceivedKey> result;
private final HttpClient httpClient;
private final StringTemplate.Processor<URI, RuntimeException> API_BASE = this::resolveRelativeToApiBase;
private final BooleanProperty invalidSetupCode = new SimpleBooleanProperty(false);
private final BooleanProperty workInProgress = new SimpleBooleanProperty(false);
@@ -108,9 +110,8 @@ public class RegisterDeviceController implements FxController {
public void register() {
workInProgress.set(true);
var apiRootUrl = hubConfig.getApiBaseUrl();
var userReq = HttpRequest.newBuilder(apiRootUrl.resolve("users/me")) //
var userReq = HttpRequest.newBuilder(API_BASE."users/me") //
.GET() //
.timeout(REQ_TIMEOUT) //
.header("Authorization", "Bearer " + bearerToken) //
@@ -136,7 +137,7 @@ public class RegisterDeviceController implements FxController {
var now = Instant.now().toString();
var dto = new CreateDeviceDto(deviceId, deviceNameField.getText(), BaseEncoding.base64().encode(deviceKeyPair.getPublic().getEncoded()), "DESKTOP", jwe.serialize(), now);
var json = toJson(dto);
var deviceUri = apiRootUrl.resolve("devices/" + deviceId);
var deviceUri = API_BASE."devices/\{deviceId}";
var putDeviceReq = HttpRequest.newBuilder(deviceUri) //
.PUT(HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)) //
.timeout(REQ_TIMEOUT) //
@@ -204,6 +205,12 @@ public class RegisterDeviceController implements FxController {
result.cancel(true);
}
private URI resolveRelativeToApiBase(StringTemplate template) {
var path = template.interpolate();
var relPath = path.startsWith("/") ? path.substring(1) : path;
return hubConfig.getApiBaseUrl().resolve(relPath);
}
//--- Getters & Setters
public BooleanProperty invalidSetupCodeProperty() {
return invalidSetupCode;