package gui.intro; import java.awt.Color; import java.awt.EventQueue; import java.awt.Image; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.util.Arrays; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.EmptyBorder; import models.SessionData; import models.person; import org.apache.thrift.TException; import org.openslx.imagemaster.thrift.iface.ImageServer.Client; import org.openslx.imagemaster.thrift.iface.UserInfo; import thrift.MasterThriftConnection; import thrift.ThriftConnection; import util.GuiOrganizer; import util.ResourceLoader; import config.Config; @SuppressWarnings("serial") public class Login_GUI extends JFrame { private JPanel contentPane; private JTextField lblusername; private JPasswordField lblpass; JLabel lblConnectionInfo = new JLabel(""); boolean isClientReturnedCorrectly = false; JCheckBox chckbxBenutzernameSpeichern; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { // Pruefe und Erzeuge gegebenfalls Config try { Config.init(); } catch (IOException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.getMessage(), "Fehler", JOptionPane.ERROR_MESSAGE); return; } // Aufruf und Anzeige des Login Fensters Login_GUI frame = new Login_GUI(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e.getStackTrace(), "Message", JOptionPane.ERROR_MESSAGE); } } }); } /** * Create the frame. */ public Login_GUI() { addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // Fenster darf nicht vergroessert werden setResizable(false); try { // Setzt das Look and Feel auf System UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Titel des Fensters setzen setTitle("bwLehrpool Suite"); // Aktion die beim Schliessen durchgefuehrt werden soll setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Größe setzen und mittig ausrichten setBounds(0, 0, 603, 400); GuiOrganizer.centerGUI(this); // Erzeugen eines Panels contentPane = new JPanel(); // Hintergrund Farbe des Panels setzen contentPane.setBackground(SystemColor.menu); // Rahmen des Fensters setzen contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); // Layout setzen contentPane.setLayout(null); // Label fuer das Logo erzeugen JLabel imgLabel = new JLabel(); // Groesse und Position des Logos festelegen imgLabel.setBounds(150, 11, 350, 142); // Pfadangabe des Logos ImageIcon icon = ResourceLoader.getIcon("/img/Logo_bwLehrpool.png", "Logo"); // Skalierung des Logos Image scaled = icon.getImage().getScaledInstance(270, 64, 0); imgLabel.setIcon(new ImageIcon(scaled)); // Hinzufuegen des Logos in das Fenster contentPane.add(imgLabel); chckbxBenutzernameSpeichern = new JCheckBox("Benutzername speichern"); chckbxBenutzernameSpeichern.setBounds(292, 222, 237, 23); contentPane.add(chckbxBenutzernameSpeichern); // Erzeugen und Hinzufuegen des Labels JLabel LabelUser = new JLabel("bwIDM-Benutzername:"); LabelUser.setBounds(111, 164, 134, 20); contentPane.add(LabelUser); // Erzeugen und Hinzufuegen des Passwortfeldes lblpass = new JPasswordField(); lblpass.setToolTipText("Bitte geben Sie Ihr bwIDM-Passwort ein."); lblpass.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { performLogin(); } }); lblpass.setBounds(292, 195, 237, 20); contentPane.add(lblpass); // Erzeugen und Hinzufuegen des Textfeldes lblusername = new JTextField(); lblusername .setToolTipText("Bitte geben Sie Ihren bwIDM-Benutzernamen ein."); // Lese Information aus der Konfigurationsdatei lblusername.setText(Config.getString("main", "Benutzername", "")); chckbxBenutzernameSpeichern.setSelected(Config.getBoolean("main", "Benutzername speichern", false)); lblusername.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { performLogin(); } }); lblusername.setBounds(292, 164, 237, 20); contentPane.add(lblusername); lblusername.setColumns(10); // Erzeugen und Hinzufuegen des Labels JLabel LabelPass = new JLabel("bwIDM-Passwort:"); LabelPass.setBounds(111, 195, 134, 20); contentPane.add(LabelPass); lblConnectionInfo.setHorizontalAlignment(SwingConstants.LEFT); lblConnectionInfo.setBounds(111, 290, 418, 20); lblConnectionInfo.setEnabled(true); lblConnectionInfo.setText("Info: Bereit für Login"); contentPane.add(lblConnectionInfo); // Erzeugen, Hinzufuegen und definierung der Aktion des Buttons JButton BtnLogin = new JButton("Login"); BtnLogin.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { performLogin(); }// end actionPerformed }); BtnLogin.setBounds(292, 252, 237, 23); contentPane.add(BtnLogin); // GuiOrganizer.centerGUI(this); }// end LoginGUI() // Versuche den Benutzer einzuloggen public void performLogin() { org.openslx.imagemaster.thrift.iface.SessionData result = null; // Connect to Master MasterThriftConnection thrift = new MasterThriftConnection(); Client client = thrift.getMasterThriftConnection(); if (client == null) { // Thrift connection to master could not be established setStatus(Color.red, "Fehler: Masterserver nicht erreichbar.", null); return; } String passText = new String(lblpass.getPassword()); UserInfo user = null; // Log user in try { setStatus(Color.black, "Authentifiziere - warte auf Antwort von Server...", null); result = client.authenticate(lblusername.getText(), passText); // Sanity checks if (result.authToken == null || result.sessionId == null) { setStatus(Color.red, "Antwort des Masterservers korrupt.", null); return; } // User-Info System.out.println("Authentifizierung erfolgreich"); user = client.getUserFromToken(result.authToken); } catch (org.openslx.imagemaster.thrift.iface.AuthenticationException e) { setStatus( Color.red, "Fehler: Zugangsdaten nicht akzeptiert.", "Benutzeranmeldung fehlgeschlagen: Bitte Benutzername und Passwort überprüfen.\n" + e.message); e.printStackTrace(); return; } catch (TException e) { setStatus(Color.red, "Kommunikation mit Masterserver fehlgeschlagen.", Arrays.toString(e.getStackTrace())); return; } // set Information SessionData.session.setAuthToken(result.authToken); SessionData.session.setSessionID(result.sessionId); SessionData.session.setServerAdress(result.serverAddress); // Satellite-Connection setStatus(Color.black, "Hole Verbindungsdaten von Server...", null); // set connection to bwLehrpoolSuiteServer ThriftConnection bwthrift = new ThriftConnection(); server.generated.Server.Client bwClient = bwthrift.getThriftConnection(); models.Client.clientcon.setClient(bwClient); // User-Info System.out.println("Session-ID: " + result.sessionId + "\nToken: " + result.authToken); setStatus(Color.green, "Daten erhalten.", null); String hochschule = user.eMail.substring(user.eMail.indexOf("@") + 1); person.verantwortlicher.setUsername(lblusername.getText().substring(0, lblusername.getText().indexOf("@"))); person.verantwortlicher.setName(user.lastName); person.verantwortlicher.setVorname(user.firstName); person.verantwortlicher.setEMail(user.eMail); person.verantwortlicher.setHochschule(hochschule); // Spaeter ueber result.getRole zum Beispiel die Rolle holen person.verantwortlicher.setRole("Dozent"); // person.verantwortlicher.setRole("Admin"); // person.verantwortlicher.setRole("Student"); // person.verantwortlicher.setRole("GetToTheChopper!"); if (chckbxBenutzernameSpeichern.isSelected()) { Config.setString("main", "Benutzername", lblusername.getText()); Config.setBoolean("main", "Benutzername speichern", true); } else { Config.setString("main", "Benutzername", ""); Config.setBoolean("main", "Benutzername speichern", false); } // speichern Config.store(); // Pruefe ob Bills Of Rights schon akzeptiert wurden, // wenn nicht zeige diese an if (!Config.getBoolean("main", "BillOfRights", false)) { // Erstellen einer Instanz der Aktionsauswahl BillOfRights_GUI re = new BillOfRights_GUI(); re.setVisible(true); // Schliessen des Fensters nach erfolgreichen Login setVisible(false); } else { // Pruefe ob die Links zu vmware angezeigt werden // sollen if (!Config.getBoolean("main", "vmware", false)) { VmWareLink_GUI vm = new VmWareLink_GUI(); vm.setVisible(true); setVisible(false); } else { // oeffne das Hauptmenue MainMenue_GUI main = new MainMenue_GUI(); main.setVisible(true); setVisible(false); } } }// end performLogin /** * Set connection status message, optionally show message box. * * @param color * Color to display status message in. * @param shortMessage * The message to display. * @param longMessage * Optional message to show in a message box. null means don't * show. */ private void setStatus(Color color, String shortMessage, String longMessage) { System.out.println(shortMessage); lblConnectionInfo.setForeground(color); lblConnectionInfo.setText(shortMessage); if (longMessage != null) JOptionPane.showMessageDialog(null, longMessage, "Anmeldung fehlgeschlagen", JOptionPane.ERROR_MESSAGE); } }// end class