コード例 #1
1
  private void sendResourceFile(HttpExchange exchange) {
    StringBuilder response = new StringBuilder();

    String path = exchange.getRequestURI().getPath();
    if (path.contains("resources")) {
      path = path.substring(path.indexOf("resources") + 9);
    }
    InputStream is = MyBaseHandler.class.getResourceAsStream(path);
    if (is == null) {
      writeResponse(exchange, "File not found", 404);
      return;
    }
    InputStreamReader reader = new InputStreamReader(is);

    try {
      BufferedReader bufferedReader = new BufferedReader(reader);

      String tmp;
      while ((tmp = bufferedReader.readLine()) != null) {
        response.append(tmp);
        response.append("\n");
      }
    } catch (NullPointerException e) {
      response.append("Resource file not found");
      writeResponse(exchange, response.toString(), 404);
    } catch (IOException e) {
      response.append("Error while reading from file");
      writeResponse(exchange, response.toString(), 400);
    }
    writeResponse(exchange, response.toString(), 200);
  }
コード例 #2
0
    @Override
    public void handle(HttpExchange t) throws IOException {
      LOGGER.debug("root req " + t.getRequestURI());
      if (RemoteUtil.deny(t)) {
        throw new IOException("Access denied");
      }
      if (t.getRequestURI().getPath().contains("favicon")) {
        RemoteUtil.sendLogo(t);
        return;
      }

      HashMap<String, Object> vars = new HashMap<>();
      vars.put("logs", getLogs(true));
      if (configuration.getUseCache()) {
        vars.put(
            "cache",
            "http://"
                + PMS.get().getServer().getHost()
                + ":"
                + PMS.get().getServer().getPort()
                + "/console/home");
      }

      String response = parent.getResources().getTemplate("doc.html").execute(vars);
      RemoteUtil.respond(t, response, 200, "text/html");
    }
コード例 #3
0
 public static String getId(String path, HttpExchange t) {
   String id = "0";
   int pos = t.getRequestURI().getPath().indexOf(path);
   if (pos != -1) {
     id = t.getRequestURI().getPath().substring(pos + path.length());
   }
   return id;
 }
