Example usage for io.vertx.core.http HttpServerRequest setExpectMultipart

List of usage examples for io.vertx.core.http HttpServerRequest setExpectMultipart

Introduction

In this page you can find the example usage for io.vertx.core.http HttpServerRequest setExpectMultipart.

Prototype

@Fluent
HttpServerRequest setExpectMultipart(boolean expect);

Source Link

Document

Call this with true if you are expecting a multi-part body to be submitted in the request.

Usage

From source file:fr.wseduc.rack.controllers.RackController.java

License:Open Source License

/**
 * Post a new document to other people's rack folder.
 * @param request Client request containing a list of user ids belonging to the receivers and the file.
 *///  w  ww .j av  a 2s.  c  om
@Post("")
@SecuredAction(send)
public void postRack(final HttpServerRequest request) {
    UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() {
        @Override
        public void handle(final UserInfos userInfos) {

            if (userInfos == null) {
                badRequest(request);
                return;
            }

            request.setExpectMultipart(true);
            final Buffer fileBuffer = Buffer.buffer();
            final JsonObject metadata = new JsonObject();

            /* Upload file */
            request.uploadHandler(getUploadHandler(fileBuffer, metadata, request));

            /* After upload */
            request.endHandler(new Handler<Void>() {
                @Override
                public void handle(Void v) {
                    String users = request.formAttributes().get("users");
                    if (users == null) {
                        badRequest(request);
                        return;
                    }

                    String[] userIds = users.split(",");

                    final AtomicInteger countdown = new AtomicInteger(userIds.length);
                    final AtomicInteger success = new AtomicInteger(0);
                    final AtomicInteger failure = new AtomicInteger(0);

                    /* Final handler - called after each attempt */
                    final Handler<Boolean> finalHandler = new Handler<Boolean>() {
                        @Override
                        public void handle(Boolean event) {
                            if (event == null || !event)
                                failure.addAndGet(1);
                            else
                                success.addAndGet(1);
                            if (countdown.decrementAndGet() == 0) {
                                JsonObject result = new JsonObject();
                                result.put("success", success.get());
                                result.put("failure", failure.get());
                                renderJson(request, result);
                            }
                        }
                    };

                    for (final String to : userIds) {
                        /* Query user and check existence */
                        String query = "MATCH (n:User) " + "WHERE n.id = {id} "
                                + "RETURN count(n) as nb, n.displayName as username";
                        Map<String, Object> params = new HashMap<>();
                        params.put("id", to);

                        Handler<Message<JsonObject>> existenceHandler = new Handler<Message<JsonObject>>() {
                            @Override
                            public void handle(Message<JsonObject> res) {
                                JsonArray result = res.body().getJsonArray("result");

                                if (!"ok".equals(res.body().getString("status")) || 1 != result.size()
                                        || 1 != result.getJsonObject(0).getInteger("nb")) {
                                    finalHandler.handle(false);
                                    return;
                                }

                                /* Pre write rack document fields */
                                final JsonObject doc = new JsonObject();
                                doc.put("to", to);
                                doc.put("toName", result.getJsonObject(0).getString("username"));
                                doc.put("from", userInfos.getUserId());
                                doc.put("fromName", userInfos.getUsername());
                                String now = dateFormat.format(new Date());
                                doc.put("sent", now);

                                /* Rack collection saving */
                                final Handler<JsonObject> rackSaveHandler = new Handler<JsonObject>() {
                                    @Override
                                    public void handle(JsonObject uploaded) {
                                        if (uploaded == null || !"ok".equals(uploaded.getString("status"))) {
                                            finalHandler.handle(false);
                                        } else {
                                            addAfterUpload(uploaded.put("metadata", metadata), doc,
                                                    request.params().get("name"),
                                                    request.params().get("application"),
                                                    request.params().getAll("thumbnail"),
                                                    new Handler<Message<JsonObject>>() {
                                                        @Override
                                                        public void handle(Message<JsonObject> res) {
                                                            if ("ok".equals(res.body().getString("status"))) {
                                                                JsonObject params = new JsonObject()
                                                                        .put("uri",
                                                                                "/userbook/annuaire#"
                                                                                        + doc.getString("from"))
                                                                        .put("resourceUri", pathPrefix)
                                                                        .put("username",
                                                                                doc.getString("fromName"))
                                                                        .put("documentName",
                                                                                doc.getString("name"));
                                                                List<String> receivers = new ArrayList<>();
                                                                receivers.add(doc.getString("to"));

                                                                JsonObject pushNotif = new JsonObject()
                                                                        .put("title",
                                                                                "rack.push.notif.rack-post")
                                                                        .put("body",
                                                                                I18n.getInstance().translate(
                                                                                        "rack.push.notif.rack-post.body",
                                                                                        getHost(request),
                                                                                        I18n.acceptLanguage(
                                                                                                request),
                                                                                        doc.getString(
                                                                                                "fromName"),
                                                                                        doc.getString("name")));
                                                                params.put("pushNotif", pushNotif);

                                                                timelineHelper.notifyTimeline(request,
                                                                        "rack.rack-post", userInfos, receivers,
                                                                        userInfos.getUserId()
                                                                                + System.currentTimeMillis()
                                                                                + "postrack",
                                                                        null, params, true);
                                                                finalHandler.handle(true);
                                                            } else {
                                                                finalHandler.handle(false);
                                                            }
                                                        }
                                                    });
                                        }
                                    }
                                };

                                /* Get user quota & check */
                                getUserQuota(to, new Handler<JsonObject>() {
                                    @Override
                                    public void handle(JsonObject j) {
                                        if (j == null || "error".equals(j.getString("status"))) {
                                            finalHandler.handle(false);
                                            return;
                                        }

                                        long emptySize = 0l;
                                        long quota = j.getLong("quota", 0l);
                                        long storage = j.getLong("storage", 0l);
                                        emptySize = quota - storage;
                                        if (emptySize < metadata.getLong("size", 0l)) {
                                            finalHandler.handle(false);
                                            return;
                                        }
                                        //Save file
                                        RackController.this.storage.writeBuffer(fileBuffer,
                                                metadata.getString("content-type"), metadata.getString("name"),
                                                rackSaveHandler);
                                    }
                                });

                            }
                        };
                        Neo4j.getInstance().execute(query, params, existenceHandler);
                    }
                }
            });
        }
    });
}

