List of usage examples for io.netty.handler.codec.http HttpRequest getUri
@Deprecated String getUri();
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; }