Example usage for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY

List of usage examples for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY

Introduction

In this page you can find the example usage for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY.

Prototype

HttpResponseStatus MOVED_PERMANENTLY

To view the source code for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY.

Click Source Link

Document

301 Moved Permanently

Usage

From source file:com.bay1ts.bay.core.Response.java

License:Apache License

/**
 * Trigger a browser redirect//from ww w.j  a  va2s  .  com
 *
 * @param location Where to redirect
 */
public void redirect(String location) {
    this.isRedirected = true;
    //        if (LOG.isDebugEnabled()) {
    //            LOG.debug("Redirecting ({} {} to {}", "Found", HttpServletResponse.SC_FOUND, location);
    //        }
    //        try {
    response.headers().set("LOCATION", location);
    response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY);
    //// TODO: 2016/10/12 
    //        } catch (IOException ioException) {
    //            LOG.warn("Redirect failure", ioException);
    //        }
}

From source file:io.knotx.knot.action.ActionKnotProxyImpl.java

License:Apache License

private KnotContext redirectKnotResponse(KnotContext knotContext, FormEntity form,
        ClientResponse clientResponse, String redirectLocation) {
    LOGGER.trace("Request redirected to [{}]", redirectLocation);
    knotContext.getClientResponse().setStatusCode(HttpResponseStatus.MOVED_PERMANENTLY.code());
    MultiMap headers = MultiMap.caseInsensitiveMultiMap();
    headers.addAll(getFilteredHeaders(clientResponse.getHeaders(), form.adapter().getAllowedResponseHeaders()));
    headers.add(HttpHeaders.LOCATION.toString(), redirectLocation);

    knotContext.getClientResponse().setHeaders(headers);
    knotContext.clearFragments();/*from w  ww  .jav a 2  s . co m*/
    return knotContext;
}

From source file:io.knotx.knot.action.ActionKnotProxyVerticleTest.java

License:Apache License

@Test
@KnotxConfiguration("knotx-test.json")
public void callPostWithTwoActionFragments_expectResponseOkWithTransitionStep2(TestContext context)
        throws Exception {
    createMockAdapter("address-redirect", "", "step2");
    KnotContext knotContext = createKnotContext("fragment_form_redirect_in.txt", "fragment_form_self_in.txt");
    knotContext.getClientRequest().setMethod(HttpMethod.POST).setFormAttributes(
            MultiMap.caseInsensitiveMultiMap().add(HIDDEN_INPUT_TAG_NAME, FRAGMENT_REDIRECT_IDENTIFIER));

    callActionKnotWithAssertions(context, knotContext, clientResponse -> {
        context.assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(),
                clientResponse.getClientResponse().getStatusCode());
        context.assertEquals("/content/form/step2.html",
                clientResponse.getClientResponse().getHeaders().get("Location"));
        context.assertFalse(clientResponse.getTransition() != null);
        context.assertFalse(clientResponse.getFragments() != null);
    }, error -> context.fail(error.getMessage()));
}

From source file:io.knotx.server.KnotxServerRoutingTest.java

License:Apache License

@Test
@KnotxConfiguration("test-server.json")
public void whenRequestingPostGlobalPathAndActionDoRedirect_expectRedirectResponse(TestContext context) {
    Async async = context.async();//  w  ww .  j  a  v a 2  s  .  c o m

    createPassThroughKnot("test-splitter");
    createPassThroughKnot("test-assembler");
    createSimpleFailingKnot("A-post-engine", HttpResponseStatus.MOVED_PERMANENTLY.code(),
            MultiMap.caseInsensitiveMultiMap().add("location", "/content/failed.html"));

    testPostRequest("/content/local/simple.html", resp -> {
        context.assertEquals(resp.statusCode(), HttpResponseStatus.MOVED_PERMANENTLY.code());
        context.assertEquals(resp.getHeader("location"), "/content/failed.html");
        async.complete();
    });
}

From source file:io.liveoak.container.protocols.http.HttpResourceResponseEncoder.java