From source file:io.advantageous.qbit.vertx.http.server.HttpServerVertx.java

License:Apache License

private void handleRequestWithBody(HttpServerRequest request) {
    final String contentType = request.headers().get("Content-Type");

    if (HttpContentTypes.isFormContentType(contentType)) {
        request.setExpectMultipart(true);
    }//w  w w .j a v  a 2  s. c  o  m

    final Buffer[] bufferHolder = new Buffer[1];
    final HttpRequest bodyHttpRequest = vertxUtils.createRequest(request, () -> bufferHolder[0],
            new HashMap<>(), simpleHttpServer.getDecorators(), simpleHttpServer.getHttpResponseCreator());
    if (simpleHttpServer.getShouldContinueReadingRequestBody().test(bodyHttpRequest)) {
        request.bodyHandler((buffer) -> {
            bufferHolder[0] = buffer;
            simpleHttpServer.handleRequest(bodyHttpRequest);
        });
    } else {
        logger.info("Request body rejected {} {}", request.method(), request.absoluteURI());
    }
}

From source file:org.entcore.auth.controllers.AuthController.java

License:Open Source License

@Post("/oauth2/token")
public void token(final HttpServerRequest request) {
    request.setExpectMultipart(true);
    request.endHandler(new io.vertx.core.Handler<Void>() {

        @Override/*from   w  w  w .j  a v  a  2s.  co m*/
        public void handle(Void v) {
            Request req = new HttpServerRequestAdapter(request);
            token.handleRequest(req, new Handler<Response>() {

                @Override
                public void handle(Response response) {
                    renderJson(request, new JsonObject(response.getBody()), response.getCode());
                }
            });
        }
    });
}

