Example usage for io.netty.handler.codec.http HttpRequest getUri

List of usage examples for io.netty.handler.codec.http HttpRequest getUri

Introduction

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

Prototype

@Deprecated
String getUri();

Source Link

Usage

From source file:org.pidome.server.system.network.http.HttpRequestHandler.java

/**
 * Returns an authorized client if accepted.
 *
 * @param ip//  w  ww  . j  a  v  a2 s.  c o  m
 * @param key
 * @return
 * @throws HttpClientNotAuthorizedException
 * @throws HttpClientLoggedInOnOtherLocationException
 */
private static Map<RemoteClientInterface, RemoteClient> getAuthorizedClient(HttpRequest request, String ip,
        String key, String path)
        throws HttpClientNotAuthorizedException, HttpClientLoggedInOnOtherLocationException {
    Map<RemoteClientInterface, RemoteClient> returnSet = new HashMap<>();
    try {
        for (RemoteClient client : RemoteClientsConnectionPool.getConnectedClients()) {
            if (!client.getKey().equals("") && client.getRemoteSocketAddress().equals(ip)
                    && client.getKey().equals(key)) {
                returnSet.put(RemoteClientsConnectionPool.getClientBaseByConnection(client), client);
                return returnSet;
            } else if ((request.getUri().startsWith("/jsonrpc.json") || request.getUri().startsWith("/xmlapi/"))
                    && client.getRemoteSocketAddress().equals(ip)
                    && (client.getType().equals(RemoteClient.Type.WEBSOCKET))
                    && (client.getDeviceType().equals(RemoteClient.DeviceType.MOBILE))) {
                returnSet.put(RemoteClientsConnectionPool.getClientBaseByConnection(client), client);
                return returnSet;
            }
        }
        for (SocketServiceClient client : RemoteClientsConnectionPool.getConnectedDisplayClients()) {
            if ((request.getUri().startsWith("/jsonrpc.json") || request.getUri().startsWith("/xmlapi/"))
                    && client.getRemoteSocketAddress().equals(ip)
                    && (client.getType().equals(RemoteClient.Type.SOCKET))
                    && (client.getDeviceType().equals(RemoteClient.DeviceType.DISPLAY))) {
                returnSet.put(RemoteClientsConnectionPool.getIfSocketClientAuthorized(client), client);
                return returnSet;
            }
        }
    } catch (RemoteClientException ex) {
        LOG.warn("Client on ip {} not authorized", ip);
        throw new HttpClientNotAuthorizedException(ex);
    }
    throw new HttpClientNotAuthorizedException();
}

From source file:org.restexpress.Request.java

License:Apache License

/**
 * Add the query string parameters to the request as headers.
 * Also parses the query string into the queryStringMap, if applicable. Note, if the query string
 * contains multiple of the same parameter name, the headers will contain them all, but the
 * queryStringMap will only contain the first one.  This will be fixed in a future release.
 *//*from w  w  w . j  ava2  s.c o m*/
private void parseQueryString(final HttpRequest request) {
    if (!request.getUri().contains("?"))
        return;

    Map<String, List<String>> parameters = new QueryStringParser(request.getUri(), true).getParameters();

    if (parameters == null || parameters.isEmpty())
        return;

    queryStringMap = new HashMap<String, String>(parameters.size());

    for (Entry<String, List<String>> entry : parameters.entrySet()) {
        queryStringMap.put(entry.getKey(), entry.getValue().get(0));

        for (String value : entry.getValue()) {
            try {
                request.headers().add(entry.getKey(), URLDecoder.decode(value, ContentType.ENCODING));
            } catch (Exception e) {
                request.headers().add(entry.getKey(), value);
            }
        }
    }
}

From source file:org.robotbrains.support.web.server.netty.NettyHttpDynamicGetRequestHandlerHandler.java

License:Apache License

@Override
public boolean isHandledBy(HttpRequest req) {
    return req.getUri().startsWith(uriPrefix);
}

From source file:org.robotbrains.support.web.server.netty.NettyHttpDynamicGetRequestHandlerHandler.java

License:Apache License

