forked from External/mage
427 lines
21 KiB
Java
427 lines
21 KiB
Java
package mage.client.dialog;
|
|
|
|
import java.util.concurrent.CancellationException;
|
|
import java.util.concurrent.ExecutionException;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeoutException;
|
|
import javax.swing.SwingWorker;
|
|
import mage.client.MageFrame;
|
|
import mage.client.SessionHandler;
|
|
import mage.client.preference.MagePreferences;
|
|
import mage.remote.Connection;
|
|
import org.apache.log4j.Logger;
|
|
|
|
public class ResetPasswordDialog extends MageDialog {
|
|
|
|
private static final Logger logger = Logger.getLogger(ResetPasswordDialog.class);
|
|
private ConnectDialog connectDialog;
|
|
private Connection connection;
|
|
private GetAuthTokenTask getAuthTokenTask;
|
|
private ResetPasswordTask resetPasswordTask;
|
|
|
|
/**
|
|
* Creates new form ResetPasswordDialog
|
|
*/
|
|
public ResetPasswordDialog(ConnectDialog connectDialog) {
|
|
initComponents();
|
|
this.connectDialog = connectDialog;
|
|
}
|
|
|
|
public void showDialog() {
|
|
String serverAddress = this.connectDialog.getServer();
|
|
this.txtServer.setText(serverAddress);
|
|
this.txtPort.setText(this.connectDialog.getPort());
|
|
this.txtEmail.setText(MagePreferences.getEmail(serverAddress));
|
|
this.lblStatus.setText("");
|
|
|
|
this.setModal(true);
|
|
this.setLocation(50, 50);
|
|
this.setVisible(true);
|
|
}
|
|
|
|
/**
|
|
* This method is called from within the constructor to initialize the form.
|
|
* WARNING: Do NOT modify this code. The content of this method is always
|
|
* regenerated by the Form Editor.
|
|
*/
|
|
@SuppressWarnings("unchecked")
|
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
private void initComponents() {
|
|
|
|
jPanel2 = new javax.swing.JPanel();
|
|
jLabel6 = new javax.swing.JLabel();
|
|
lblAuthToken = new javax.swing.JLabel();
|
|
lblPassword = new javax.swing.JLabel();
|
|
lblPasswordConfirmation = new javax.swing.JLabel();
|
|
txtAuthToken = new javax.swing.JTextField();
|
|
btnSubmitNewPassword = new javax.swing.JButton();
|
|
lblPasswordConfirmationReasoning = new javax.swing.JLabel();
|
|
txtPassword = new javax.swing.JPasswordField();
|
|
txtPasswordConfirmation = new javax.swing.JPasswordField();
|
|
jPanel1 = new javax.swing.JPanel();
|
|
jLabel5 = new javax.swing.JLabel();
|
|
lblEmail = new javax.swing.JLabel();
|
|
txtEmail = new javax.swing.JTextField();
|
|
btnGetAuthToken = new javax.swing.JButton();
|
|
lblStatus = new javax.swing.JLabel();
|
|
btnCancel = new javax.swing.JButton();
|
|
lblServer = new javax.swing.JLabel();
|
|
txtServer = new javax.swing.JTextField();
|
|
txtPort = new javax.swing.JTextField();
|
|
lblPort = new javax.swing.JLabel();
|
|
|
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
|
setTitle("Reset password");
|
|
|
|
jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
|
|
|
|
jLabel6.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
|
|
jLabel6.setText("Step 2:");
|
|
|
|
lblAuthToken.setLabelFor(txtAuthToken);
|
|
lblAuthToken.setText("Auth token:");
|
|
|
|
lblPassword.setLabelFor(txtPassword);
|
|
lblPassword.setText("New password:");
|
|
|
|
lblPasswordConfirmation.setLabelFor(txtPasswordConfirmation);
|
|
lblPasswordConfirmation.setText("New password:");
|
|
|
|
btnSubmitNewPassword.setText("Submit a new password");
|
|
btnSubmitNewPassword.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
btnSubmitNewPasswordActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
lblPasswordConfirmationReasoning.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N
|
|
lblPasswordConfirmationReasoning.setLabelFor(txtPasswordConfirmation);
|
|
lblPasswordConfirmationReasoning.setText("(confirmation)");
|
|
|
|
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
|
|
jPanel2.setLayout(jPanel2Layout);
|
|
jPanel2Layout.setHorizontalGroup(
|
|
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
|
.addComponent(jLabel6)
|
|
.addGap(0, 0, Short.MAX_VALUE))
|
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
|
.addComponent(lblAuthToken, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(lblPassword, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(lblPasswordConfirmation, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(txtAuthToken)
|
|
.addComponent(txtPassword)
|
|
.addComponent(txtPasswordConfirmation)))
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
|
|
.addGap(0, 204, Short.MAX_VALUE)
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(lblPasswordConfirmationReasoning, javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addComponent(btnSubmitNewPassword, javax.swing.GroupLayout.Alignment.TRAILING))))
|
|
.addContainerGap())
|
|
);
|
|
jPanel2Layout.setVerticalGroup(
|
|
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
|
.addComponent(jLabel6)
|
|
.addGap(24, 24, 24)
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(lblAuthToken)
|
|
.addComponent(txtAuthToken, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(lblPassword)
|
|
.addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(lblPasswordConfirmation)
|
|
.addComponent(txtPasswordConfirmation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(lblPasswordConfirmationReasoning)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(btnSubmitNewPassword)
|
|
.addContainerGap(9, Short.MAX_VALUE))
|
|
);
|
|
|
|
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
|
|
|
|
jLabel5.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N
|
|
jLabel5.setText("Step 1:");
|
|
|
|
lblEmail.setLabelFor(txtEmail);
|
|
lblEmail.setText("Email:");
|
|
|
|
btnGetAuthToken.setText("Email an auth token");
|
|
btnGetAuthToken.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
btnGetAuthTokenActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
|
|
jPanel1.setLayout(jPanel1Layout);
|
|
jPanel1Layout.setHorizontalGroup(
|
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
.addComponent(jLabel5)
|
|
.addGap(0, 0, Short.MAX_VALUE))
|
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
.addComponent(lblEmail)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(txtEmail))
|
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
.addGap(0, 0, Short.MAX_VALUE)
|
|
.addComponent(btnGetAuthToken)))
|
|
.addContainerGap())
|
|
);
|
|
jPanel1Layout.setVerticalGroup(
|
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
|
.addComponent(jLabel5)
|
|
.addGap(24, 24, 24)
|
|
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(lblEmail)
|
|
.addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(btnGetAuthToken)
|
|
.addContainerGap())
|
|
);
|
|
|
|
btnCancel.setText("Cancel");
|
|
btnCancel.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
btnCancelActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
lblServer.setLabelFor(txtServer);
|
|
lblServer.setText("Server:");
|
|
|
|
lblPort.setLabelFor(txtPort);
|
|
lblPort.setText("Port:");
|
|
|
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
|
getContentPane().setLayout(layout);
|
|
layout.setHorizontalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
|
.addGap(0, 0, Short.MAX_VALUE)
|
|
.addComponent(btnCancel))
|
|
.addGroup(layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(lblStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addGroup(layout.createSequentialGroup()
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addComponent(lblServer)
|
|
.addComponent(lblPort))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(txtServer)
|
|
.addComponent(txtPort))))
|
|
.addContainerGap())
|
|
);
|
|
layout.setVerticalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(lblServer)
|
|
.addComponent(txtServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(lblPort))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(lblStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(btnCancel)
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
pack();
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
private void btnGetAuthTokenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGetAuthTokenActionPerformed
|
|
if (this.txtEmail.getText().isEmpty()) {
|
|
MageFrame.getInstance().showError("Please enter an email address.");
|
|
return;
|
|
}
|
|
|
|
connection = new Connection();
|
|
connection.setHost(this.txtServer.getText().trim());
|
|
connection.setPort(Integer.valueOf(this.txtPort.getText().trim()));
|
|
PreferencesDialog.setProxyInformation(connection);
|
|
connection.setEmail(this.txtEmail.getText().trim());
|
|
|
|
getAuthTokenTask = new GetAuthTokenTask();
|
|
getAuthTokenTask.execute();
|
|
}//GEN-LAST:event_btnGetAuthTokenActionPerformed
|
|
|
|
private void btnSubmitNewPasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSubmitNewPasswordActionPerformed
|
|
if (this.txtEmail.getText().isEmpty()) {
|
|
MageFrame.getInstance().showError("Please enter an email address.");
|
|
return;
|
|
}
|
|
if (this.txtAuthToken.getText().isEmpty()) {
|
|
MageFrame.getInstance().showError("Please enter an auth token.");
|
|
return;
|
|
}
|
|
if (this.txtPassword.getText().isEmpty()) {
|
|
MageFrame.getInstance().showError("Please enter a new password.");
|
|
return;
|
|
}
|
|
if (!this.txtPassword.getText().equals(this.txtPasswordConfirmation.getText())) {
|
|
MageFrame.getInstance().showError("Passwords don't match.");
|
|
return;
|
|
}
|
|
|
|
connection = new Connection();
|
|
connection.setHost(this.txtServer.getText().trim());
|
|
connection.setPort(Integer.valueOf(this.txtPort.getText().trim()));
|
|
PreferencesDialog.setProxyInformation(connection);
|
|
connection.setEmail(this.txtEmail.getText().trim());
|
|
connection.setAuthToken(this.txtAuthToken.getText().trim());
|
|
connection.setPassword(this.txtPassword.getText().trim());
|
|
|
|
resetPasswordTask = new ResetPasswordTask();
|
|
resetPasswordTask.execute();
|
|
}//GEN-LAST:event_btnSubmitNewPasswordActionPerformed
|
|
|
|
private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed
|
|
this.hideDialog();
|
|
}//GEN-LAST:event_btnCancelActionPerformed
|
|
|
|
void disableButtons() {
|
|
btnGetAuthToken.setEnabled(false);
|
|
btnSubmitNewPassword.setEnabled(false);
|
|
}
|
|
|
|
void enableButtons() {
|
|
btnGetAuthToken.setEnabled(true);
|
|
btnSubmitNewPassword.setEnabled(true);
|
|
}
|
|
|
|
private class GetAuthTokenTask extends SwingWorker<Boolean, Void> {
|
|
|
|
private boolean result = false;
|
|
|
|
private static final int CONNECTION_TIMEOUT_MS = 2100;
|
|
|
|
@Override
|
|
protected Boolean doInBackground() throws Exception {
|
|
lblStatus.setText("Connecting...");
|
|
disableButtons();
|
|
result = SessionHandler.emailAuthToken(connection);
|
|
return result;
|
|
}
|
|
|
|
@Override
|
|
protected void done() {
|
|
try {
|
|
get(CONNECTION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
|
if (result) {
|
|
// Save settings.
|
|
MagePreferences.setEmail(connection.getHost(), connection.getEmail());
|
|
|
|
String message = "Auth token is emailed. Please check your inbox.";
|
|
lblStatus.setText(message);
|
|
MageFrame.getInstance().showMessage(message);
|
|
} else {
|
|
lblStatus.setText("There was an issue while requesting an auth token.");
|
|
}
|
|
} catch (InterruptedException | ExecutionException ex) {
|
|
logger.fatal("Get Auth Token Task error", ex);
|
|
} catch (CancellationException ex) {
|
|
logger.info("Canceled");
|
|
lblStatus.setText("Canceled");
|
|
} catch (TimeoutException ex) {
|
|
logger.fatal("Timeout: ", ex);
|
|
} finally {
|
|
MageFrame.stopConnecting();
|
|
enableButtons();
|
|
}
|
|
}
|
|
}
|
|
|
|
private class ResetPasswordTask extends SwingWorker<Boolean, Void> {
|
|
|
|
private boolean result = false;
|
|
|
|
private static final int CONNECTION_TIMEOUT_MS = 2100;
|
|
|
|
@Override
|
|
protected Boolean doInBackground() throws Exception {
|
|
lblStatus.setText("Connecting...");
|
|
disableButtons();
|
|
result = SessionHandler.resetPassword(connection);
|
|
return result;
|
|
}
|
|
|
|
@Override
|
|
protected void done() {
|
|
try {
|
|
get(CONNECTION_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
|
if (result) {
|
|
// Save settings.
|
|
MagePreferences.setPassword(connection.getHost(), connection.getPassword());
|
|
|
|
String message = "Password is reset successfully.";
|
|
lblStatus.setText(message);
|
|
MageFrame.getInstance().showMessage(message);
|
|
hideDialog();
|
|
} else {
|
|
lblStatus.setText("There was an issue while resetting password.");
|
|
}
|
|
} catch (InterruptedException | ExecutionException ex) {
|
|
logger.fatal("Reset Password Task error", ex);
|
|
} catch (CancellationException ex) {
|
|
logger.info("Canceled");
|
|
lblStatus.setText("Canceled");
|
|
} catch (TimeoutException ex) {
|
|
logger.fatal("Timeout: ", ex);
|
|
} finally {
|
|
MageFrame.stopConnecting();
|
|
enableButtons();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
private javax.swing.JButton btnCancel;
|
|
private javax.swing.JButton btnGetAuthToken;
|
|
private javax.swing.JButton btnSubmitNewPassword;
|
|
private javax.swing.JLabel jLabel5;
|
|
private javax.swing.JLabel jLabel6;
|
|
private javax.swing.JPanel jPanel1;
|
|
private javax.swing.JPanel jPanel2;
|
|
private javax.swing.JLabel lblAuthToken;
|
|
private javax.swing.JLabel lblEmail;
|
|
private javax.swing.JLabel lblPassword;
|
|
private javax.swing.JLabel lblPasswordConfirmation;
|
|
private javax.swing.JLabel lblPasswordConfirmationReasoning;
|
|
private javax.swing.JLabel lblPort;
|
|
private javax.swing.JLabel lblServer;
|
|
private javax.swing.JLabel lblStatus;
|
|
private javax.swing.JTextField txtAuthToken;
|
|
private javax.swing.JTextField txtEmail;
|
|
private javax.swing.JPasswordField txtPassword;
|
|
private javax.swing.JPasswordField txtPasswordConfirmation;
|
|
private javax.swing.JTextField txtPort;
|
|
private javax.swing.JTextField txtServer;
|
|
// End of variables declaration//GEN-END:variables
|
|
}
|