浏览代码

use string templates for URI construction

Sebastian Stenzel 1 年之前
父节点
当前提交
729f38866f
共有 1 个文件被更改,包括 10 次插入3 次删除
  1. 10 3
      src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java

+ 10 - 3
src/main/java/org/cryptomator/ui/keyloading/hub/RegisterDeviceController.java

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