License:Open Source License

@Override
protected void encode(ChannelHandlerContext ctx, DefaultResourceResponse msg, List<Object> out)
        throws Exception {

    int responseStatusCode = 0;
    String responseMessage = null;
    HttpHeaders responseHeaders = new DefaultHttpHeaders();

    boolean shouldEncodeState = false;
    boolean shouldCheckForHtmlApp = true;
    switch (msg.responseType()) {
    case CREATED:
        responseStatusCode = HttpResponseStatus.CREATED.code();
        responseMessage = HttpResponseStatus.CREATED.reasonPhrase();
        shouldEncodeState = true;//from ww w . j a  va 2s . c o  m
        break;
    case READ:
        responseStatusCode = HttpResponseStatus.OK.code();
        responseMessage = HttpResponseStatus.OK.reasonPhrase();
        shouldEncodeState = true;
        break;
    case UPDATED:
        responseStatusCode = HttpResponseStatus.OK.code();
        responseMessage = HttpResponseStatus.OK.reasonPhrase();
        shouldEncodeState = true;
        break;
    case DELETED:
        responseStatusCode = HttpResponseStatus.OK.code();
        responseMessage = HttpResponseStatus.OK.reasonPhrase();
        shouldEncodeState = true;
        break;
    case ERROR:
        if (msg instanceof ResourceErrorResponse) {
            shouldEncodeState = true;
            shouldCheckForHtmlApp = false;
            switch (((DefaultResourceErrorResponse) msg).errorType()) {
            case NOT_AUTHORIZED:
                responseStatusCode = HttpResponseStatus.UNAUTHORIZED.code();
                responseMessage = HttpResponseStatus.UNAUTHORIZED.reasonPhrase();
                break;
            case FORBIDDEN:
                responseStatusCode = HttpResponseStatus.FORBIDDEN.code();
                responseMessage = HttpResponseStatus.FORBIDDEN.reasonPhrase();
                break;
            case NOT_ACCEPTABLE:
                responseStatusCode = HttpResponseStatus.NOT_ACCEPTABLE.code();
                responseMessage = HttpResponseStatus.NOT_ACCEPTABLE.reasonPhrase();
                break;
            case NO_SUCH_RESOURCE:
                responseStatusCode = HttpResponseStatus.NOT_FOUND.code();
                responseMessage = HttpResponseStatus.NOT_FOUND.reasonPhrase();
                break;
            case RESOURCE_ALREADY_EXISTS:
                responseStatusCode = HttpResponseStatus.NOT_ACCEPTABLE.code();
                responseMessage = HttpResponseStatus.NOT_ACCEPTABLE.reasonPhrase();
                break;
            case CREATE_NOT_SUPPORTED:
                responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code();
                responseMessage = "Create not supported";
                break;
            case READ_NOT_SUPPORTED:
                responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code();
                responseMessage = "Read not supported";
                break;
            case UPDATE_NOT_SUPPORTED:
                responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code();
                responseMessage = "UpdateStep not supported";
                break;
            case DELETE_NOT_SUPPORTED:
                responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code();
                responseMessage = "Delete not supported";
                break;
            case INTERNAL_ERROR:
                responseStatusCode = HttpResponseStatus.INTERNAL_SERVER_ERROR.code();
                responseMessage = HttpResponseStatus.INTERNAL_SERVER_ERROR.reasonPhrase();
                break;
            }

            //TODO: add content values here to return proper error messages to the client
            // eg unique error id, short error message, link to page with more information, etc...
            //response.content().writeBytes(...)

        }
        break;
    case MOVED:
        if (msg instanceof ResourceMovedResponse) {
            ResourceMovedResponse resourceMovedResponse = (ResourceMovedResponse) msg;

            switch (resourceMovedResponse.movedType()) {
            case MOVED_PERMANENTLY:
                responseStatusCode = HttpResponseStatus.MOVED_PERMANENTLY.code();
                responseMessage = HttpResponseStatus.MOVED_PERMANENTLY.reasonPhrase();
                break;
            case MOVED_TEMPORARILY:
                responseStatusCode = HttpResponseStatus.FOUND.code();
                responseMessage = HttpResponseStatus.FOUND.reasonPhrase();
                break;
            }

            Integer maxAge = resourceMovedResponse.maxAge();
            if (maxAge != null) {
                responseHeaders.add(HttpHeaders.Names.CACHE_CONTROL, "max-age=" + maxAge);
            }

            responseHeaders.add(HttpHeaders.Names.LOCATION, ((ResourceMovedResponse) msg).redirectURL());
        }
        break;
    }

    DefaultHttpResponse response;
    HttpResponseStatus responseStatus;

    EncodingResult encodingResult = null;
    if (shouldEncodeState) {
        MediaTypeMatcher matcher = msg.inReplyTo().mediaTypeMatcher();

        if (shouldCheckForHtmlApp) {
            Application app = msg.inReplyTo().requestContext().application();
            if (app != null && app instanceof InternalApplication) {
                ResourcePath htmlAppPath = ((InternalApplication) app).htmlApplicationResourcePath();
                if ((!(msg.resource() instanceof BinaryResource)) && (htmlAppPath != null)) {
                    MediaType bestMatch = matcher.findBestMatch(this.codecManager.mediaTypes());
                    if (bestMatch == MediaType.HTML) {
                        // HTML was requested and we have an HTML app
                        ResourceRequest htmlAppRequest = new DefaultResourceRequest.Builder(RequestType.READ,
                                htmlAppPath).mediaTypeMatcher(msg.inReplyTo().mediaTypeMatcher())
                                        .requestAttributes(msg.inReplyTo().requestContext().requestAttributes())
                                        .build();
                        ctx.channel().pipeline().fireChannelRead(htmlAppRequest);
                        return;
                    }
                }
            }
        }

        try {
            encodingResult = encodeState(msg.inReplyTo().requestContext(), matcher, msg);
        } catch (IncompatibleMediaTypeException e) {
            log.error("Incompatible media type", e);
            responseStatus = new HttpResponseStatus(HttpResponseStatus.NOT_ACCEPTABLE.code(), e.getMessage());
            response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus);
            response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0);
            out.add(response);
            return;
        } catch (Throwable e) {
            log.error("Could not encode HTTP response", e);
            responseStatus = new HttpResponseStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR.code(),
                    HttpResponseStatus.INTERNAL_SERVER_ERROR.reasonPhrase());
            response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus);
            response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0);
            out.add(response);
            return;
        }
    }

    responseStatus = new HttpResponseStatus(responseStatusCode, responseMessage);

    if (encodingResult != null) {

        if (msg.resource() instanceof BinaryResource) {
            BinaryResource bin = (BinaryResource) msg.resource();
            if (bin.contentLength() == 0) {
                response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus);
                response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0);
            } else {
                response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, responseStatus);
                response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, bin.contentLength());
                response.headers().add(HttpHeaders.Names.LOCATION, msg.resource().uri().toString());
                response.headers().add(HttpHeaders.Names.CONTENT_TYPE, bin.mediaType());

                final HttpResponse res = response;
                bin.readContent(msg.inReplyTo().requestContext(), new BinaryContentSink() {
                    {
                        ctx.write(res);
                    }

                    @Override
                    public void close() {
                        ctx.writeAndFlush(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER));
                        ctx.pipeline().fireUserEventTriggered(new RequestCompleteEvent(msg.requestId()));
                    }

                    @Override
                    public void accept(ByteBuf byteBuf) {
                        ctx.write(new DefaultHttpContent(byteBuf));
                    }
                });
                return;
            }
        } else {
            ByteBuf content = encodingResult.encoded();

            response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus, content);
            response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, content.readableBytes());
            if (msg.resource() != null) {
                response.headers().add(HttpHeaders.Names.LOCATION, msg.resource().uri().toString());
            } else {
                response.headers().add(HttpHeaders.Names.LOCATION, msg.inReplyTo().resourcePath().toString());
            }
            response.headers().add(HttpHeaders.Names.CONTENT_TYPE, encodingResult.mediaType());
        }
    } else {
        response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus);
        response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0);
    }

    response.headers().add(responseHeaders);

    out.add(response);
    ctx.fireUserEventTriggered(new RequestCompleteEvent(msg.requestId()));
}

