Files
Telegram-Final-Project/src/main/java/org/to/telegramfinalproject/UI/RegisterController.java
T
Asal Lotfi 30deb2cbe0 Merge remote-tracking branch 'origin/Connection-UI' into Connection-UI
# Conflicts:
#	src/main/java/org/to/telegramfinalproject/UI/ChatPageController.java
#	src/main/java/org/to/telegramfinalproject/UI/MainController.java
2025-08-31 01:13:47 +03:30

246 lines
9.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package org.to.telegramfinalproject.UI;
import javafx.animation.PauseTransition;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import javafx.util.Duration;
import org.json.JSONObject;
import org.to.telegramfinalproject.Client.ClientConnection;
import org.to.telegramfinalproject.Database.userDatabase;
import java.io.IOException;
import static org.to.telegramfinalproject.UI.AppRouter.showLogin;
public class RegisterController {
@FXML private TextField userIdField;
@FXML private TextField usernameField;
@FXML private TextField profileNameField;
@FXML private PasswordField passwordField;
@FXML private TextField visiblePasswordField;
@FXML private PasswordField confirmPasswordField;
@FXML private TextField visibleConfirmPasswordField;
@FXML private Button togglePasswordBtn;
@FXML private Button toggleConfirmBtn;
@FXML private Label errorLabel;
private ClientConnection connection;
private boolean passwordVisible = false;
private boolean confirmVisible = false;
@FXML
public void initialize() {
try {
org.to.telegramfinalproject.Client.TelegramClient.getOrInitForUI();
} catch (Exception ignored) {
}
visiblePasswordField.textProperty().bindBidirectional(passwordField.textProperty());
visibleConfirmPasswordField.textProperty().bindBidirectional(confirmPasswordField.textProperty());
}
@FXML
private void togglePasswordVisibility() {
passwordVisible = !passwordVisible;
visiblePasswordField.setVisible(passwordVisible);
visiblePasswordField.setManaged(passwordVisible);
passwordField.setVisible(!passwordVisible);
passwordField.setManaged(!passwordVisible);
togglePasswordBtn.setText(passwordVisible ? "👁" : "👁");
}
@FXML
private void toggleConfirmPasswordVisibility() {
confirmVisible = !confirmVisible;
visibleConfirmPasswordField.setVisible(confirmVisible);
visibleConfirmPasswordField.setManaged(confirmVisible);
confirmPasswordField.setVisible(!confirmVisible);
confirmPasswordField.setManaged(!confirmVisible);
toggleConfirmBtn.setText(confirmVisible ? "👁" : "👁");
}
// @FXML
// private void handleRegister() {
// String userID = userIdField.getText().trim();
// String username = usernameField.getText().trim();
// String profileName = profileNameField.getText().trim();
// String password = passwordField.getText();
// String confirmPass = confirmPasswordField.getText();
//
// userDatabase userDb = new userDatabase();
// String passwordRegex = "\\b(?=[^\\s]*[A-Z])(?=[^\\s]*[a-z])(?=[^\\s]*\\d)(?=[^\\s]*[!@#$%^&*])[^\\s]{8,}\\b";
//
// // 1. Empty fields
// if (userID.isEmpty() || username.isEmpty() || profileName.isEmpty() || password.isEmpty() || confirmPass.isEmpty()) {
// showError("Please fill in all required fields.");
// return;
// }
//
// // 2. Username exists
// if (userDb.existsByUsername(username)) {
// showError("This username is already taken.");
// return;
// }
//
// // 3. User ID exists
// if (userDb.existsByUserId(userID)) {
// showError("This user ID is already taken.");
// return;
// }
//
// // 4. Password mismatch
// if (!password.equals(confirmPass)) {
// showError("Passwords do not match.");
// return;
// }
//
// // 5. Weak password
// if (!password.matches(passwordRegex)) {
// showError("Password must be at least 8 characters, include a capital letter, a number, and a special character.");
// return;
// }
//
// // 6. Attempt registration
// try {
// JSONObject request = new JSONObject();
// request.put("action", "register");
// request.put("user_id", userID);
// request.put("username", username);
// request.put("password", password);
// request.put("profile_name", profileName);
// connection.send(request.toString());
//
// // Simulate successful registration (since main.fxml isnt ready)
// Alert alert = new Alert(Alert.AlertType.INFORMATION, "Registration successful!");
// alert.show();
//
// } catch (Exception ex) {
// showError("Failed to register. Please try again later.");
// }
// }
@FXML
private void handleRegister() {
String userID = userIdField.getText().trim();
String username = usernameField.getText().trim();
String profileName = profileNameField.getText().trim();
String password = passwordField.getText();
String confirmPass = confirmPasswordField.getText();
userDatabase userDb = new userDatabase();
String passwordRegex = "\\b(?=[^\\s]*[A-Z])(?=[^\\s]*[a-z])(?=[^\\s]*\\d)(?=[^\\s]*[!@#$%^&*])[^\\s]{8,}\\b";
// اعتبارسنجی‌ها
if (userID.isEmpty() || username.isEmpty() || profileName.isEmpty() || password.isEmpty() || confirmPass.isEmpty()) {
showError("Please fill in all required fields."); return;
}
if (userDb.existsByUsername(username)) { showError("This username is already taken."); return; }
if (userDb.existsByUserId(userID)) { showError("This user ID is already taken."); return; }
if (!password.equals(confirmPass)) { showError("Passwords do not match."); return; }
if (!password.matches(passwordRegex)) { showError("Password must be at least 8 characters, include a capital letter, a number, and a special character."); return; }
// UI را موقتاً disable کن (اختیاری)
setBusy(true);
new Thread(() -> {
try {
// 1) مطمئن شو کانکشن/لیسنر روشن است
var cli = org.to.telegramfinalproject.Client.TelegramClient.getOrInitForUI();
var handler = cli.getHandler();
// 2) Register
var regReq = new org.json.JSONObject()
.put("action", "register")
.put("user_id", userID)
.put("username", username)
.put("password", password)
.put("profile_name", profileName);
var regResp = org.to.telegramfinalproject.Client.ActionHandler.sendWithResponse(regReq);
if (regResp == null || !"success".equalsIgnoreCase(regResp.optString("status"))) {
javafx.application.Platform.runLater(() -> {
setBusy(false);
showError(regResp != null ? regResp.optString("message","Register failed.") : "Register failed.");
});
return;
}
// 3) Auto-Login با همان کانکشن
handler.login(username, password);
javafx.application.Platform.runLater(() -> {
setBusy(false);
if (org.to.telegramfinalproject.Client.Session.currentUser == null || !handler.wasSuccess()) {
showError(handler.getLastMessage().isEmpty() ? "Login failed." : handler.getLastMessage());
return;
}
org.to.telegramfinalproject.UI.AppRouter.showMain();
});
} catch (Exception ex) {
javafx.application.Platform.runLater(() -> {
setBusy(false);
showError("Failed to register/login: " + ex.getMessage());
});
}
}, "register-thread").start();
}
private void setBusy(boolean b){
userIdField.setDisable(b);
usernameField.setDisable(b);
profileNameField.setDisable(b);
passwordField.setDisable(b);
visiblePasswordField.setDisable(b);
confirmPasswordField.setDisable(b);
visibleConfirmPasswordField.setDisable(b);
togglePasswordBtn.setDisable(b);
toggleConfirmBtn.setDisable(b);
}
@FXML
private void switchToLogin() throws IOException {
showLogin();
}
private void switchScene(String fxmlFile) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/" + fxmlFile));
Parent root = loader.load();
Stage stage = (Stage) usernameField.getScene().getWindow();
stage.setScene(new Scene(root, 500, 700));
stage.show();
} catch (IOException e) {
e.printStackTrace();
showError("Could not load scene: " + fxmlFile);
}
}
private void showError(String message) {
errorLabel.setVisible(false);
errorLabel.setText(""); // Clear the label text
PauseTransition pause = new PauseTransition(Duration.millis(50));
pause.setOnFinished(event -> {
errorLabel.setText(message);
errorLabel.setStyle("-fx-text-fill: red;"); // 🔴 force red
errorLabel.setVisible(true);
});
pause.play();
}
}