diff --git a/src/main/java/io/kamax/mxisd/HttpMxisd.java b/src/main/java/io/kamax/mxisd/HttpMxisd.java index fadfbbc..40f1a2e 100644 --- a/src/main/java/io/kamax/mxisd/HttpMxisd.java +++ b/src/main/java/io/kamax/mxisd/HttpMxisd.java @@ -20,7 +20,9 @@ package io.kamax.mxisd; +import io.kamax.mxisd.config.MatrixConfig; import io.kamax.mxisd.config.MxisdConfig; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.http.undertow.handler.InternalInfoHandler; import io.kamax.mxisd.http.undertow.handler.OptionsHandler; import io.kamax.mxisd.http.undertow.handler.SaneHandler; @@ -39,11 +41,16 @@ import io.kamax.mxisd.http.undertow.handler.profile.v1.ProfileHandler; import io.kamax.mxisd.http.undertow.handler.register.v1.Register3pidRequestTokenHandler; import io.kamax.mxisd.http.undertow.handler.status.StatusHandler; import io.kamax.mxisd.http.undertow.handler.status.VersionHandler; +import io.kamax.mxisd.matrix.IdentityServiceAPI; import io.undertow.Handlers; import io.undertow.Undertow; import io.undertow.server.HttpHandler; +import io.undertow.server.RoutingHandler; +import io.undertow.util.HttpString; +import io.undertow.util.Methods; import java.util.Objects; +import java.util.function.Supplier; public class HttpMxisd { @@ -91,22 +98,22 @@ public class HttpMxisd { .post(UserDirectorySearchHandler.Path, SaneHandler.around(new UserDirectorySearchHandler(m.getDirectory()))) // Key endpoints - .get(KeyGetHandler.Path, SaneHandler.around(new KeyGetHandler(m.getKeyManager()))) - .get(RegularKeyIsValidHandler.Path, SaneHandler.around(new RegularKeyIsValidHandler(m.getKeyManager()))) - .get(EphemeralKeyIsValidHandler.Path, SaneHandler.around(new EphemeralKeyIsValidHandler(m.getKeyManager()))) + .get(KeyGetHandler.Path, SaneHandler.around(new KeyGetHandler(m.getKeyManager()))) // to v2 + .get(RegularKeyIsValidHandler.Path, SaneHandler.around(new RegularKeyIsValidHandler(m.getKeyManager()))) // to v2 + .get(EphemeralKeyIsValidHandler.Path, SaneHandler.around(new EphemeralKeyIsValidHandler(m.getKeyManager()))) // to v2 // Identity endpoints - .get(HelloHandler.Path, helloHandler) - .get(HelloHandler.Path + "/", helloHandler) // Be lax with possibly trailing slash - .get(SingleLookupHandler.Path, SaneHandler.around(new SingleLookupHandler(m.getConfig(), m.getIdentity(), m.getSign()))) - .post(BulkLookupHandler.Path, SaneHandler.around(new BulkLookupHandler(m.getIdentity()))) - .post(StoreInviteHandler.Path, storeInvHandler) - .post(SessionStartHandler.Path, SaneHandler.around(new SessionStartHandler(m.getSession()))) - .get(SessionValidateHandler.Path, SaneHandler.around(new SessionValidationGetHandler(m.getSession(), m.getConfig()))) - .post(SessionValidateHandler.Path, SaneHandler.around(new SessionValidationPostHandler(m.getSession()))) - .get(SessionTpidGetValidatedHandler.Path, SaneHandler.around(new SessionTpidGetValidatedHandler(m.getSession()))) - .post(SessionTpidBindHandler.Path, SaneHandler.around(new SessionTpidBindHandler(m.getSession(), m.getInvite(), m.getSign()))) - .post(SessionTpidUnbindHandler.Path, SaneHandler.around(new SessionTpidUnbindHandler(m.getSession()))) + .get(HelloHandler.Path, helloHandler) // to v2 + .get(HelloHandler.Path + "/", helloHandler) // Be lax with possibly trailing slash // to v2 + .get(SingleLookupHandler.Path, SaneHandler.around(new SingleLookupHandler(m.getConfig(), m.getIdentity(), m.getSign()))) // to v2 + .post(BulkLookupHandler.Path, SaneHandler.around(new BulkLookupHandler(m.getIdentity()))) // to v2 + .post(StoreInviteHandler.Path, storeInvHandler) // to v2 + .post(SessionStartHandler.Path, SaneHandler.around(new SessionStartHandler(m.getSession()))) // to v2 + .get(SessionValidateHandler.Path, SaneHandler.around(new SessionValidationGetHandler(m.getSession(), m.getConfig()))) // to v2 + .post(SessionValidateHandler.Path, SaneHandler.around(new SessionValidationPostHandler(m.getSession()))) // to v2 + .get(SessionTpidGetValidatedHandler.Path, SaneHandler.around(new SessionTpidGetValidatedHandler(m.getSession()))) // to v2 + .post(SessionTpidBindHandler.Path, SaneHandler.around(new SessionTpidBindHandler(m.getSession(), m.getInvite(), m.getSign()))) // to v2 + .post(SessionTpidUnbindHandler.Path, SaneHandler.around(new SessionTpidUnbindHandler(m.getSession()))) // to v2 .post(SignEd25519Handler.Path, SaneHandler.around(new SignEd25519Handler(m.getConfig(), m.getInvite(), m.getSign()))) // Profile endpoints @@ -143,4 +150,18 @@ public class HttpMxisd { m.stop(); } + private RoutingHandler attachHandler(RoutingHandler routingHandler, HttpString method, ApiHandler handler, Supplier handlerSupplier) { + final MatrixConfig matrixConfig = m.getConfig().getMatrix(); + if (matrixConfig.isV1()) { + return routingHandler.add(method, handler.getPath(IdentityServiceAPI.V1), handlerSupplier.get()); + } + if (matrixConfig.isV2()) { + return routingHandler.add(method, handler.getPath(IdentityServiceAPI.V2), handlerSupplier.get()); + } + return routingHandler; + } + + private HttpHandler sane(HttpHandler httpHandler) { + return SaneHandler.around(httpHandler); + } } diff --git a/src/main/java/io/kamax/mxisd/config/MatrixConfig.java b/src/main/java/io/kamax/mxisd/config/MatrixConfig.java index c66751a..0d21f07 100644 --- a/src/main/java/io/kamax/mxisd/config/MatrixConfig.java +++ b/src/main/java/io/kamax/mxisd/config/MatrixConfig.java @@ -63,6 +63,8 @@ public class MatrixConfig { private String domain; private Identity identity = new Identity(); + private boolean v1 = true; + private boolean v2 = true; public String getDomain() { return domain; @@ -80,6 +82,22 @@ public class MatrixConfig { this.identity = identity; } + public boolean isV1() { + return v1; + } + + public void setV1(boolean v1) { + this.v1 = v1; + } + + public boolean isV2() { + return v2; + } + + public void setV2(boolean v2) { + this.v2 = v2; + } + public void build() { log.info("--- Matrix config ---"); @@ -90,6 +108,11 @@ public class MatrixConfig { log.info("Domain: {}", getDomain()); log.info("Identity:"); log.info("\tServers: {}", GsonUtil.get().toJson(identity.getServers())); + log.info("API v1: {}", v1); + log.info("API v2: {}", v2); + if (v1) { + log.warn("API v1 is deprecated via MSC2140: https://github.com/matrix-org/matrix-doc/pull/2140 and will be deleted in future releases."); + log.warn("Please upgrade your homeserver and enable only API v2."); + } } - } diff --git a/src/main/java/io/kamax/mxisd/config/ServerConfig.java b/src/main/java/io/kamax/mxisd/config/ServerConfig.java index 5310bf2..b2edc96 100644 --- a/src/main/java/io/kamax/mxisd/config/ServerConfig.java +++ b/src/main/java/io/kamax/mxisd/config/ServerConfig.java @@ -79,5 +79,4 @@ public class ServerConfig { log.info("Port: {}", getPort()); log.info("Public URL: {}", getPublicUrl()); } - } diff --git a/src/main/java/io/kamax/mxisd/http/IsAPIv1.java b/src/main/java/io/kamax/mxisd/http/IsAPIv1.java index bd070f2..b9b0a81 100644 --- a/src/main/java/io/kamax/mxisd/http/IsAPIv1.java +++ b/src/main/java/io/kamax/mxisd/http/IsAPIv1.java @@ -25,8 +25,6 @@ public class IsAPIv1 { public static final String Base = "/_matrix/identity/api/v1"; public static String getValidate(String medium, String sid, String secret, String token) { - // FIXME use some kind of URLBuilder - return Base + "/validate/" + medium + "/submitToken?sid=" + sid + "&client_secret=" + secret + "&token=" + token; + return String.format("%s/validate/%s/submitToken?sid=%s&client_secret=%s&token=%s", Base, medium, sid, secret, token); } - } diff --git a/src/main/java/io/kamax/mxisd/http/IsAPIv2.java b/src/main/java/io/kamax/mxisd/http/IsAPIv2.java new file mode 100644 index 0000000..3cdbea2 --- /dev/null +++ b/src/main/java/io/kamax/mxisd/http/IsAPIv2.java @@ -0,0 +1,31 @@ +/* + * mxisd - Matrix Identity Server Daemon + * Copyright (C) 2017 Kamax Sarl + * + * https://www.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.mxisd.http; + +public class IsAPIv2 { + + public static final String Base = "/_matrix/identity/v2"; + + public static String getValidate(String medium, String sid, String secret, String token) { + return String.format("%s/validate/%s/submitToken?sid=%s&client_secret=%s&token=%s", Base, medium, sid, secret, token); + } + +} diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/ApiHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/ApiHandler.java new file mode 100644 index 0000000..a3fcd65 --- /dev/null +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/ApiHandler.java @@ -0,0 +1,22 @@ +package io.kamax.mxisd.http.undertow.handler; + +import io.kamax.mxisd.http.IsAPIv1; +import io.kamax.mxisd.http.IsAPIv2; +import io.kamax.mxisd.matrix.IdentityServiceAPI; +import io.undertow.server.HttpHandler; + +public interface ApiHandler extends HttpHandler { + + default String getPath(IdentityServiceAPI api) { + switch (api) { + case V2: + return IsAPIv2.Base + getHandlerPath(); + case V1: + return IsAPIv1.Base + getHandlerPath(); + default: + throw new IllegalArgumentException("Unknown api version: " + api); + } + } + + String getHandlerPath(); +} diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/BulkLookupHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/BulkLookupHandler.java index e675d44..7679517 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/BulkLookupHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/BulkLookupHandler.java @@ -23,6 +23,7 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.io.identity.ClientBulkLookupAnswer; import io.kamax.mxisd.http.io.identity.ClientBulkLookupRequest; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.lookup.BulkLookupRequest; import io.kamax.mxisd.lookup.ThreePidMapping; import io.kamax.mxisd.lookup.strategy.LookupStrategy; @@ -33,7 +34,7 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -public class BulkLookupHandler extends LookupHandler { +public class BulkLookupHandler extends LookupHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/bulk_lookup"; @@ -69,4 +70,8 @@ public class BulkLookupHandler extends LookupHandler { respondJson(exchange, answer); } + @Override + public String getHandlerPath() { + return "/bulk_lookup"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/EphemeralKeyIsValidHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/EphemeralKeyIsValidHandler.java index 1b894cb..b15133d 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/EphemeralKeyIsValidHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/EphemeralKeyIsValidHandler.java @@ -23,11 +23,12 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import io.kamax.mxisd.crypto.KeyManager; import io.kamax.mxisd.crypto.KeyType; import io.kamax.mxisd.http.IsAPIv1; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.undertow.server.HttpServerExchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class EphemeralKeyIsValidHandler extends KeyIsValidHandler { +public class EphemeralKeyIsValidHandler extends KeyIsValidHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/pubkey/ephemeral/isvalid"; @@ -48,4 +49,8 @@ public class EphemeralKeyIsValidHandler extends KeyIsValidHandler { respondJson(exchange, mgr.isValid(KeyType.Ephemeral, pubKey) ? validKey : invalidKey); } + @Override + public String getHandlerPath() { + return "/pubkey/ephemeral/isvalid"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/HelloHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/HelloHandler.java index 4b018fa..838b595 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/HelloHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/HelloHandler.java @@ -22,9 +22,10 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.undertow.server.HttpServerExchange; -public class HelloHandler extends BasicHttpHandler { +public class HelloHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base; @@ -33,4 +34,8 @@ public class HelloHandler extends BasicHttpHandler { respondJson(exchange, "{}"); } + @Override + public String getHandlerPath() { + return ""; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/KeyGetHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/KeyGetHandler.java index 8b1de81..3ef236f 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/KeyGetHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/KeyGetHandler.java @@ -26,12 +26,13 @@ import io.kamax.mxisd.crypto.KeyManager; import io.kamax.mxisd.crypto.KeyType; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.undertow.server.HttpServerExchange; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class KeyGetHandler extends BasicHttpHandler { +public class KeyGetHandler extends BasicHttpHandler implements ApiHandler { public static final String Key = "key"; public static final String Path = IsAPIv1.Base + "/pubkey/{" + Key + "}"; @@ -61,4 +62,8 @@ public class KeyGetHandler extends BasicHttpHandler { respond(exchange, obj); } + @Override + public String getHandlerPath() { + return "/pubkey/{" + Key + "}"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/RegularKeyIsValidHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/RegularKeyIsValidHandler.java index 6b5167c..7926c91 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/RegularKeyIsValidHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/RegularKeyIsValidHandler.java @@ -23,11 +23,12 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import io.kamax.mxisd.crypto.KeyManager; import io.kamax.mxisd.crypto.KeyType; import io.kamax.mxisd.http.IsAPIv1; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.undertow.server.HttpServerExchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class RegularKeyIsValidHandler extends KeyIsValidHandler { +public class RegularKeyIsValidHandler extends KeyIsValidHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/pubkey/isvalid"; @@ -48,4 +49,8 @@ public class RegularKeyIsValidHandler extends KeyIsValidHandler { respondJson(exchange, mgr.isValid(KeyType.Regular, pubKey) ? validKey : invalidKey); } + @Override + public String getHandlerPath() { + return "/pubkey/isvalid"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionStartHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionStartHandler.java index 0d60020..0957665 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionStartHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionStartHandler.java @@ -28,13 +28,14 @@ import io.kamax.mxisd.http.io.identity.RequestTokenResponse; import io.kamax.mxisd.http.io.identity.SessionEmailTokenRequestJson; import io.kamax.mxisd.http.io.identity.SessionPhoneTokenRequestJson; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.session.SessionManager; import io.undertow.server.HttpServerExchange; import org.apache.http.HttpStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SessionStartHandler extends BasicHttpHandler { +public class SessionStartHandler extends BasicHttpHandler implements ApiHandler { public static final String Medium = "medium"; public static final String Path = IsAPIv1.Base + "/validate/{" + Medium + "}/requestToken"; @@ -84,4 +85,8 @@ public class SessionStartHandler extends BasicHttpHandler { } } + @Override + public String getHandlerPath() { + return "/validate/{" + Medium + "}/requestToken"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidBindHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidBindHandler.java index c45decb..e308e47 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidBindHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidBindHandler.java @@ -28,6 +28,7 @@ import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.io.identity.BindRequest; import io.kamax.mxisd.http.io.identity.SingeLookupReplyJson; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.invitation.InvitationManager; import io.kamax.mxisd.lookup.SingleLookupReply; import io.kamax.mxisd.session.SessionManager; @@ -42,7 +43,7 @@ import java.nio.charset.StandardCharsets; import java.util.Deque; import java.util.Map; -public class SessionTpidBindHandler extends BasicHttpHandler { +public class SessionTpidBindHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/3pid/bind"; @@ -97,4 +98,8 @@ public class SessionTpidBindHandler extends BasicHttpHandler { } } + @Override + public String getHandlerPath() { + return "/3pid/bind"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidGetValidatedHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidGetValidatedHandler.java index 98ee164..334ae97 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidGetValidatedHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidGetValidatedHandler.java @@ -24,13 +24,14 @@ import com.google.gson.JsonObject; import io.kamax.mxisd.exception.SessionNotValidatedException; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.lookup.ThreePidValidation; import io.kamax.mxisd.session.SessionManager; import io.undertow.server.HttpServerExchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SessionTpidGetValidatedHandler extends BasicHttpHandler { +public class SessionTpidGetValidatedHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/3pid/getValidated3pid"; @@ -62,4 +63,8 @@ public class SessionTpidGetValidatedHandler extends BasicHttpHandler { } } + @Override + public String getHandlerPath() { + return "/3pid/getValidated3pid"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidUnbindHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidUnbindHandler.java index e7d68aa..819363c 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidUnbindHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionTpidUnbindHandler.java @@ -23,12 +23,13 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import com.google.gson.JsonObject; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.session.SessionManager; import io.undertow.server.HttpServerExchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SessionTpidUnbindHandler extends BasicHttpHandler { +public class SessionTpidUnbindHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/3pid/unbind"; @@ -48,4 +49,9 @@ public class SessionTpidUnbindHandler extends BasicHttpHandler { sessionMgr.unbind(auth, body); writeBodyAsUtf8(exchange, "{}"); } + + @Override + public String getHandlerPath() { + return "/3pid/unbind"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionValidateHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionValidateHandler.java index 00dcd90..16a7871 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionValidateHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SessionValidateHandler.java @@ -22,13 +22,14 @@ package io.kamax.mxisd.http.undertow.handler.identity.v1; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.session.SessionManager; import io.kamax.mxisd.session.ValidationResult; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class SessionValidateHandler extends BasicHttpHandler { +public abstract class SessionValidateHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/validate/{medium}/submitToken"; @@ -52,4 +53,8 @@ public abstract class SessionValidateHandler extends BasicHttpHandler { return mgr.validate(sid, secret, token); } + @Override + public String getHandlerPath() { + return "/validate/{medium}/submitToken"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SignEd25519Handler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SignEd25519Handler.java index 8d6dc7e..6d8ce0d 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SignEd25519Handler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SignEd25519Handler.java @@ -29,13 +29,14 @@ import io.kamax.mxisd.config.MxisdConfig; import io.kamax.mxisd.crypto.SignatureManager; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.invitation.IThreePidInviteReply; import io.kamax.mxisd.invitation.InvitationManager; import io.undertow.server.HttpServerExchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SignEd25519Handler extends BasicHttpHandler { +public class SignEd25519Handler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/sign-ed25519"; @@ -72,4 +73,8 @@ public class SignEd25519Handler extends BasicHttpHandler { respondJson(exchange, res); } + @Override + public String getHandlerPath() { + return "/sign-ed25519"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SingleLookupHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SingleLookupHandler.java index 87cf6f1..d54fdb9 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SingleLookupHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/SingleLookupHandler.java @@ -27,6 +27,7 @@ import io.kamax.mxisd.config.ServerConfig; import io.kamax.mxisd.crypto.SignatureManager; import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.io.identity.SingeLookupReplyJson; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.lookup.SingleLookupReply; import io.kamax.mxisd.lookup.SingleLookupRequest; import io.kamax.mxisd.lookup.strategy.LookupStrategy; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; import java.util.Optional; -public class SingleLookupHandler extends LookupHandler { +public class SingleLookupHandler extends LookupHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/lookup"; @@ -77,4 +78,8 @@ public class SingleLookupHandler extends LookupHandler { } } + @Override + public String getHandlerPath() { + return "/lookup"; + } } diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/StoreInviteHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/StoreInviteHandler.java index 11996a0..f82cb59 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/StoreInviteHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v1/StoreInviteHandler.java @@ -32,6 +32,7 @@ import io.kamax.mxisd.http.IsAPIv1; import io.kamax.mxisd.http.io.identity.StoreInviteRequest; import io.kamax.mxisd.http.io.identity.ThreePidInviteReplyIO; import io.kamax.mxisd.http.undertow.handler.BasicHttpHandler; +import io.kamax.mxisd.http.undertow.handler.ApiHandler; import io.kamax.mxisd.invitation.IThreePidInvite; import io.kamax.mxisd.invitation.IThreePidInviteReply; import io.kamax.mxisd.invitation.InvitationManager; @@ -45,7 +46,7 @@ import java.nio.charset.StandardCharsets; import java.util.Deque; import java.util.Map; -public class StoreInviteHandler extends BasicHttpHandler { +public class StoreInviteHandler extends BasicHttpHandler implements ApiHandler { public static final String Path = IsAPIv1.Base + "/store-invite"; @@ -100,4 +101,8 @@ public class StoreInviteHandler extends BasicHttpHandler { respondJson(exchange, new ThreePidInviteReplyIO(reply, keyMgr.getPublicKeyBase64(keyMgr.getServerSigningKey().getId()), cfg.getPublicUrl())); } + @Override + public String getHandlerPath() { + return "/store-invite"; + } } diff --git a/src/main/java/io/kamax/mxisd/matrix/IdentityServiceAPI.java b/src/main/java/io/kamax/mxisd/matrix/IdentityServiceAPI.java new file mode 100644 index 0000000..d326659 --- /dev/null +++ b/src/main/java/io/kamax/mxisd/matrix/IdentityServiceAPI.java @@ -0,0 +1,9 @@ +package io.kamax.mxisd.matrix; + +public enum IdentityServiceAPI { + + @Deprecated + V1, + + V2 +}