@Override
public void handleWebRequest(ChannelHandlerContext ctx, HttpRequest req, Set<HttpCookie> cookiesToAdd)
        throws IOException {
    NettyHttpRequest request = new NettyHttpRequest(req, parentHandler.getWebServer().getLog());
    NettyHttpResponse response = new NettyHttpResponse(ctx, extraHttpContentHeaders);
    response.addCookies(cookiesToAdd);//from   w  w  w.ja  va 2  s . co m

    DefaultFullHttpResponse res;
    try {
        requestHandler.handle(request, response);

        res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
                HttpResponseStatus.valueOf(response.getResponseCode()), response.getChannelBuffer());

        String contentType = response.getContentType();
        if (contentType != null) {
            addHeader(res, HttpHeaders.Names.CONTENT_TYPE, contentType);
        }

        parentHandler.addHttpResponseHeaders(res, response.getContentHeaders());
        parentHandler.sendHttpResponse(ctx, req, res, true, false);

        parentHandler.getWebServer().getLog()
                .debug(String.format("Dynamic content handler for %s completed", uriPrefix));
    } catch (Exception e) {
        parentHandler.getWebServer().getLog()
                .error(String.format("Error while handling dynamic web server request %s", req.getUri()), e);

        parentHandler.sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
    }
}

From source file:org.robotbrains.support.web.server.netty.NettyHttpDynamicPostRequestHandlerHandler.java

License:Apache License

@Override
public void handleWebRequest(ChannelHandlerContext ctx, HttpRequest nettyRequest, HttpFileUpload upload,
        Set<HttpCookie> cookiesToAdd) throws IOException {
    NettyHttpRequest request = new NettyHttpRequest(nettyRequest, parentHandler.getWebServer().getLog());
    NettyHttpResponse response = new NettyHttpResponse(ctx, extraHttpContentHeaders);
    response.addCookies(cookiesToAdd);//from  w w  w .  jav a2  s .c o  m

    DefaultFullHttpResponse res;
    try {
        requestHandler.handle(request, upload, response);

        res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
                HttpResponseStatus.valueOf(response.getResponseCode()), response.getChannelBuffer());

        String contentType = response.getContentType();
        if (contentType != null) {
            addHeader(res, HttpHeaders.Names.CONTENT_TYPE, contentType);
        }

        parentHandler.addHttpResponseHeaders(res, response.getContentHeaders());
        parentHandler.sendHttpResponse(ctx, nettyRequest, res, true, false);

        parentHandler.getWebServer().getLog().debug("Dynamic content handler for %s completed", uriPrefix);
    } catch (Throwable e) {
        parentHandler.getWebServer().getLog().error(
                String.format("Error while handling dynamic web server request %s", nettyRequest.getUri()), e);

        parentHandler.sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
    }
}

From source file:org.robotbrains.support.web.server.netty.NettyStaticContentHandler.java

License:Apache License

@Override
public boolean isHandledBy(HttpRequest request) {
    if (request.getUri().startsWith(uriPrefix)) {
        HttpMethod method = request.getMethod();
        return method == HttpMethod.GET || method == HttpMethod.HEAD;
    } else {// w  ww . j a  v a2  s . c o  m
        return false;
    }
}

From source file:org.robotbrains.support.web.server.netty.NettyStaticContentHandler.java

License:Apache License

