JasperClient.java
package jasper.client;
import feign.HeaderMap;
import feign.Param;
import feign.QueryMap;
import feign.RequestLine;
import jasper.domain.Ext;
import jasper.domain.Plugin;
import jasper.domain.Ref;
import jasper.domain.Template;
import jasper.domain.User;
import jasper.service.dto.RefReplDto;
import jasper.service.dto.UserDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.context.request.WebRequest;
import java.net.URI;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static jasper.security.Auth.LOCAL_ORIGIN_HEADER;
import static jasper.security.Auth.READ_ACCESS_HEADER;
import static jasper.security.Auth.TAG_READ_ACCESS_HEADER;
import static jasper.security.Auth.TAG_WRITE_ACCESS_HEADER;
import static jasper.security.Auth.USER_ROLE_HEADER;
import static jasper.security.Auth.USER_TAG_HEADER;
import static jasper.security.Auth.WRITE_ACCESS_HEADER;
@FeignClient(value = "jasper", url = "https://jasperkm.info")
public interface JasperClient {
@RequestLine("GET /pub/api/v1/repl/ref")
List<Ref> refPull(URI baseUri, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/ref")
List<Ref> refPull(URI baseUri, @HeaderMap Map<String, Object> headers, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/ref/cursor?origin={origin}")
Instant refCursor(URI baseUri, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/ref/cursor?origin={origin}")
Instant refCursor(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin);
@RequestLine("POST /pub/api/v1/repl/ref?origin={origin}")
void refPush(URI baseUri, @Param("origin") String origin, List<RefReplDto> push);
@RequestLine("POST /pub/api/v1/repl/ref?origin={origin}")
void refPush(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, List<RefReplDto> push);
@RequestLine("GET /pub/api/v1/repl/ext")
List<Ext> extPull(URI baseUri, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/ext")
List<Ext> extPull(URI baseUri, @HeaderMap Map<String, Object> headers, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/ext/cursor?origin={origin}")
Instant extCursor(URI baseUri, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/ext/cursor?origin={origin}")
Instant extCursor(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin);
@RequestLine("POST /pub/api/v1/repl/ext?origin={origin}")
void extPush(URI baseUri, @Param("origin") String origin, List<Ext> push);
@RequestLine("POST /pub/api/v1/repl/ext?origin={origin}")
void extPush(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, List<Ext> push);
@RequestLine("GET /pub/api/v1/repl/user")
List<User> userPull(URI baseUri, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/user")
List<User> userPull(URI baseUri, @HeaderMap Map<String, Object> headers, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/user/cursor?origin={origin}")
Instant userCursor(URI baseUri, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/user/cursor?origin={origin}")
Instant userCursor(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin);
@RequestLine("POST /pub/api/v1/repl/user?origin={origin}")
void userPush(URI baseUri, @Param("origin") String origin, List<UserDto> push);
@RequestLine("POST /pub/api/v1/repl/user?origin={origin}")
void userPush(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, List<UserDto> push);
@RequestLine("GET /pub/api/v1/repl/plugin")
List<Plugin> pluginPull(URI baseUri, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/plugin")
List<Plugin> pluginPull(URI baseUri, @HeaderMap Map<String, Object> headers, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/plugin/cursor?origin={origin}")
Instant pluginCursor(URI baseUri, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/plugin/cursor?origin={origin}")
Instant pluginCursor(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin);
@RequestLine("POST /pub/api/v1/repl/plugin?origin={origin}")
void pluginPush(URI baseUri, @Param("origin") String origin, List<Plugin> push);
@RequestLine("POST /pub/api/v1/repl/plugin?origin={origin}")
void pluginPush(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, List<Plugin> push);
@RequestLine("GET /pub/api/v1/repl/template")
List<Template> templatePull(URI baseUri, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/template")
List<Template> templatePull(URI baseUri, @HeaderMap Map<String, Object> headers, @QueryMap Map<String, Object> params);
@RequestLine("GET /pub/api/v1/repl/template/cursor?origin={origin}")
Instant templateCursor(URI baseUri, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/template/cursor?origin={origin}")
Instant templateCursor(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin);
@RequestLine("POST /pub/api/v1/repl/template?origin={origin}")
void templatePush(URI baseUri, @Param("origin") String origin, List<Template> push);
@RequestLine("POST /pub/api/v1/repl/template?origin={origin}")
void templatePush(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, List<Template> push);
@RequestLine("GET /pub/api/v1/repl/cache?url={url}&origin={origin}")
ResponseEntity<Resource> fetch(URI baseUri, @Param("url") String url, @Param("origin") String origin);
@RequestLine("GET /pub/api/v1/repl/cache?url={url}&origin={origin}")
ResponseEntity<Resource> fetch(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("url") String url, @Param("origin") String origin);
@RequestLine("PUT /pub/api/v1/repl/cache?url={url}&origin={origin}")
void push(URI baseUri, @Param("url") String url, @Param("origin") String origin, byte[] data);
@RequestLine("PUT /pub/api/v1/repl/cache?url={url}&origin={origin}")
void push(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("url") String url, @Param("origin") String origin, byte[] data);
@RequestLine("POST /pub/api/v1/repl/cache?origin={origin}&title={title}&mime={mime}")
RefReplDto save(URI baseUri, @Param("origin") String origin, @Param("title") String title, @Param("mime") String mime, byte[] data);
@RequestLine("POST /pub/api/v1/repl/cache?origin={origin}&title={title}&mime={mime}")
RefReplDto save(URI baseUri, @HeaderMap Map<String, Object> headers, @Param("origin") String origin, @Param("title") String title, @Param("mime") String mime, byte[] data);
static Map<String, Object> jasperHeaders(WebRequest req) {
return Map.of(
"Authorization", Objects.toString(req.getHeader("Authorization"), ""),
USER_TAG_HEADER, Objects.toString(req.getHeader(USER_TAG_HEADER), ""),
USER_ROLE_HEADER, Objects.toString(req.getHeader(USER_ROLE_HEADER), ""),
LOCAL_ORIGIN_HEADER, Objects.toString(req.getHeader(LOCAL_ORIGIN_HEADER), ""),
WRITE_ACCESS_HEADER, Objects.toString(req.getHeader(WRITE_ACCESS_HEADER), ""),
READ_ACCESS_HEADER, Objects.toString(req.getHeader(READ_ACCESS_HEADER), ""),
TAG_WRITE_ACCESS_HEADER, Objects.toString(req.getHeader(TAG_WRITE_ACCESS_HEADER), ""),
TAG_READ_ACCESS_HEADER, Objects.toString(req.getHeader(TAG_READ_ACCESS_HEADER), "")
);
}
static Map<String, Object> params(Object... params) {
var result = new HashMap<String, Object>();
for (var i = 0; i < params.length; i += 2) {
result.put(params[i].toString(), params[i+1]);
}
return result;
}
}