Login and Register with UI
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user