From source file:org.entcore.auth.controllers.AuthController.java

License:Open Source License

@Post("/login")
public void loginSubmit(final HttpServerRequest request) {
    request.setExpectMultipart(true);
    request.endHandler(new io.vertx.core.Handler<Void>() {
        @Override/*  w  w w.j a va  2s  .  com*/
        public void handle(Void v) {
            String c = request.formAttributes().get("callBack");
            final StringBuilder callBack = new StringBuilder();
            if (c != null && !c.trim().isEmpty()) {
                try {
                    callBack.append(URLDecoder.decode(c, "UTF-8"));
                } catch (UnsupportedEncodingException ex) {
                    log.error(ex.getMessage(), ex);
                    callBack.append(config.getJsonObject("authenticationServer").getString("loginCallback"));
                }
            } else {
                callBack.append(config.getJsonObject("authenticationServer").getString("loginCallback"));
            }
            DataHandler data = oauthDataFactory.create(new HttpServerRequestAdapter(request));
            final String login = request.formAttributes().get("email");
            final String password = request.formAttributes().get("password");
            data.getUserId(login, password, new Handler<String>() {

                @Override
                public void handle(final String userId) {
                    final String c = callBack.toString();
                    if (userId != null && !userId.trim().isEmpty()) {
                        handleGetUserId(login, userId, request, c);
                    } else {
                        // try activation with login
                        userAuthAccount.matchActivationCode(login, password,
                                new io.vertx.core.Handler<Boolean>() {
                                    @Override
                                    public void handle(Boolean passIsActivationCode) {
                                        if (passIsActivationCode) {
                                            handleMatchActivationCode(login, password, request);
                                        } else {
                                            // try activation with loginAlias
                                            userAuthAccount.matchActivationCodeByLoginAlias(login, password,
                                                    new io.vertx.core.Handler<Boolean>() {
                                                        @Override
                                                        public void handle(Boolean passIsActivationCode) {
                                                            if (passIsActivationCode) {
                                                                handleMatchActivationCode(login, password,
                                                                        request);
                                                            } else {
                                                                // try reset with login
                                                                userAuthAccount.matchResetCode(login, password,
                                                                        new io.vertx.core.Handler<Boolean>() {
                                                                            @Override
                                                                            public void handle(
                                                                                    Boolean passIsResetCode) {
                                                                                if (passIsResetCode) {
                                                                                    handleMatchResetCode(login,
                                                                                            password, request);
                                                                                } else {
                                                                                    // try reset with loginAlias
                                                                                    userAuthAccount
                                                                                            .matchResetCodeByLoginAlias(
                                                                                                    login,
                                                                                                    password,
                                                                                                    new io.vertx.core.Handler<Boolean>() {
                                                                                                        @Override
                                                                                                        public void handle(
                                                                                                                Boolean passIsResetCode) {
                                                                                                            if (passIsResetCode) {
                                                                                                                handleMatchResetCode(
                                                                                                                        login,
                                                                                                                        password,
                                                                                                                        request);
                                                                                                            } else {
                                                                                                                trace.info(
                                                                                                                        "Erreur de connexion pour l'utilisateur "
                                                                                                                                + login);
                                                                                                                loginResult(
                                                                                                                        request,
                                                                                                                        "auth.error.authenticationFailed",
                                                                                                                        c);
                                                                                                            }
                                                                                                        }
                                                                                                    });
                                                                                }
                                                                            }
                                                                        });
                                                            }
                                                        }
                                                    });
                                        }
                                    }
                                });

                    }
                }
            });

        }
    });
}

From source file:org.entcore.auth.controllers.AuthController.java

License:Open Source License

