115 lines
5.5 KiB
Java
115 lines
5.5 KiB
Java
/*
|
|
* mxisd - Matrix Identity Server Daemon
|
|
* Copyright (C) 2018 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package io.kamax.mxisd;
|
|
|
|
import io.kamax.mxisd.config.MxisdConfig;
|
|
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.undertow.Handlers;
|
|
import io.undertow.Undertow;
|
|
import io.undertow.server.HttpHandler;
|
|
|
|
public class HttpMxisd {
|
|
|
|
// Core
|
|
private Mxisd m;
|
|
|
|
// I/O
|
|
private Undertow httpSrv;
|
|
|
|
public HttpMxisd(MxisdConfig cfg) {
|
|
m = new Mxisd(cfg);
|
|
}
|
|
|
|
public void start() {
|
|
m.start();
|
|
|
|
HttpHandler asNotFoundHandler = SaneHandler.around(new AsNotFoundHandler(m.getAs()));
|
|
HttpHandler asTxnHandler = SaneHandler.around(new AsTransactionHandler(m.getAs()));
|
|
HttpHandler storeInvHandler = SaneHandler.around(new StoreInviteHandler(m.getConfig().getServer(), m.getInvitationManager(), m.getKeyManager()));
|
|
HttpHandler sessValidateHandler = SaneHandler.around(new SessionValidateHandler(m.getSession(), m.getConfig().getServer(), m.getConfig().getView()));
|
|
|
|
httpSrv = Undertow.builder().addHttpListener(m.getConfig().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(m.getAuth(), m.getHttpClient())))
|
|
.post(LoginHandler.Path, SaneHandler.around(new LoginPostHandler(m.getAuth())))
|
|
.post(RestAuthHandler.Path, SaneHandler.around(new RestAuthHandler(m.getAuth())))
|
|
|
|
// Directory endpoints
|
|
.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()))
|
|
|
|
// Identity endpoints
|
|
.get(HelloHandler.Path, new HelloHandler())
|
|
.get(SingleLookupHandler.Path, new SingleLookupHandler(m.getIdentity(), m.getSign()))
|
|
.post(BulkLookupHandler.Path, new BulkLookupHandler(m.getIdentity()))
|
|
.post(StoreInviteHandler.Path, storeInvHandler)
|
|
.post(SessionStartHandler.Path, SaneHandler.around(new SessionStartHandler(m.getSession())))
|
|
.get(SessionValidateHandler.Path, sessValidateHandler)
|
|
.post(SessionValidateHandler.Path, sessValidateHandler)
|
|
.get(SessionTpidGetValidatedHandler.Path, SaneHandler.around(new SessionTpidGetValidatedHandler(m.getSession())))
|
|
.post(SessionTpidBindHandler.Path, SaneHandler.around(new SessionTpidBindHandler(m.getSession(), m.getInvitationManager())))
|
|
.get(RemoteIdentityAPIv1.SESSION_REQUEST_TOKEN, SaneHandler.around(new RemoteSessionStartHandler(m.getSession(), m.getConfig().getView())))
|
|
.get(RemoteIdentityAPIv1.SESSION_CHECK, SaneHandler.around(new RemoteSessionCheckHandler(m.getSession(), m.getConfig().getView())))
|
|
|
|
// Profile endpoints
|
|
.get(ProfileHandler.Path, SaneHandler.around(new ProfileHandler(m.getProfile())))
|
|
.get(InternalProfileHandler.Path, SaneHandler.around(new InternalProfileHandler(m.getProfile())))
|
|
|
|
// 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();
|
|
|
|
m.stop();
|
|
}
|
|
|
|
}
|