diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 86722f763531997fa6f906db1312dc423b26f81a..c13fc1ba35f96413d3078539dde9df28d42bcc1e 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="SqlDialectMappings"> + <file url="file://$PROJECT_DIR$/src/main/java/sk/kasv/lisivka/bootcamp/database/MariaDB.java" dialect="GenericSQL" /> <file url="file://$PROJECT_DIR$/src/main/resources/sql scripts/script.sql" dialect="MariaDB" /> </component> </project> \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/Login.java b/src/main/java/sk/kasv/lisivka/bootcamp/Login.java new file mode 100644 index 0000000000000000000000000000000000000000..9748954affc6b2a8e5b9939ed5357dd47e320ce9 --- /dev/null +++ b/src/main/java/sk/kasv/lisivka/bootcamp/Login.java @@ -0,0 +1,34 @@ +package sk.kasv.lisivka.bootcamp; + +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; + +public class Login { + private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + private static final int TOKEN_LENGTH = 40; + private static final SecureRandom random = new SecureRandom(); + + Map<String, String> tokens = new HashMap<>(); + + public static String generateToken() { + StringBuilder token = new StringBuilder(); + for (int i = 0; i < TOKEN_LENGTH; i++) { + int randomIndex = random.nextInt(CHARACTERS.length()); + token.append(CHARACTERS.charAt(randomIndex)); + } + return token.toString(); + } + + public String logUser(String username) { + String newToken = generateToken(); + tokens.put(username, newToken); + return newToken; + } + + public boolean isTokenValid(String token) { +// for () + + return false; + } +} \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/LoginData.java b/src/main/java/sk/kasv/lisivka/bootcamp/LoginData.java new file mode 100644 index 0000000000000000000000000000000000000000..f11ad87f6bd36eb9c25ac9833c9313dfbf38f684 --- /dev/null +++ b/src/main/java/sk/kasv/lisivka/bootcamp/LoginData.java @@ -0,0 +1,30 @@ +package sk.kasv.lisivka.bootcamp; + +public class LoginData { + private String username; + private String password; + + public LoginData() { + } + + 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; + } + + @Override + public String toString() { + return "username: " + username + " | password: " + password; + } +} \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/AuthenticationAPI.java b/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/AuthenticationAPI.java new file mode 100644 index 0000000000000000000000000000000000000000..73e572ddefbf7637727e03d2c45c866dab2754f8 --- /dev/null +++ b/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/AuthenticationAPI.java @@ -0,0 +1,31 @@ +package sk.kasv.lisivka.bootcamp.controller.test; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import sk.kasv.lisivka.bootcamp.Login; +import sk.kasv.lisivka.bootcamp.LoginData; +import sk.kasv.lisivka.bootcamp.database.MariaDB; + +import java.sql.SQLException; + +@RestController +public class AuthenticationAPI { + @PostMapping(value = "bootcamp/login") + public ResponseEntity<String> login(@RequestBody() LoginData loginData) throws SQLException { + if (loginData.getUserName() == null || loginData.getPassword() == null) { + return ResponseEntity.status(400).body("username and password are required"); + } + + MariaDB mariaDB = new MariaDB(); + Login token1 = new Login(); + boolean isAuthenticated = mariaDB.verifyUser(loginData.getUserName(), loginData.getPassword()); + if (isAuthenticated) { + String token = token1.generateToken(); + return ResponseEntity.status(200).body("Successful logged\n" + loginData + " | Token: " + token); + } else { + return ResponseEntity.status(400).body("Wrong username or password"); + } + } +} \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestAPI.java b/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestAPI.java deleted file mode 100644 index ccf7b6e58c40293a25f0064b22b0211067f074b7..0000000000000000000000000000000000000000 --- a/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestAPI.java +++ /dev/null @@ -1,12 +0,0 @@ -package sk.kasv.lisivka.bootcamp.controller.test; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class TestAPI { - @GetMapping(value = "/bootcamp/test") - public String test() { - return "it works"; - } -} \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestApp.java b/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestApp.java index a8bf26dcbd461de73703ff14cdd6cdb77d698d10..e229d6658fb16cd57e3f3aa22147bd0def81e9e0 100644 --- a/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestApp.java +++ b/src/main/java/sk/kasv/lisivka/bootcamp/controller/test/TestApp.java @@ -6,6 +6,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TestApp { public static void main(String[] args) { - SpringApplication.run(sk.kasv.lisivka.bootcamp.controller.test.TestApp.class, args); + SpringApplication.run(TestApp.class, args); } } \ No newline at end of file diff --git a/src/main/java/sk/kasv/lisivka/bootcamp/database/MariaDB.java b/src/main/java/sk/kasv/lisivka/bootcamp/database/MariaDB.java index f659f60915088d054754cff98e3ceab5f07fd54e..f1619eea9712ae72fbdb61f144eab63241b6ae3e 100644 --- a/src/main/java/sk/kasv/lisivka/bootcamp/database/MariaDB.java +++ b/src/main/java/sk/kasv/lisivka/bootcamp/database/MariaDB.java @@ -15,7 +15,7 @@ public class MariaDB { MariaDB mariaDB = new MariaDB(); Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); mariaDB.printAllStudents(connection); - boolean userLogin = mariaDB.printUser(connection, "peter", "peter"); + boolean userLogin = mariaDB.verifyUser("peter", "peter"); if (userLogin) { System.out.println("successfully logged"); } else { @@ -41,17 +41,19 @@ public class MariaDB { } } - private boolean printUser(Connection connection, String userName, String password) throws SQLException { - PreparedStatement preparedStatement = connection.prepareStatement(SELECT_USER); - preparedStatement.setString(1, userName); - preparedStatement.setString(2, password); - ResultSet resultSet = preparedStatement.executeQuery(); - String user = null; - String passwd = null; - if (resultSet.next()) { - user = resultSet.getString("username"); - passwd = resultSet.getString("password"); + public boolean verifyUser(String userName, String password) throws SQLException { + + try { + Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); + PreparedStatement preparedStatement = connection.prepareStatement(SELECT_USER); + + preparedStatement.setString(1, userName); + preparedStatement.setString(2, password); + ResultSet resultSet = preparedStatement.executeQuery(); + return resultSet.next(); + } catch (SQLException e) { + e.printStackTrace(); + return false; } - return Objects.equals(user, userName) && Objects.equals(passwd, password); } } \ No newline at end of file