@Post("/activation")
public void activeAccountSubmit(final HttpServerRequest request) {
    request.setExpectMultipart(true);
    request.endHandler(new io.vertx.core.Handler<Void>() {

        @Override/*from   w  w w . j av  a 2 s.co m*/
        public void handle(Void v) {
            final String login = request.formAttributes().get("login");
            final String activationCode = request.formAttributes().get("activationCode");
            final String email = request.formAttributes().get("mail");
            final String phone = request.formAttributes().get("phone");
            final String theme = request.formAttributes().get("theme");
            String password = request.formAttributes().get("password");
            String confirmPassword = request.formAttributes().get("confirmPassword");
            if (config.getBoolean("cgu", true) && !"true".equals(request.formAttributes().get("acceptCGU"))) {
                trace.info("Invalid cgu " + login);
                JsonObject error = new JsonObject().put("error", new JsonObject().put("message", "invalid.cgu"))
                        .put("cgu", true);
                if (activationCode != null) {
                    error.put("activationCode", activationCode);
                }
                if (login != null) {
                    error.put("login", login);
                }
                renderJson(request, error);
            } else if (login == null || activationCode == null || password == null || login.trim().isEmpty()
                    || activationCode.trim().isEmpty() || password.trim().isEmpty()
                    || !password.equals(confirmPassword) || !passwordPattern.matcher(password).matches()
                    || (config.getJsonObject("mandatory", new JsonObject()).getBoolean("mail", false)
                            && (email == null || email.trim().isEmpty() || invalidEmails.containsKey(email)))
                    || (config.getJsonObject("mandatory", new JsonObject()).getBoolean("phone", false)
                            && (phone == null || phone.trim().isEmpty()))
                    || (email != null && !email.trim().isEmpty() && !StringValidation.isEmail(email))
                    || (phone != null && !phone.trim().isEmpty() && !StringValidation.isPhone(phone))) {
                trace.info("Echec de l'activation du compte utilisateur " + login);
                JsonObject error = new JsonObject().put("error",
                        new JsonObject().put("message",
                                I18n.getInstance().translate("auth.activation.invalid.argument",
                                        getHost(request), I18n.acceptLanguage(request))));
                if (activationCode != null) {
                    error.put("activationCode", activationCode);
                }
                if (login != null) {
                    error.put("login", login);
                }
                if (config.getBoolean("cgu", true)) {
                    error.put("cgu", true);
                }
                renderJson(request, error);
            } else {
                userAuthAccount.activateAccount(login, activationCode, password, email, phone, theme, request,
                        new io.vertx.core.Handler<Either<String, String>>() {

                            @Override
                            public void handle(Either<String, String> activated) {
                                if (activated.isRight() && activated.right().getValue() != null) {
                                    handleActivation(login, request, activated);
                                } else {
                                    // if failed because duplicated user
                                    if (activated.isLeft() && "activation.error.duplicated"
                                            .equals(activated.left().getValue())) {
                                        trace.info("Echec de l'activation : utilisateur " + login
                                                + " en doublon.");
                                        JsonObject error = new JsonObject().put("error",
                                                new JsonObject().put("message",
                                                        I18n.getInstance().translate(
                                                                activated.left().getValue(), getHost(request),
                                                                I18n.acceptLanguage(request))));
                                        error.put("activationCode", activationCode);
                                        renderJson(request, error);
                                    } else {
                                        // else try activation with loginAlias
                                        userAuthAccount.activateAccountByLoginAlias(login, activationCode,
                                                password, email, phone, theme, request,
                                                new io.vertx.core.Handler<Either<String, String>>() {
                                                    @Override
                                                    public void handle(Either<String, String> activated) {
                                                        if (activated.isRight()
                                                                && activated.right().getValue() != null) {
                                                            handleActivation(login, request, activated);
                                                        } else {
                                                            trace.info(
                                                                    "Echec de l'activation : compte utilisateur "
                                                                            + login
                                                                            + " introuvable ou dj activ.");
                                                            JsonObject error = new JsonObject().put("error",
                                                                    new JsonObject().put("message",
                                                                            I18n.getInstance().translate(
                                                                                    activated.left().getValue(),
                                                                                    getHost(request),
                                                                                    I18n.acceptLanguage(
                                                                                            request))));
                                                            error.put("activationCode", activationCode);
                                                            renderJson(request, error);
                                                        }
                                                    }
                                                });
                                    }
                                }
                            }
                        });
            }
        }
    });
}

