* login process

* register page
* post query
* get query
This commit is contained in:
Lukas-Heiligenbrunner 2019-09-27 10:58:13 +02:00
parent a495798aee
commit b78f31670f
13 changed files with 434 additions and 119 deletions

View File

@ -7,27 +7,33 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
public class jdcb { public class jdcb {
public void executeQuery(String sql) { String username;
String password;
String dbName;
public jdcb(String username, String password, String dbName) {
this.username = username;
this.password=password;
this.dbName = dbName;
}
public ResultSet executeQuery(String sql) {
Database db = new MySQLConnector( Database db = new MySQLConnector(
"users", username,
"kOpaIJUjkgb9ur6S", password,
"127.0.0.1", "192.168.65.15",
3306, 3306,
"wasteinformation"); dbName);
Connection c = db.getConnection(); Connection c = db.getConnection();
try { try {
PreparedStatement stmt = PreparedStatement stmt =
c.prepareStatement(sql); c.prepareStatement(sql);
ResultSet r = stmt.executeQuery(); return stmt.executeQuery();
DefaultTableModel model = Database.logToTable(r);
// this.resultTable.setModel(model);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null;
} }
} }

View File

@ -1,5 +1,8 @@
import db.jdcb; import db.jdcb;
import java.sql.ResultSet;
import java.sql.SQLException;
public class main { public class main {
public static void main(String[] args) { public static void main(String[] args) {
/* /*
@ -7,12 +10,14 @@ public class main {
D.getdata(); D.getdata();
D.printList(); D.printList();
*/ */
Thread mythread = new Thread(() -> new website.Webserver().startserver()); Thread mythread = new Thread(() -> new website.Webserver().startserver());
mythread.start(); mythread.start();
System.out.println("thread started"); System.out.println("thread started");
//new jdcb().executeQuery("select * from user");
} }
} }

View File

@ -0,0 +1,49 @@
package website;
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.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
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 website
* @return json reply to website
*/
public abstract String myrequest(HashMap<String, String> params);
}

View File

@ -0,0 +1,19 @@
package website;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HttpTools {
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,41 @@
package website;
import db.jdcb;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
public class LoginRequest extends PostRequest {
@Override
public String request(HashMap<String, String> params) {
String password = params.get("password");
String username = params.get("username");
ResultSet s = new jdcb("users", "kOpaIJUjkgb9ur6S", "wasteinformation").executeQuery("select * from user where username ='" + username + "'");
String response = "{\"accept\": false}";
try {
s.last();
if (s.getRow() == 1) {
//success
if (HttpTools.StringToMD5(password).equals(s.getString("password"))) {
System.out.println("login success");
response = "{\"accept\": true}";
} else {
System.out.println("wrong password");
}
} else if (s.getRow() == 0) {
//user not found
System.out.println("user not found");
} else {
//internal error two users with same name...?
}
System.out.println("rowcount: " + s.getRow());
} catch (SQLException e) {
e.printStackTrace();
}
return response;
}
}

57
src/website/MainPage.java Normal file
View File

@ -0,0 +1,57 @@
package website;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
public class MainPage implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String root = "./wwwroot";
URI uri = t.getRequestURI();
String path;
if (uri.getPath().equals("/")) {
path = "/index.html";
} else {
path = uri.getPath();
}
System.out.println("looking for: " + root + path);
File file = new File(root + path).getCanonicalFile();
if (!file.isFile()) {
// Object does not exist or is not a file: reject with 404 error.
String response = "404 (Not Found)\n";
t.sendResponseHeaders(404, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
} else {
// Object exists and is a file: accept with response code 200.
String mime = "text/html";
if (path.substring(path.length() - 3).equals(".js")) mime = "application/javascript";
if (path.substring(path.length() - 3).equals("css")) mime = "text/css";
Headers h = t.getResponseHeaders();
h.set("Content-Type", mime);
t.sendResponseHeaders(200, 0);
OutputStream os = t.getResponseBody();
FileInputStream fs = new FileInputStream(file);
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,48 @@
package website;
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;
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();
}
}
public abstract String request(HashMap<String, String> params);
}

View File

@ -1,23 +1,13 @@
package website; package website;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.HttpServer;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.net.URI;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
public class Webserver{ import java.net.InetSocketAddress;
public void startserver(){
public class Webserver {
public void startserver() {
System.out.println("starting server"); System.out.println("starting server");
HttpServer server = null; HttpServer server = null;
try { try {
@ -27,100 +17,11 @@ public class Webserver{
} }
server.createContext("/", new MainPage()); server.createContext("/", new MainPage());
server.createContext("/senddata/loginget", new LoginRequest());
server.createContext("/senddata/loginget", httpExchange -> {
if (httpExchange.getRequestMethod().equals("GET")){
String query = httpExchange.getRequestURI().getQuery();
System.out.println(query);
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 password = params.get("password");
String username = params.get("username");
System.out.println(StringToMD5(password));
//TODO check if user exists in database
//send response
String response = "{\"accept\": true}";
Headers h = httpExchange.getResponseHeaders();
h.set("Content-Type", "application/json");
httpExchange.sendResponseHeaders(200, 0);
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
});
server.setExecutor(null); // creates a default executor server.setExecutor(null); // creates a default executor
server.start(); server.start();
} }
public 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 "";
}
}
static class MainPage implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
System.out.println("a new request...");
String root = "./wwwroot";
URI uri = t.getRequestURI();
String path;
if (uri.getPath().equals("/")){
path = "/index.html";
}else{
path = uri.getPath();
}
System.out.println("looking for: "+ root + path);
File file = new File(root + path).getCanonicalFile();
if (!file.isFile()) {
// Object does not exist or is not a file: reject with 404 error.
String response = "404 (Not Found)\n";
t.sendResponseHeaders(404, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
} else {
// Object exists and is a file: accept with response code 200.
String mime = "text/html";
if(path.substring(path.length()-3).equals(".js")) mime = "application/javascript";
if(path.substring(path.length()-3).equals("css")) mime = "text/css";
Headers h = t.getResponseHeaders();
h.set("Content-Type", mime);
t.sendResponseHeaders(200, 0);
OutputStream os = t.getResponseBody();
FileInputStream fs = new FileInputStream(file);
final byte[] buffer = new byte[0x10000];
int count = 0;
while ((count = fs.read(buffer)) >= 0) {
os.write(buffer,0,count);
}
fs.close();
os.close();
}
}
}
} }