@Override
public void handleWebRequest(ChannelHandlerContext ctx, HttpRequest request, Set<HttpCookie> cookiesToAdd)
        throws IOException {
    String url = request.getUri();
    String originalUrl = url;//from   w  w w .j av  a  2 s . com

    // Strip off query parameters, if any, as we don't care.
    int pos = url.indexOf('?');
    if (pos != -1) {
        url = url.substring(0, pos);
    }

    int luriPrefixLength = uriPrefix.length();
    String filepath = URLDecoder.decode(url.substring(url.indexOf(uriPrefix) + luriPrefixLength),
            StandardCharsets.UTF_8.name());

    File file = new File(baseDir, filepath);

    // Refuse to process if the path wanders outside of the base directory.
    if (!allowLinks && !fileSupport.isParent(baseDir, file)) {
        HttpResponseStatus status = HttpResponseStatus.FORBIDDEN;
        parentHandler.getWebServer().getLog().warn(String.format(
                "HTTP [%s] %s --> (Path attempts to leave base directory)", status.code(), originalUrl));
        parentHandler.sendError(ctx, status);
        return;
    }

    RandomAccessFile raf;
    try {
        raf = new RandomAccessFile(file, "r");
    } catch (FileNotFoundException fnfe) {
        if (fallbackHandler != null) {
            fallbackHandler.handleWebRequest(ctx, request, cookiesToAdd);
        } else {
            HttpResponseStatus status = HttpResponseStatus.NOT_FOUND;
            parentHandler.getWebServer().getLog()
                    .warn(String.format("HTTP [%s] %s --> (File Not Found)", status.code(), originalUrl));
            parentHandler.sendError(ctx, status);
        }
        return;
    }
    long fileLength = raf.length();

    // Start with an initial OK response which will be modified as needed.
    HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK);

    setMimeType(filepath, response);

    parentHandler.addHttpResponseHeaders(response, extraHttpContentHeaders);
    parentHandler.addHeaderIfNotExists(response, HttpHeaders.Names.ACCEPT_RANGES, HttpHeaders.Values.BYTES);

    if (cookiesToAdd != null) {

        addHeader(response, HttpHeaders.Names.SET_COOKIE, ServerCookieEncoder.STRICT
                .encode(Collections2.transform(cookiesToAdd, new Function<HttpCookie, Cookie>() {
                    @Override
                    public Cookie apply(HttpCookie cookie) {
                        return NettyHttpResponse.createNettyCookie(cookie);
                    }
                })));
    }

    RangeRequest rangeRequest = null;
    try {
        rangeRequest = parseRangeRequest(request, fileLength);
    } catch (Exception e) {
        try {
            HttpResponseStatus status = HttpResponseStatus.REQUESTED_RANGE_NOT_SATISFIABLE;
            parentHandler.getWebServer().getLog()
                    .error(String.format("[%s] HTTP %s --> %s", status.code(), originalUrl, e.getMessage()));
            response.setStatus(status);
            parentHandler.sendError(ctx, status);
        } finally {
            try {
                raf.close();
            } catch (Exception e1) {
                parentHandler.getWebServer().getLog().warn("Unable to close static content file", e1);
            }
        }
        return;
    }

    HttpResponseStatus status = HttpResponseStatus.OK;
    if (rangeRequest == null) {
        setContentLength(response, fileLength);
    } else {
        setContentLength(response, rangeRequest.getRangeLength());
        addHeader(response, HttpHeaders.Names.CONTENT_RANGE,
                CONTENT_RANGE_PREFIX + rangeRequest.begin + CONTENT_RANGE_RANGE_SEPARATOR + rangeRequest.end
                        + CONTENT_RANGE_RANGE_SIZE_SEPARATOR + fileLength);
        status = HttpResponseStatus.PARTIAL_CONTENT;
        response.setStatus(status);
    }

    Channel ch = ctx.channel();

    // Write the initial line and the header.
    ChannelFuture writeFuture = ch.write(response);

    // Write the content if there have been no errors and we are a GET request.
    if (HttpMethod.GET == request.getMethod()) {
        if (ch.pipeline().get(SslHandler.class) != null) {
            // Cannot use zero-copy with HTTPS.
            writeFuture = ch.write(new ChunkedFile(raf, 0, fileLength, COPY_CHUNK_SIZE));
        } else {
            // No encryption - use zero-copy.
            final FileRegion region = new DefaultFileRegion(raf.getChannel(),
                    rangeRequest != null ? rangeRequest.begin : 0,
                    rangeRequest != null ? rangeRequest.getRangeLength() : fileLength);
            writeFuture = ch.write(region);
            writeFuture.addListener(new ChannelProgressiveFutureListener() {
                @Override
                public void operationComplete(ChannelProgressiveFuture future) throws Exception {
                    region.release();
                }

                @Override
                public void operationProgressed(ChannelProgressiveFuture future, long progress, long total)
                        throws Exception {
                    // Do nothng
                }
            });
        }
    }

    // Decide whether to close the connection or not.
    if (!isKeepAlive(request)) {
        // Close the connection when the whole content is written out.
        writeFuture.addListener(ChannelFutureListener.CLOSE);
    }

    parentHandler.getWebServer().getLog()
            .trace(String.format("[%s] HTTP %s --> %s", status.code(), originalUrl, file.getPath()));
}

From source file:org.robotbrains.support.web.server.netty.NettyWebServerHandler.java

License:Apache License

/**
 * Handle an HTTP request coming into the server.
 *
 * @param ctx/* w ww .j  a v a  2s.  c o  m*/
 *          The channel context for the request.
 * @param req
 *          The HTTP request.
 */
