@Path("/listen") @GET @ApiImplicitParams({ @ApiImplicitParam(name = "project", dataType = "string", paramType = "query"), }) @ApiOperation(value = "Listen all mailboxes", consumes = "text/event-stream", produces = "text/event-stream", authorizations = @Authorization(value = "read_key") ) @IgnoreApi public void listenMails(RakamHttpRequest request) { RakamHttpRequest.StreamResponse response = request.streamResponse(); List<String> apiKey = request.params().get("api_key"); if (apiKey == null || apiKey.isEmpty()) { response.send("result", encode(HttpServer.errorMessage("api_key query parameter is required", HttpResponseStatus.BAD_REQUEST))).end(); return; } List<String> api_key = request.params().get("read_key"); String project = apiKeyService.getProjectOfApiKey(api_key.get(0), ApiKeyService.AccessKeyType.READ_KEY); UserMailboxStorage.MessageListener update = storage.listenAllUsers(project, data -> response.send("update", data.serialize())); response.listenClose(() -> update.shutdown()); }
response.send("result", encode(jsonObject() .put("success", false) .put("error", "Not running"))).end(); return; .put("error", ex.getCause() instanceof RakamException ? ex.getCause().getMessage() : "Internal error"))).end(); } else if (result.isFailed()) { if (!response.isClosed()) { .putPOJO("error", result.getError()) .putPOJO("properties", result.getProperties()) )).end(); } else { List<? extends SchemaField> metadata = result.getMetadata(); .putPOJO("result", result.getResult()) .putPOJO("metadata", metadata)); response.send("result", encode).end();
data = request.params().get("data"); } catch (Exception e) { response.send("result", encode(errorMessage("enable to parse data parameter: " + e.getMessage(), BAD_REQUEST))).end(); return; response.send("result", encode(errorMessage("data query parameter is required", BAD_REQUEST))).end(); return; query = JsonHelper.readSafe(data.get(0), clazz); } catch (Exception e) { response.send("result", encode(errorMessage("JSON couldn't parsed: " + e.getMessage(), BAD_REQUEST))).end(); return; String message = keyType.getKey() + " query parameter is required"; LogUtil.logException(request, new RakamException(message, BAD_REQUEST)); response.send("result", encode(errorMessage(message, BAD_REQUEST))).end(); return; } catch (RakamException e) { if (e.getStatusCode() == FORBIDDEN) { response.send("result", encode(errorMessage(e.getMessage(), FORBIDDEN))).end(); } else { response.send("result", encode(errorMessage(e.getMessage(), e.getStatusCode()))).end(); } catch (RakamException e) { LogUtil.logException(request, e); response.send("result", encode(errorMessage("Couldn't execute query: " + e.getMessage(), BAD_REQUEST))).end(); return; } catch (Exception e) {
@Override public void end() { response.end(); } }