89
wwwroot/css/register.css Normal file
View File

@ -0,0 +1,89 @@
/* Made with love by Mutiullah Samim*/
@import url('https://fonts.googleapis.com/css?family=Numans');
html,body{
background-image: url('../rsc/login2.jpg');
background-size: cover;
background-repeat: no-repeat;
height: 100%;
font-family: 'Numans', sans-serif;
}
.container{
height: 100%;
align-content: center;
}
.card{
height: 470px;
margin-top: auto;
margin-bottom: auto;
width: 400px;
background-color: rgba(0,0,0,0.5) !important;
}
.social_icon span{
font-size: 60px;
margin-left: 10px;
color: #FFC312;
}
.social_icon span:hover{
color: white;
cursor: pointer;
}
.card-header h3{
color: white;
}
.social_icon{
position: absolute;
right: 20px;
top: -45px;
}
.input-group-prepend span{
width: 50px;
background-color: #FFC312;
color: black;
border:0 !important;
}
input:focus{
outline: 0 0 0 0 !important;
box-shadow: 0 0 0 0 !important;
}
.remember{
color: white;
}
.remember input
{
width: 20px;
height: 20px;
margin-left: 15px;
margin-right: 5px;
}
.login_btn{
color: black;
background-color: #FFC312;
width: 100px;
}
.login_btn:hover{
color: black;
background-color: white;
}
.links{
color: white;
}
.links a{
margin-left: 4px;
}

View File

@ -57,7 +57,7 @@
</div> </div>
<div class="card-footer"> <div class="card-footer">
<div class="d-flex justify-content-center links"> <div class="d-flex justify-content-center links">
Don't have an account?<a href="#">Sign Up</a> Don't have an account?<a id="signupbtn" href="#">Sign Up</a>
</div> </div>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<a href="#">Forgot your password?</a> <a href="#">Forgot your password?</a>

View File

@ -5,7 +5,7 @@ $(document).ready(function() {
var username = $("#userfield")[0].value; var username = $("#userfield")[0].value;
var password = $("#passfield")[0].value; var password = $("#passfield")[0].value;
$.get('/senddata/loginget?username='+username+'&password='+password,function(data){ $.post('/senddata/loginget','username='+username+'&password='+password,function(data){
console.log(data); console.log(data);
if (data.accept == true) { if (data.accept == true) {
@ -15,4 +15,13 @@ $(document).ready(function() {
} }
},'json'); },'json');
}); });
$('#signupbtn').click(function(e) {
e.preventDefault();
$.post('/senddata/loginpost','username=luki&password=test',function(data){
console.log(data);
},'json');
});
}); });

3
wwwroot/js/register.js Normal file
View File

@ -0,0 +1,3 @@
$(document).ready(function() {
});

88
wwwroot/register.html Normal file
View File

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Login Page</title>
<!--Made with love by Mutiullah Samim -->
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="lib/bootstrap.min.css">
<!-- jQuery library -->
<script src="lib/jquery.min.js"></script>
<!-- Popper JS -->
<script src="lib/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="lib/bootstrap.min.js"></script>
<!--Fontawesome CDN-->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<!--Custom styles-->
<link rel="stylesheet" type="text/css" href="css/register.css">
<script type="text/javascript" src="js/register.js"></script>
</head>
<body>
<div class="container">
<div class="d-flex justify-content-center h-100">
<div class="card">
<div class="card-header">
<h3>Register</h3>
</div>
<div class="card-body">
<form>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<input type="text" class="form-control" placeholder="username" id="usernamefield">
</div>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<input type="text" class="form-control" placeholder="first name" id="firstnamefield">
</div>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<input type="text" class="form-control" placeholder="last name" id="lastnamefield">
</div>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-at"></i></span>
</div>
<input type="text" class="form-control" placeholder="E-Mail" id="emailfield">
</div>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-key"></i></span>
</div>
<input type="password" class="form-control" placeholder="password" id="passfield">
</div>
<div class="input-group form-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-key"></i></span>
</div>
<input type="password" class="form-control" placeholder="Reply password" id="replpassfield">
</div>
<div class="form-group">
<input type="submit" value="Register" class="btn float-right login_btn" id="loginbtn">
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>