aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorOgnjen Cirkovic <ciraboxkg@gmail.com>2022-12-21 02:12:07 +0100
committerOgnjen Cirkovic <ciraboxkg@gmail.com>2022-12-21 02:12:07 +0100
commit302ac8e5649fc9bb48cb160ac1528d87bfd08a22 (patch)
tree425d5271cbb8c288677f1fc1d9412e5c53013741 /src/main/java
parent72307dcf589b695babb3a836817fd7b78907fd05 (diff)
Napravljena klasa za cryptovanje sifri. Omogucena konekcija sa bazom. Omoguceno dodavanje korisnika, login korisnika, dodavanja monster-a, dodavanja abilitija, povratak monster-a.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/database/BcryptHelper.java23
-rw-r--r--src/main/java/database/Database.java163
-rw-r--r--src/main/java/models/Ability.java54
-rw-r--r--src/main/java/models/AbilityType.java8
-rw-r--r--src/main/java/models/Monster.java47
-rw-r--r--src/main/java/models/MonsterViewModel.java56
-rw-r--r--src/main/java/models/User.java45
-rw-r--r--src/main/java/pokemon/Database.java30
8 files changed, 396 insertions, 30 deletions
diff --git a/src/main/java/database/BcryptHelper.java b/src/main/java/database/BcryptHelper.java
new file mode 100644
index 0000000..407ea58
--- /dev/null
+++ b/src/main/java/database/BcryptHelper.java
@@ -0,0 +1,23 @@
+package database;
+
+import at.favre.lib.crypto.bcrypt.BCrypt;
+
+public class BcryptHelper {
+ private static int difficulty=10;
+
+ public static String hashPasword(String password){
+ String passwordH=BCrypt.withDefaults().hashToString(10, password.toCharArray());
+ return passwordH;
+ }
+
+ public static boolean checkPassword(String password_plaintext, String stored_hash) {
+ boolean password_verified = false;
+
+ if(null == stored_hash || !stored_hash.startsWith("$2a$"))
+ throw new java.lang.IllegalArgumentException("Invalid hash");
+
+ password_verified = BCrypt.verifyer().verify(password_plaintext.toCharArray(), stored_hash).verified;
+
+ return password_verified;
+ }
+}
diff --git a/src/main/java/database/Database.java b/src/main/java/database/Database.java
new file mode 100644
index 0000000..6488a5a
--- /dev/null
+++ b/src/main/java/database/Database.java
@@ -0,0 +1,163 @@
+package database;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import models.Ability;
+import models.Monster;
+import models.MonsterViewModel;
+import models.User;
+
+public class Database {
+ private Connection conn;
+ static Database instance=null;
+
+ private Database() {
+ String connString="jdbc:mysql://localhost:3306/pokemon?user=root&password=";
+ try {
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ conn=DriverManager.getConnection(connString);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public static Database getInstance() {
+ if(instance==null)
+ instance=new Database();
+ return instance;
+ }
+ public boolean addUser(User user) {
+ boolean res=false;
+ String sql="SELECT * FROM user where username=? ";
+ PreparedStatement ps;
+ try {
+ ps=conn.prepareStatement(sql);
+ ps.setString(1, user.getUsername());
+ ResultSet result=ps.executeQuery();
+ if(result.next()) {
+ return res;
+ }
+
+
+ sql="INSERT INTO user(username,password,admin) values(?,?,?)";
+ ps=conn.prepareStatement(sql);
+ ps.setString(1, user.getUsername());
+ String hashedPassword=BcryptHelper.hashPasword(user.getPassword());
+ ps.setString(2, hashedPassword);
+ ps.setBoolean(3, user.isAdmin());
+ if(ps.executeUpdate()==1) {
+ res=true;
+ }
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+
+ return res;
+ }
+ public User login(User user) {
+ User tempUser=null;
+ String sql="SELECT * FROM user where username=?";
+ try {
+ PreparedStatement pre=conn.prepareStatement(sql);
+ pre.setString(1, user.getUsername());
+ ResultSet res=pre.executeQuery();
+ if(res.next()) {
+ String hashedPw=res.getString("password");
+ if(BcryptHelper.checkPassword(user.password, hashedPw))
+ {
+ tempUser=new User();
+ tempUser.setId(res.getInt("id"));
+ tempUser.setAdmin(res.getBoolean("admin"));
+ tempUser.setUsername(user.getUsername());
+ }
+ }
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+
+ return tempUser;
+
+ }
+ public long addMonster(Monster monster) {
+ long tempId=0;
+ String sql=null;
+ PreparedStatement ps;
+ try {
+ sql="INSERT INTO monster(name,description,hp,base64Image) values(?,?,?,?)";
+ ps=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
+ ps.setString(1, monster.getName());
+ ps.setString(2, monster.getDescription());
+ ps.setInt(3, monster.getHp());
+ ps.setString(4, monster.getBase64Image());
+ if(ps.executeUpdate()==1) {
+ try (ResultSet generatedKeys = ps.getGeneratedKeys()) {
+ if (generatedKeys.next()) {
+ tempId=generatedKeys.getLong(1);
+ }
+ else {
+ throw new SQLException("Creating user failed, no ID obtained.");
+ }
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return tempId;
+ }
+ public boolean addAbility(Ability ability) {
+ boolean result=false;
+ String sql=null;
+ PreparedStatement ps;
+ try {
+ sql="INSERT INTO ability(monsterId,name,description,type,power) values(?,?,?,?,?)";
+ ps=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
+ ps.setLong(1, ability.getMonsterId());
+ ps.setString(2, ability.getName());
+ ps.setString(3, ability.getDescription());
+ ps.setInt(4, ability.getType().ordinal());
+ ps.setInt(5, ability.getPower());
+ if(ps.executeUpdate()==1) {
+ result=true;
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+ public ArrayList<Monster> getMonsters(){
+ ArrayList<Monster> monsters=new ArrayList<Monster>();
+
+ String sql="SELECT * FROM monster";
+ try {
+ Statement statement = conn.createStatement();
+ ResultSet res=statement.executeQuery(sql);
+ while(res.next()) {
+ Monster m=new Monster();
+ m.setId(res.getLong("id"));
+ m.setName(res.getString("name"));
+ m.setDescription(res.getString("description"));
+ m.setHp(res.getInt("hp"));
+ m.setBase64Image(res.getString("base64Image"));
+ monsters.add(m);
+ }
+
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return monsters;
+ }
+
+}
diff --git a/src/main/java/models/Ability.java b/src/main/java/models/Ability.java
new file mode 100644
index 0000000..e6a00d1
--- /dev/null
+++ b/src/main/java/models/Ability.java
@@ -0,0 +1,54 @@
+package models;
+
+public class Ability {
+ public long id;
+ public int monsterId;
+ public String Name;
+ public String description;
+ public AbilityType type;
+ public int power;
+
+
+ public Ability() {
+ super();
+ }
+
+
+ public long getId() {
+ return id;
+ }
+ public void setId(long id) {
+ this.id = id;
+ }
+ public int getMonsterId() {
+ return monsterId;
+ }
+ public void setMonsterId(int monsterId) {
+ this.monsterId = monsterId;
+ }
+ public String getName() {
+ return Name;
+ }
+ public void setName(String name) {
+ Name = name;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ public AbilityType getType() {
+ return type;
+ }
+ public void setType(AbilityType type) {
+ this.type = type;
+ }
+ public int getPower() {
+ return power;
+ }
+ public void setPower(int power) {
+ this.power = power;
+ }
+
+}
diff --git a/src/main/java/models/AbilityType.java b/src/main/java/models/AbilityType.java
new file mode 100644
index 0000000..5b4e1eb
--- /dev/null
+++ b/src/main/java/models/AbilityType.java
@@ -0,0 +1,8 @@
+package models;
+
+public enum AbilityType {
+ ATTACK,
+ SPECIAL,
+ HEAL,
+ SHIELD
+}
diff --git a/src/main/java/models/Monster.java b/src/main/java/models/Monster.java
new file mode 100644
index 0000000..dc16205
--- /dev/null
+++ b/src/main/java/models/Monster.java
@@ -0,0 +1,47 @@
+package models;
+
+public class Monster {
+ public long id;
+ public String name;
+ public String description;
+ public int hp;
+ public String base64Image;
+
+
+ public Monster() {
+ super();
+ }
+
+ public long getId() {
+ return id;
+ }
+ public void setId(long id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ public int getHp() {
+ return hp;
+ }
+ public void setHp(int hp) {
+ this.hp = hp;
+ }
+ public String getBase64Image() {
+ return base64Image;
+ }
+ public void setBase64Image(String base64Image) {
+ this.base64Image = base64Image;
+ }
+
+
+}
diff --git a/src/main/java/models/MonsterViewModel.java b/src/main/java/models/MonsterViewModel.java
new file mode 100644
index 0000000..fed9152
--- /dev/null
+++ b/src/main/java/models/MonsterViewModel.java
@@ -0,0 +1,56 @@
+package models;
+
+import java.util.ArrayList;
+
+public class MonsterViewModel {
+ public long id;
+ public String name;
+ public String description;
+ public int hp;
+ public String base64Image;
+ public ArrayList<Ability> abilities;
+
+
+ public MonsterViewModel() {
+ super();
+ }
+
+ public long getId() {
+ return id;
+ }
+ public void setId(long id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ public int getHp() {
+ return hp;
+ }
+ public void setHp(int hp) {
+ this.hp = hp;
+ }
+ public String getBase64Image() {
+ return base64Image;
+ }
+ public void setBase64Image(String base64Image) {
+ this.base64Image = base64Image;
+ }
+ public ArrayList<Ability> getAbilities() {
+ return abilities;
+ }
+
+ public void setAbilities(ArrayList<Ability> abilities) {
+ this.abilities = abilities;
+ }
+
+}
diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java
new file mode 100644
index 0000000..08e4ab0
--- /dev/null
+++ b/src/main/java/models/User.java
@@ -0,0 +1,45 @@
+package models;
+
+public class User {
+ public long id;
+ public String username;
+ public String password;
+ public boolean admin;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public boolean isAdmin() {
+ return admin;
+ }
+
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
+ }
+
+ public User() {
+ super();
+ }
+
+}
diff --git a/src/main/java/pokemon/Database.java b/src/main/java/pokemon/Database.java
deleted file mode 100644
index 3491ab4..0000000
--- a/src/main/java/pokemon/Database.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package pokemon;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-public class Database {
- private Connection conn;
- static Database instance=null;
-
- private Database() {
- String connString="jdbc:mysql://localhost:3306/pokemon?user=root&password=";
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- conn=DriverManager.getConnection(connString);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public static Database getInstance() {
- if(instance==null)
- instance=new Database();
- return instance;
- }
- public String getUsername() {
- return "test123";
- }
-
-}