MSC2140 Mirroring V1 to V2.
This commit is contained in:
@@ -50,7 +50,6 @@ import io.undertow.util.HttpString;
|
|||||||
import io.undertow.util.Methods;
|
import io.undertow.util.Methods;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class HttpMxisd {
|
public class HttpMxisd {
|
||||||
|
|
||||||
@@ -79,86 +78,102 @@ public class HttpMxisd {
|
|||||||
HttpHandler asTxnHandler = SaneHandler.around(new AsTransactionHandler(m.getAs()));
|
HttpHandler asTxnHandler = SaneHandler.around(new AsTransactionHandler(m.getAs()));
|
||||||
HttpHandler asNotFoundHandler = SaneHandler.around(new AsNotFoundHandler(m.getAs()));
|
HttpHandler asNotFoundHandler = SaneHandler.around(new AsNotFoundHandler(m.getAs()));
|
||||||
|
|
||||||
HttpHandler storeInvHandler = SaneHandler.around(new StoreInviteHandler(m.getConfig().getServer(), m.getInvite(), m.getKeyManager()));
|
HttpHandler storeInvHandler = SaneHandler
|
||||||
|
.around(new StoreInviteHandler(m.getConfig().getServer(), m.getInvite(), m.getKeyManager()));
|
||||||
|
|
||||||
httpSrv = Undertow.builder().addHttpListener(m.getConfig().getServer().getPort(), "0.0.0.0").setHandler(Handlers.routing()
|
final RoutingHandler handler = Handlers.routing()
|
||||||
|
.add("OPTIONS", "/**", SaneHandler.around(new OptionsHandler()))
|
||||||
|
|
||||||
.add("OPTIONS", "/**", SaneHandler.around(new OptionsHandler()))
|
// Status endpoints
|
||||||
|
.get(StatusHandler.Path, SaneHandler.around(new StatusHandler()))
|
||||||
|
.get(VersionHandler.Path, SaneHandler.around(new VersionHandler()))
|
||||||
|
|
||||||
// Status endpoints
|
// Authentication endpoints
|
||||||
.get(StatusHandler.Path, SaneHandler.around(new StatusHandler()))
|
.get(LoginHandler.Path, SaneHandler.around(new LoginGetHandler(m.getAuth(), m.getHttpClient())))
|
||||||
.get(VersionHandler.Path, SaneHandler.around(new VersionHandler()))
|
.post(LoginHandler.Path, SaneHandler.around(new LoginPostHandler(m.getAuth())))
|
||||||
|
.post(RestAuthHandler.Path, SaneHandler.around(new RestAuthHandler(m.getAuth())))
|
||||||
|
|
||||||
// Authentication endpoints
|
// Directory endpoints
|
||||||
.get(LoginHandler.Path, SaneHandler.around(new LoginGetHandler(m.getAuth(), m.getHttpClient())))
|
.post(UserDirectorySearchHandler.Path, SaneHandler.around(new UserDirectorySearchHandler(m.getDirectory())))
|
||||||
.post(LoginHandler.Path, SaneHandler.around(new LoginPostHandler(m.getAuth())))
|
|
||||||
.post(RestAuthHandler.Path, SaneHandler.around(new RestAuthHandler(m.getAuth())))
|
|
||||||
|
|
||||||
// Directory endpoints
|
// Profile endpoints
|
||||||
.post(UserDirectorySearchHandler.Path, SaneHandler.around(new UserDirectorySearchHandler(m.getDirectory())))
|
.get(ProfileHandler.Path, SaneHandler.around(new ProfileHandler(m.getProfile())))
|
||||||
|
.get(InternalProfileHandler.Path, SaneHandler.around(new InternalProfileHandler(m.getProfile())))
|
||||||
|
|
||||||
// Key endpoints
|
// Registration endpoints
|
||||||
.get(KeyGetHandler.Path, SaneHandler.around(new KeyGetHandler(m.getKeyManager()))) // to v2
|
.post(Register3pidRequestTokenHandler.Path,
|
||||||
.get(RegularKeyIsValidHandler.Path, SaneHandler.around(new RegularKeyIsValidHandler(m.getKeyManager()))) // to v2
|
SaneHandler.around(new Register3pidRequestTokenHandler(m.getReg(), m.getClientDns(), m.getHttpClient())))
|
||||||
.get(EphemeralKeyIsValidHandler.Path, SaneHandler.around(new EphemeralKeyIsValidHandler(m.getKeyManager()))) // to v2
|
|
||||||
|
|
||||||
// Identity endpoints
|
// Invite endpoints
|
||||||
.get(HelloHandler.Path, helloHandler) // to v2
|
.post(RoomInviteHandler.Path, SaneHandler.around(new RoomInviteHandler(m.getHttpClient(), m.getClientDns(), m.getInvite())))
|
||||||
.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
|
// Application Service endpoints
|
||||||
.get(ProfileHandler.Path, SaneHandler.around(new ProfileHandler(m.getProfile())))
|
.get(AsUserHandler.Path, asUserHandler)
|
||||||
.get(InternalProfileHandler.Path, SaneHandler.around(new InternalProfileHandler(m.getProfile())))
|
.get("/_matrix/app/v1/rooms/**", asNotFoundHandler)
|
||||||
|
.put(AsTransactionHandler.Path, asTxnHandler)
|
||||||
|
|
||||||
// Registration endpoints
|
.get("/users/{" + AsUserHandler.ID + "}", asUserHandler) // Legacy endpoint
|
||||||
.post(Register3pidRequestTokenHandler.Path, SaneHandler.around(new Register3pidRequestTokenHandler(m.getReg(), m.getClientDns(), m.getHttpClient())))
|
.get("/rooms/**", asNotFoundHandler) // Legacy endpoint
|
||||||
|
.put("/transactions/{" + AsTransactionHandler.ID + "}", asTxnHandler) // Legacy endpoint
|
||||||
|
|
||||||
// Invite endpoints
|
// Banned endpoints
|
||||||
.post(RoomInviteHandler.Path, SaneHandler.around(new RoomInviteHandler(m.getHttpClient(), m.getClientDns(), m.getInvite())))
|
.get(InternalInfoHandler.Path, SaneHandler.around(new InternalInfoHandler()));
|
||||||
|
keyEndpoints(handler);
|
||||||
// Application Service endpoints
|
identityEndpoints(handler);
|
||||||
.get(AsUserHandler.Path, asUserHandler)
|
httpSrv = Undertow.builder().addHttpListener(m.getConfig().getServer().getPort(), "0.0.0.0").setHandler(handler).build();
|
||||||
.get("/_matrix/app/v1/rooms/**", asNotFoundHandler)
|
|
||||||
.put(AsTransactionHandler.Path, asTxnHandler)
|
|
||||||
|
|
||||||
.get("/users/{" + AsUserHandler.ID + "}", asUserHandler) // Legacy endpoint
|
|
||||||
.get("/rooms/**", asNotFoundHandler) // Legacy endpoint
|
|
||||||
.put("/transactions/{" + AsTransactionHandler.ID + "}", asTxnHandler) // Legacy endpoint
|
|
||||||
|
|
||||||
// Banned endpoints
|
|
||||||
.get(InternalInfoHandler.Path, SaneHandler.around(new InternalInfoHandler()))
|
|
||||||
|
|
||||||
).build();
|
|
||||||
|
|
||||||
httpSrv.start();
|
httpSrv.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stop() {
|
public void stop() {
|
||||||
// Because it might have never been initialized if an exception is thrown early
|
// Because it might have never been initialized if an exception is thrown early
|
||||||
if (Objects.nonNull(httpSrv)) httpSrv.stop();
|
if (Objects.nonNull(httpSrv)) {
|
||||||
|
httpSrv.stop();
|
||||||
|
}
|
||||||
|
|
||||||
m.stop();
|
m.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private RoutingHandler attachHandler(RoutingHandler routingHandler, HttpString method, ApiHandler handler, Supplier<HttpHandler> handlerSupplier) {
|
private void keyEndpoints(RoutingHandler routingHandler) {
|
||||||
|
addEndpoints(routingHandler, Methods.GET,
|
||||||
|
new KeyGetHandler(m.getKeyManager()),
|
||||||
|
new RegularKeyIsValidHandler(m.getKeyManager()),
|
||||||
|
new EphemeralKeyIsValidHandler(m.getKeyManager())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void identityEndpoints(RoutingHandler routingHandler) {
|
||||||
|
addEndpoints(routingHandler, Methods.GET,
|
||||||
|
new HelloHandler(),
|
||||||
|
new SingleLookupHandler(m.getConfig(), m.getIdentity(), m.getSign()),
|
||||||
|
new SessionValidationGetHandler(m.getSession(), m.getConfig()),
|
||||||
|
new SessionTpidGetValidatedHandler(m.getSession())
|
||||||
|
);
|
||||||
|
addEndpoints(routingHandler, Methods.POST,
|
||||||
|
new BulkLookupHandler(m.getIdentity()),
|
||||||
|
new StoreInviteHandler(m.getConfig().getServer(), m.getInvite(), m.getKeyManager()),
|
||||||
|
new SessionStartHandler(m.getSession()),
|
||||||
|
new SessionValidationPostHandler(m.getSession()),
|
||||||
|
new SessionTpidBindHandler(m.getSession(), m.getInvite(), m.getSign()),
|
||||||
|
new SessionTpidUnbindHandler(m.getSession()),
|
||||||
|
new SignEd25519Handler(m.getConfig(), m.getInvite(), m.getSign())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addEndpoints(RoutingHandler routingHandler, HttpString method, ApiHandler... handlers) {
|
||||||
|
for (ApiHandler handler : handlers) {
|
||||||
|
attachHandler(routingHandler, method, handler, sane(handler));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void attachHandler(RoutingHandler routingHandler, HttpString method, ApiHandler apiHandler, HttpHandler httpHandler) {
|
||||||
final MatrixConfig matrixConfig = m.getConfig().getMatrix();
|
final MatrixConfig matrixConfig = m.getConfig().getMatrix();
|
||||||
if (matrixConfig.isV1()) {
|
if (matrixConfig.isV1()) {
|
||||||
return routingHandler.add(method, handler.getPath(IdentityServiceAPI.V1), handlerSupplier.get());
|
routingHandler.add(method, apiHandler.getPath(IdentityServiceAPI.V1), httpHandler);
|
||||||
}
|
}
|
||||||
if (matrixConfig.isV2()) {
|
if (matrixConfig.isV2()) {
|
||||||
return routingHandler.add(method, handler.getPath(IdentityServiceAPI.V2), handlerSupplier.get());
|
routingHandler.add(method, apiHandler.getPath(IdentityServiceAPI.V2), httpHandler);
|
||||||
}
|
}
|
||||||
return routingHandler;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpHandler sane(HttpHandler httpHandler) {
|
private HttpHandler sane(HttpHandler httpHandler) {
|
||||||
|
Reference in New Issue
Block a user