Continue structural port from Spring Boot to Undertow
This commit is contained in:
@@ -28,38 +28,26 @@ import io.kamax.mxisd.auth.AuthProviders;
|
||||
import io.kamax.mxisd.backend.IdentityStoreSupplier;
|
||||
import io.kamax.mxisd.backend.sql.synapse.Synapse;
|
||||
import io.kamax.mxisd.config.MxisdConfig;
|
||||
import io.kamax.mxisd.crypto.CryptoFactory;
|
||||
import io.kamax.mxisd.directory.DirectoryManager;
|
||||
import io.kamax.mxisd.directory.DirectoryProviders;
|
||||
import io.kamax.mxisd.dns.ClientDnsOverwrite;
|
||||
import io.kamax.mxisd.dns.FederationDnsOverwrite;
|
||||
import io.kamax.mxisd.http.undertow.handler.SaneHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.as.v1.AsNotFoundHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.as.v1.AsTransactionHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.auth.RestAuthHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.auth.v1.LoginGetHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.auth.v1.LoginHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.auth.v1.LoginPostHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.directory.v1.UserDirectorySearchHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.identity.v1.*;
|
||||
import io.kamax.mxisd.http.undertow.handler.profile.v1.InternalProfileHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.profile.v1.ProfileHandler;
|
||||
import io.kamax.mxisd.http.undertow.handler.status.StatusHandler;
|
||||
import io.kamax.mxisd.invitation.InvitationManager;
|
||||
import io.kamax.mxisd.lookup.ThreePidProviders;
|
||||
import io.kamax.mxisd.lookup.fetcher.IRemoteIdentityServerFetcher;
|
||||
import io.kamax.mxisd.lookup.provider.BridgeFetcher;
|
||||
import io.kamax.mxisd.lookup.provider.RemoteIdentityServerFetcher;
|
||||
import io.kamax.mxisd.lookup.strategy.LookupStrategy;
|
||||
import io.kamax.mxisd.lookup.strategy.RecursivePriorityLookupStrategy;
|
||||
import io.kamax.mxisd.notification.NotificationHandlerSupplier;
|
||||
import io.kamax.mxisd.notification.NotificationHandlers;
|
||||
import io.kamax.mxisd.notification.NotificationManager;
|
||||
import io.kamax.mxisd.profile.ProfileManager;
|
||||
import io.kamax.mxisd.profile.ProfileProviders;
|
||||
import io.kamax.mxisd.session.SessionMananger;
|
||||
import io.kamax.mxisd.spring.CryptoFactory;
|
||||
import io.kamax.mxisd.storage.IStorage;
|
||||
import io.kamax.mxisd.storage.ormlite.OrmLiteSqliteStorage;
|
||||
import io.undertow.Handlers;
|
||||
import io.undertow.Undertow;
|
||||
import io.undertow.server.HttpHandler;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
|
||||
@@ -67,55 +55,58 @@ import java.util.ServiceLoader;
|
||||
|
||||
public class Mxisd {
|
||||
|
||||
private MxisdConfig cfg;
|
||||
protected MxisdConfig cfg;
|
||||
|
||||
private CloseableHttpClient httpClient;
|
||||
protected CloseableHttpClient httpClient;
|
||||
protected IRemoteIdentityServerFetcher srvFetcher;
|
||||
|
||||
private KeyManager keyMgr;
|
||||
private SignatureManager signMgr;
|
||||
protected IStorage store;
|
||||
|
||||
protected KeyManager keyMgr;
|
||||
protected SignatureManager signMgr;
|
||||
|
||||
// Features
|
||||
private AuthManager authMgr;
|
||||
private DirectoryManager dirMgr;
|
||||
private LookupStrategy idStrategy;
|
||||
private InvitationManager invMgr;
|
||||
private ProfileManager pMgr;
|
||||
private AppSvcManager asHander;
|
||||
private SessionMananger sessMgr;
|
||||
|
||||
// I/O
|
||||
private Undertow httpSrv;
|
||||
protected AuthManager authMgr;
|
||||
protected DirectoryManager dirMgr;
|
||||
protected LookupStrategy idStrategy;
|
||||
protected InvitationManager invMgr;
|
||||
protected ProfileManager pMgr;
|
||||
protected AppSvcManager asHander;
|
||||
protected SessionMananger sessMgr;
|
||||
protected NotificationManager notifMgr;
|
||||
|
||||
public Mxisd(MxisdConfig cfg) {
|
||||
this.cfg = cfg.build();
|
||||
}
|
||||
|
||||
private void build() {
|
||||
protected void build() {
|
||||
httpClient = HttpClients.custom()
|
||||
.setUserAgent("mxisd")
|
||||
.setMaxConnPerRoute(Integer.MAX_VALUE)
|
||||
.setMaxConnTotal(Integer.MAX_VALUE)
|
||||
.build();
|
||||
|
||||
OrmLiteSqliteStorage storage = new OrmLiteSqliteStorage(cfg);
|
||||
srvFetcher = new RemoteIdentityServerFetcher(httpClient);
|
||||
|
||||
store = new OrmLiteSqliteStorage(cfg);
|
||||
keyMgr = CryptoFactory.getKeyManager(cfg.getKey());
|
||||
signMgr = CryptoFactory.getSignatureManager(keyMgr, cfg.getServer());
|
||||
ClientDnsOverwrite clientDns = new ClientDnsOverwrite(cfg.getDns().getOverwrite());
|
||||
FederationDnsOverwrite fedDns = new FederationDnsOverwrite(cfg.getDns().getOverwrite());
|
||||
pMgr = new ProfileManager(ProfileProviders.get(), clientDns, httpClient);
|
||||
NotificationManager notifMgr = new NotificationManager(cfg.getNotification(), NotificationHandlers.get());
|
||||
Synapse synapse = new Synapse(cfg.getSynapseSql());
|
||||
RemoteIdentityServerFetcher srvFetcher = new RemoteIdentityServerFetcher(httpClient);
|
||||
BridgeFetcher bridgeFetcher = new BridgeFetcher(cfg.getLookup().getRecursive().getBridge(), srvFetcher);
|
||||
idStrategy = new RecursivePriorityLookupStrategy(cfg.getLookup(), ThreePidProviders.get(), bridgeFetcher);
|
||||
invMgr = new InvitationManager(cfg.getInvite(), storage, idStrategy, signMgr, fedDns, notifMgr);
|
||||
sessMgr = new SessionMananger(cfg.getSession(), cfg.getMatrix(), storage, notifMgr, httpClient);
|
||||
|
||||
authMgr = new AuthManager(cfg, AuthProviders.get(), idStrategy, invMgr, clientDns, httpClient);
|
||||
dirMgr = new DirectoryManager(cfg.getDirectory(), clientDns, httpClient, DirectoryProviders.get());
|
||||
asHander = new AppSvcManager(cfg, storage, pMgr, notifMgr, synapse);
|
||||
|
||||
ServiceLoader.load(IdentityStoreSupplier.class).iterator().forEachRemaining(p -> p.accept(this));
|
||||
ServiceLoader.load(NotificationHandlerSupplier.class).iterator().forEachRemaining(p -> p.accept(this));
|
||||
|
||||
idStrategy = new RecursivePriorityLookupStrategy(cfg.getLookup(), ThreePidProviders.get(), bridgeFetcher);
|
||||
pMgr = new ProfileManager(ProfileProviders.get(), clientDns, httpClient);
|
||||
notifMgr = new NotificationManager(cfg.getNotification(), NotificationHandlers.get());
|
||||
sessMgr = new SessionMananger(cfg.getSession(), cfg.getMatrix(), store, notifMgr, httpClient);
|
||||
invMgr = new InvitationManager(cfg.getInvite(), store, idStrategy, signMgr, fedDns, notifMgr);
|
||||
authMgr = new AuthManager(cfg, AuthProviders.get(), idStrategy, invMgr, clientDns, httpClient);
|
||||
dirMgr = new DirectoryManager(cfg.getDirectory(), clientDns, httpClient, DirectoryProviders.get());
|
||||
asHander = new AppSvcManager(cfg, store, pMgr, notifMgr, synapse);
|
||||
}
|
||||
|
||||
public MxisdConfig getConfig() {
|
||||
@@ -126,68 +117,56 @@ public class Mxisd {
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
public IRemoteIdentityServerFetcher getServerFetcher() {
|
||||
return srvFetcher;
|
||||
}
|
||||
|
||||
public KeyManager getKeyManager() {
|
||||
return keyMgr;
|
||||
}
|
||||
|
||||
public InvitationManager getInvitationManager() {
|
||||
return invMgr;
|
||||
}
|
||||
|
||||
public LookupStrategy getIdentity() {
|
||||
return idStrategy;
|
||||
}
|
||||
|
||||
public AuthManager getAuth() {
|
||||
return authMgr;
|
||||
}
|
||||
|
||||
public SessionMananger getSession() {
|
||||
return sessMgr;
|
||||
}
|
||||
|
||||
public DirectoryManager getDirectory() {
|
||||
return dirMgr;
|
||||
}
|
||||
|
||||
public ProfileManager getProfile() {
|
||||
return pMgr;
|
||||
}
|
||||
|
||||
public SignatureManager getSign() {
|
||||
return signMgr;
|
||||
}
|
||||
|
||||
public AppSvcManager getAs() {
|
||||
return asHander;
|
||||
}
|
||||
|
||||
public NotificationManager getNotif() {
|
||||
return notifMgr;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
build();
|
||||
|
||||
HttpHandler asNotFoundHandler = SaneHandler.around(new AsNotFoundHandler(asHander));
|
||||
HttpHandler asTxnHandler = SaneHandler.around(new AsTransactionHandler(asHander));
|
||||
HttpHandler storeInvHandler = SaneHandler.around(new StoreInviteHandler(cfg.getServer(), invMgr, keyMgr));
|
||||
HttpHandler sessValidateHandler = SaneHandler.around(new SessionValidateHandler(sessMgr, cfg.getServer(), cfg.getView()));
|
||||
|
||||
httpSrv = Undertow.builder().addHttpListener(cfg.getServer().getPort(), "0.0.0.0").setHandler(Handlers.routing()
|
||||
|
||||
// Status endpoints
|
||||
.get(StatusHandler.Path, SaneHandler.around(new StatusHandler()))
|
||||
|
||||
// Authentication endpoints
|
||||
.get(LoginHandler.Path, SaneHandler.around(new LoginGetHandler(authMgr, httpClient)))
|
||||
.post(LoginHandler.Path, SaneHandler.around(new LoginPostHandler(authMgr)))
|
||||
.post(RestAuthHandler.Path, SaneHandler.around(new RestAuthHandler(authMgr)))
|
||||
|
||||
// Directory endpoints
|
||||
.post(UserDirectorySearchHandler.Path, SaneHandler.around(new UserDirectorySearchHandler(dirMgr)))
|
||||
|
||||
// Key endpoints
|
||||
.get(KeyGetHandler.Path, SaneHandler.around(new KeyGetHandler(keyMgr)))
|
||||
.get(RegularKeyIsValidHandler.Path, SaneHandler.around(new RegularKeyIsValidHandler(keyMgr)))
|
||||
.get(EphemeralKeyIsValidHandler.Path, SaneHandler.around(new EphemeralKeyIsValidHandler()))
|
||||
|
||||
// Identity endpoints
|
||||
.get(HelloHandler.Path, new HelloHandler())
|
||||
.get(SingleLookupHandler.Path, new SingleLookupHandler(idStrategy, signMgr))
|
||||
.post(BulkLookupHandler.Path, new BulkLookupHandler(idStrategy))
|
||||
.post(StoreInviteHandler.Path, storeInvHandler)
|
||||
.post(SessionStartHandler.Path, SaneHandler.around(new SessionStartHandler(sessMgr)))
|
||||
.get(SessionValidateHandler.Path, sessValidateHandler)
|
||||
.post(SessionValidateHandler.Path, sessValidateHandler)
|
||||
.get(SessionTpidGetValidatedHandler.Path, SaneHandler.around(new SessionTpidGetValidatedHandler(sessMgr)))
|
||||
.post(SessionTpidBindHandler.Path, SaneHandler.around(new SessionTpidBindHandler(sessMgr, invMgr)))
|
||||
.get(RemoteIdentityAPIv1.SESSION_REQUEST_TOKEN, SaneHandler.around(new RemoteSessionStartHandler(sessMgr, cfg.getView())))
|
||||
.get(RemoteIdentityAPIv1.SESSION_CHECK, SaneHandler.around(new RemoteSessionCheckHandler(sessMgr, cfg.getView())))
|
||||
|
||||
// Profile endpoints
|
||||
.get(ProfileHandler.Path, SaneHandler.around(new ProfileHandler(pMgr)))
|
||||
.get(InternalProfileHandler.Path, SaneHandler.around(new InternalProfileHandler(pMgr)))
|
||||
|
||||
// Application Service endpoints
|
||||
.get("/_matrix/app/v1/users/**", asNotFoundHandler)
|
||||
.get("/users/**", asNotFoundHandler) // Legacy endpoint
|
||||
.get("/_matrix/app/v1/rooms/**", asNotFoundHandler)
|
||||
.get("/rooms/**", asNotFoundHandler) // Legacy endpoint
|
||||
.put(AsTransactionHandler.Path, asTxnHandler)
|
||||
.put("/transactions/{" + AsTransactionHandler.ID + "}", asTxnHandler) // Legacy endpoint
|
||||
|
||||
).build();
|
||||
|
||||
httpSrv.start();
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
httpSrv.stop();
|
||||
// no-op
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user