From source file:io.reactivex.netty.protocol.http.client.HttpRedirectTest.java

License:Apache License

@Test
public void testNoRedirect() {
    HttpClient.HttpClientConfig.Builder builder = new HttpClient.HttpClientConfig.Builder(null)
            .setFollowRedirect(false);//ww  w .  j  av  a 2 s .  c  o m
    HttpClientRequest<ByteBuf> request = HttpClientRequest.createGet("test/redirect?port=" + port);
    HttpClient.HttpClientConfig config = builder.readTimeout(20000, TimeUnit.MILLISECONDS).build();
    HttpClient<ByteBuf, ByteBuf> client = new HttpClientBuilder<ByteBuf, ByteBuf>("localhost", port)
            .config(config).build();
    HttpClientResponse<ByteBuf> response = client.submit(request).toBlocking().single();
    assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(), response.getStatus().code());
}

From source file:io.reactivex.netty.protocol.http.client.HttpRedirectTest.java

License:Apache License

@Test
public void testNoRedirectPost() {
    HttpClient.HttpClientConfig.Builder builder = new HttpClient.HttpClientConfig.Builder(null);
    HttpClient.HttpClientConfig config = builder.build();
    HttpClientRequest<ByteBuf> request = HttpClientRequest.createPost("test/redirectPost?port=" + port)
            .withContent("Hello world");
    HttpClient<ByteBuf, ByteBuf> client = new HttpClientBuilder<ByteBuf, ByteBuf>("localhost", port)
            .config(config).build();/*from w ww.j a v a 2  s. c  o m*/
    HttpClientResponse<ByteBuf> response = client.submit(request).toBlocking().single();
    assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(), response.getStatus().code());
}