From source file:org.entcore.auth.controllers.AuthController.java

License:Open Source License

@Post("/reset")
public void resetPasswordSubmit(final HttpServerRequest request) {
    request.setExpectMultipart(true);
    request.endHandler(new io.vertx.core.Handler<Void>() {

        @Override//from ww w.j a v a2  s .c om
        public void handle(Void v) {
            final String login = request.formAttributes().get("login");
            final String resetCode = request.formAttributes().get("resetCode");
            final String oldPassword = request.formAttributes().get("oldPassword");
            final String password = request.formAttributes().get("password");
            String confirmPassword = request.formAttributes().get("confirmPassword");
            final String callback = Utils.getOrElse(request.formAttributes().get("callback"), "/auth/login",
                    false);
            if (login == null
                    || ((resetCode == null || resetCode.trim().isEmpty())
                            && (oldPassword == null || oldPassword.trim().isEmpty()))
                    || password == null || login.trim().isEmpty() || password.trim().isEmpty()
                    || !password.equals(confirmPassword) || !passwordPattern.matcher(password).matches()) {
                trace.info(
                        "Erreur lors de la rinitialisation " + "du mot de passe de l'utilisateur " + login);
                JsonObject error = new JsonObject().put("error",
                        new JsonObject().put("message",
                                I18n.getInstance().translate("auth.reset.invalid.argument", getHost(request),
                                        I18n.acceptLanguage(request))));
                if (resetCode != null) {
                    error.put("resetCode", resetCode);
                }
                renderJson(request, error);
            } else {
                final io.vertx.core.Handler<Boolean> resultHandler = new io.vertx.core.Handler<Boolean>() {

                    @Override
                    public void handle(Boolean reseted) {
                        if (Boolean.TRUE.equals(reseted)) {
                            trace.info("Rinitialisation russie du mot de passe de l'utilisateur " + login);
                            redirect(request, callback);
                        } else {
                            trace.info("Erreur lors de la rinitialisation "
                                    + "du mot de passe de l'utilisateur " + login);
                            error(request, resetCode);
                        }
                    }
                };
                if (resetCode != null && !resetCode.trim().isEmpty()) {
                    userAuthAccount.resetPassword(login, resetCode, password, resultHandler);
                } else {
                    DataHandler data = oauthDataFactory.create(new HttpServerRequestAdapter(request));
                    data.getUserId(login, oldPassword, new Handler<String>() {

                        @Override
                        public void handle(String userId) {
                            if (userId != null && !userId.trim().isEmpty()) {
                                userAuthAccount.changePassword(login, password, resultHandler);
                            } else {
                                error(request, null);
                            }
                        }
                    });
                }
            }
        }

        private void error(final HttpServerRequest request, final String resetCode) {
            JsonObject error = new JsonObject().put("error", new JsonObject().put("message", I18n.getInstance()
                    .translate("reset.error", getHost(request), I18n.acceptLanguage(request))));
            if (resetCode != null) {
                error.put("resetCode", resetCode);
            }
            renderJson(request, error);
        }
    });
}

From source file:org.entcore.auth.controllers.OpenIdConnectController.java

License:Open Source License

