Search in sources :

Example 1 with BindRequest

use of io.kamax.mxisd.http.io.identity.BindRequest in project mxisd by kamax-io.

the class SessionTpidBindHandler method handleRequest.

@Override
public void handleRequest(HttpServerExchange exchange) {
    BindRequest bindReq = new BindRequest();
    bindReq.setSid(getQueryParameter(exchange, BindRequest.Keys.SessionID));
    bindReq.setSecret(getQueryParameter(exchange, BindRequest.Keys.Secret));
    bindReq.setUserId(getQueryParameter(exchange, BindRequest.Keys.UserID));
    String reqContentType = getContentType(exchange).orElse("application/octet-stream");
    if (StringUtils.equals("application/x-www-form-urlencoded", reqContentType)) {
        String body = getBodyUtf8(exchange);
        Map<String, Deque<String>> parms = QueryParameterUtils.parseQueryString(body, StandardCharsets.UTF_8.name());
        bindReq.setSid(getQueryParameter(parms, BindRequest.Keys.SessionID));
        bindReq.setSecret(getQueryParameter(parms, BindRequest.Keys.Secret));
        bindReq.setUserId(getQueryParameter(parms, BindRequest.Keys.UserID));
    } else if (StringUtils.equals("application/json", reqContentType)) {
        bindReq = parseJsonTo(exchange, BindRequest.class);
    } else {
        log.warn("Unknown encoding in 3PID session bind: {}", reqContentType);
        log.warn("The request will most likely fail");
    }
    try {
        SingleLookupReply lookup = mgr.bind(bindReq.getSid(), bindReq.getSecret(), bindReq.getUserId());
        JsonObject response = signMgr.signMessageGson(GsonUtil.makeObj(new SingeLookupReplyJson(lookup)));
        respond(exchange, response);
    } catch (BadRequestException e) {
        log.info("requested session was not validated");
        JsonObject obj = new JsonObject();
        obj.addProperty("errcode", "M_SESSION_NOT_VALIDATED");
        obj.addProperty("error", e.getMessage());
        respond(exchange, HttpStatus.SC_BAD_REQUEST, obj);
    } finally {
        // If a user registers, there is no standard login event. Instead, this is the only way to trigger
        // resolution at an appropriate time. Meh at synapse/Riot!
        invMgr.lookupMappingsForInvites();
    }
}
Also used : SingleLookupReply(io.kamax.mxisd.lookup.SingleLookupReply) SingeLookupReplyJson(io.kamax.mxisd.http.io.identity.SingeLookupReplyJson) BindRequest(io.kamax.mxisd.http.io.identity.BindRequest) JsonObject(com.google.gson.JsonObject) BadRequestException(io.kamax.mxisd.exception.BadRequestException) Deque(java.util.Deque)

Aggregations

JsonObject (com.google.gson.JsonObject)1 BadRequestException (io.kamax.mxisd.exception.BadRequestException)1 BindRequest (io.kamax.mxisd.http.io.identity.BindRequest)1 SingeLookupReplyJson (io.kamax.mxisd.http.io.identity.SingeLookupReplyJson)1 SingleLookupReply (io.kamax.mxisd.lookup.SingleLookupReply)1 Deque (java.util.Deque)1