YanFrp/src/main/java/top/octopusyan/controller/LoginController.java

262 lines
8.6 KiB
Java
Raw Normal View History

2022-04-06 17:49:00 +08:00
package top.octopusyan.controller;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXCheckBox;
import com.jfoenix.controls.JFXPasswordField;
import com.jfoenix.controls.JFXTextField;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.kordamp.ikonli.javafx.FontIcon;
import top.octopusyan.base.BaseController;
2022-04-09 03:59:20 +08:00
import top.octopusyan.manager.http.EasyHttp;
import top.octopusyan.manager.http.api.NotParamApi;
import top.octopusyan.manager.http.config.HttpConstant;
import top.octopusyan.manager.http.listener.OnHttpListener;
import top.octopusyan.config.TextValidate;
2022-04-06 17:49:00 +08:00
import top.octopusyan.http.Api;
import top.octopusyan.http.request.LoginParam;
2022-04-09 03:59:20 +08:00
import top.octopusyan.utils.*;
2022-04-06 17:49:00 +08:00
2022-04-09 03:59:20 +08:00
import java.io.IOException;
2022-04-06 17:49:00 +08:00
/**
* @author : octopus yan
* @email : octopus_yan@foxmail.com
* @description : Login 控制器
* @create : 2022-3-30 16:06
*/
public class LoginController extends BaseController<StackPane> implements Initializable {
@FXML
public StackPane root;
@FXML
public JFXButton closeBtn, minimizeBtn, loginBtn;
@FXML
public AnchorPane loginBottomPane;
@FXML
public ImageView loginBkgPane;
@FXML
public JFXButton registerBtn;
@FXML
public JFXTextField accountTextField;
@FXML
public JFXPasswordField passwordTextField;
@FXML
public JFXTextField seePwdTextField;
@FXML
public JFXButton accountIconBtn;
@FXML
public FontIcon accountIcon;
@FXML
public JFXButton pwdIconBtn;
@FXML
public FontIcon pwdIcon;
@FXML
public JFXButton seePwdIconBtn;
@FXML
public FontIcon seePwdIcon;
@FXML
public JFXCheckBox autoLoginCBox;
@FXML
public JFXCheckBox rememberCBox;
private boolean autoLogin;
@Override
public boolean dragWindow() {
return true;
}
@Override
public StackPane getRootPanel() {
return root;
}
@NotNull
@Override
public String getRootFxmlPath() {
return "/fxml/login.fxml";
}
@Override
public Button getClooseBtn() {
return closeBtn;
}
@Override
public Button getMinimizeBtn() {
return minimizeBtn;
}
@Override
public JFXButton getFirstBtn() {
return minimizeBtn;
}
@Override
public void initData() {
String account = ApplicatonStore.getAccount();
String password = ApplicatonStore.getPassword();
2022-04-09 03:59:20 +08:00
if (!StringUtils.isEmpty(account)) accountTextField.setText(account);
if (!StringUtils.isEmpty(password)) {
2022-04-06 17:49:00 +08:00
passwordTextField.setText(password);
seePwdTextField.setText(password);
}
}
// 隐藏展示密码框
private AnchorPane pwdParent;
@Override
public void initViewStyle() {
// 文本框焦点状态监听
accountTextField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) accountTextField.resetValidation();
});
passwordTextField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) passwordTextField.resetValidation();
});
seePwdTextField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) seePwdTextField.resetValidation();
});
// 隐藏展示密码框
pwdParent = (AnchorPane) passwordTextField.getParent();
pwdParent.getChildren().remove(seePwdTextField);
// 同步用户数据
accountTextField.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setAccount(newValue));
passwordTextField.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setPassword(newValue));
seePwdTextField.textProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setPassword(newValue));
// 添加文本校验
accountTextField.getValidators().add(TextValidate.AccoountRequired);
accountTextField.getValidators().add(TextValidate.AccoountValidator);
accountTextField.getValidators().add(TextValidate.getLengthValidator(6, 18, "账号"));
passwordTextField.getValidators().add(TextValidate.PasswordRequired);
seePwdTextField.getValidators().add(TextValidate.PasswordRequired);
// 记住密码
rememberCBox.selectedProperty().addListener((observable, oldValue, newValue) -> ApplicatonStore.setRememberMe(newValue));
// 自动登录
autoLoginCBox.selectedProperty().addListener((observable, oldValue, newValue) -> {
ApplicatonStore.setAutoLogin(newValue);
if (newValue && !ApplicatonStore.isRememberMe()) rememberCBox.selectedProperty().set(true);
});
}
@Override
public void initViewAction() {
// 注册
2022-04-09 03:59:20 +08:00
registerBtn.setOnMouseClicked(event -> {
try {
jumpTo(new RegisterController());
} catch (IOException e) {
e.printStackTrace();
}
});
2022-04-06 17:49:00 +08:00
// 查看密码
seePwdIconBtn.setOnMouseClicked(event -> {
boolean isHide = pwdParent.getChildren().contains(passwordTextField);
pwdParent.getChildren().remove(isHide ? passwordTextField : seePwdTextField);
pwdParent.getChildren().add(1, isHide ? seePwdTextField : passwordTextField);
(isHide ? seePwdTextField : passwordTextField).setText(ApplicatonStore.getPassword());
seePwdIcon.setIconColor(isHide ? Color.BLUE : Color.BLACK);
});
// 登录
loginBtn.setOnMouseClicked(event -> login());
accountTextField.setOnKeyPressed(event -> {
2022-04-09 03:59:20 +08:00
if (event.getCode() == KeyCode.ENTER) login();
2022-04-06 17:49:00 +08:00
});
passwordTextField.setOnKeyPressed(event -> {
2022-04-09 03:59:20 +08:00
if (event.getCode() == KeyCode.ENTER) login();
2022-04-06 17:49:00 +08:00
});
// 自动登录
2022-04-09 03:59:20 +08:00
if ((ApplicatonStore.isAutoLogin() || ApplicatonStore.isRegisterSuccess()) &&
2022-04-06 17:49:00 +08:00
!StringUtils.isEmpty(ApplicatonStore.getAccount()) &&
!StringUtils.isEmpty(ApplicatonStore.getPassword())
2022-04-09 03:59:20 +08:00
) {
2022-04-06 17:49:00 +08:00
login();
}
}
2022-04-09 03:59:20 +08:00
private void login() {
2022-04-06 17:49:00 +08:00
// 获取文本校验结果
boolean pwdValidate = pwdParent.getChildren().contains(passwordTextField) ?
passwordTextField.validate() : seePwdTextField.validate();
boolean accountValidate = accountTextField.validate();
if (pwdValidate && accountValidate)
EasyHttp.builder()
.api(Api.Login)
.param(new LoginParam(accountTextField.getText(), ApplicatonStore.getPassword()))
.request(new OnHttpListener<String>() {
@Override
public void onSucceed(String result) {
// 登录出错
2022-04-09 03:59:20 +08:00
if (!JsoupUtil.isAlertSuccess(result)) {
Platform.runLater(() -> AlertUtil.error(JsoupUtil.getErrorMessage(result)).show());
2022-04-06 17:49:00 +08:00
return;
}
// TODO 登录成功
setCsrf();
2022-04-09 03:59:20 +08:00
Platform.runLater(() -> {
try {
jumpTo(new MainController());
} catch (IOException e) {
e.printStackTrace();
}
});
2022-04-06 17:49:00 +08:00
}
@Override
public void onFail(Exception e) {
}
2022-04-06 17:49:00 +08:00
});
}
private void setCsrf() {
EasyHttp.builder()
.api(new NotParamApi<String>(
"/?page=panel&module=addproxy",
HttpConstant.Method.GET
))
.request(new OnHttpListener<String>() {
@Override
public void onSucceed(String result) {
ProxyUtil.setCsrf(result);
}
@Override
public void onFail(Exception e) {
}
2022-04-06 17:49:00 +08:00
});
}
@Override
public void onDestroy() {
EasyHttp.cancel();
super.onDestroy();
}
}