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