From 773c8ca6f973eee2a6a029e906bbf4e3fffef7f8 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 6 Aug 2018 22:28:56 +1000 Subject: [PATCH] Added Authorization support+Formatting improvements --- .../api/commands/FreeSpaceCommand.java | 2 +- .../api/commands/TorrentActionCommand.java | 3 +- .../api/domain/RemoveTorrentInfo.java | 1 - .../api/domain/SetTorrentInfo.java | 3 +- .../api/domain/TorrentGetRequestInfo.java | 1 - .../api/torrent/TorrentStatus.java | 2 +- .../http/InvalidResponseStatus.java | 5 ++++ .../transmission/http/RequestExecutor.java | 1 - .../nl/stil4m/transmission/rpc/RpcClient.java | 14 +++++++-- .../stil4m/transmission/rpc/RpcCommand.java | 16 +++++----- .../transmission/rpc/RpcConfiguration.java | 29 +++++++++++++++++++ .../stil4m/transmission/rpc/RpcRequest.java | 24 +++++++-------- .../stil4m/transmission/rpc/TagProvider.java | 1 + 13 files changed, 70 insertions(+), 32 deletions(-) diff --git a/src/main/java/nl/stil4m/transmission/api/commands/FreeSpaceCommand.java b/src/main/java/nl/stil4m/transmission/api/commands/FreeSpaceCommand.java index e89af0a..d0b3dab 100644 --- a/src/main/java/nl/stil4m/transmission/api/commands/FreeSpaceCommand.java +++ b/src/main/java/nl/stil4m/transmission/api/commands/FreeSpaceCommand.java @@ -2,7 +2,7 @@ import nl.stil4m.transmission.rpc.RpcCommand; -public class FreeSpaceCommand extends RpcCommand{ +public class FreeSpaceCommand extends RpcCommand { public FreeSpaceCommand(Long tag) { super(tag); diff --git a/src/main/java/nl/stil4m/transmission/api/commands/TorrentActionCommand.java b/src/main/java/nl/stil4m/transmission/api/commands/TorrentActionCommand.java index ed1887d..9e53b9f 100644 --- a/src/main/java/nl/stil4m/transmission/api/commands/TorrentActionCommand.java +++ b/src/main/java/nl/stil4m/transmission/api/commands/TorrentActionCommand.java @@ -10,6 +10,7 @@ public class TorrentActionCommand extends RpcCommand { private final Map torrentActionMap = new HashMap<>(); + private final String method; { torrentActionMap.put(TorrentAction.START, "torrent-start"); @@ -19,8 +20,6 @@ public class TorrentActionCommand extends RpcCommand { torrentActionMap.put(TorrentAction.REANNOUNCE, "torrent-reannounce"); } - private final String method; - public TorrentActionCommand(Long tag, TorrentAction action) { super(tag); method = torrentActionMap.get(action); diff --git a/src/main/java/nl/stil4m/transmission/api/domain/RemoveTorrentInfo.java b/src/main/java/nl/stil4m/transmission/api/domain/RemoveTorrentInfo.java index a39e22b..9ea2f3b 100644 --- a/src/main/java/nl/stil4m/transmission/api/domain/RemoveTorrentInfo.java +++ b/src/main/java/nl/stil4m/transmission/api/domain/RemoveTorrentInfo.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; - import nl.stil4m.transmission.api.domain.ids.Ids; @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) diff --git a/src/main/java/nl/stil4m/transmission/api/domain/SetTorrentInfo.java b/src/main/java/nl/stil4m/transmission/api/domain/SetTorrentInfo.java index 56bc613..c5759b9 100644 --- a/src/main/java/nl/stil4m/transmission/api/domain/SetTorrentInfo.java +++ b/src/main/java/nl/stil4m/transmission/api/domain/SetTorrentInfo.java @@ -1,7 +1,6 @@ package nl.stil4m.transmission.api.domain; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -9,6 +8,8 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import java.util.List; + @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/nl/stil4m/transmission/api/domain/TorrentGetRequestInfo.java b/src/main/java/nl/stil4m/transmission/api/domain/TorrentGetRequestInfo.java index a9d664d..24cd9c0 100644 --- a/src/main/java/nl/stil4m/transmission/api/domain/TorrentGetRequestInfo.java +++ b/src/main/java/nl/stil4m/transmission/api/domain/TorrentGetRequestInfo.java @@ -1,7 +1,6 @@ package nl.stil4m.transmission.api.domain; import com.fasterxml.jackson.databind.annotation.JsonSerialize; - import nl.stil4m.transmission.api.domain.ids.Ids; import java.util.List; diff --git a/src/main/java/nl/stil4m/transmission/api/torrent/TorrentStatus.java b/src/main/java/nl/stil4m/transmission/api/torrent/TorrentStatus.java index d511fe1..0df51b0 100644 --- a/src/main/java/nl/stil4m/transmission/api/torrent/TorrentStatus.java +++ b/src/main/java/nl/stil4m/transmission/api/torrent/TorrentStatus.java @@ -10,7 +10,7 @@ public enum TorrentStatus { DOWNLOAD_WAIT(3L), // Queued to download DOWNLOADING(4L), // Downloading SEED_WAIT(5L), // Queued to seed - SEED (6L), // Seeding + SEED(6L), // Seeding ISOLATED(7L); // Torrent can't find peers private Long longValue; diff --git a/src/main/java/nl/stil4m/transmission/http/InvalidResponseStatus.java b/src/main/java/nl/stil4m/transmission/http/InvalidResponseStatus.java index 7534269..ea0c031 100644 --- a/src/main/java/nl/stil4m/transmission/http/InvalidResponseStatus.java +++ b/src/main/java/nl/stil4m/transmission/http/InvalidResponseStatus.java @@ -11,4 +11,9 @@ public InvalidResponseStatus(int statusCode) { public int getStatusCode() { return statusCode; } + + @Override + public String getMessage() { + return String.valueOf(statusCode); + } } diff --git a/src/main/java/nl/stil4m/transmission/http/RequestExecutor.java b/src/main/java/nl/stil4m/transmission/http/RequestExecutor.java index a30d095..992e2a5 100644 --- a/src/main/java/nl/stil4m/transmission/http/RequestExecutor.java +++ b/src/main/java/nl/stil4m/transmission/http/RequestExecutor.java @@ -1,7 +1,6 @@ package nl.stil4m.transmission.http; import com.fasterxml.jackson.databind.ObjectMapper; - import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; diff --git a/src/main/java/nl/stil4m/transmission/rpc/RpcClient.java b/src/main/java/nl/stil4m/transmission/rpc/RpcClient.java index 53211f8..3fd0b11 100644 --- a/src/main/java/nl/stil4m/transmission/rpc/RpcClient.java +++ b/src/main/java/nl/stil4m/transmission/rpc/RpcClient.java @@ -1,11 +1,9 @@ package nl.stil4m.transmission.rpc; import com.fasterxml.jackson.databind.ObjectMapper; - import nl.stil4m.transmission.http.InvalidResponseStatus; import nl.stil4m.transmission.http.RequestExecutor; import nl.stil4m.transmission.http.RequestExecutorException; - import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; @@ -53,8 +51,9 @@ public void execute(RpcCommand command, Map h) thro } private void executeCommandInner(RpcCommand command, Map h) throws RequestExecutorException, InvalidResponseStatus, IOException, RpcException { + requestExecutor.removeAllHeaders(); for (Map.Entry entry : h.entrySet()) { - requestExecutor.removeAllHeaders(); + requestExecutor.configureHeader(entry.getKey(), entry.getValue()); } @@ -77,7 +76,16 @@ private void executeCommandInner(RpcCommand command, Map { private final Class targetArgclass; - private T requestArguments; - - public abstract String getMethod(); - private final Long tag; - + private T requestArguments; private RpcRequest request; private RpcResponse response; @@ -27,6 +23,8 @@ public RpcCommand(Long tag) { request = new RpcRequest(); } + public abstract String getMethod(); + public RpcRequest buildRequestPayload() { request.setTag(tag); request.setMethod(getMethod()); @@ -42,14 +40,14 @@ public Long getTag() { return tag; } - public void setResponse(RpcResponse response) { - this.response = response; - } - public RpcResponse getResponse() { return response; } + public void setResponse(RpcResponse response) { + this.response = response; + } + public Class getArgumentsObject() { return targetArgclass; } diff --git a/src/main/java/nl/stil4m/transmission/rpc/RpcConfiguration.java b/src/main/java/nl/stil4m/transmission/rpc/RpcConfiguration.java index 1cabca9..aef65a3 100644 --- a/src/main/java/nl/stil4m/transmission/rpc/RpcConfiguration.java +++ b/src/main/java/nl/stil4m/transmission/rpc/RpcConfiguration.java @@ -3,10 +3,24 @@ import nl.stil4m.transmission.http.HostConfiguration; import java.net.URI; +import java.util.Base64; public class RpcConfiguration implements HostConfiguration { private URI host; + private String authInfo = null; + + public RpcConfiguration(URI host) { + this.host = host; + } + + public RpcConfiguration(URI host, String username, String password) { + this.host = host; + setAuthInfo(username, password); + } + + public RpcConfiguration() { + } public URI getHost() { return host; @@ -15,4 +29,19 @@ public URI getHost() { public void setHost(URI host) { this.host = host; } + + + public void setAuthInfo(String username, String password) { + this.authInfo = Base64.getEncoder().encodeToString((username + ":" + password).getBytes()); + } + + + public String getEncodedAuthInfo() { + return authInfo; + } + + public boolean hasAuthInfo() { + return authInfo != null; + } + //header Authorization: Basic %s:%s } diff --git a/src/main/java/nl/stil4m/transmission/rpc/RpcRequest.java b/src/main/java/nl/stil4m/transmission/rpc/RpcRequest.java index 51f566a..ba41883 100644 --- a/src/main/java/nl/stil4m/transmission/rpc/RpcRequest.java +++ b/src/main/java/nl/stil4m/transmission/rpc/RpcRequest.java @@ -8,27 +8,27 @@ public class RpcRequest { private Long tag; - public void setMethod(String method) { - this.method = method; - } - - public void setArguments(T arguments) { - this.arguments = arguments; - } - - public void setTag(Long tag) { - this.tag = tag; - } - public String getMethod() { return method; } + public void setMethod(String method) { + this.method = method; + } + public T getArguments() { return arguments; } + public void setArguments(T arguments) { + this.arguments = arguments; + } + public Long getTag() { return tag; } + + public void setTag(Long tag) { + this.tag = tag; + } } diff --git a/src/main/java/nl/stil4m/transmission/rpc/TagProvider.java b/src/main/java/nl/stil4m/transmission/rpc/TagProvider.java index eda0908..87b11b2 100644 --- a/src/main/java/nl/stil4m/transmission/rpc/TagProvider.java +++ b/src/main/java/nl/stil4m/transmission/rpc/TagProvider.java @@ -7,6 +7,7 @@ public class TagProvider { public TagProvider() { tag = 0L; } + public Long nextTag() { return ++tag; }