From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java

License:Apache License

public Observable<Void> redirectGet(HttpServerRequest<ByteBuf> request,
        final HttpServerResponse<ByteBuf> response) {
    response.getHeaders().set("Location",
            "http://localhost:" + request.getQueryParameters().get("port").get(0) + "/test/singleEntity");
    response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY);
    return response.writeAndFlush(Unpooled.EMPTY_BUFFER);
}

From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java

License:Apache License

public Observable<Void> redirectCustom(HttpServerRequest<ByteBuf> request,
        final HttpServerResponse<ByteBuf> response) {
    String port = request.getQueryParameters().get("port").get(0);
    boolean isRedirectLoop = request.getUri().contains("redirectLoop");
    int currentCount = getIntParamWithDefault(request, "count", 0);
    int redirectsRequested = getIntParamWithDefault(request, "redirectsRequested", 1);
    String location;//from  w  w  w.  j  a  va  2 s  .  c o  m
    if (currentCount >= redirectsRequested) {
        location = "http://localhost:" + port + "/test/singleEntity";
    } else {

        location = "http://localhost:" + port + "/test/"
                + (isRedirectLoop ? "redirectLoop"
                        : "redirectLimited" + redirectLoopUniqueIndex.incrementAndGet())
                + "?port=" + port + "&count=" + (currentCount + 1) + "&redirectsRequested="
                + redirectsRequested;
    }

    response.getHeaders().set("Location", location);
    response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY);
    return response.writeAndFlush(Unpooled.EMPTY_BUFFER);
}

From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java

License:Apache License

public Observable<Void> redirectPost(HttpServerRequest<ByteBuf> request,
        final HttpServerResponse<ByteBuf> response) {
    response.getHeaders().set("Location",
            "http://localhost:" + request.getQueryParameters().get("port").get(0) + "/test/post");
    response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY);
    return response.writeAndFlush(Unpooled.EMPTY_BUFFER);
}