alter language to kotlin

This commit is contained in:
2020-01-31 09:17:12 +01:00
parent 02e6f96a3a
commit 5e42eeb2ae
140 changed files with 777 additions and 925 deletions

View File

@ -52,13 +52,13 @@ public class Dateget {
public void printList() {
for (int n = 0; n < list.size(); n++) {
Log.debug(list.get(n));
Log.Log.debug(list.get(n));
}
}
public void printListnew() {
for (int n = 0; n < listnew.size(); n++) {
Log.debug(listnew.get(n));
Log.Log.debug(listnew.get(n));
}
}

View File

@ -1,55 +0,0 @@
package com.wasteinformationserver;
import com.wasteinformationserver.basicutils.Info;
import com.wasteinformationserver.basicutils.Log;
import com.wasteinformationserver.db.JDBC;
import com.wasteinformationserver.mqtt.MqttService;
import com.wasteinformationserver.website.Webserver;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Log.setLevel(Log.DEBUG);
Info.init();
Log.info("startup of WasteInformationServer");
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
Thread.sleep(200);
Log.warning("Shutting down ...");
//shutdown routine
} catch (InterruptedException e) {
e.printStackTrace();
}
}));
Log.info("Server version: " + Info.getVersion());
Log.debug("Build date: " + Info.getBuilddate());
//initial connect to db
Log.message("initial login to db");
try {
JDBC.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306);
//JDBC.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306);
} catch (IOException e) {
//e.printStackTrace();
Log.error("no connection to db");
}
//startup web server
Thread mythread = new Thread(() -> new Webserver().startserver());
mythread.start();
//startup mqtt service
Log.message("starting mqtt service");
MqttService m = new MqttService("mqtt.heili.eu", "1883");
m.startupService();
}
}

View File

@ -0,0 +1,49 @@
package com.wasteinformationserver
import com.wasteinformationserver.basicutils.Info
import com.wasteinformationserver.basicutils.Log
import com.wasteinformationserver.db.JDBC
import com.wasteinformationserver.mqtt.MqttService
import com.wasteinformationserver.website.Webserver
import java.io.IOException
fun main() {
Log.Log.setLevel(Log.Log.DEBUG)
Info.init()
Log.Log.info("startup of WasteInformationServer")
Runtime.getRuntime().addShutdownHook(Thread(Runnable {
try {
Thread.sleep(200)
Log.Log.warning("Shutting down ...")
//shutdown routine
} catch (e: InterruptedException) {
e.printStackTrace()
}
}))
Log.Log.info("Server version: " + Info.getVersion())
Log.Log.debug("Build date: " + Info.getBuilddate())
//initial connect to db
Log.Log.message("initial login to db")
try {
JDBC.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306)
//JDBC.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306);
} catch (e: IOException) { //e.printStackTrace();
Log.Log.error("no connection to db")
}
//startup web server
val mythread = Thread(Runnable { Webserver().startserver() })
mythread.start()
//startup mqtt service
Log.Log.message("starting mqtt service")
val m = MqttService("mqtt.heili.eu", "1883")
m.startupService()
}

View File

