summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java66
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java64
2 files changed, 103 insertions, 27 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
index eab1c4f9..0f2e1f35 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
@@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.window;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
@@ -11,6 +12,7 @@ import java.awt.event.WindowEvent;
import java.io.File;
import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
import javax.swing.AbstractAction;
import javax.swing.DefaultComboBoxModel;
@@ -26,8 +28,10 @@ import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.Organization;
import org.openslx.bwlp.thrift.iface.Satellite;
import org.openslx.dozmod.App;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.authentication.Authenticator;
+import org.openslx.dozmod.authentication.BrowserAuthenticator;
import org.openslx.dozmod.authentication.Authenticator.AuthenticationData;
import org.openslx.dozmod.authentication.Authenticator.AuthenticatorCallback;
import org.openslx.dozmod.authentication.EcpAuthenticator;
@@ -69,7 +73,8 @@ public class LoginWindow extends LoginWindowLayout {
public static enum LoginType {
ECP(0),
TEST_ACCOUNT(1),
- DIRECT_CONNECT(2);
+ DIRECT_CONNECT(2),
+ EXTERNAL_BROWSER(3);
public final int id;
@@ -80,6 +85,9 @@ public class LoginWindow extends LoginWindowLayout {
// authentication method to use for login attempts
protected LoginType loginType = null;
+
+ // Currently running authentication
+ protected Authenticator currentAuthenticator;
private boolean forceCustomSatellite = false;
@@ -99,10 +107,25 @@ public class LoginWindow extends LoginWindowLayout {
rdoLoginType[type.id].addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
- if (e.getStateChange() == ItemEvent.SELECTED) {
- cboOrganization.setEnabled(cboOrganization.getModel().getSize() != 0 && type == LoginType.ECP);
- loginType = type;
- btnOpenRegistration.setEnabled(type == LoginType.ECP);
+ if (e.getStateChange() != ItemEvent.SELECTED)
+ return;
+ cboOrganization.setEnabled(cboOrganization.getModel().getSize() != 0 && type == LoginType.ECP);
+ loginType = type;
+ btnOpenRegistration.setEnabled(type == LoginType.ECP || type == LoginType.EXTERNAL_BROWSER);
+ boolean browser = (type == LoginType.EXTERNAL_BROWSER);
+ cboOrganization.setVisible(!browser);
+ txtUsername.setVisible(!browser);
+ txtPassword.setVisible(!browser);
+ lblOrganization.setVisible(!browser);
+ lblUsername.setVisible(!browser);
+ lblPassword.setVisible(!browser);
+ txtUrl.setVisible(browser);
+ lblError.setText("-");
+ lblError.setVisible(browser);
+ pnlLoginForm.doLayout();
+ if (currentAuthenticator != null) {
+ currentAuthenticator.cancel();
+ currentAuthenticator = null;
}
}
});
@@ -183,6 +206,9 @@ public class LoginWindow extends LoginWindowLayout {
// make enter key activate login
pnlLoginForm.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "login");
+ pnlLoginForm.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
+ KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_DOWN_MASK), "login");
+
pnlLoginForm.getActionMap().put("login", new AbstractAction() {
/**
*
@@ -317,8 +343,19 @@ public class LoginWindow extends LoginWindowLayout {
return;
}
// here we only check for the fields
- String username = txtUsername.getText();
- final String password = String.copyValueOf(txtPassword.getPassword());
+ String username;
+ final String password;
+ // SPECIAL CASE - browser based
+ // username is the full URL including token, password is just the token
+ if (loginType == LoginType.EXTERNAL_BROWSER) {
+ password = UUID.randomUUID().toString();
+ username = "https://" + Branding.getMasterServerAddress() + "/webif/shib/?do=SuiteLogin&accessToken=" + password;
+ lblError.setText(I18n.WINDOW.getString("Login.Label.error.continueBrowser"));
+ txtUrl.setText(username);
+ } else {
+ username = txtUsername.getText();
+ password = String.copyValueOf(txtPassword.getPassword());
+ }
// login clicked, lets first read the fields
if (username.isEmpty()) {
Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.noUsername"), MessageType.ERROR, LOGGER, null);
@@ -340,6 +377,9 @@ public class LoginWindow extends LoginWindowLayout {
final AuthenticatorCallback authenticatorCallback = new AuthenticatorCallback() {
@Override
public void postLogin(ReturnCode returnCode, final AuthenticationData data, Throwable t) {
+ if (t != null) {
+ lblError.setText(t.getMessage());
+ }
switch (returnCode) {
case NO_ERROR:
Gui.asyncExec(new Runnable() {
@@ -384,13 +424,15 @@ public class LoginWindow extends LoginWindowLayout {
};
// now switch over the login types.
- final Authenticator authenticator;
switch (loginType) {
case ECP:
- authenticator = new EcpAuthenticator(selectedOrg.getEcpUrl());
+ currentAuthenticator = new EcpAuthenticator(selectedOrg.getEcpUrl());
break;
case TEST_ACCOUNT:
- authenticator = new TestAccountAuthenticator();
+ currentAuthenticator = new TestAccountAuthenticator();
+ break;
+ case EXTERNAL_BROWSER:
+ currentAuthenticator = new BrowserAuthenticator(lblError);
break;
case DIRECT_CONNECT:
Gui.showMessageBox(this, I18n.WINDOW.getString("Login.Message.error.loginTypeDirectConnect"),
@@ -410,7 +452,7 @@ public class LoginWindow extends LoginWindowLayout {
// Execute login
App.waitForInit();
try {
- authenticator.login(finalUsername, password, authenticatorCallback);
+ currentAuthenticator.login(finalUsername, password, authenticatorCallback);
return;
} catch (TException e) {
ThriftError.showMessage(LoginWindow.this, LOGGER, e,
@@ -418,6 +460,8 @@ public class LoginWindow extends LoginWindowLayout {
} catch (Exception e) {
Gui.showMessageBox(LoginWindow.this, I18n.WINDOW.getString("Login.Message.error.loginFailed"),
MessageType.ERROR, LOGGER, e);
+ } finally {
+ currentAuthenticator = null;
}
enableLogin(true);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
index 55b525d9..c65e7a53 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
@@ -56,7 +56,7 @@ public abstract class LoginWindowLayout extends JDialog {
protected LOGIN_TYPE loginType = null;
// login type panel
- protected final JRadioButton[] rdoLoginType = new JRadioButton[3];
+ protected final JRadioButton[] rdoLoginType = new JRadioButton[4];
// login form panel
protected final JComboBox<Organization> cboOrganization;
@@ -68,7 +68,14 @@ public abstract class LoginWindowLayout extends JDialog {
protected final JPanel pnlLoginType;
protected final JPanel pnlLoginForm;
protected final JPanel pnlAdvanced;
-
+
+ protected final JTextField txtUrl;
+ protected final QLabel lblError;
+
+ protected final QLabel lblOrganization;
+ protected final QLabel lblUsername;
+ protected final QLabel lblPassword;
+
// advanced panel
protected final JButton btnSettings;
protected final JButton btnLogDir;
@@ -90,13 +97,18 @@ public abstract class LoginWindowLayout extends JDialog {
grid.add(new QLabel(getScaledLogo()), 2);
grid.nextRow();
- rdoLoginType[0] = new JRadioButton(
- I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.0", Branding.getMasterServerIdm()));
- rdoLoginType[1] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.1"));
- rdoLoginType[2] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.2"));
+ rdoLoginType[0] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.0",
+ Branding.getMasterServerIdm()));
+ rdoLoginType[1] = new JRadioButton(
+ I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.1"));
+ rdoLoginType[2] = new JRadioButton(
+ I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.2"));
+ rdoLoginType[3] = new JRadioButton(I18n.WINDOW_LAYOUT.getString("Login.RadioButton.loginType.text.3",
+ Branding.getMasterServerIdm()));
btnSettings = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.settings.text"));
btnLogDir = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.logDir.text"));
+ lblOrganization = new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.organization.text"));
cboOrganization = new ComboBox<Organization>(new ComboBoxRenderer<Organization>() {
@Override
public String renderItem(Organization item) {
@@ -110,8 +122,17 @@ public abstract class LoginWindowLayout extends JDialog {
return I18n.WINDOW_LAYOUT.getString("Login.ComboBox.organization.emptyText");
}
}, Organization.class);
+ lblUsername = new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.username.text"));
txtUsername = new JTextField();
+ lblPassword = new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.password.text"));
txtPassword = new JPasswordField();
+ // Browser
+ txtUrl = new JTextField();
+ txtUrl.setEditable(false);
+ lblError = new QLabel();
+ txtUrl.setVisible(false);
+ lblError.setVisible(false);
+ //
btnLogin = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.login.text"));
chkSaveUsername = new JCheckBox(I18n.WINDOW_LAYOUT.getString("Login.CheckBox.saveUsername.text"));
btnOpenRegistration = new JButton(I18n.WINDOW_LAYOUT.getString("Login.Button.openRegistration.text"));
@@ -119,12 +140,12 @@ public abstract class LoginWindowLayout extends JDialog {
pnlLoginType = makeLoginTypePanel();
grid.add(pnlLoginType).expand(0.25, 1).fill(true, true);
pnlLoginForm = makeLoginFormPanel();
- grid.add(pnlLoginForm,1,2).expand(0.75, 1).fill(true, true);
+ grid.add(pnlLoginForm, 1, 2).expand(0.75, 1).fill(true, true);
grid.nextRow();
-
+
pnlAdvanced = makeAdvancedPanel();
grid.add(pnlAdvanced).expand(true, true).fill(true, true);
-
+
grid.nextRow();
pnlActivity = new JPanel();
pnlActivity.setLayout(new BoxLayout(pnlActivity, BoxLayout.PAGE_AXIS));
@@ -144,26 +165,36 @@ public abstract class LoginWindowLayout extends JDialog {
I18n.WINDOW_LAYOUT.getString("Login.TitledBorder.loginFormPanel.title")));
GridManager grid = new GridManager(loginFormPanel, 4);
- grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.organization.text")));
+ grid.add(lblOrganization);
grid.add(cboOrganization, 3).expand(true, false).fill(true, false);
grid.nextRow();
// label + field for username
- grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.username.text")));
+ grid.add(lblUsername);
grid.add(txtUsername, 3).expand(true, false).fill(true, false);
grid.nextRow();
// label + field for password
- grid.add(new QLabel(I18n.WINDOW_LAYOUT.getString("Login.Label.password.text")));
+ grid.add(lblPassword);
grid.add(txtPassword, 3).expand(true, false).fill(true, false);
grid.nextRow();
+ // --- Browser-based login
+
+ grid.add(txtUrl, 4).expand(true, false).fill(true, false);
+ grid.nextRow();
+ grid.add(lblError, 4).expand(true, false).fill(true, false);
+ grid.nextRow();
+
+ grid.add(Box.createVerticalGlue(), 4).expand(false, true);
+ grid.nextRow();
+
grid.add(Box.createGlue());
grid.add(chkSaveUsername).expand(true, false);
grid.add(btnOpenRegistration);
grid.add(btnLogin);
grid.nextRow();
- grid.finish(true);
+ grid.finish(false);
return loginFormPanel;
}
@@ -180,7 +211,7 @@ public abstract class LoginWindowLayout extends JDialog {
return loginTypePanel;
}
-
+
private JPanel makeAdvancedPanel() {
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS));
@@ -208,8 +239,9 @@ public abstract class LoginWindowLayout extends JDialog {
} else {
scaling = scaleY / 2;
}
- image = new ImageIcon(image.getImage().getScaledInstance((int) (image.getIconWidth() * scaling),
- (int) (image.getIconHeight() * scaling), 0));
+ image = new ImageIcon(image.getImage()
+ .getScaledInstance((int) (image.getIconWidth() * scaling),
+ (int) (image.getIconHeight() * scaling), 0));
return image;
} catch (Exception e) {
LOGGER.warn("Cannot load image", e);