コード例 #4
0
ファイル: GamesHandler.java プロジェクト: Brc509/Settlers
 @Override
 public void handle(HttpExchange exchange) throws IOException {
   // TODO CHECK FOR BAD REQUESTS
   String endpoint = exchange.getRequestURI().getPath();
   System.out.println(endpoint);
   try {
     switch (endpoint) {
       case "/games/list":
         if (HandlerUtils.checkRequestMethod("GET", exchange)) {
           listGames(exchange);
         }
         break;
       case "/games/create":
         if (HandlerUtils.checkRequestMethod("POST", exchange)) {
           createGame(exchange);
         }
         break;
       case "/games/join":
         if (HandlerUtils.checkRequestMethod("POST", exchange)) {
           joinGame(exchange);
         }
         break;
       default:
         System.out.println("gameHandler. Endpoint: " + endpoint + ". Sent Bad Request");
         HandlerUtils.sendEmptyBody(exchange, HttpURLConnection.HTTP_BAD_REQUEST);
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
コード例 #5
0
 private void doGet(HttpExchange httpExchange) throws Exception {
   String uriQuery = httpExchange.getRequestURI().getQuery();
   if (uriQuery != null && uriQuery.length() > 0) {
     uriQuery = URLDecoder.decode(uriQuery, "UTF-8");
     onRecvProtocol(httpExchange, uriQuery);
   }
 }
コード例 #6
0
ファイル: Server.java プロジェクト: vadimzalunin/test
    @Override
    public void handle(HttpExchange t) throws IOException {

      String fileId = t.getRequestURI().getPath().replaceFirst("/header/", "");
      System.out.println("fileId: " + fileId);
      InputStream is = new FileInputStream("C:\\Users\\vadim\\Downloads\\15496_1#45.cram");
      CramHeader cramHeader = CramIO.readCramHeader(is);

      t.getResponseHeaders().add(HttpHeaders.CONTENT_TYPE, "SAM_HEADER");

      t.getResponseHeaders()
          .add(
              "CRAM_VERSION",
              String.format("%d.%d", cramHeader.getMajorVersion(), cramHeader.getMinorVersion()));
      t.sendResponseHeaders(200, 0);

      ByteArrayOutputStream headerBodyOS = new ByteArrayOutputStream();
      OutputStreamWriter w = new OutputStreamWriter(headerBodyOS);
      new SAMTextHeaderCodec().encode(w, cramHeader.getSamFileHeader());
      try {
        w.close();
      } catch (IOException e) {
        throw new RuntimeException(e);
      }

      OutputStream os = t.getResponseBody();
      os.write(headerBodyOS.toByteArray());
      os.close();
    }
コード例 #7
0
 @Override
 public String respond(HttpExchange httpExchange) {
   String method = httpExchange.getRequestMethod();
   String uri = httpExchange.getRequestURI().getPath();
   logger.log(method + " " + uri + " " + stringify(httpExchange.getRequestBody()));
   return NO_CONTENT;
 }
コード例 #8
0
  @Override
  protected void wrappedHandle(HttpExchange t, String[] path, LinkedHashMap<String, String> query)
      throws Exception {
    l.info(
        "GET "
            + t.getRequestURI()
            + " "
            + t.getRemoteAddress()); // TODO - create a special logger for this!

    String[] longestMatch = getLongestMatch(path);
    LazyInstantiator<SafeHttpHandler> handler = handlers.get(longestMatch);
    if (handler == null) {
      String failMessage = "No handler found for: " + Arrays.toString(path);
      l.info(failMessage);
      sendText(t, failMessage);
      return;
    }

    TimedLogRecordStart start = new TimedLogRecordStart("calling " + handler);
    l.log(start);

    int startIndex = longestMatch.length;
    String[] truncatedPath = Arrays.copyOfRange(path, startIndex, path.length);
    handler.cachedInstance().wrappedHandle(t, truncatedPath, query);

    l.log(start.finishedNow());
  }
コード例 #9
0
    /**
     * Parse the parameters of a connection into a CoreNLP properties file that can be passed into
     * {@link StanfordCoreNLP}, and used in the I/O stages.
     *
     * @param httpExchange The http exchange; effectively, the request information.
     * @return A {@link Properties} object corresponding to a combination of default and passed
     *     properties.
     * @throws UnsupportedEncodingException Thrown if we could not decode the key/value pairs with
     *     UTF-8.
     */
    private Properties getProperties(HttpExchange httpExchange)
        throws UnsupportedEncodingException {
      // Load the default properties
      Properties props = new Properties();
      defaultProps
          .entrySet()
          .stream()
          .forEach(
              entry -> props.setProperty(entry.getKey().toString(), entry.getValue().toString()));

      // Try to get more properties from query string.
      Map<String, String> urlParams = getURLParams(httpExchange.getRequestURI());
      if (urlParams.containsKey("properties")) {
        StringUtils.decodeMap(URLDecoder.decode(urlParams.get("properties"), "UTF-8"))
            .entrySet()
            .forEach(entry -> props.setProperty(entry.getKey(), entry.getValue()));
      } else if (urlParams.containsKey("props")) {
        StringUtils.decodeMap(URLDecoder.decode(urlParams.get("properties"), "UTF-8"))
            .entrySet()
            .forEach(entry -> props.setProperty(entry.getKey(), entry.getValue()));
      }

      // Make sure the properties compile
      props.setProperty(
          "annotators",
          StanfordCoreNLP.ensurePrerequisiteAnnotators(
              props.getProperty("annotators").split("[, \t]+")));

      return props;
    }
コード例 #10
0
ファイル: HttpExchangeUtil.java プロジェクト: 9esa/Resteasy
  public static ResteasyUriInfo extractUriInfo(HttpExchange exchange) {
    String host = exchange.getLocalAddress().getHostName();
    if (exchange.getLocalAddress().getPort() != 80 && exchange.getLocalAddress().getPort() != 443) {
      host += ":" + exchange.getLocalAddress().getPort();
    }
    String uri = exchange.getRequestURI().toString();

    String protocol =
        exchange.getHttpContext().getServer() instanceof HttpsServer ? "https" : "http";

    URI absoluteURI = URI.create(protocol + "://" + host + uri);

    String contextPath = exchange.getHttpContext().getPath();
    String path = PathHelper.getEncodedPathInfo(absoluteURI.getRawPath(), contextPath);
    if (!path.startsWith("/")) {
      path = "/" + path;
    }

    URI baseURI = absoluteURI;
    if (!path.trim().equals("")) {
      String tmpContextPath = contextPath;
      if (!tmpContextPath.endsWith("/")) tmpContextPath += "/";
      baseURI =
          UriBuilder.fromUri(absoluteURI).replacePath(tmpContextPath).replaceQuery(null).build();
    } else {
      baseURI = UriBuilder.fromUri(absoluteURI).replaceQuery(null).build();
    }
    URI relativeURI = UriBuilder.fromUri(path).replaceQuery(absoluteURI.getRawQuery()).build();
    // System.out.println("path: " + path);
    // System.out.println("query string: " + request.getQueryString());
    ResteasyUriInfo uriInfo = new ResteasyUriInfo(baseURI, relativeURI);
    return uriInfo;
  }
コード例 #11
0
ファイル: S3Server.java プロジェクト: ttddlplp/s3test
  @Override
  protected void handleGet(HttpExchange exchange) throws IOException {
    String path = exchange.getRequestURI().getPath();
    if (path.equals("/")) {
      handleListBuckets(exchange);
      return;
    }

    Matcher bucketPatternMatcher = BUCKET_PATTERN.matcher(path);
    if (bucketPatternMatcher.matches()) {
      String bucketName = bucketPatternMatcher.group(1);
      handleListObjects(exchange, bucketName);
    }

    Matcher requestPathPatternMatcher = REQUEST_PATH_PATTERN.matcher(path);
    if (!requestPathPatternMatcher.matches()) {
      respondErrorAndClose(exchange, ErrorResponse.INVALID_URI);
      return;
    }
    String bucketName = requestPathPatternMatcher.group(1);
    String keyName = requestPathPatternMatcher.group(2);

    if (DOUBLE_DOT_PATTERN.matcher(keyName).matches()) {
      respondErrorAndClose(exchange, ErrorResponse.INVALID_URI);
      return;
    }

    handleGetObject(exchange, bucketName, keyName);
  }
コード例 #12
0
ファイル: ServerHandler.java プロジェクト: ruslanvcooper/BSU
 private Response doGet(HttpExchange httpExchange) {
   String query = httpExchange.getRequestURI().getQuery();
   if (query == null) {
     return Response.badRequest("Absent query in request");
   }
   Map<String, String> map = queryToMap(query);
   String token = map.get(Constants.REQUEST_PARAM_TOKEN);
   if (StringUtils.isEmpty(token)) {
     return Response.badRequest("Token query parameter is required");
   }
   try {
     int index = MessageHelper.parseToken(token);
     if (index > messageStorage.size()) {
       return Response.badRequest(
           String.format(
               "Incorrect token in request: %s. Server does not have so many messages", token));
     }
     Portion portion = new Portion(index);
     List<Message> messages = messageStorage.getPortion(portion);
     String responseBody = MessageHelper.buildServerResponseBody(messages, messageStorage.size());
     return Response.ok(responseBody);
   } catch (InvalidTokenException e) {
     return Response.badRequest(e.getMessage());
   }
 }
コード例 #13
0
ファイル: ParameterFilter.java プロジェクト: TheNewDrive/API
  private void parseGetParameters(HttpExchange exchange) throws UnsupportedEncodingException {

    Map<String, Object> parameters = new HashMap<String, Object>();
    URI requestedUri = exchange.getRequestURI();
    String query = requestedUri.getRawQuery();
    parseQuery(query, parameters);
    exchange.setAttribute("parameters", parameters);
  }
コード例 #14
0
ファイル: S3Server.java プロジェクト: ttddlplp/s3test
 private void handleListObjects(HttpExchange exchange, String bucketName) throws IOException {
   if (buckets.containsKey(bucketName)) {
     String prefix = getQueryParamValue(exchange.getRequestURI(), PREFIX_QUERY_PARAMETER);
     respondListObjectsAndClose(exchange, bucketName, prefix);
   } else {
     respondErrorAndClose(exchange, ErrorResponse.NO_SUCH_BUCKET);
   }
 }
コード例 #15
0
 @Override
 @Property(MessageContext.QUERY_STRING)
 public String getQueryString() {
   URI requestUri = httpExchange.getRequestURI();
   String query = requestUri.getQuery();
   if (query != null) return query;
   return null;
 }
コード例 #16
0
 private void addNewPlayer(HttpExchange t) throws IOException {
   String nick;
   String[] queries = t.getRequestURI().getQuery().split("&");
   String[] temp = queries[0].split("=");
   nick = temp[1];
   // System.out.println("here : " + nick);
   screen.addFighter(nick);
 }
コード例 #17
0
    @Override
    public void handle(HttpExchange t) throws IOException {
      LOGGER.debug("root req " + t.getRequestURI());
      if (RemoteUtil.deny(t)) {
        throw new IOException("Access denied");
      }
      if (t.getRequestURI().getPath().contains("favicon")) {
        RemoteUtil.sendLogo(t);
        return;
      }

      HashMap<String, Object> vars = new HashMap<>();
      vars.put("serverName", configuration.getServerName());
      vars.put("profileName", configuration.getProfileName());

      String response = parent.getResources().getTemplate("start.html").execute(vars);
      RemoteUtil.respond(t, response, 200, "text/html");
    }
コード例 #18
0
 @Override
 @Property(MessageContext.PATH_INFO)
 public String getPathInfo() {
   URI requestUri = httpExchange.getRequestURI();
   String reqPath = requestUri.getPath();
   String ctxtPath = httpExchange.getHttpContext().getPath();
   if (reqPath.length() > ctxtPath.length()) {
     return reqPath.substring(ctxtPath.length());
   }
   return null;
 }
コード例 #19
0
 private void sendIcon(HttpExchange exchange) {
   String hashCode = exchange.getRequestURI().getPath();
   hashCode = hashCode.substring(hashCode.indexOf("fticons/") + 8);
   BufferedImage bi = null;
   try {
     bi = iconHelper.getIconFromMap(Integer.parseInt(hashCode));
   } catch (NoSuchAlgorithmException e) {
     writeResponse(exchange, "Impossible to generate MD% hash for save an image" + hashCode, 400);
   }
   writeImageToStream(bi, exchange);
 }
コード例 #20
0
ファイル: Server.java プロジェクト: vadimzalunin/test
    @Override
    public void handle(HttpExchange t) throws IOException {

      String response = "This is the response";
      t.getResponseHeaders().add(HttpHeaders.CONTENT_TYPE, "CRAM");
      t.sendResponseHeaders(200, 0);
      System.out.println(t.getRequestURI());

      OutputStream os = t.getResponseBody();
      os.write(response.getBytes());
      os.close();
    }
コード例 #21
0
 private void sendImageFile(HttpExchange exchange) {
   String path = exchange.getRequestURI().getPath();
   if (path.contains("resources")) {
     path = path.substring(path.indexOf("resources") + 9);
   }
   BufferedImage bi;
   try {
     bi = ImageIO.read(MyBaseHandler.class.getResourceAsStream(path));
     writeImageToStream(bi, exchange);
   } catch (IOException e) {
     LOG.error(e);
   }
 }
コード例 #22
0
 protected boolean parseRequest(HttpExchange exchange) {
   String param = exchange.getRequestURI().getQuery();
   if (param != null) {
     if (param.contains("file=highlighting.js")) {
       sendResourceFile(exchange);
       return true;
     } else if (param.contains("file=dialog.js")) {
       sendResourceFile(exchange);
       return true;
     } else if (param.contains("type=jquery_lib")) {
       sendResourceFile(exchange);
       return true;
     } else if (param.contains("type=css")) {
       writeResponse(exchange, generateCssStyles(param), 200);
       return true;
     } else if (param.contains("file_type=autocomplete")) {
       sendJsonData(exchange);
       return true;
     }
   } else {
     param = exchange.getRequestURI().toString();
     if (param.contains("fticons")) {
       sendIcon(exchange);
       return true;
     } else if (param.contains(".png")) {
       sendImageFile(exchange);
       return true;
     } else if (param.equals("/")) {
       sendModuleList(exchange);
       return true;
     } else if (param.contains(".css")
         && (param.contains("jquery.ui") || param.contains("jquery-ui"))) {
       sendResourceFile(exchange);
       return true;
     }
   }
   return false;
 }
コード例 #23
0
ファイル: TestHttpServer.java プロジェクト: siamraf/cat-api
 @Override
 public synchronized void handle(HttpExchange exchange) throws IOException {
   String path = exchange.getRequestURI().getRawPath();
   String response = pathResponses.get(path);
   OutputStream os = exchange.getResponseBody();
   if (response == null) {
     response = "No response mapped for path " + path;
     exchange.sendResponseHeaders(500, response.length());
   } else {
     exchange.sendResponseHeaders(200, response.length());
   }
   os.write(response.getBytes(StandardCharsets.UTF_8));
   os.close();
 }
コード例 #24
0
ファイル: ServerHandler.java プロジェクト: ruslanvcooper/BSU
 private Response doDelete(HttpExchange httpExchange) {
   String query = httpExchange.getRequestURI().getQuery();
   if (query == null) {
     return Response.badRequest("Absent query in request");
   }
   Map<String, String> map = queryToMap(query);
   String messageId = map.get(Constants.REQUEST_PARAM_MESSAGE_ID);
   if (StringUtils.isEmpty(messageId)) {
     return Response.badRequest("Message id query parameter is required");
   }
   if (messageStorage.removeMessage(messageId)) {
     return Response.ok();
   }
   return Response.badRequest("This message does not exist");
 }
コード例 #25
0
  public void doHandle(HttpExchange t) throws Exception {
    String path = t.getRequestURI().getPath();
    int i = path.indexOf("/", 1);
    String cmd = path.substring(i + 1);
    s_logger.info("Get CMD request for " + cmd);
    if (cmd.equals("getstatus")) {
      ConsoleProxyClientStatsCollector statsCollector = ConsoleProxy.getStatsCollector();

      Headers hds = t.getResponseHeaders();
      hds.set("Content-Type", "text/plain");
      t.sendResponseHeaders(200, 0);
      OutputStreamWriter os = new OutputStreamWriter(t.getResponseBody(), "UTF-8");
      statsCollector.getStatsReport(os);
      os.close();
    }
  }
コード例 #26
0
  @Override
  public void handle(HttpExchange t) throws IOException {
    OutputStream os = t.getResponseBody();
    URI uri = t.getRequestURI();

    if (!uri.toString().startsWith("/")) {
      /* suspecting path traversal attack */
      String response = "403 (Forbidden)\n";
      t.sendResponseHeaders(403, response.getBytes().length);
      os.write(response.getBytes());
      os.close();
      return;
    }

    ContentType contentType;
    if (uri.toString().equals("/")) {
      contentType = ContentType.HTML;
    } else {
      contentType = ContentType.getContentType(uri.toString());
    }
    if (contentType != ContentType.REQUEST) {
      handleFile(t, contentType);
      return;
    }

    // Presentation layer on of VCenterPluginResp
    // Accept with response code 200.
    t.sendResponseHeaders(200, 0);
    Headers h = t.getResponseHeaders();

    h.set("Content-Type", contentType.toString());
    StringBuilder s =
        new StringBuilder()
            .append("<?xml-stylesheet type=\"")
            .append(ContentType.XSL)
            .append("\" href=\"")
            .append(styleSheet)
            .append("\"?>");

    // serialize the actual response object in XML
    VCenterPluginReq req = new VCenterPluginReq(uri);
    VCenterPluginResp resp = new VCenterPluginResp(req);
    resp.writeObject(s);

    os.write(s.toString().getBytes());
    os.close();
  }
コード例 #27
0
    @Override
    public String respond(HttpExchange httpExchange) {
      InputStream body = httpExchange.getRequestBody();

      try {

        Order order = objectMapper.readValue(body, Order.class);
        logger.error(order.toString());

        Integer perc = COUNTRIES.get(order.getCountry());

        //     Optional<Reduction> reduction = Reduction.valueOfFrom(order.getReduction());

        if ("STANDARD".equalsIgnoreCase(order.getReduction()) && perc != null) {
          Double total = order.totalWithPerc(perc);

          total = getTotalWithReduction(total);
          String totalResponse = generateAndLog(total);
          return totalResponse;

        } else if ("HALF PRICE".equals(order.getReduction()) && perc != null) {
          Double total = order.totalWithPerc(perc);

          total = total / 2;
          String totalResponse = generateAndLog(total);
          return totalResponse;

        } else if ("PAY THE PRICE".equals(order.getReduction()) && perc != null) {
          Double total = order.totalWithPerc(perc);
          String totalResponse = generateAndLog(total);
          return totalResponse;
        } else {

          logger.error("ATTENTION NON GERE : ");
          String method = httpExchange.getRequestMethod();
          String uri = httpExchange.getRequestURI().getPath();
          logger.log(method + " " + uri + " " + stringify(httpExchange.getRequestBody()));
        }

        //                logger.log(message.getType() + ": " + message.getContent());
      } catch (IOException exception) {
        logger.error(exception.getMessage());
      }

      return NO_CONTENT;
    }
コード例 #28
0
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   Map<String, String> urlParams = getURLParams(httpExchange.getRequestURI());
   httpExchange.getResponseHeaders().set("Content-Type", "text/plain");
   boolean doExit = false;
   String response = "Invalid shutdown key\n";
   if (urlParams.containsKey("key") && urlParams.get("key").equals(shutdownKey)) {
     response = "Shutdown successful!\n";
     doExit = true;
   }
   httpExchange.sendResponseHeaders(HTTP_OK, response.getBytes().length);
   httpExchange.getResponseBody().write(response.getBytes());
   httpExchange.close();
   if (doExit) {
     System.exit(0);
   }
 }
コード例 #29
0
  private void handleFile(HttpExchange t, ContentType contentType)
      throws IOException, FileNotFoundException {

    OutputStream os = t.getResponseBody();

    String fileName = t.getRequestURI().toString();

    if (fileName.equals("/")) {
      fileName = "/vcenter-plugin.html";
    }
    File file = new File(VCenterHttpServer.INSTANCE.getWebRoot() + fileName).getCanonicalFile();

    if (!file.getPath().startsWith(VCenterHttpServer.INSTANCE.getWebRoot())) {
      // Suspected path traversal attack: reject with 403 error.
      String response = "403 (Forbidden)\n";
      t.sendResponseHeaders(403, response.getBytes().length);
      os.write(response.getBytes());
      os.close();
      return;
    }
    if (!file.isFile()) {
      // Object does not exist or is not a file: reject with 404 error.
      // s_logger.error(" Cannot load " + fileName);
      String response = "404 (Not Found)\n";
      t.sendResponseHeaders(404, response.length());
      os.write(response.getBytes());
      os.close();
      return;
    }

    // Object exists and is a file: accept with response code 200.
    Headers h = t.getResponseHeaders();
    h.set("Content-Type", contentType.toString());
    t.sendResponseHeaders(200, 0);

    FileInputStream fs = new FileInputStream(file);
    final byte[] buffer = new byte[0x100000];
    int count = 0;
    while ((count = fs.read(buffer)) >= 0) {
      os.write(buffer, 0, count);
    }
    fs.close();

    os.close();
  }
コード例 #30
0
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
      ++testConnectionTimeoutCount;
      Logger.info(
          this,
          "testCommonResponseHandler testConnectionTimeoutCount: " + testConnectionTimeoutCount);

      Logger.info(
          this, String.format("request headers:%s", httpExchange.getRequestHeaders().entrySet()));
      Logger.info(this, String.format("request method:%s", httpExchange.getRequestMethod()));
      Logger.info(this, String.format("request uri:%s", httpExchange.getRequestURI()));
      Logger.info(this, String.format("request body:%s", httpExchange.getRequestBody()));

      String resp = "OK";
      httpExchange.sendResponseHeaders(200, resp.getBytes().length);
      httpExchange.getResponseBody().write(resp.getBytes());
      httpExchange.close();
    }