@ -1,178 +0,0 @@
package com.wasteinformationserver.basicutils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
/**
* fancy debug and Logging messages
*
* @author Lukas Heiligenbrunner
*/
public class Log {
private static final String ANSI_RESET = "\u001B[0m";
private static final String ANSI_BLACK = "\u001B[30m";
private static final String ANSI_RED = "\u001B[31m";
private static final String ANSI_GREEN = "\u001B[32m";
private static final String ANSI_YELLOW = "\u001B[33m";
private static final String ANSI_BLUE = "\u001B[34m";
private static final String ANSI_PURPLE = "\u001B[35m";
private static final String ANSI_CYAN = "\u001B[36m";
private static final String ANSI_WHITE = "\u001B[37m";
// TODO: 30.01.20 update to enum
// public enum Kind{
// CRITICAL_ERROR,
// ERROR,
// WARNING,
// INFO,
// MESSAGE,
// DEBUG
// }
public static final int CRITICAL_ERROR = 6;
public static final int ERROR = 5;
public static final int WARNING = 4;
public static final int INFO = 3;
public static final int MESSAGE = 2;
public static final int DEBUG = 1;
private static int Loglevel = 0;
private static ArrayList<String> colors = new ArrayList<String>(Arrays.asList("", "DEBUG", "MESSAGE", "INFO", "WARNING", "ERROR", "CRITICAL_ERROR"));
/**
* Log critical Error
*
* @param msg message
*/
public static void criticalerror(Object msg) {
if (Loglevel <= CRITICAL_ERROR)
log(msg, CRITICAL_ERROR);
}
/**
* Log basic Error
*
* @param msg message
*/
public static void error(Object msg) {
if (Loglevel <= ERROR)
log(msg, ERROR);
}
/**
* Log warning
*
* @param msg message
*/
public static void warning(Object msg) {
if (Loglevel <= WARNING)
log(msg, WARNING);
}
/**
* Log info
*
* @param msg message
*/
public static void info(Object msg) {
if (Loglevel <= INFO)
log(msg, INFO);
}
/**
* Log basic message
*
* @param msg message
*/
public static void message(Object msg) {
if (Loglevel <= MESSAGE)
log(msg, MESSAGE);
}
/**
* Log debug Message
*
* @param msg message
*/
public static void debug(Object msg) {
if (Loglevel <= DEBUG)
log(msg, DEBUG);
}
/**
* Log as defined
*
* @param msg message
* @param level Loglevel --> static vals defined
*/
public static void log(Object msg, int level) {
boolean iswindows = System.getProperty("os.name").contains("Windows");
StringBuilder builder = new StringBuilder();
if (!iswindows) {
switch (level) {
case INFO:
builder.append(ANSI_CYAN);
break;
case WARNING:
builder.append(ANSI_YELLOW);
break;
case ERROR:
builder.append(ANSI_RED);
break;
case CRITICAL_ERROR:
builder.append(ANSI_RED);
break;
case MESSAGE:
builder.append(ANSI_WHITE);
break;
case DEBUG:
builder.append(ANSI_BLUE);
break;
}
}
builder.append("[");
builder.append(calcDate(System.currentTimeMillis()));
builder.append("]");
builder.append(" [");
builder.append(new Exception().getStackTrace()[2].getClassName());
builder.append("]");
builder.append(" [");
builder.append(colors.get(level));
builder.append("]");
if (!iswindows) {
builder.append(ANSI_WHITE);
}
builder.append(" - ");
builder.append(msg.toString());
if (!iswindows) {
builder.append(ANSI_RESET);
}
System.out.println(builder.toString());
}
private static String calcDate(long millisecs) {
SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date resultdate = new Date(millisecs);
return date_format.format(resultdate);
}
/**
* define Loglevel call on startup or at runtime
* default: 0[DEBUG] --> Max logging
*
* @param level Loglevel --> static vals defined
*/
public static void setLevel(int level) {
Loglevel = level;
}
}

View File

