Compare commits

...

1 Commits
2.1.0 ... 2.1.1

Author SHA1 Message Date
Anatoly Sablin
a112a5e57c Improve request verification. Allow unbind only for configured matrix domain. 2019-08-07 21:47:10 +03:00

View File

@@ -218,8 +218,15 @@ public class SessionManager {
throw new BadRequestException("Missing required 3PID"); throw new BadRequestException("Missing required 3PID");
} }
// We only allow unbind for the domain we manage, mirroring bind
final CharSequence domain = cfg.getMatrix().getDomain();
if (!StringUtils.equalsIgnoreCase(domain, mxid.getDomain())) {
throw new NotAllowedException("Only Matrix IDs from domain " + domain + " can be unbound");
}
log.info("Request was authorized.");
if (StringUtils.isNotBlank(sid) && StringUtils.isNotBlank(secret)) { if (StringUtils.isNotBlank(sid) && StringUtils.isNotBlank(secret)) {
checkSession(sid, secret, tpid, mxid); checkSession(sid, secret, tpid);
} else if (StringUtils.isNotBlank(auth)) { } else if (StringUtils.isNotBlank(auth)) {
checkAuthorization(auth, reqData); checkAuthorization(auth, reqData);
} else { } else {
@@ -269,6 +276,10 @@ public class SessionManager {
throw new BadRequestException("Missing required header parameters"); throw new BadRequestException("Missing required header parameters");
} }
if (!cfg.getMatrix().getDomain().equalsIgnoreCase(origin)) {
throw new NotAllowedException("Only Matrix IDs from domain " + origin + " can be unbound");
}
JsonObject jsonObject = new JsonObject(); JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("method", "POST"); jsonObject.addProperty("method", "POST");
jsonObject.addProperty("uri", "/_matrix/identity/api/v1/3pid/unbind"); jsonObject.addProperty("uri", "/_matrix/identity/api/v1/3pid/unbind");
@@ -340,7 +351,7 @@ public class SessionManager {
log.info("Request was authorized."); log.info("Request was authorized.");
} }
private void checkSession(String sid, String secret, ThreePid tpid, _MatrixID mxid) { private void checkSession(String sid, String secret, ThreePid tpid) {
// We ensure the session was validated // We ensure the session was validated
ThreePidSession session = getSessionIfValidated(sid, secret); ThreePidSession session = getSessionIfValidated(sid, secret);
@@ -348,13 +359,5 @@ public class SessionManager {
if (!session.getThreePid().equals(tpid)) { if (!session.getThreePid().equals(tpid)) {
throw new BadRequestException("3PID to unbind does not match the one from the validated session"); throw new BadRequestException("3PID to unbind does not match the one from the validated session");
} }
// We only allow unbind for the domain we manage, mirroring bind
final CharSequence domain = cfg.getMatrix().getDomain();
if (!StringUtils.equalsIgnoreCase(domain, mxid.getDomain())) {
throw new NotAllowedException("Only Matrix IDs from domain " + domain + " can be unbound");
}
log.info("Request was authorized.");
} }
} }