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,107 @@
package org.to.telegramfinalproject.UI;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import org.json.JSONObject;
import org.to.telegramfinalproject.Client.ClientConnection;
import org.to.telegramfinalproject.Database.userDatabase;
import org.to.telegramfinalproject.Models.User;
import org.to.telegramfinalproject.Security.PasswordHashing;
import java.io.IOException;
public class LoginForm {
@FXML
private Button loginButton;
@FXML
private Button backButton;
@FXML private TextField usernameField;
@FXML private PasswordField passwordField;
private ClientConnection connection;
@FXML
public void initialize() {
try {
connection = new ClientConnection("localhost", 12345);
} catch (Exception e) {
System.out.println("Could not connect to server: " + e.getMessage());
}
loginButton.setOnAction(e -> {
String username = usernameField.getText();
String password = passwordField.getText();
JSONObject request = new JSONObject();
request.put("action", "login");
request.put("user_id", JSONObject.NULL);
request.put("username", username);
request.put("password", password);
request.put("profile_name", JSONObject.NULL);
if (connection!=null) {
connection.send(request.toString());
}
userDatabase userDb = new userDatabase();
User user = userDb.findByUsername(username);
if(!userDb.existsByUsername(username)){
Alert alert = new Alert(Alert.AlertType.ERROR, "Invalid username");
alert.show();
}
else if(!PasswordHashing.verify(password,user.getPassword())){
Alert alert = new Alert(Alert.AlertType.ERROR, "Invalid password");
alert.show();
}
else if(!PasswordHashing.verify(password,user.getPassword()) && !userDb.existsByUsername(username)){
Alert alert = new Alert(Alert.AlertType.ERROR, "Invalid password and username");
alert.show();
}
else{
try {
String responseStr = connection.receive();
JSONObject response = new JSONObject(responseStr);
System.out.println("Status: " + response.getString("status"));
System.out.println("Message: " + response.getString("message"));
Alert alert = new Alert(Alert.AlertType.INFORMATION, " Message: " + response.getString("message"));
alert.show();
} catch (Exception ex) {
Alert alert = new Alert(Alert.AlertType.ERROR, "Error receiving response: " + ex.getMessage());
alert.show();
}
}
});
backButton.setOnAction(e -> {
switchScene("login_view.fxml");
});
}
private void switchScene(String fxmlFile) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/" + fxmlFile));
Parent root = loader.load();
Stage stage = (Stage) backButton.getScene().getWindow();
stage.setScene(new Scene(root));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,116 @@
package org.to.telegramfinalproject.UI;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import org.json.JSONObject;
import org.to.telegramfinalproject.Client.ClientConnection;
import org.to.telegramfinalproject.Database.userDatabase;
import java.io.IOException;
public class RegisterForm {
@FXML
private Button submitButton;
@FXML
private Button backButton;
@FXML private TextField userIdField;
@FXML private TextField usernameField;
@FXML private TextField profileNameField;
@FXML private PasswordField passwordField;
@FXML private PasswordField confirmPasswordField;
private ClientConnection connection;
@FXML
public void initialize() {
try {
connection = new ClientConnection("localhost", 12345);
} catch (Exception e) {
System.out.println("Could not connect to server: " + e.getMessage());
}
submitButton.setOnAction(e -> {
String userID = userIdField.getText();
String username = usernameField.getText();
String profile_name = profileNameField.getText();
String password = passwordField.getText();
String confirmPass =confirmPasswordField.getText();
JSONObject request = new JSONObject();
String passwordRegex = "\\b(?=[^\\s]*[A-Z])(?=[^\\s]*[a-z])(?=[^\\s]*\\d)(?=[^\\s]*[!@#$%^&*])[^\\s]{8,}\\b";
userDatabase userDb = new userDatabase();
if(password.equals(confirmPass) && password.matches(passwordRegex) && !userDb.existsByUserId(userID)&& !userDb.existsByUsername(username)){
try {
request.put("action", "register");
request.put("user_id", userID);
request.put("username", username);
request.put("password", password);
request.put("profile_name", profile_name);
connection.send(request.toString());
Alert alert = new Alert(Alert.AlertType.INFORMATION, "Registration is successful");
alert.show();
} catch (Exception ex) {
Alert alert = new Alert(Alert.AlertType.ERROR, "Error receiving response: " + ex.getMessage());
alert.show();
}
}
else if(!password.equals(confirmPass) && password.matches(passwordRegex)) {
Alert alert = new Alert(Alert.AlertType.ERROR, "Password doesn't match");
alert.show();
}
else if(userDb.existsByUserId(userID))
{
Alert alert = new Alert(Alert.AlertType.ERROR, "User ID is already exist");
alert.show();
}
else if(userDb.existsByUsername(username)){
Alert alert = new Alert(Alert.AlertType.ERROR, "Username is already exist");
alert.show();
}
else {
Alert alert = new Alert(Alert.AlertType.ERROR, "Password doesn't Strong enough");
alert.show();
}
});
backButton.setOnAction(e -> {
switchScene("login_view.fxml");
});
}
private void switchScene(String fxmlFile) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/" + fxmlFile));
Parent root = loader.load();
Stage stage = (Stage) backButton.getScene().getWindow();
stage.setScene(new Scene(root));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,26 @@
package org.to.telegramfinalproject.UI;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.to.telegramfinalproject.HelloApplication;
import java.io.IOException;
public class TelegramApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("login_view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
@@ -0,0 +1,48 @@
package org.to.telegramfinalproject.UI;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import java.io.IOException;
public class login_view {
@FXML
private Button loginButton;
@FXML
private Button registerButton;
@FXML
public void initialize() {
loginButton.setOnAction(e -> {
switchScene("LoginForm.fxml");
});
registerButton.setOnAction(e -> {
switchScene("RegisterForm.fxml");
});
}
private void switchScene(String fxmlFile) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/" + fxmlFile));
Parent root = loader.load();
Stage stage = (Stage) loginButton.getScene().getWindow();
stage.setScene(new Scene(root));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}