@ -0,0 +1,139 @@
package com.wasteinformationserver.basicutils
import java.text.SimpleDateFormat
import java.util.*
class Log {
companion object Log{
val CRITICAL_ERROR = 6
val ERROR = 5
val WARNING = 4
val INFO = 3
val MESSAGE = 2
val DEBUG = 1
private val ANSI_RESET = "\u001B[0m"
private val ANSI_BLACK = "\u001B[30m"
private val ANSI_RED = "\u001B[31m"
private val ANSI_GREEN = "\u001B[32m"
private val ANSI_YELLOW = "\u001B[33m"
private val ANSI_BLUE = "\u001B[34m"
private val ANSI_PURPLE = "\u001B[35m"
private val ANSI_CYAN = "\u001B[36m"
private val ANSI_WHITE = "\u001B[37m"
private var Loglevel = 0
/**
* Log critical Error
*
* @param msg message
*/
fun criticalerror(msg: Any) {
if (Loglevel <= CRITICAL_ERROR) log(msg, CRITICAL_ERROR)
}
/**
* Log basic Error
*
* @param msg message
*/
fun error(msg: Any) {
if (Loglevel <= ERROR) log(msg, ERROR)
}
/**
* Log warning
*
* @param msg message
*/
fun warning(msg: Any) {
if (Loglevel <= WARNING) log(msg, WARNING)
}
/**
* Log info
*
* @param msg message
*/
fun info(msg: Any) {
if (Loglevel <= INFO) log(msg, INFO)
}
/**
* Log basic message
*
* @param msg message
*/
fun message(msg: Any) {
if (Loglevel <= MESSAGE) log(msg, MESSAGE)
}
/**
* Log debug Message
*
* @param msg message
*/
fun debug(msg: Any) {
if (Loglevel <= DEBUG) log(msg, DEBUG)
}
/**
* Log as defined
*
* @param msg message
* @param level Loglevel --> static vals defined
*/
fun log(msg: Any, level: Int) {
val iswindows = System.getProperty("os.name").contains("Windows")
val builder = StringBuilder()
if (!iswindows) {
when (level) {
INFO -> builder.append(ANSI_CYAN)
WARNING -> builder.append(ANSI_YELLOW)
ERROR -> builder.append(ANSI_RED)
CRITICAL_ERROR -> builder.append(ANSI_RED)
MESSAGE -> builder.append(ANSI_WHITE)
DEBUG -> builder.append(ANSI_BLUE)
}
}
builder.append("[")
builder.append(calcDate(System.currentTimeMillis()))
builder.append("]")
builder.append(" [")
builder.append(Exception().stackTrace[2].className)
builder.append("]")
builder.append(" [")
builder.append(colors[level])
builder.append("]")
if (!iswindows) {
builder.append(ANSI_WHITE)
}
builder.append(" - ")
builder.append(msg.toString())
if (!iswindows) {
builder.append(ANSI_RESET)
}
println(builder.toString())
}
/**
* define Loglevel call on startup or at runtime
* default: 0[DEBUG] --> Max logging
*
* @param level Loglevel --> static vals defined
*/
fun setLevel(level: Int) {
Loglevel = level
}
private val colors = ArrayList(Arrays.asList("", "DEBUG", "MESSAGE", "INFO", "WARNING", "ERROR", "CRITICAL_ERROR"))
private fun calcDate(millisecs: Long): String? {
val date_format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val resultdate = Date(millisecs)
return date_format.format(resultdate)
}
}
}

View File

@ -50,7 +50,7 @@ abstract class Database {
}
}
Log.debug(row);
Log.Log.debug(row);
}
} catch (SQLException e) {

View File

@ -35,7 +35,7 @@ public class MqttService {
try {
db = JDBC.getInstance();
} catch (IOException e) {
Log.error("no connetion to db");
Log.Log.error("no connetion to db");
}
}
@ -52,14 +52,14 @@ public class MqttService {
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
Log.error("connection lost");
Log.Log.error("connection lost");
// TODO: 12.01.20 reconnect
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) {
String deviceid = new String(mqttMessage.getPayload());
Log.message("received Request from PCB");
Log.Log.message("received Request from PCB");
ResultSet res = db.executeQuery("SELECT * from devices WHERE DeviceID=" + deviceid);
try {
@ -87,7 +87,7 @@ public class MqttService {
} else {
//new device
db.executeUpdate("INSERT INTO devices (DeviceID) VALUES (" + deviceid + ")");
Log.info("new device registered to server");
Log.Log.info("new device registered to server");
tramsmitMessage(deviceid + ",-1");
}
} catch (SQLException e) {
@ -102,7 +102,7 @@ public class MqttService {
});
client.subscribe("TopicIn");
} catch (MqttException e) {
Log.error("Connection to the Broker failed");
Log.Log.error("Connection to the Broker failed");
}
}
@ -127,23 +127,23 @@ public class MqttService {
result.last();
if (result.getRow() == 0) {
//if not found in db --> send zero
Log.debug("not found in db");
Log.Log.debug("not found in db");
tramsmitMessage(deviceid + "," + wastetype + "," + 0);
} else {
Log.debug(result.getString("pickupdate"));
Log.Log.debug(result.getString("pickupdate"));
result.first();
do {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
long timestamp = formatter.parse(result.getString("pickupdate")).getTime();
long timestampnow = formatter.parse(formatter.format(new Date())).getTime();
Log.debug("timestamp is :" + timestamp);
Log.Log.debug("timestamp is :" + timestamp);
if (timestamp == timestampnow || timestamp == timestampnow + 86400000) { // 86400000 == one day
// valid time
tramsmitMessage(deviceid + "," + wastetype + "," + 1);
Log.debug("valid time");
Log.Log.debug("valid time");
return;
}
} while (result.next());
@ -156,7 +156,7 @@ public class MqttService {
private void tramsmitMessage(String temp) {
Log.debug("sending message >>>" + temp);
Log.Log.debug("sending message >>>" + temp);
MqttMessage message = new MqttMessage(temp.getBytes());
message.setQos(2);
try {

View File

@ -1,30 +0,0 @@
package com.wasteinformationserver.website;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* basic http tools
*
* @author Lukas Heiligenbrunner
*/
public class HttpTools {
/**
* create md5 hash of string
*
* @param value input string
* @return md5 hash
*/
public static String StringToMD5(String value) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(value.getBytes());
BigInteger no = new BigInteger(1, messageDigest);
return no.toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
}
}

View File

@ -0,0 +1,32 @@
package com.wasteinformationserver.website
import java.math.BigInteger
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
/**
* basic http tools
*
* @author Lukas Heiligenbrunner
*/
class HttpTools {
companion object{
/**
* create md5 hash of string
*
* @param value input string
* @return md5 hash
*/
fun StringToMD5(value: String): String {
return try {
val md = MessageDigest.getInstance("MD5")
val messageDigest = md.digest(value.toByteArray())
val no = BigInteger(1, messageDigest)
no.toString(16)
} catch (e: NoSuchAlgorithmException) {
e.printStackTrace()
""
}
}
}
}

View File

@ -1,79 +0,0 @@
// Dear programmer:
// When I wrote this code, only god and
// I knew how it worked.
// Now, only god knows it!
//
// Therefore, if you are trying to optimize
// this routine and it fails (most surely),
// please increase this counter as a
// warning for the next person:
//
// total hours wasted here = 254
//
package com.wasteinformationserver.website;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.wasteinformationserver.basicutils.Log;
import com.wasteinformationserver.website.datarequests.login.LoginState;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class MainPage implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String path = t.getRequestURI().getPath();
if (path.equals("/")) {
path += "index.html";
}
Log.debug("looking for: " + path);
if (path.contains(".html")) {
if (LoginState.getObject().isLoggedIn() || path.equals("/register.html") || path.equals("/index.html")) { //pass only register page
sendPage(path, t);
} else {
Log.warning("user not logged in --> redirecting to login page");
sendPage("/index.html", t);
}
} else { //only detect login state on html pages
sendPage(path, t);
}
}
private void sendPage(String path, HttpExchange t) throws IOException {
InputStream fs = getClass().getResourceAsStream("/wwwroot" + path);
if (fs == null && path.contains(".html")) {
Log.warning("wrong page sending 404");
sendPage("/404Error.html", t);
} else if (fs == null) {
Log.warning("requested resource doesnt exist --> "+path);
} else {
// Object exists and is a file: accept with response code 200.
String mime = "text/html";
final String s = path.substring(path.length() - 3);
if (s.equals(".js")) mime = "application/javascript";
if (s.equals("css")) mime = "text/css";
Headers h = t.getResponseHeaders();
h.set("Content-Type", mime);
t.sendResponseHeaders(200, 0);
OutputStream os = t.getResponseBody();
final byte[] buffer = new byte[0x10000];
int count;
while ((count = fs.read(buffer)) >= 0) {
os.write(buffer, 0, count);
}
fs.close();
os.close();
}
}
}

View File

@ -0,0 +1,56 @@
package com.wasteinformationserver.website
import com.sun.net.httpserver.HttpExchange
import com.sun.net.httpserver.HttpHandler
import com.wasteinformationserver.basicutils.Log.Log.debug
import com.wasteinformationserver.basicutils.Log.Log.warning
import com.wasteinformationserver.website.datarequests.login.LoginState
import java.io.IOException
class MainPage : HttpHandler {
@Throws(IOException::class)
override fun handle(t: HttpExchange) {
var path = t.requestURI.path
if (path == "/") {
path += "index.html"
}
debug("looking for: $path")
if (path.contains(".html")) {
if (LoginState.getObject().isLoggedIn || path == "/register.html" || path == "/index.html") { //pass only register page
sendPage(path, t)
} else {
warning("user not logged in --> redirecting to login page")
sendPage("/index.html", t)
}
} else { //only detect login state on html pages
sendPage(path, t)
}
}
@Throws(IOException::class)
private fun sendPage(path: String, t: HttpExchange) {
val fs = javaClass.getResourceAsStream("/wwwroot$path")
if (fs == null && path.contains(".html")) {
warning("wrong page sending 404")
sendPage("/404Error.html", t)
} else if (fs == null) {
warning("requested resource doesnt exist --> $path")
} else { // Object exists and is a file: accept with response code 200.
var mime = "text/html"
val s = path.substring(path.length - 3)
if (s == ".js") mime = "application/javascript"
if (s == "css") mime = "text/css"
val h = t.responseHeaders
h["Content-Type"] = mime
t.sendResponseHeaders(200, 0)
val os = t.responseBody
val buffer = ByteArray(0x10000)
var count: Int
while (fs.read(buffer).also { count = it } >= 0) {
os.write(buffer, 0, count)
}
fs.close()
os.close()
}
}
}

View File

@ -1,40 +0,0 @@
package com.wasteinformationserver.website;
import com.sun.net.httpserver.HttpServer;
import com.wasteinformationserver.basicutils.Log;
import com.wasteinformationserver.website.datarequests.*;
import com.wasteinformationserver.website.datarequests.login.CheckLoginState;
import com.wasteinformationserver.website.datarequests.login.LoginRequest;
import java.io.IOException;
import java.net.BindException;
import java.net.InetSocketAddress;
public class Webserver {
public void startserver() {
Log.info("starting Webserver");
try {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/", new MainPage());
server.createContext("/senddata/loginget", new LoginRequest());
server.createContext("/senddata/registerpost", new RegisterRequest());
server.createContext("/senddata/checkloginstate", new CheckLoginState());
server.createContext("/senddata/wastedata", new DataRequest());
server.createContext("/senddata/admindata", new AdminRequests());
server.createContext("/senddata/newdate", new NewDateRequest());
server.createContext("/senddata/Devicedata", new DeviceRequest());
server.setExecutor(null); // creates a default executor
server.start();
Log.info("Server available at http://127.0.0.1:8000 now");
} catch (BindException e) {
Log.criticalerror("The Port 8000 is already in use!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,35 @@
package com.wasteinformationserver.website
import com.sun.net.httpserver.HttpServer
import com.wasteinformationserver.basicutils.Log.Log.criticalerror
import com.wasteinformationserver.basicutils.Log.Log.info
import com.wasteinformationserver.website.datarequests.*
import com.wasteinformationserver.website.datarequests.login.CheckLoginState
import com.wasteinformationserver.website.datarequests.login.LoginRequest
import java.io.IOException
import java.net.BindException
import java.net.InetSocketAddress
class Webserver {
fun startserver() {
info("starting Webserver")
try {
val server = HttpServer.create(InetSocketAddress(8000), 0)
server.createContext("/", MainPage())
server.createContext("/senddata/loginget", LoginRequest())
server.createContext("/senddata/registerpost", RegisterRequest())
server.createContext("/senddata/checkloginstate", CheckLoginState())
server.createContext("/senddata/wastedata", DataRequest())
server.createContext("/senddata/admindata", AdminRequests())
server.createContext("/senddata/newdate", NewDateRequest())
server.createContext("/senddata/Devicedata", DeviceRequest())
server.executor = null // creates a default executor
server.start()
info("Server available at http://127.0.0.1:8000 now")
} catch (e: BindException) {
criticalerror("The Port 8000 is already in use!")
} catch (e: IOException) {
e.printStackTrace()
}
}
}

View File

@ -1,49 +0,0 @@
package com.wasteinformationserver.website.basicrequest;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
/**
* basic GET request handler
* reply function has to be implemented!
*/
public abstract class GetRequest implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
if (httpExchange.getRequestMethod().equals("GET")) {
String query = httpExchange.getRequestURI().getQuery();
HashMap<String, String> params = new HashMap<>();
String[] res = query.split("&");
for (String str : res) {
String[] values = str.split("=");
params.put(values[0], values[1]);
}
String response = myrequest(params);
Headers h = httpExchange.getResponseHeaders();
h.set("Content-Type", "application/json");
httpExchange.sendResponseHeaders(200, 0);
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
/**
* @param params received get params from com.wasteinformationserver.website
* @return json reply to com.wasteinformationserver.website
*/
public abstract String myrequest(HashMap<String, String> params);
}

View File

@ -0,0 +1,38 @@
package com.wasteinformationserver.website.basicrequest
import com.sun.net.httpserver.HttpExchange
import com.sun.net.httpserver.HttpHandler
import java.io.IOException
import java.util.*
/**
* basic GET request handler
* reply function has to be implemented!
*/
abstract class GetRequest : HttpHandler {
@Throws(IOException::class)
override fun handle(httpExchange: HttpExchange) {
if (httpExchange.requestMethod == "GET") {
val query = httpExchange.requestURI.query
val params = HashMap<String, String>()
val res = query.split("&".toRegex()).toTypedArray()
for (str in res) {
val values = str.split("=".toRegex()).toTypedArray()
params[values[0]] = values[1]
}
val response = myrequest(params)
val h = httpExchange.responseHeaders
h["Content-Type"] = "application/json"
httpExchange.sendResponseHeaders(200, 0)
val os = httpExchange.responseBody
os.write(response.toByteArray())
os.close()
}
}
/**
* @param params received get params from com.wasteinformationserver.website
* @return json reply to com.wasteinformationserver.website
*/
abstract fun myrequest(params: HashMap<String, String>?): String
}

View File

@ -1,55 +0,0 @@
package com.wasteinformationserver.website.basicrequest;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
/**
* basic POST request handler
* reply function has to be implemented!
*/
public abstract class PostRequest implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
if (httpExchange.getRequestMethod().equals("POST")) {
StringBuilder sb = new StringBuilder();
InputStream ios = httpExchange.getRequestBody();
int i;
while ((i = ios.read()) != -1) {
sb.append((char) i);
}
String query = sb.toString();
HashMap<String, String> params = new HashMap<>();
String[] res = query.split("&");
for (String str : res) {
String[] values = str.split("=");
params.put(values[0], values[1]);
}
String response = request(params);
Headers h = httpExchange.getResponseHeaders();
h.set("Content-Type", "application/json");
httpExchange.sendResponseHeaders(200, 0);
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
/**
* @param params received get params from com.wasteinformationserver.website
* @return json reply to com.wasteinformationserver.website
*/
public abstract String request(HashMap<String, String> params);
}

View File

@ -0,0 +1,44 @@
package com.wasteinformationserver.website.basicrequest
import com.sun.net.httpserver.HttpExchange
import com.sun.net.httpserver.HttpHandler
import java.io.IOException
import java.util.*
/**
* basic POST request handler
* reply function has to be implemented!
*/
abstract class PostRequest : HttpHandler {
@Throws(IOException::class)
override fun handle(httpExchange: HttpExchange) {
if (httpExchange.requestMethod == "POST") {
val sb = StringBuilder()
val ios = httpExchange.requestBody
var i: Int
while (ios.read().also { i = it } != -1) {
sb.append(i.toChar())
}
val query = sb.toString()
val params = HashMap<String, String>()
val res = query.split("&".toRegex()).toTypedArray()
for (str in res) {
val values = str.split("=".toRegex()).toTypedArray()
params[values[0]] = values[1]
}
val response = request(params)
val h = httpExchange.responseHeaders
h["Content-Type"] = "application/json"
httpExchange.sendResponseHeaders(200, 0)
val os = httpExchange.responseBody
os.write(response.toByteArray())
os.close()
}
}
/**
* @param params received get params from com.wasteinformationserver.website
* @return json reply to com.wasteinformationserver.website
*/
abstract fun request(params: HashMap<String, String>?): String
}

View File

@ -28,7 +28,7 @@ public class AdminRequests extends PostRequest {
/* is it a jar file? */
if (!currentJar.getName().endsWith(".jar"))
Log.warning("not jar --> cant restart");
Log.Log.warning("not jar --> cant restart");
/* Build command: java -jar application.jar */
final ArrayList<String> command = new ArrayList<String>();

View File

@ -24,17 +24,17 @@ public class DataRequest extends PostRequest {
try {
jdbc = JDBC.getInstance();
} catch (IOException e) {
Log.error("no connection to db");
Log.Log.error("no connection to db");
return "{\"query\" : \"nodbconn\"}";
}
switch (params.get("action")) {
case "newCity":
sb.append("{");
Log.debug(params.toString());
Log.Log.debug(params.toString());
// check if wastezone and wasteregion already exists
Log.debug(params.get("cityname") + params.get("wastetype") + params.get("wastezone"));
Log.Log.debug(params.get("cityname") + params.get("wastetype") + params.get("wastezone"));
set = jdbc.executeQuery("select * from `cities` where `name`='" + params.get("cityname") + "' AND `wastetype`='" + params.get("wastetype") + "' AND `zone`='" + params.get("wastezone") + "'");
int size = 0;
try {
@ -60,7 +60,7 @@ public class DataRequest extends PostRequest {
}
} else if (size > 1) {
Log.warning("more than one entry in db!!!");
Log.Log.warning("more than one entry in db!!!");
sb.append("\"status\" : \"exists\"");
} else {
//already exists
@ -72,7 +72,7 @@ public class DataRequest extends PostRequest {
break;
case "getAllCities":
set = jdbc.executeQuery("select * from cities");
Log.debug(set.toString());
Log.Log.debug(set.toString());
sb.append("{\"data\":[");
try {
while (set.next()) {
@ -103,14 +103,14 @@ public class DataRequest extends PostRequest {
sb.append("\"status\" : \"error\"");
}
} catch (SQLIntegrityConstraintViolationException e) {
Log.warning("dependencies of deletion exist");
Log.Log.warning("dependencies of deletion exist");
sb.append("\"status\" : \"dependenciesnotdeleted\"");
} catch (SQLException e) {
Log.error("sql exception: " + e.getMessage());
Log.Log.error("sql exception: " + e.getMessage());
sb.append("\"status\" : \"error\"");
}
Log.debug(status);
Log.Log.debug(status);
sb.append(",\"query\":\"ok\"");
sb.append("}");
@ -149,10 +149,10 @@ public class DataRequest extends PostRequest {
sb.append("\"status\" : \"error\"");
}
} catch (SQLIntegrityConstraintViolationException e) {
Log.warning("dependencies of deletion exist");
Log.Log.warning("dependencies of deletion exist");
sb.append("\"status\" : \"dependenciesnotdeleted\"");
} catch (SQLException e) {
Log.error("sql exception: " + e.getMessage());
Log.Log.error("sql exception: " + e.getMessage());
sb.append("\"status\" : \"error\"");
}
@ -197,7 +197,7 @@ public class DataRequest extends PostRequest {
set.last();
sb.append(",\"citynumber\":\"" + set.getRow() + "\"");
} catch (SQLException e) {
Log.error("sql exception: " + e.getMessage());
Log.Log.error("sql exception: " + e.getMessage());
sb.append("\"status\" : \"error\"");
}

View File

@ -65,7 +65,7 @@ public class DeviceRequest extends PostRequest {
break;
case "getCitynames":
deviceset = jdbc.executeQuery("select * from cities");
Log.debug(deviceset.toString());
Log.Log.debug(deviceset.toString());
sb.append("{");
try {
String prev = "";
@ -82,11 +82,11 @@ public class DeviceRequest extends PostRequest {
e.printStackTrace();
}
sb.append("}");
Log.debug(sb.toString());
Log.Log.debug(sb.toString());
break;
case "getzones":
deviceset = jdbc.executeQuery("select * from cities WHERE `name`='" + params.get("cityname") + "' ORDER BY zone ASC");
Log.debug(deviceset.toString());
Log.Log.debug(deviceset.toString());
sb.append("{");
try {
int prev = 42;
@ -106,7 +106,7 @@ public class DeviceRequest extends PostRequest {
break;
case "gettypes":
deviceset = jdbc.executeQuery("select * from cities WHERE `name`='" + params.get("cityname") + "' AND `zone`='" + params.get("zonename") + "' ORDER BY zone ASC");
Log.debug(deviceset.toString());
Log.Log.debug(deviceset.toString());
sb.append("{");
try {
String prev = "42";

View File

@ -18,13 +18,13 @@ public class NewDateRequest extends PostRequest {
try {
jdbc = JDBC.getInstance();
} catch (IOException e) {
Log.error("no connection to db");
Log.Log.error("no connection to db");
return "{\"query\" : \"nodbconn\"}";
}
switch (params.get("action")) {
case "getCitynames":
set = jdbc.executeQuery("select * from cities");
Log.debug(set.toString());
Log.Log.debug(set.toString());
sb.append("{\"data\":[");
try {
String prev = "";
@ -45,11 +45,11 @@ public class NewDateRequest extends PostRequest {
sb.append("]");
sb.append(",\"query\":\"ok\"");
sb.append("}");
Log.debug(sb.toString());
Log.Log.debug(sb.toString());
break;
case "getzones":
set = jdbc.executeQuery("select * from cities WHERE `name`='" + params.get("cityname") + "' ORDER BY zone ASC");
Log.debug(set.toString());
Log.Log.debug(set.toString());
sb.append("{\"data\":[");
try {
int prev = 42;
@ -73,7 +73,7 @@ public class NewDateRequest extends PostRequest {
break;
case "gettypes":
set = jdbc.executeQuery("select * from cities WHERE `name`='" + params.get("cityname") + "' AND `zone`='"+params.get("zonename")+"' ORDER BY zone ASC");
Log.debug(set.toString());
Log.Log.debug(set.toString());
sb.append("{\"data\":[");
try {
String prev = "42";
@ -97,12 +97,12 @@ public class NewDateRequest extends PostRequest {
break;
case "newdate":
sb.append("{");
Log.debug(params);
Log.Log.debug(params);
set = jdbc.executeQuery("select * from cities WHERE `name`='" + params.get("cityname") + "' AND `zone`='" + params.get("zone") + "' AND `wastetype`='" + params.get("wastetype") + "'");
try {
set.last();
if (set.getRow() == 1) {
Log.debug(set.getInt("id"));
Log.Log.debug(set.getInt("id"));
int status = jdbc.executeUpdate("INSERT INTO `pickupdates`(`citywastezoneid`, `pickupdate`) VALUES ('" + set.getInt("id") + "','" + params.get("date") + "')");
if (status == 1) {
@ -111,7 +111,7 @@ public class NewDateRequest extends PostRequest {
sb.append("\"status\" : \"error\"");
}
} else {
Log.warning("city doesnt exist!");
Log.Log.warning("city doesnt exist!");
sb.append("\"status\" : \"citydoesntexist\"");
}

View File

@ -12,9 +12,9 @@ import java.util.HashMap;
public class RegisterRequest extends PostRequest {
@Override
public String request(HashMap<String, String> params) {
Log.debug(params.toString());
Log.Log.debug(params.toString());
String passhash = HttpTools.StringToMD5(params.get("password"));
String passhash = HttpTools.Companion.StringToMD5(params.get("password"));
JDBC myjd = null;
try {

View File

@ -11,7 +11,7 @@ import java.util.HashMap;
public class CheckLoginState extends PostRequest {
@Override
public String request(HashMap<String, String> params) {
Log.message("checking login state");
Log.Log.message("checking login state");
if ((params.get("action")).equals("getloginstate")) {
if (LoginState.getObject().isLoggedIn()) {
return "{\"loggedin\":true, \"username\":\"" + LoginState.getObject().getUsername() + "\", \"permission\":\"" + LoginState.getObject().getPermission() + "\"}";
@ -19,7 +19,7 @@ public class CheckLoginState extends PostRequest {
return "{\"loggedin\":false}";
}
} else if ((params.get("action")).equals("logout")) {
Log.debug("logging out");
Log.Log.debug("logging out");
LoginState.getObject().logOut();
return "{\"loggedin\":false}";
}

View File

@ -19,7 +19,7 @@ public class LoginRequest extends PostRequest {
@Override
public String request(HashMap<String, String> params) {
Log.message("new login request");
Log.Log.message("new login request");
String password = params.get("password");
String username = params.get("username");
@ -28,34 +28,34 @@ public class LoginRequest extends PostRequest {
try {
jdbc = JDBC.getInstance();
} catch (IOException e) {
Log.error("no connection to db");
Log.Log.error("no connection to db");
return "{\"status\" : \"nodbconn\"}";
}
ResultSet s = jdbc.executeQuery("select * from user where username ='" + username + "'");
//new JDCB("users", "kOpaIJUjkgb9ur6S", "wasteinformation").executeQuery("select * from user where username ='" + username + "'");
Log.debug("successfully logged in to db");
Log.Log.debug("successfully logged in to db");
String response = "{\"accept\": false}";
try {
s.last();
if (s.getRow() == 1) {
//success
if (HttpTools.StringToMD5(password).equals(s.getString("password"))) {
Log.debug("login success");
if (HttpTools.Companion.StringToMD5(password).equals(s.getString("password"))) {
Log.Log.debug("login success");
LoginState.getObject().logIn();
LoginState.getObject().setAccountData(username, "", "", "", s.getInt("permission")); // TODO: 06.12.19
response = "{\"accept\": true}";
} else {
Log.debug("wrong password");
Log.Log.debug("wrong password");
}
} else if (s.getRow() == 0) {
//user not found
Log.debug("user not found");
Log.Log.debug("user not found");
} else {
//internal error two users with same name...?
}
Log.debug("rowcount: " + s.getRow());
Log.Log.debug("rowcount: " + s.getRow());
} catch (SQLException e) {
e.printStackTrace();
}