Login and Register with UI

This commit is contained in:
2025-06-04 22:54:24 +03:30
parent 108a6d8b81
commit 86ca58481f
21 changed files with 1166 additions and 0 deletions
@@ -0,0 +1,46 @@
package org.to.telegramfinalproject.Server;
import java.util.UUID;
import org.to.telegramfinalproject.Database.userDatabase;
import org.to.telegramfinalproject.Models.User;
import org.to.telegramfinalproject.Security.PasswordHashing;
public class AuthService {
private final userDatabase userDb = new userDatabase();
public AuthService() {
}
public boolean register(String user_id, String username, String password, String profile_name) {
if (!this.userDb.existsByUsername(username) && !this.userDb.existsByUserId(user_id)) {
String passwordRegex = "\\b(?=[^\\s]*[A-Z])(?=[^\\s]*[a-z])(?=[^\\s]*\\d)(?=[^\\s]*[!@#$%^&*])[^\\s]{8,}\\b";
if (!password.matches(passwordRegex)) {
System.out.println("Password doesn't Valid(At list one capital and one special char(!@#$%^&*), minimum 8 char ");
return false;
} else {
UUID uuid = UUID.randomUUID();
password = PasswordHashing.hash(password);
User user = new User(user_id, uuid, username, password, profile_name);
return this.userDb.save(user);
}
} else {
System.out.println("Username/ user id is already taken");
return false;
}
}
public User login(String username, String password) {
User user = this.userDb.findByUsername(username);
if (user == null) {
System.out.println("User not found.");
return null;
} else if (!PasswordHashing.verify(password, user.getPassword())) {
System.out.println("Incorrect password");
return null;
} else {
return user;
}
}
}
@@ -0,0 +1,77 @@
package org.to.telegramfinalproject.Server;
import org.json.JSONObject;
import org.to.telegramfinalproject.Models.RequestModel;
import org.to.telegramfinalproject.Models.ResponseModel;
import org.to.telegramfinalproject.Models.User;
import java.io.*;
import java.net.Socket;
public class ClientHandler implements Runnable {
private final Socket socket;
private final AuthService authService = new AuthService();
public ClientHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try (
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)
) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
JSONObject requestJson = new JSONObject(inputLine);
RequestModel request = new RequestModel(
requestJson.optString("action"),
requestJson.optString("user_id"),
requestJson.optString("username"),
requestJson.optString("password"),
requestJson.optString("profile_name")
);
ResponseModel response;
switch (request.getAction()) {
case "register":
boolean registered = authService.register(
request.getUser_id(),
request.getUsername(),
request.getPassword(),
request.getProfile_name()
);
response = registered
? new ResponseModel("success", "Registration successful.")
: new ResponseModel("error", "Registration failed.");
break;
case "login":
User user = authService.login(request.getUsername(), request.getPassword());
response = (user != null)
? new ResponseModel("success", "Welcome " + user.getProfile_name())
: new ResponseModel("error", "Login failed.");
break;
case "logout":
response = new ResponseModel("success", "Logged out.");
break;
default:
response = new ResponseModel("error", "Unknown action: " + request.getAction());
}
JSONObject responseJson = new JSONObject();
responseJson.put("status", response.getStatus());
responseJson.put("message", response.getMessage());
out.println(responseJson.toString());
}
} catch (IOException e) {
System.out.println("Connection with client lost.");
}
}
}
@@ -0,0 +1,28 @@
package org.to.telegramfinalproject.Server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MainServer {
private static final int PORT = 12345;
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("Server started on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected: " + clientSocket.getInetAddress());
ClientHandler handler = new ClientHandler(clientSocket);
new Thread(handler).start();
}
} catch (IOException e) {
System.err.println("Server error: " + e.getMessage());
e.printStackTrace();
}
}
}