Fixed database errors!

This commit is contained in:
Norbi Peti 2016-07-28 11:23:17 +02:00
parent 73ef29e2df
commit 2bfa4a8c50
9 changed files with 987 additions and 958 deletions

1
.gitignore vendored
View file

@ -248,3 +248,4 @@ paket-files/
target/classes/*
/target/

View file

@ -5,8 +5,23 @@
<persistence-unit name="ChatServerPU">
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:chatserver;create=true" /><property
name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:chatserver;create=true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<!-- c3p0 config http://www.hibernate.org/214.html -->
<!-- <property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"
/> <property name="hibernate.c3p0.acquire_increment" value="1" /> <property
name="hibernate.c3p0.idle_test_period" value="60" /> <property name="hibernate.c3p0.min_size"
value="1" /> <property name="hibernate.c3p0.max_size" value="2" /> <property
name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.timeout"
value="0" /> <property name="hibernate.c3p0.acquireRetryAttempts" value="1"
/> <property name="hibernate.c3p0.acquireRetryDelay" value="250" /> -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.transaction.factory_class"
value="org.hibernate.transaction.JDBCTransactionFactory" />
<property name="hibernate.current_session_context_class"
value="thread" />
</properties>
</persistence-unit>
</persistence>

View file

@ -70,6 +70,12 @@
<artifactId>json</artifactId>
<version>20160212</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.1.Final</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>

View file

@ -100,8 +100,12 @@ public class IOHelper {
}
public static void LoginUser(HttpExchange exchange, User user, DataProvider provider) {
provider.SetValues(() -> user.setSessionid(UUID.randomUUID()));
System.out.println("Logging in user: " + user);
// provider.SetValues(() ->
// user.setSessionid(UUID.randomUUID().toString()));
user.setSessionid(UUID.randomUUID().toString());
provider.saveUser(user);
System.out.println("Session ID set to " + user.getSessionid());
ZonedDateTime expiretime = ZonedDateTime.now(ZoneId.of("GMT")).plus(Period.of(2, 0, 0));
exchange.getResponseHeaders().add("Set-Cookie",
"user_id=" + user.getId() + "; expires=" + expiretime.format(DateTimeFormatter.RFC_1123_DATE_TIME));
@ -110,7 +114,7 @@ public class IOHelper {
}
public static void LogoutUser(HttpExchange exchange, User user) {
user.setSessionid(new UUID(0, 0));
user.setSessionid(new UUID(0, 0).toString());
SendLogoutHeaders(exchange);
}
@ -159,9 +163,9 @@ public class IOHelper {
System.out.println("User: " + user);
System.out.println("session_id: " + cookies.get("session_id"));
if (user != null)
System.out.println("Equals: " + UUID.fromString(cookies.get("session_id")).equals(user.getSessionid()));
System.out.println("Equals: " + cookies.get("session_id").equals(user.getSessionid()));
if (user != null && cookies.get("session_id") != null
&& UUID.fromString(cookies.get("session_id")).equals(user.getSessionid()))
&& cookies.get("session_id").equals(user.getSessionid()))
return user;
else
SendLogoutHeaders(exchange);

View file

@ -3,7 +3,6 @@ package io.github.norbipeti.chat.server;
import java.lang.reflect.Modifier;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -48,11 +47,11 @@ public class Main {
user2.setName("Teszt");
user2.setEmail("test2@test.com");
user2.getContacts().add(user);
provider.addUser(user);
provider.saveUser(user);
List<User> users = provider.getUsers();
user = users.get(0);
user.getContacts().add(user2);
provider.addUser(user2);
provider.saveUser(user2);
users = provider.getUsers();
user2 = users.get(1);
System.out.println(users);
@ -71,7 +70,7 @@ public class Main {
msg2.setTime(new Date());
msg2.setMessage("Teszt 2");
convo.getMesssages().add(msg2);
provider.addConversation(convo);
provider.saveConversation(convo);
}
System.out.println("Starting webserver...");
HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10);

View file

@ -6,6 +6,8 @@ import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import org.hibernate.Session;
import io.github.norbipeti.chat.server.db.domain.*;
public class DataProvider implements AutoCloseable {
@ -15,17 +17,19 @@ public class DataProvider implements AutoCloseable {
emf = Persistence.createEntityManagerFactory("ChatServerPU");
}
public void addUser(User user) {
public void saveUser(User user) {
save(user);
}
public void addConversation(Conversation convo) {
public void saveConversation(Conversation convo) {
save(convo);
}
private void save(Object object) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Session s = em.unwrap(Session.class);
s.saveOrUpdate(object);
em.persist(object);
em.getTransaction().commit();
em.close();
@ -71,10 +75,12 @@ public class DataProvider implements AutoCloseable {
return result;
}
@Deprecated
public void SetValues(Runnable action) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
action.run();
em.flush();
em.getTransaction().commit();
em.close();
}
@ -84,4 +90,11 @@ public class DataProvider implements AutoCloseable {
if (emf != null)
emf.close();
}
public boolean isEntityManaged(Object entity) {
EntityManager em = emf.createEntityManager();
boolean ret = em.contains(entity);
em.close();
return ret;
}
}

View file

@ -2,8 +2,6 @@ package io.github.norbipeti.chat.server.db.domain;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.persistence.*;
@Entity
@ -19,8 +17,9 @@ public class User {
@ElementCollection(fetch = FetchType.EAGER)
private List<User> contacts;
private String salt;
@Column(columnDefinition = "CHAR(16) FOR BIT DATA")
private UUID sessionid;
//@Column(columnDefinition = "CHAR(16) FOR BIT DATA")
@Column(columnDefinition="VARCHAR(64)")
private String sessionid;
@Version
@GeneratedValue
private int Version;
@ -59,8 +58,7 @@ public class User {
c.add(u.name);
}
return "User [id=" + id + ", name=" + name + ", email=" + email + ", password=" + password + ", contacts=" + c
+ ", sessionid=" + sessionid + "]"; // TODO: SessionID null
// after getting from db
+ ", sessionid=" + sessionid + "]";
}
public void setEmail(String email) {
@ -91,11 +89,11 @@ public class User {
this.salt = salt;
}
public UUID getSessionid() {
public String getSessionid() {
return sessionid;
}
public void setSessionid(UUID sessionid) {
public void setSessionid(String sessionid) {
this.sessionid = sessionid;
}

View file

@ -5,23 +5,19 @@ import java.io.IOException;
import org.jsoup.nodes.Element;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.ssl.internal.ssl.Provider;
import io.github.norbipeti.chat.server.IOHelper;
import io.github.norbipeti.chat.server.db.DataProvider;
import io.github.norbipeti.chat.server.db.domain.Conversation;
import io.github.norbipeti.chat.server.db.domain.Message;
import io.github.norbipeti.chat.server.db.domain.User;
public class IndexPage extends Page {
@Override
public void handlePage(HttpExchange exchange) throws IOException {
// final User user = IOHelper.GetLoggedInUser(exchange); - TODO
final User user = new User();
final User user = IOHelper.GetLoggedInUser(exchange);
/*final User user = new User();
user.setEmail("test@test.com");
user.setName("Norbi");
user.setId(3L);
user.setId(3L);*/
if (user == null)
IOHelper.SendModifiedPage(200, this, (doc) -> {
doc.getElementById("userbox").remove();
@ -36,21 +32,18 @@ public class IndexPage extends Page {
userbox.html(userbox.html().replace("<username />", user.getName()));
Element channelmessages = doc.getElementById("channelmessages");
try (DataProvider provider = new DataProvider()) {
Conversation convo = provider.getConversations().get(0); //TODO
/*Conversation convo = provider.getConversations().get(0); // TODO
for (Message message : convo.getMesssages()) {
Element msgelement = channelmessages.appendElement("div");
Element header = msgelement.appendElement("p");
header.text(message.getSender().getName() + " - " + message.getTime());
Element body = msgelement.appendElement("p");
body.text(message.getMessage());
}
}*/
}
return doc;
}, exchange);
} // TODO:
// Validation
// at
// registration
} // TODO: Validation at registration (no special chars, etc.)
@Override
public String GetName() {

View file

@ -40,7 +40,7 @@ public class RegisterPage extends Page {
user.setEmail(post.getString("email"));
user.setSalt(BCrypt.gensalt()); // http://www.mindrot.org/projects/jBCrypt/
user.setPassword(BCrypt.hashpw(post.getString("pass"), user.getSalt()));
provider.addUser(user);
provider.saveUser(user);
User managedUser = provider.getUser(user.getId());
IOHelper.LoginUser(exchange, managedUser, provider);
IOHelper.SendResponse(200, "Success", exchange);