package co.forsaken.projectindigo.gui;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JOptionPane;
import co.forsaken.projectindigo.IndigoLauncher;
import co.forsaken.projectindigo.data.LoginEvents;
import co.forsaken.projectindigo.gui.components.Box;
import co.forsaken.projectindigo.gui.components.Button;
import co.forsaken.projectindigo.gui.components.CheckBox;
import co.forsaken.projectindigo.gui.components.Image;
import co.forsaken.projectindigo.gui.components.Label;
import co.forsaken.projectindigo.gui.components.PasswordBox;
import co.forsaken.projectindigo.gui.components.TextBox;
import co.forsaken.projectindigo.managers.LoginHandler;
import co.forsaken.projectindigo.managers.UserManager;
import co.forsaken.projectindigo.session.Identity;
@SuppressWarnings("serial") public class LoginPanel extends BasePanel {
private Identity _loginResponse;
private UserManager _userManager;
private Box _loginBg;
private Image _header;
private Label _usernameLbl;
private TextBox _username;
private Label _passwordLbl;
private PasswordBox _password;
private CheckBox _rememberMe;
private Button _loginBtn;
private String _activeUser;
public LoginPanel(MainPanel mainPanel) {
super(mainPanel, 0);
}
public void loadUserManager() {
_userManager = new UserManager(_mainPanel);
if (getUserManager().getSavedAccounts().size() > 0) {
_username.setText(getUserManager().getSavedAccounts().get(0));
_password.setText(getUserManager().getSavedPassword(getUserManager().getSavedAccounts().get(0)));
_rememberMe.setSelected(true);
}
}
public void initComponents() {
_loginBg = new Box(MainPanel.BORDER_COLOUR);
_loginBg.setBounds((getWidth() - 264) / 2, 157, 264, 254);
_header = new Image("header");
_header.setBounds((getWidth() - _header.getWidth()) / 2, 20, _header.getWidth(), _header.getHeight());
_username = new TextBox(this, "");
_username.setBounds((getWidth() - 210) / 2, _loginBg.getY() + 50, 210, 30);
_usernameLbl = new Label(this, "Username:");
_usernameLbl.setBounds((getWidth() - _username.getWidth()) / 2, _username.getY() - 32, 210, 30);
_password = new PasswordBox(this, "");
_password.setBounds((getWidth() - 210) / 2, _username.getY() + 70, 210, 30);
_passwordLbl = new Label(this, "Password:");
_passwordLbl.setBounds((getWidth() - _password.getWidth()) / 2, _password.getY() - 32, 210, 30);
_rememberMe = new CheckBox(this, "Remember Me");
_rememberMe.setBounds(_password.getX() + 45, _password.getY() + 40, 210, 30);
_loginBtn = new Button(this, "Login");
_loginBtn.setBounds((getWidth() - 100) / 2, _rememberMe.getY() + 40, 100, 25);
_loginBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tryLogin(_username.getText(), new String(_password.getPassword()), _rememberMe.isSelected());
}
});
KeyListener keyListener = new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
_loginBtn.doClick();
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
};
_password.addKeyListener(keyListener);
_username.addKeyListener(keyListener);
add(_loginBg);
// add(_header);
}
public String getUsername() {
return _loginResponse.getId();
}
public final void setResponse(Identity result) {
_loginResponse = result;
}
public Identity getLoginResponse() {
return _loginResponse;
}
public final void onEvent(LoginEvents event, String... msg) {
switch (event) {
default:
case LAUNCH:
_userManager.writeUsernameList();
switchPage(1);
((ServerBasePanel) getMainPanel().getPanel(1)).updateUser(getLoginResponse().getName());
return;
case BAD_LOGIN:
JOptionPane.showMessageDialog(_mainPanel, "Invalid username/password combination." + "\n\n" + IndigoLauncher.TITLE + " will not work without a premium Minecraft account.", "Bad Login Information!", JOptionPane.WARNING_MESSAGE);
break;
case AUTH_ERROR:
JOptionPane.showMessageDialog(_mainPanel, msg);
break;
case NETWORK_DOWN:
JOptionPane.showMessageDialog(_mainPanel, "Minecraft sessions seem to be down.... Unable to authenticate, check http://help.mojang.com/ for information");
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(new URI("https://help.mojang.com/"));
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
case PERMISSION_DENIED:
JOptionPane.showMessageDialog(_mainPanel, "Ensure " + IndigoLauncher.TITLE + " is whitelisted with any antivirus applications.", "Permission Denied!", JOptionPane.WARNING_MESSAGE);
break;
}
switchPage(0);
}
public final void tryLogin(String user) {
if (!_userManager.hasSavedPassword(user)) {
onEvent(LoginEvents.BAD_LOGIN);
return;
}
_username.setText(user);
_password.setText(_userManager.getSavedPassword(user));
tryLogin(user, _userManager.getSavedPassword(user), false);
}
public final void tryLogin(final String user, final String pass, final boolean saveUser) {
if (pass == null || pass.isEmpty()) {
onEvent(LoginEvents.BAD_LOGIN);
return;
}
_activeUser = user;
LoginHandler loginHandler = new LoginHandler(_mainPanel, user, pass, saveUser);
loginHandler.execute();
}
public UserManager getUserManager() {
return _userManager;
}
}