Fixed database errors!
This commit is contained in:
parent
73ef29e2df
commit
2bfa4a8c50
9 changed files with 987 additions and 958 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -248,3 +248,4 @@ paket-files/
|
|||
|
||||
|
||||
target/classes/*
|
||||
/target/
|
||||
|
|
|
@ -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>
|
6
pom.xml
6
pom.xml
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue