Skip to content
Snippets Groups Projects
Commit 57f3ec21 authored by Martin Staehr's avatar Martin Staehr
Browse files

#40 adding mysql connect as injection

parent 4f06de91
No related branches found
No related tags found
No related merge requests found
package unipotsdam.gf.config; package unipotsdam.gf.config;
import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.hk2.utilities.binding.AbstractBinder;
import unipotsdam.gf.core.database.mysql.MysqlConnect;
import unipotsdam.gf.core.management.Management; import unipotsdam.gf.core.management.Management;
import unipotsdam.gf.core.management.ManagementImpl; import unipotsdam.gf.core.management.ManagementImpl;
import unipotsdam.gf.core.management.group.GroupDAO; import unipotsdam.gf.core.management.group.GroupDAO;
...@@ -45,6 +46,7 @@ public class GFApplicationBinder extends AbstractBinder { ...@@ -45,6 +46,7 @@ public class GFApplicationBinder extends AbstractBinder {
bind(UserDAO.class).to(UserDAO.class); bind(UserDAO.class).to(UserDAO.class);
bind(ProjectDAO.class).to(ProjectDAO.class); bind(ProjectDAO.class).to(ProjectDAO.class);
bind(GroupDAO.class).to(GroupDAO.class); bind(GroupDAO.class).to(GroupDAO.class);
bind(MysqlConnect.class).to(MysqlConnect.class);
} }
} }
...@@ -3,152 +3,160 @@ package unipotsdam.gf.core.database.mysql; ...@@ -3,152 +3,160 @@ package unipotsdam.gf.core.database.mysql;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import unipotsdam.gf.config.GFDatabaseConfig; import unipotsdam.gf.config.GFDatabaseConfig;
import unipotsdam.gf.modules.communication.view.CommunicationView;
import java.sql.*; import javax.annotation.ManagedBean;
import javax.annotation.Resource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Date; import java.util.Date;
@ManagedBean
@Resource
public class MysqlConnect { public class MysqlConnect {
private static final Logger log = LoggerFactory.getLogger(MysqlConnect.class); private static final Logger log = LoggerFactory.getLogger(MysqlConnect.class);
public Connection conn = null; public Connection conn = null;
private static String createConnectionString() { private static String createConnectionString() {
String connString = "jdbc:mysql://" + "localhost" + String connString = "jdbc:mysql://" + "localhost" +
"/" + GFDatabaseConfig.DB_NAME + "/" + GFDatabaseConfig.DB_NAME +
"?user=" + GFDatabaseConfig.USER + "?user=" + GFDatabaseConfig.USER +
"&password=" + GFDatabaseConfig.PASS; "&password=" + GFDatabaseConfig.PASS;
return String.format(connString, GFDatabaseConfig.DB_NAME); return String.format(connString, GFDatabaseConfig.DB_NAME);
} }
public void connect() { public void connect() {
try { try {
try { try {
Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
System.out.println(ex); //logger? System.out.println(ex); //logger?
} }
conn = DriverManager.getConnection(createConnectionString()); conn = DriverManager.getConnection(createConnectionString());
} catch (SQLException ex) { } catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState()); System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode()); System.out.println("VendorError: " + ex.getErrorCode());
throw new Error("could not connect to mysql"); throw new Error("could not connect to mysql");
} }
} }
public void close() { public void close() {
try { try {
if (conn != null) { if (conn != null) {
conn.close(); conn.close();
} }
} catch (final SQLException e) { } catch (final SQLException e) {
log.error(e.toString()); log.error(e.toString());
throw new Error("could not close mysql"); throw new Error("could not close mysql");
} }
} }
private PreparedStatement addParameters(final String statement, final Object[] args) { private PreparedStatement addParameters(final String statement, final Object[] args) {
try { try {
final PreparedStatement ps = conn.prepareStatement(statement); final PreparedStatement ps = conn.prepareStatement(statement);
if (args != null) { if (args != null) {
for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) {
final Object arg = args[i]; final Object arg = args[i];
setParam(ps, arg, i + 1); setParam(ps, arg, i + 1);
} }
} }
return ps; return ps;
} catch (SQLException ex) { } catch (SQLException ex) {
log.error(ex.toString()); log.error(ex.toString());
System.out.println(ex); System.out.println(ex);
} }
return null; return null;
} }
public VereinfachtesResultSet issueSelectStatement(final String statement, final Object... args) { public VereinfachtesResultSet issueSelectStatement(final String statement, final Object... args) {
try { try {
PreparedStatement ps = addParameters(statement, args); PreparedStatement ps = addParameters(statement, args);
ResultSet queryResult = ps.executeQuery(); ResultSet queryResult = ps.executeQuery();
return new VereinfachtesResultSet(queryResult); return new VereinfachtesResultSet(queryResult);
} catch (SQLException ex) { } catch (SQLException ex) {
log.error(ex.toString()); log.error(ex.toString());
System.out.println(ex); System.out.println(ex);
} }
return null; return null;
} }
public void otherStatements(final String statement) { public void otherStatements(final String statement) {
try { try {
this.conn.createStatement().execute(statement); this.conn.createStatement().execute(statement);
} catch (SQLException ex) { } catch (SQLException ex) {
log.error(ex.toString()); log.error(ex.toString());
System.out.println(ex); System.out.println(ex);
} }
} }
public Integer issueUpdateStatement(final String statement, final Object... args) { public Integer issueUpdateStatement(final String statement, final Object... args) {
PreparedStatement ps = addParameters(statement, args); PreparedStatement ps = addParameters(statement, args);
try { try {
return ps.executeUpdate(); return ps.executeUpdate();
} catch (SQLException ex) { } catch (SQLException ex) {
log.error(ex.toString()); log.error(ex.toString());
System.out.println(ex); System.out.println(ex);
} }
return null; return null;
} }
public void issueInsertOrDeleteStatement(final String statement, final Object... args) { public void issueInsertOrDeleteStatement(final String statement, final Object... args) {
PreparedStatement ps = addParameters(statement, args); PreparedStatement ps = addParameters(statement, args);
try { try {
ps.execute(); ps.execute();
} catch (SQLException ex) { } catch (SQLException ex) {
log.error(ex.toString()); log.error(ex.toString());
System.out.println(ex); System.out.println(ex);
} }
} }
private void setParam(final PreparedStatement ps, final Object arg, final int i) throws SQLException { private void setParam(final PreparedStatement ps, final Object arg, final int i) throws SQLException {
if (arg instanceof String) { if (arg instanceof String) {
ps.setString(i, (String) arg); ps.setString(i, (String) arg);
} else if (arg instanceof Integer) { } else if (arg instanceof Integer) {
ps.setInt(i, (Integer) arg); ps.setInt(i, (Integer) arg);
} else if (arg instanceof Double) { } else if (arg instanceof Double) {
ps.setDouble(i, (Double) arg); ps.setDouble(i, (Double) arg);
} else if (arg instanceof Boolean) { } else if (arg instanceof Boolean) {
ps.setBoolean(i, (Boolean) arg); ps.setBoolean(i, (Boolean) arg);
} else if (arg instanceof Float) { } else if (arg instanceof Float) {
ps.setFloat(i, (Float) arg); ps.setFloat(i, (Float) arg);
} else if (arg instanceof Short) { } else if (arg instanceof Short) {
ps.setShort(i, (Short) arg); ps.setShort(i, (Short) arg);
} else if (arg instanceof Long) { } else if (arg instanceof Long) {
ps.setLong(i, (Long) arg); ps.setLong(i, (Long) arg);
} else if (arg instanceof Byte) { } else if (arg instanceof Byte) {
ps.setByte(i, (Byte) arg); ps.setByte(i, (Byte) arg);
} else if (arg instanceof Character) { } else if (arg instanceof Character) {
ps.setString(i, arg.toString()); ps.setString(i, arg.toString());
} else if (arg instanceof Date) { } else if (arg instanceof Date) {
final java.sql.Date d = new java.sql.Date(((Date) arg).getTime()); final java.sql.Date d = new java.sql.Date(((Date) arg).getTime());
ps.setDate(i, d); ps.setDate(i, d);
} else if (arg == null) { } else if (arg == null) {
ps.setNull(i, Types.NULL); ps.setNull(i, Types.NULL);
} else { } else {
ps.setString(i, arg.toString()); ps.setString(i, arg.toString());
} }
} }
public Connection getConnection() { public Connection getConnection() {
return conn; return conn;
} }
public void setConnection(Connection conn) { public void setConnection(Connection conn) {
this.conn = conn; this.conn = conn;
} }
} }
...@@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil; ...@@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil;
import javax.annotation.ManagedBean; import javax.annotation.ManagedBean;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
...@@ -18,8 +19,14 @@ import java.util.List; ...@@ -18,8 +19,14 @@ import java.util.List;
@Singleton @Singleton
public class GroupDAO { public class GroupDAO {
private MysqlConnect connect;
@Inject
public GroupDAO(MysqlConnect connect) {
this.connect = connect;
}
public void persist(Group group) { public void persist(Group group) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)"; String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)";
...@@ -33,11 +40,10 @@ public class GroupDAO { ...@@ -33,11 +40,10 @@ public class GroupDAO {
} }
public void update(Group group) { public void update(Group group) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "UPDATE group SET projectId=?,chatRoomid=?"; String mysqlRequest = "UPDATE group SET projectId=?,chatRoomid=?";
connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId()); connect.issueUpdateStatement(mysqlRequest, group.getProjectId(), group.getChatRoomId());
connect.close();
// TODO: implement update of groupuser if needed later (if member list need to be updated) // TODO: implement update of groupuser if needed later (if member list need to be updated)
} }
...@@ -56,7 +62,6 @@ public class GroupDAO { ...@@ -56,7 +62,6 @@ public class GroupDAO {
} }
public List<Group> getGroupsByProjectId(String projectId) { public List<Group> getGroupsByProjectId(String projectId) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM groups g " + String mysqlRequest = "SELECT * FROM groups g " +
"JOIN groupuser gu ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + "JOIN groupuser gu ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" +
...@@ -69,11 +74,11 @@ public class GroupDAO { ...@@ -69,11 +74,11 @@ public class GroupDAO {
} }
ArrayList<Group> groups = new ArrayList<>(); ArrayList<Group> groups = new ArrayList<>();
groupHashMap.forEach((key, group) -> groups.add(group)); groupHashMap.forEach((key, group) -> groups.add(group));
connect.close();
if (groups.isEmpty()) { if (groups.isEmpty()) {
return null; return null;
} }
connect.close();
return groups; return groups;
} }
......
...@@ -6,6 +6,7 @@ import unipotsdam.gf.core.states.ProjectPhase; ...@@ -6,6 +6,7 @@ import unipotsdam.gf.core.states.ProjectPhase;
import javax.annotation.ManagedBean; import javax.annotation.ManagedBean;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.UUID; import java.util.UUID;
...@@ -15,12 +16,17 @@ import java.util.UUID; ...@@ -15,12 +16,17 @@ import java.util.UUID;
@Singleton @Singleton
public class ProjectDAO { public class ProjectDAO {
private MysqlConnect connect;
@Inject
public ProjectDAO(MysqlConnect connect) {
this.connect = connect;
}
public void persist(Project project) { public void persist(Project project) {
UUID uuid = UUID.randomUUID(); UUID uuid = UUID.randomUUID();
String token = uuid.toString(); String token = uuid.toString();
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = String mysqlRequest =
"INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, "
...@@ -32,7 +38,6 @@ public class ProjectDAO { ...@@ -32,7 +38,6 @@ public class ProjectDAO {
} }
public void delete(Project project) { public void delete(Project project) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "DELETE FROM projects where id = (?)"; String mysqlRequest = "DELETE FROM projects where id = (?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId()); connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId());
...@@ -44,7 +49,6 @@ public class ProjectDAO { ...@@ -44,7 +49,6 @@ public class ProjectDAO {
public Boolean exists(Project project) { public Boolean exists(Project project) {
Boolean result; Boolean result;
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?"; String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?";
VereinfachtesResultSet vereinfachtesResultSet = VereinfachtesResultSet vereinfachtesResultSet =
...@@ -55,7 +59,6 @@ public class ProjectDAO { ...@@ -55,7 +59,6 @@ public class ProjectDAO {
} }
public Project getProjectById(String id) { public Project getProjectById(String id) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM projects where id = ?"; String mysqlRequest = "SELECT * FROM projects where id = ?";
VereinfachtesResultSet vereinfachtesResultSet = VereinfachtesResultSet vereinfachtesResultSet =
......
...@@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil; ...@@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.util.ResultSetUtil;
import javax.annotation.ManagedBean; import javax.annotation.ManagedBean;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -17,11 +18,18 @@ import java.util.UUID; ...@@ -17,11 +18,18 @@ import java.util.UUID;
@Singleton @Singleton
public class UserDAO { public class UserDAO {
private MysqlConnect connect;
@Inject
public UserDAO(MysqlConnect connect) {
this.connect = connect;
}
public void persist(User user, UserProfile profile) { public void persist(User user, UserProfile profile) {
UUID uuid = UUID.randomUUID(); UUID uuid = UUID.randomUUID();
String token = uuid.toString(); String token = uuid.toString();
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," +
"`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)";
...@@ -33,7 +41,6 @@ public class UserDAO { ...@@ -33,7 +41,6 @@ public class UserDAO {
} }
public void delete(User user) { public void delete(User user) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "DELETE FROM users where email = (?)"; String mysqlRequest = "DELETE FROM users where email = (?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, user.getEmail()); connect.issueInsertOrDeleteStatement(mysqlRequest, user.getEmail());
...@@ -41,7 +48,6 @@ public class UserDAO { ...@@ -41,7 +48,6 @@ public class UserDAO {
} }
public void update(User user) { public void update(User user) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?," + String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?," +
"`rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1"; "`rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1";
...@@ -55,7 +61,6 @@ public class UserDAO { ...@@ -55,7 +61,6 @@ public class UserDAO {
public boolean exists(User user) { public boolean exists(User user) {
boolean result; boolean result;
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; String mysqlRequest = "SELECT * FROM users where email = ? and password = ?";
VereinfachtesResultSet vereinfachtesResultSet = VereinfachtesResultSet vereinfachtesResultSet =
...@@ -73,7 +78,6 @@ public class UserDAO { ...@@ -73,7 +78,6 @@ public class UserDAO {
+ " WHERE pu.projectId = ?"; + " WHERE pu.projectId = ?";
ArrayList<User> result = new ArrayList<>(); ArrayList<User> result = new ArrayList<>();
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId()); VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId());
while (!vereinfachtesResultSet.isLast()) { while (!vereinfachtesResultSet.isLast()) {
...@@ -92,7 +96,6 @@ public class UserDAO { ...@@ -92,7 +96,6 @@ public class UserDAO {
} }
public String getUserToken(User user) { public String getUserToken(User user) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; String mysqlRequest = "SELECT * FROM users where email = ? and password = ?";
VereinfachtesResultSet vereinfachtesResultSet = VereinfachtesResultSet vereinfachtesResultSet =
...@@ -116,7 +119,6 @@ public class UserDAO { ...@@ -116,7 +119,6 @@ public class UserDAO {
} }
private User getUserByField(String field, String value) { private User getUserByField(String field, String value) {
MysqlConnect connect = new MysqlConnect();
connect.connect(); connect.connect();
String mysqlRequest = "SELECT * FROM users where " + field + " = ?"; String mysqlRequest = "SELECT * FROM users where " + field + " = ?";
VereinfachtesResultSet vereinfachtesResultSet = VereinfachtesResultSet vereinfachtesResultSet =
...@@ -131,6 +133,4 @@ public class UserDAO { ...@@ -131,6 +133,4 @@ public class UserDAO {
return null; return null;
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment