init
This commit is contained in:
parent
64af9a6466
commit
c3cae930ce
67
build.gradle
Normal file
67
build.gradle
Normal file
@ -0,0 +1,67 @@
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.3.61'
|
||||
}
|
||||
|
||||
group 'eu.heili.hometheater'
|
||||
version '0.0.1-Beta'
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
jar {
|
||||
manifest {
|
||||
attributes 'Main-Class': 'eu.heili.hometheater.Main'
|
||||
}
|
||||
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs = ['src/java']
|
||||
main.resources.srcDirs = ['src/resources']
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile group: 'org.eclipse.paho', name: 'org.eclipse.paho.client.mqttv3', version: '1.2.2'
|
||||
compile group: 'mysql',name:'mysql-connector-java',version: '8.0.18'
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
||||
}
|
||||
|
||||
task run (type: JavaExec){
|
||||
description = "Secure algorythm testing"
|
||||
main = 'eu.heili.hometheater.Main'
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
}
|
||||
|
||||
task createProperties(dependsOn: processResources) {
|
||||
doLast {
|
||||
new File("$projectDir/src/resources/version.properties").withWriter { w ->
|
||||
Properties p = new Properties()
|
||||
p['version'] = project.version.toString()
|
||||
p['buildtime'] = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(new Date())
|
||||
p.store w, null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task myJavadocs(type: Javadoc) {
|
||||
title = "JAVADOC hometheater"
|
||||
source = sourceSets.main.allJava
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
}
|
||||
|
||||
classes {
|
||||
dependsOn createProperties
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
||||
compileTestKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
1
settings.gradle
Normal file
1
settings.gradle
Normal file
@ -0,0 +1 @@
|
||||
rootProject.name = 'Home-Theater'
|
41
src/java/eu/heili/hometheater/Main.kt
Normal file
41
src/java/eu/heili/hometheater/Main.kt
Normal file
@ -0,0 +1,41 @@
|
||||
@file:JvmName("Main")
|
||||
package eu.heili.hometheater
|
||||
|
||||
import eu.heili.hometheater.basicutils.Info
|
||||
import eu.heili.hometheater.basicutils.Log
|
||||
import eu.heili.hometheater.db.JDBC
|
||||
import eu.heili.hometheater.website.Webserver
|
||||
import java.io.IOException
|
||||
|
||||
fun main() {
|
||||
Log.setLevel(Log.DEBUG)
|
||||
Info.init()
|
||||
|
||||
Log.info("startup of Home-Theater")
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(Thread(Runnable {
|
||||
try {
|
||||
Thread.sleep(200)
|
||||
Log.warning("Shutting down ...")
|
||||
//shutdown routine
|
||||
} catch (e: InterruptedException) {
|
||||
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("todo", "todo", "todo", "todo.heili.eu", 3306)
|
||||
} catch (e: IOException) { //e.printStackTrace();
|
||||
Log.error("no connection to db")
|
||||
}
|
||||
|
||||
|
||||
//startup web server
|
||||
val mythread = Thread(Runnable { Webserver().startserver() })
|
||||
mythread.start()
|
||||
}
|
85
src/java/eu/heili/hometheater/basicutils/Info.java
Normal file
85
src/java/eu/heili/hometheater/basicutils/Info.java
Normal file
@ -0,0 +1,85 @@
|
||||
package eu.heili.hometheater.basicutils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.text.NumberFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* get basic infos about Software
|
||||
*
|
||||
* @author Lukas Heiligenbrunner
|
||||
*/
|
||||
public class Info {
|
||||
private static String version = "not init";
|
||||
private static String builddate = "not init";
|
||||
private static String starttime = "not init";
|
||||
|
||||
/**
|
||||
* get Software Version (defined in gradle build file)
|
||||
*
|
||||
* @return Version as string
|
||||
*/
|
||||
public static String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* get Software build date
|
||||
*
|
||||
* @return Date as string
|
||||
*/
|
||||
public static String getBuilddate() {
|
||||
return builddate;
|
||||
}
|
||||
|
||||
/**
|
||||
* get Server start time
|
||||
*
|
||||
* @return start time
|
||||
*/
|
||||
public static String getStarttime() {
|
||||
return starttime;
|
||||
}
|
||||
|
||||
/**
|
||||
* initialize the version and builddate variables
|
||||
*/
|
||||
public static void init() {
|
||||
starttime = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(new Date());
|
||||
Properties prop = new Properties();
|
||||
try {
|
||||
URL url = Info.class.getResource("/version.properties");
|
||||
|
||||
prop.load(url.openStream());
|
||||
version = (String) prop.get("version");
|
||||
builddate = (String) prop.get("buildtime");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* print memory utilization
|
||||
* todo parse into website somehow
|
||||
*/
|
||||
public static void getMemoryUsage() {
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
|
||||
NumberFormat format = NumberFormat.getInstance();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
long maxMemory = runtime.maxMemory();
|
||||
long allocatedMemory = runtime.totalMemory();
|
||||
long freeMemory = runtime.freeMemory();
|
||||
|
||||
sb.append("free memory: " + format.format(freeMemory / 1024) + "\n");
|
||||
sb.append("allocated memory: " + format.format(allocatedMemory / 1024) + "\n");
|
||||
sb.append("max memory: " + format.format(maxMemory / 1024) + "\n");
|
||||
sb.append("total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory)) / 1024) + "\n");
|
||||
|
||||
System.out.println(sb.toString());
|
||||
}
|
||||
}
|
139
src/java/eu/heili/hometheater/basicutils/Log.kt
Normal file
139
src/java/eu/heili/hometheater/basicutils/Log.kt
Normal file
@ -0,0 +1,139 @@
|
||||
package eu.heili.hometheater.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)
|
||||
}
|
||||
}
|
||||
}
|
25
src/java/eu/heili/hometheater/db/Database.java
Executable file
25
src/java/eu/heili/hometheater/db/Database.java
Executable file
@ -0,0 +1,25 @@
|
||||
package eu.heili.hometheater.db;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
abstract class Database {
|
||||
|
||||
protected String user;
|
||||
protected String password;
|
||||
|
||||
protected String host;
|
||||
protected int port;
|
||||
|
||||
protected String dbName;
|
||||
|
||||
public Database(String user, String password, String host, int port, String dbName) {
|
||||
this.user = user;
|
||||
this.password = password;
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
this.dbName = dbName;
|
||||
}
|
||||
|
||||
public abstract Connection getConnection() throws SQLException;
|
||||
}
|
111
src/java/eu/heili/hometheater/db/JDBC.java
Normal file
111
src/java/eu/heili/hometheater/db/JDBC.java
Normal file
@ -0,0 +1,111 @@
|
||||
package eu.heili.hometheater.db;
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* basic connection class to a Database
|
||||
*
|
||||
* @author Lukas Heiligenbrunner
|
||||
*/
|
||||
public class JDBC {
|
||||
private static Connection conn;
|
||||
|
||||
private static JDBC JDBC;
|
||||
private static boolean loggedin = false;
|
||||
|
||||
private static String usernamec;
|
||||
private static String passwordc;
|
||||
private static String dbnamec;
|
||||
private static String ipc;
|
||||
private static int portc;
|
||||
|
||||
/**
|
||||
* initialize database values
|
||||
* suggested on startup
|
||||
*
|
||||
* @param username db username
|
||||
* @param password db password
|
||||
* @param dbname Database name
|
||||
* @param ip Server ip or hostname
|
||||
* @param port Server port
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void init(String username, String password, String dbname, String ip, int port) throws IOException {
|
||||
usernamec = username;
|
||||
passwordc = password;
|
||||
dbnamec = dbname;
|
||||
ipc = ip;
|
||||
portc = port;
|
||||
JDBC = new JDBC(username, password, dbname, ip, port);
|
||||
}
|
||||
|
||||
private JDBC(String username, String password, String dbname, String ip, int port) throws IOException {
|
||||
logintodb(username, password, dbname, ip, port);
|
||||
}
|
||||
|
||||
/**
|
||||
* get instance of db object
|
||||
* logindata has to be set before!
|
||||
*
|
||||
* @return JDBC object of this
|
||||
* @throws IOException
|
||||
*/
|
||||
public static JDBC getInstance() throws IOException {
|
||||
if (loggedin) {
|
||||
return JDBC;
|
||||
} else {
|
||||
logintodb(usernamec, passwordc, dbnamec, ipc, portc);
|
||||
return JDBC;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void logintodb(String username, String password, String dbname, String ip, int port) throws IOException {
|
||||
Database db = new MySQLConnector(
|
||||
username,
|
||||
password,
|
||||
ip,
|
||||
port,
|
||||
dbname);
|
||||
|
||||
try {
|
||||
conn = db.getConnection();
|
||||
loggedin = true;
|
||||
} catch (SQLException e) {
|
||||
throw new IOException("No connection to database");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* execute basic query --> requests only
|
||||
*
|
||||
* @param sql query sql statement
|
||||
* @return ResultSet representating the table
|
||||
*/
|
||||
public ResultSet executeQuery(String sql) {
|
||||
try {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
return stmt.executeQuery();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* update db in some way
|
||||
*
|
||||
* @param sql sql insert/update/delete statement
|
||||
* @return status
|
||||
* @throws SQLException
|
||||
*/
|
||||
public int executeUpdate(String sql) throws SQLException {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
|
||||
return stmt.executeUpdate();
|
||||
}
|
||||
}
|
29
src/java/eu/heili/hometheater/db/MySQLConnector.java
Executable file
29
src/java/eu/heili/hometheater/db/MySQLConnector.java
Executable file
@ -0,0 +1,29 @@
|
||||
package eu.heili.hometheater.db;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
|
||||
class MySQLConnector extends Database {
|
||||
|
||||
static {
|
||||
try {
|
||||
Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public MySQLConnector(String user, String password, String host, int port, String dbName) {
|
||||
super(user, password, host, port, dbName);
|
||||
}
|
||||
|
||||
public Connection getConnection() throws SQLException {
|
||||
DriverManager.setLoginTimeout(1);
|
||||
return DriverManager.getConnection(
|
||||
"jdbc:mysql://" + host + ":" + port + "/" + dbName + "?useSSL=false",
|
||||
user,
|
||||
password);
|
||||
}
|
||||
|
||||
}
|
32
src/java/eu/heili/hometheater/website/HttpTools.kt
Normal file
32
src/java/eu/heili/hometheater/website/HttpTools.kt
Normal file
@ -0,0 +1,32 @@
|
||||
package eu.heili.hometheater.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()
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
56
src/java/eu/heili/hometheater/website/MainPage.kt
Normal file
56
src/java/eu/heili/hometheater/website/MainPage.kt
Normal file
@ -0,0 +1,56 @@
|
||||
package eu.heili.hometheater.website
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange
|
||||
import com.sun.net.httpserver.HttpHandler
|
||||
import eu.heili.hometheater.basicutils.Log.Log.debug
|
||||
import eu.heili.hometheater.basicutils.Log.Log.warning
|
||||
import eu.heili.hometheater.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()
|
||||
}
|
||||
}
|
||||
}
|
27
src/java/eu/heili/hometheater/website/Webserver.kt
Normal file
27
src/java/eu/heili/hometheater/website/Webserver.kt
Normal file
@ -0,0 +1,27 @@
|
||||
package eu.heili.hometheater.website
|
||||
|
||||
import com.sun.net.httpserver.HttpServer
|
||||
import eu.heili.hometheater.basicutils.Log.Log.criticalerror
|
||||
import eu.heili.hometheater.basicutils.Log.Log.info
|
||||
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(8080), 0)
|
||||
server.createContext("/", MainPage())
|
||||
// todo insert get and post request sites here!
|
||||
server.executor = null // creates a default executor
|
||||
server.start()
|
||||
info("Server available at http://127.0.0.1:8080 now")
|
||||
} catch (e: BindException) {
|
||||
criticalerror("The Port 8080 is already in use!")
|
||||
// todo option to choose other port
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
@ -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
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package eu.heili.hometheater.website.datarequests.login;
|
||||
|
||||
/**
|
||||
* @author Lukas Heiligenbrunner
|
||||
*/
|
||||
public class LoginState {
|
||||
|
||||
private static LoginState mythis = new LoginState();
|
||||
|
||||
public static LoginState getObject() {
|
||||
return mythis;
|
||||
}
|
||||
|
||||
private String username;
|
||||
private String firstname;
|
||||
private String lastname;
|
||||
private String email;
|
||||
private int permission;
|
||||
|
||||
boolean loggedin = false;
|
||||
|
||||
public void logIn() {
|
||||
loggedin = true;
|
||||
}
|
||||
|
||||
public void logOut() {
|
||||
loggedin = false;
|
||||
}
|
||||
|
||||
public void setAccountData(String username, String firstname, String lastname, String email, int permission) {
|
||||
this.username = username;
|
||||
this.firstname = firstname;
|
||||
this.lastname = lastname;
|
||||
this.email = email;
|
||||
this.permission = permission;
|
||||
}
|
||||
|
||||
public boolean isLoggedIn() {
|
||||
return loggedin;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getFirstname() {
|
||||
return firstname;
|
||||
}
|
||||
|
||||
public String getLastname() {
|
||||
return lastname;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public int getPermission() {
|
||||
return permission;
|
||||
}
|
||||
}
|
10
src/resources/wwwroot/index.html
Normal file
10
src/resources/wwwroot/index.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Home-Theater</title>
|
||||
</head>
|
||||
<body>
|
||||
main body
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user