private void handleHttpRequest(ChannelHandlerContext ctx, HttpRequest req) {
    try {
        // Before we actually allow handling of this http request, we will check
        // to
        // see if it is properly authorized, if authorization is requested.
        HttpAuthResponse response = null;
        if (authProvider != null) {
            response = authProvider.authorizeRequest(new NettyHttpRequest(req, getWebServer().getLog()));
            if ((response == null) || !response.authSuccessful()) {
                if ((response == null) || response.redirectUrl() != null) {
                    sendHttpResponse(ctx, req, createRedirect(response.redirectUrl()), false, false);
                } else {
                    webServer.getLog().warn("Auth requested and no redirect available for %s", req.getUri());
                    sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HTTP_1_1, FORBIDDEN), false, false);
                }
                return;
            }
        }

        String user = null;
        if (response != null) {
            user = response.getUser();
        }

        if (handleWebGetRequest(ctx, req, response)) {
            // The method handled the request if the return value was true.
        } else if (webSocketHandlerFactory != null && tryWebSocketUpgradeRequest(ctx, req, user)) {
            // The method handled the request if the return value was true.
        } else if (handleWebPostRequest(ctx, req, response)) {
            // The method handled the request if the return value was true.
        } else {
            // Nothing we handle.

            HttpResponseStatus status = FORBIDDEN;
            String message = String.format("HTTP [%d] %s --> (No handlers for request)", status.code(),
                    req.getUri());
            if (shouldWarnOnMissingFile(new URI(req.getUri()).getPath())) {
                webServer.getLog().warn(message);
            } else {
                webServer.getLog().debug(message);
            }

            sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HTTP_1_1, status), false, false);
        }
    } catch (Exception e) {
        webServer.getLog().error("Error while processing web request", e);
    }
}

From source file:org.robotbrains.support.web.server.netty.NettyWebServerHandler.java

License:Apache License

/**
 * Attempt to handle an HTTP request by scanning through all registered
 * handlers./* w w  w . j  ava2s  .c o  m*/
 *
 * @param context
 *          the context for the request
 * @param request
 *          the request
 * @param authResponse
 *          the authentication response
 *
 * @return {@code true} if the request was handled
 *
 * @throws IOException
 *           an IO exception happened
 */
private boolean handleWebGetRequest(ChannelHandlerContext context, HttpRequest request,
        HttpAuthResponse authResponse) throws IOException {
    HttpMethod method = request.getMethod();
    if (method == GET || method == HEAD) {
        if (!canUserAccessResource(authResponse, request.getUri())) {
            return false;
        }

        Set<HttpCookie> cookies = null;
        if (authResponse != null) {
            cookies = authResponse.getCookies();
        }

        NettyHttpGetRequestHandler handler = webServer.locateGetRequestHandler(request);
        if (handler != null) {
            try {
                handler.handleWebRequest(context, request, cookies);
            } catch (Throwable e) {
                webServer.getLog()
                        .error(String.format("Exception when handling web request %s", request.getUri()), e);
            }

            return true;
        }
    }

    return false;
}

From source file:org.robotbrains.support.web.server.netty.NettyWebServerHandler.java

License:Apache License

/**
 * Attempt to handle an HTTP PUT request.
 *
 * @param context//from   ww w . j a v  a 2s.  co  m
 *          the context for the request
 * @param request
 *          the request
 * @param authResponse
 *          the authentication response
 *
 * @return {@code true} if the request was handled
 *
 * @throws IOException
 *           an IO exception happened
 */
private boolean handleWebPostRequest(ChannelHandlerContext context, HttpRequest request,
        HttpAuthResponse authResponse) throws IOException {
    if (request.getMethod() != POST) {
        return false;
    }

    NettyHttpPostRequestHandler postRequestHandler = webServer.locatePostRequestHandler(request);
    if (postRequestHandler == null) {
        return false;
    }

    if (!canUserAccessResource(authResponse, request.getUri())) {
        return false;
    }

    Set<HttpCookie> cookies = null;
    if (authResponse != null) {
        cookies = authResponse.getCookies();
    }

    try {
        NettyHttpFileUpload fileUpload = new NettyHttpFileUpload(request,
                new HttpPostMultipartRequestDecoder(HTTP_DATA_FACTORY, request), postRequestHandler, this,
                cookies);

        if (request instanceof HttpChunkedInput) {
            // Chunked data so more coming.
            fileUploadHandlers.put(((ChannelWithId) context.channel()).getId(), fileUpload);
        } else {
            fileUpload.completeNonChunked();

            fileUpload.fileUploadComplete(context);
        }
    } catch (Throwable e) {
        webServer.getLog().error("Could not start file upload", e);

        sendError(context, HttpResponseStatus.INTERNAL_SERVER_ERROR);
    }

    return true;
}