use of io.kamax.mxisd.invitation.ThreePidInvite in project mxisd by kamax-io.
the class InvitationController method store.
@RequestMapping(value = "/store-invite", method = POST)
String store(HttpServletRequest request, @RequestParam String sender, @RequestParam String medium, @RequestParam String address, @RequestParam("room_id") String roomId) {
Map<String, String> parameters = new HashMap<>();
for (String key : request.getParameterMap().keySet()) {
parameters.put(key, request.getParameter(key));
}
IThreePidInvite invite = new ThreePidInvite(new MatrixID(sender), medium, address, roomId, parameters);
IThreePidInviteReply reply = mgr.storeInvite(invite);
return gson.toJson(new ThreePidInviteReplyIO(reply, keyMgr.getPublicKeyBase64(keyMgr.getCurrentIndex()), srvCfg.getPublicUrl()));
}
use of io.kamax.mxisd.invitation.ThreePidInvite in project mxisd by kamax-io.
the class StoreInviteHandler method handleRequest.
@Override
public void handleRequest(HttpServerExchange exchange) {
String reqContentType = getContentType(exchange).orElse("application/octet-stream");
JsonObject invJson = new JsonObject();
if (StringUtils.startsWith(reqContentType, "application/json")) {
invJson = parseJsonObject(exchange);
} else // Backward compatibility for pre-r0.1.0 implementations
if (StringUtils.startsWith(reqContentType, "application/x-www-form-urlencoded")) {
String body = getBodyUtf8(exchange);
Map<String, Deque<String>> parms = QueryParameterUtils.parseQueryString(body, StandardCharsets.UTF_8.name());
for (Map.Entry<String, Deque<String>> entry : parms.entrySet()) {
if (entry.getValue().size() == 0) {
return;
}
if (entry.getValue().size() > 1) {
throw new BadRequestException("key " + entry.getKey() + " has more than one value");
}
invJson.addProperty(entry.getKey(), entry.getValue().peekFirst());
}
} else {
throw new BadRequestException("Unsupported Content-Type: " + reqContentType);
}
Type parmType = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> parameters = GsonUtil.get().fromJson(invJson, parmType);
StoreInviteRequest inv = GsonUtil.get().fromJson(invJson, StoreInviteRequest.class);
_MatrixID sender = MatrixID.asAcceptable(inv.getSender());
IThreePidInvite invite = new ThreePidInvite(sender, inv.getMedium(), inv.getAddress(), inv.getRoomId(), parameters);
IThreePidInviteReply reply = invMgr.storeInvite(invite);
// FIXME the key info must be set by the invitation manager in the reply object!
respondJson(exchange, new ThreePidInviteReplyIO(reply, keyMgr.getPublicKeyBase64(keyMgr.getServerSigningKey().getId()), cfg.getPublicUrl()));
}
use of io.kamax.mxisd.invitation.ThreePidInvite in project mxisd by kamax-io.
the class EmailNotificationTest method forThreepidInvite.
@Test
public void forThreepidInvite() throws MessagingException, IOException {
String registerUrl = "https://" + RandomStringUtils.randomAlphanumeric(20) + ".example.org/register";
gm.setUser(user, user);
_MatrixID sender = MatrixID.asAcceptable(user, domain);
ThreePidInvite inv = new ThreePidInvite(sender, ThreePidMedium.Email.getId(), target, "!rid:" + domain);
inv.getProperties().put(PlaceholderNotificationGenerator.RegisterUrl, registerUrl);
m.getNotif().sendForReply(new ThreePidInviteReply("a", inv, "b", "c", new ArrayList<>()));
assertEquals(1, gm.getReceivedMessages().length);
MimeMessage msg = gm.getReceivedMessages()[0];
assertEquals(1, msg.getFrom().length);
assertEquals(senderNameEncoded, msg.getFrom()[0].toString());
assertEquals(1, msg.getRecipients(Message.RecipientType.TO).length);
// We just check on the text/plain one. HTML is multipart and it's difficult so we skip
MimeMultipart content = (MimeMultipart) msg.getContent();
MimeBodyPart mbp = (MimeBodyPart) content.getBodyPart(0);
String mbpContent = mbp.getContent().toString();
assertTrue(mbpContent.contains(registerUrl));
}
Aggregations