/*
http-base - Extensions to jdk.httpserver
Copyright (C) 2021 Ulrich Hilger
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package de.uhilger.httpserver.base;
import com.sun.net.httpserver.HttpExchange;
import de.uhilger.httpserver.base.handler.FileHandler;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* Helfer fuer HTTP-Methoden
*
* @author Ulrich Hilger
* @version 1, 01.06.2021
*/
public class HttpHelper {
/* HTTP Methoden */
public static final String HTTP_GET = "GET";
public static final String HTTP_POST = "POST";
public static final String HTTP_PUT = "PUT";
public static final String HTTP_DELETE = "DELETE";
public static final String STR_AMP = "&";
public static final String STR_EQUAL = "=";
public static final String CONTENT_TYPE = "Content-Type";
public static final String CT_JSON = "application/json; charset=UTF-8";
public static final String CT_TEXT_HTML = "text/html";
/**
* Den Namen der gewünschten Datei aus der HTTP-Anfrage ermitteln
*
* @param e das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum
* Anfertigen und Senden der Antwort
* @return Name der gewünschten Datei
*/
public String getFileName(HttpExchange e) {
String ctxPath = e.getHttpContext().getPath();
String uriPath = e.getRequestURI().getPath();
return uriPath.substring(ctxPath.length());
}
public String bodyLesen(HttpExchange exchange) throws IOException {
StringBuilder sb = new StringBuilder();
InputStream is = exchange.getRequestBody();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String line = in.readLine();
while (line != null) {
sb.append(line);
line = in.readLine();
}
return sb.toString();
}
public String getAttrStr(Map attributes, String key, String defaultValue) {
Object value = attributes.get(key);
if(value instanceof String) {
return value.toString();
} else {
return defaultValue;
}
}
public Map getQueryMap(String query) {
String[] params = query.split(STR_AMP);
Map map = new HashMap();
for (String param : params) {
String name = param.split(STR_EQUAL)[0];
String value = param.split(STR_EQUAL)[1];
map.put(name, value);
}
return map;
}
public File tryWelcomeFiles(HttpExchange e, String fName) {
boolean notFound = true;
File file = null;
String fileBase = e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString();
Object welcomeFiles = e.getHttpContext().getAttributes().get(FileHandler.ATTR_WELCOME_FILES);
if(welcomeFiles instanceof String) {
String[] fileNames = welcomeFiles.toString().split(FileHandler.STR_COMMA);
int i = -1;
while(notFound && ++i < fileNames.length) {
file = new File(fileBase, fName + fileNames[i]);
if(file.exists()) {
notFound = false;
}
}
}
if(notFound) {
file = new File(fileBase, fName + FileHandler.WELCOME_FILE);
}
return file;
}
}