@Post("/openid/mappingUser")
public void mappingUser(final HttpServerRequest request) {
    final OpenIdConnectServiceProvider openIdConnectServiceProvider = openIdConnectServiceProviderFactory
            .serviceProvider(request);/*from  w w  w. j a  v  a  2  s .  c  o  m*/
    if (openIdConnectServiceProvider == null)
        return;
    if (!subMapping) {
        forbidden(request, "unauthorized.sub.mapping");
        return;
    }
    request.setExpectMultipart(true);
    request.endHandler(new Handler<Void>() {
        @Override
        public void handle(Void v) {
            final String login = request.formAttributes().get("login");
            final String password = request.formAttributes().get("password");
            final String payload = request.formAttributes().get("payload");
            final String key = request.formAttributes().get("key");
            try {
                if (isEmpty(login) || isEmpty(password) || isEmpty(payload) || isEmpty(key)
                        || !key.equals(HmacSha1.sign(payload, signKey))) {
                    badRequest(request, "invalid.attribute");
                    return;
                }
                final JsonObject p = new JsonObject(payload);
                openIdConnectServiceProvider.mappingUser(login, password, p,
                        new Handler<Either<String, Object>>() {
                            @Override
                            public void handle(Either<String, Object> event) {
                                if (event.isRight()) {
                                    authenticate((JsonObject) event.right().getValue(), "_",
                                            p.getString("id_token_hint"), request);
                                } else {
                                    forbidden(request, "invalid.sub.mapping");
                                }
                            }
                        });
            } catch (Exception e) {
                log.error("Error mapping OpenId Connect user.", e);
                badRequest(request, "invalid.attribute");
            }
        }
    });
}

From source file:org.entcore.auth.controllers.SamlController.java

License:Open Source License

@Post("/saml/post/sso/")
public void ssoredirectPost(final HttpServerRequest request) {
    log.info("ssoredirect POST called");
    request.setExpectMultipart(true);
    request.pause();//from   w ww  . j  a v a  2 s .c  om
    request.endHandler(new Handler<Void>() {
        @Override
        public void handle(Void v) {
            ssoRedirect(request.formAttributes().get("SAMLRequest"), request);
        }
    });
    request.resume();

}

From source file:org.entcore.auth.controllers.SamlController.java

License:Open Source License

@Post("/saml/selectUser")
public void selectUser(final HttpServerRequest request) {
    request.setExpectMultipart(true);
    request.endHandler(new Handler<Void>() {
        @Override//from  w w  w .j a v a  2  s. c om
        public void handle(Void v) {
            final JsonObject j = new JsonObject();
            for (String attr : request.formAttributes().names()) {
                if (isNotEmpty(request.formAttributes().get(attr))) {
                    j.put(attr, request.formAttributes().get(attr));
                }
            }
            final String nameId = j.getString("nameId", "").replaceAll("\\r", "");
            final String sessionIndex = j.getString("sessionIndex");
            try {
                if (j.getString("key", "").equals(HmacSha1
                        .sign(sessionIndex + nameId + j.getString("login") + j.getString("id"), signKey))) {
                    authenticate(j, sessionIndex, nameId, request);
                } else {
                    log.error("Invalid signature for federated user.");
                    redirect(request, LOGIN_PAGE);
                }
            } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) {
                log.error("Error validating signature of federated user.", e);
                redirect(request, LOGIN_PAGE);
            }
        }
    });
}

From source file:org.entcore.auth.controllers.SamlController.java

License:Open Source License

private void getSamlResponse(final HttpServerRequest request, final Handler<String> handler) {
    if (log.isDebugEnabled()) {
        log.debug("getSamlResponse");
    }/*  w  ww . java2  s.co  m*/
    request.setExpectMultipart(true);
    request.endHandler(new Handler<Void>() {
        @Override
        public void handle(Void v) {
            if (samlWayfParams != null) {
                final String state = CookieHelper.getInstance().getSigned("relaystate", request);
                if (isEmpty(state) || (!state.equals(request.formAttributes().get("RelayState"))
                        && !state.equals(SamlUtils.SIMPLE_RS))) {
                    forbidden(request, "invalid_state");
                    return;
                }
            }
            String samlResponse = request.formAttributes().get("SAMLResponse");
            log.debug("samlResponse=" + samlResponse);
            if (samlResponse != null && !samlResponse.trim().isEmpty()) {
                handler.handle(new String(Base64.getDecoder().decode(samlResponse)));
            } else {
                badRequest(request); // TODO replace by error page
            }
        }
    });
}