Advertisement
Guest User

test

a guest
Jul 3rd, 2015
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.21 KB | None | 0 0
  1. /*
  2.  * SK's Minecraft Launcher
  3.  * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
  4.  * Please see LICENSE.txt for license information.
  5.  */
  6.  
  7. package com.skcraft.launcher.dialog;
  8.  
  9. import com.google.common.base.Strings;
  10. import com.google.common.util.concurrent.FutureCallback;
  11. import com.google.common.util.concurrent.Futures;
  12. import com.skcraft.concurrency.ObservableFuture;
  13. import com.skcraft.concurrency.ProgressObservable;
  14. import com.skcraft.launcher.Configuration;
  15. import com.skcraft.launcher.Launcher;
  16. import com.skcraft.launcher.auth.*;
  17. import com.skcraft.launcher.swing.*;
  18. import com.skcraft.launcher.persistence.Persistence;
  19. import com.skcraft.launcher.util.SharedLocale;
  20. import com.skcraft.launcher.util.SwingExecutor;
  21. import lombok.Getter;
  22. import lombok.NonNull;
  23.  
  24. import javax.swing.*;
  25. import java.awt.*;
  26. import java.awt.event.*;
  27. import java.io.IOException;
  28. import java.util.Date;
  29. import java.util.List;
  30. import java.util.concurrent.Callable;
  31.  
  32. /**
  33.  * The login dialog.
  34.  */
  35. public class LoginDialog extends JDialog {
  36.  
  37.     private final Launcher launcher;
  38.     @Getter private final AccountList accounts;
  39.     @Getter private Session session;
  40.  
  41.     private final JComboBox idCombo = new JComboBox();
  42.     private final JComboBox nickname = new JComboBox();
  43.     private final JPasswordField passwordText = new JPasswordField();
  44.     private final JCheckBox rememberIdCheck = new JCheckBox(SharedLocale.tr("login.rememberId"));
  45.     private final JCheckBox rememberPassCheck = new JCheckBox(SharedLocale.tr("login.rememberPassword"));
  46.     private final JButton loginButton = new JButton(SharedLocale.tr("login.login"));
  47.     private final LinkButton recoverButton = new LinkButton(SharedLocale.tr("login.recoverAccount"));
  48.     private final JButton offlineButton = new JButton(SharedLocale.tr("login.playOffline"));
  49.     private final JButton cancelButton = new JButton(SharedLocale.tr("button.cancel"));
  50.     private final FormPanel formPanel = new FormPanel();
  51.     private final LinedBoxPanel buttonsPanel = new LinedBoxPanel(true);
  52.  
  53.     /**
  54.      * Create a new login dialog.
  55.      *
  56.      * @param owner the owner
  57.      * @param launcher the launcher
  58.      */
  59.     public LoginDialog(Window owner, @NonNull Launcher launcher) {
  60.         super(owner, ModalityType.DOCUMENT_MODAL);
  61.  
  62.         this.launcher = launcher;
  63.         this.accounts = launcher.getAccounts();
  64.  
  65.         setTitle(SharedLocale.tr("login.title"));
  66.         initComponents();
  67.         setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  68.         setMinimumSize(new Dimension(420, 0));
  69.         setResizable(false);
  70.         pack();
  71.         setLocationRelativeTo(owner);
  72.  
  73.         setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
  74.         addWindowListener(new WindowAdapter() {
  75.             @Override
  76.             public void windowClosing(WindowEvent event) {
  77.                 removeListeners();
  78.                 dispose();
  79.             }
  80.         });
  81.     }
  82.  
  83.     private void removeListeners() {
  84.         idCombo.setModel(new DefaultComboBoxModel());
  85.     }
  86.  
  87.     private void initComponents() {
  88.         idCombo.setModel(getAccounts());
  89.         updateSelection();
  90.  
  91.         rememberIdCheck.setBorder(BorderFactory.createEmptyBorder());
  92.         rememberPassCheck.setBorder(BorderFactory.createEmptyBorder());
  93.         idCombo.setEditable(true);
  94.         idCombo.getEditor().selectAll();
  95.  
  96.         loginButton.setFont(loginButton.getFont().deriveFont(Font.BOLD));
  97.  
  98.         //formPanel.addRow(new JLabel(SharedLocale.tr("login.nickname")), nickname);
  99.         formPanel.addRow(new JLabel(SharedLocale.tr("login.idEmail")), idCombo);
  100.         //formPanel.addRow(new JLabel(SharedLocale.tr("login.password")), passwordText);
  101.         //formPanel.addRow(new JLabel(), rememberIdCheck);
  102.         //formPanel.addRow(new JLabel(), rememberPassCheck);
  103.         buttonsPanel.setBorder(BorderFactory.createEmptyBorder(26, 13, 13, 13));
  104.  
  105.         //if (launcher.getConfig().isOfflineEnabled()) {
  106.             buttonsPanel.addElement(offlineButton);
  107.             buttonsPanel.addElement(Box.createHorizontalStrut(2));
  108.         //}
  109.         buttonsPanel.addElement(recoverButton);
  110.         buttonsPanel.addGlue();
  111.         buttonsPanel.addElement(loginButton);
  112.         buttonsPanel.addElement(cancelButton);
  113.  
  114.         add(formPanel, BorderLayout.CENTER);
  115.         add(buttonsPanel, BorderLayout.SOUTH);
  116.  
  117.         getRootPane().setDefaultButton(loginButton);
  118.  
  119.         passwordText.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);
  120.  
  121.         idCombo.addActionListener(new ActionListener() {
  122.             @Override
  123.             public void actionPerformed(ActionEvent e) {
  124.                 updateSelection();
  125.             }
  126.         });
  127.  
  128.         idCombo.getEditor().getEditorComponent().addMouseListener(new PopupMouseAdapter() {
  129.             @Override
  130.             protected void showPopup(MouseEvent e) {
  131.                 popupManageMenu(e.getComponent(), e.getX(), e.getY());
  132.             }
  133.         });
  134.  
  135.         recoverButton.addActionListener(
  136.                 ActionListeners.openURL(recoverButton, launcher.getProperties().getProperty("resetPasswordUrl")));
  137.  
  138.         loginButton.addActionListener(new ActionListener() {
  139.             @Override
  140.             public void actionPerformed(ActionEvent e) {
  141.                 prepareLogin();
  142.             }
  143.         });
  144.  
  145.         offlineButton.addActionListener(new ActionListener() {
  146.             @Override
  147.             public void actionPerformed(ActionEvent e) {
  148.                 Object nicknamedef = idCombo.getSelectedItem();
  149.                 setResult(new OfflineSession(launcher.getProperties().getProperty("offlinePlayerName")));
  150.                 //setResult(new OfflineSession(nickname.getSelectedItem()));
  151.                 removeListeners();
  152.                 dispose();
  153.             }
  154.         });
  155.  
  156.         cancelButton.addActionListener(new ActionListener() {
  157.             @Override
  158.             public void actionPerformed(ActionEvent e) {
  159.                 removeListeners();
  160.                 dispose();
  161.             }
  162.         });
  163.  
  164.         rememberPassCheck.addActionListener(new ActionListener() {
  165.             @Override
  166.             public void actionPerformed(ActionEvent e) {
  167.                 if (rememberPassCheck.isSelected()) {
  168.                     rememberIdCheck.setSelected(true);
  169.                 }
  170.             }
  171.         });
  172.  
  173.         rememberIdCheck.addActionListener(new ActionListener() {
  174.             @Override
  175.             public void actionPerformed(ActionEvent e) {
  176.                 if (!rememberIdCheck.isSelected()) {
  177.                     rememberPassCheck.setSelected(false);
  178.                 }
  179.             }
  180.         });
  181.     }
  182.  
  183.     private void popupManageMenu(Component component, int x, int y) {
  184.         Object selected = idCombo.getSelectedItem();
  185.         JPopupMenu popup = new JPopupMenu();
  186.         JMenuItem menuItem;
  187.  
  188.         if (selected != null && selected instanceof Account) {
  189.             final Account account = (Account) selected;
  190.  
  191.             menuItem = new JMenuItem(SharedLocale.tr("login.forgetUser"));
  192.             menuItem.addActionListener(new ActionListener() {
  193.                 @Override
  194.                 public void actionPerformed(ActionEvent e) {
  195.                     accounts.remove(account);
  196.                     Persistence.commitAndForget(accounts);
  197.                 }
  198.             });
  199.             popup.add(menuItem);
  200.  
  201.             if (!Strings.isNullOrEmpty(account.getPassword())) {
  202.                 menuItem = new JMenuItem(SharedLocale.tr("login.forgetPassword"));
  203.                 menuItem.addActionListener(new ActionListener() {
  204.                     @Override
  205.                     public void actionPerformed(ActionEvent e) {
  206.                         account.setPassword(null);
  207.                         Persistence.commitAndForget(accounts);
  208.                     }
  209.                 });
  210.                 popup.add(menuItem);
  211.             }
  212.         }
  213.  
  214.         menuItem = new JMenuItem(SharedLocale.tr("login.forgetAllPasswords"));
  215.         menuItem.addActionListener(new ActionListener() {
  216.             @Override
  217.             public void actionPerformed(ActionEvent e) {
  218.                 if (SwingHelper.confirmDialog(LoginDialog.this,
  219.                         SharedLocale.tr("login.confirmForgetAllPasswords"),
  220.                         SharedLocale.tr("login.forgetAllPasswordsTitle"))) {
  221.                     accounts.forgetPasswords();
  222.                     Persistence.commitAndForget(accounts);
  223.                 }
  224.             }
  225.         });
  226.         popup.add(menuItem);
  227.  
  228.         popup.show(component, x, y);
  229.     }
  230.  
  231.     private void updateSelection() {
  232.         Object selected = idCombo.getSelectedItem();
  233.  
  234.         if (selected != null && selected instanceof Account) {
  235.             Account account = (Account) selected;
  236.             String password = account.getPassword();
  237.  
  238.             rememberIdCheck.setSelected(true);
  239.             if (!Strings.isNullOrEmpty(password)) {
  240.                 rememberPassCheck.setSelected(true);
  241.                 passwordText.setText(password);
  242.             } else {
  243.                 rememberPassCheck.setSelected(false);
  244.             }
  245.         } else {
  246.             passwordText.setText("");
  247.             rememberIdCheck.setSelected(true);
  248.             rememberPassCheck.setSelected(false);
  249.         }
  250.     }
  251.  
  252.     @SuppressWarnings("deprecation")
  253.     private void prepareLogin() {
  254.         Object selected = idCombo.getSelectedItem();
  255.  
  256.         if (selected != null && selected instanceof Account) {
  257.             Account account = (Account) selected;
  258.             String password = passwordText.getText();
  259.  
  260.             if (password == null || password.isEmpty()) {
  261.                 SwingHelper.showErrorDialog(this, SharedLocale.tr("login.noPasswordError"), SharedLocale.tr("login.noPasswordTitle"));
  262.             } else {
  263.                 if (rememberPassCheck.isSelected()) {
  264.                     account.setPassword(password);
  265.                 } else {
  266.                     account.setPassword(null);
  267.                 }
  268.  
  269.                 if (rememberIdCheck.isSelected()) {
  270.                     accounts.add(account);
  271.                 } else {
  272.                     accounts.remove(account);
  273.                 }
  274.  
  275.                 account.setLastUsed(new Date());
  276.  
  277.                 Persistence.commitAndForget(accounts);
  278.  
  279.                 attemptLogin(account, password);
  280.             }
  281.         } else {
  282.             SwingHelper.showErrorDialog(this, SharedLocale.tr("login.noLoginError"), SharedLocale.tr("login.noLoginTitle"));
  283.         }
  284.     }
  285.  
  286.     private void attemptLogin(Account account, String password) {
  287.         LoginCallable callable = new LoginCallable(account, password);
  288.         ObservableFuture<Session> future = new ObservableFuture<Session>(
  289.                 launcher.getExecutor().submit(callable), callable);
  290.  
  291.         Futures.addCallback(future, new FutureCallback<Session>() {
  292.             @Override
  293.             public void onSuccess(Session result) {
  294.                 setResult(result);
  295.             }
  296.  
  297.             @Override
  298.             public void onFailure(Throwable t) {
  299.             }
  300.         }, SwingExecutor.INSTANCE);
  301.  
  302.         ProgressDialog.showProgress(this, future, SharedLocale.tr("login.loggingInTitle"), SharedLocale.tr("login.loggingInStatus"));
  303.         SwingHelper.addErrorDialogCallback(this, future);
  304.     }
  305.  
  306.     private void setResult(Session session) {
  307.         this.session = session;
  308.         removeListeners();
  309.         dispose();
  310.     }
  311.  
  312.     public static Session showLoginRequest(Window owner, Launcher launcher) {
  313.         LoginDialog dialog = new LoginDialog(owner, launcher);
  314.         dialog.setVisible(true);
  315.         return dialog.getSession();
  316.     }
  317.  
  318.     private class LoginCallable implements Callable<Session>,ProgressObservable {
  319.         private final Account account;
  320.         private final String password;
  321.  
  322.         private LoginCallable(Account account, String password) {
  323.             this.account = account;
  324.             this.password = password;
  325.         }
  326.  
  327.         @Override
  328.         public Session call() throws AuthenticationException, IOException, InterruptedException {
  329.             LoginService service = launcher.getLoginService();
  330.             List<? extends Session> identities = service.login(launcher.getProperties().getProperty("agentName"), account.getId(), password);
  331.  
  332.             // The list of identities (profiles in Mojang terms) corresponds to whether the account
  333.             // owns the game, so we need to check that
  334.             if (identities.size() > 0) {
  335.                 // Set offline enabled flag to true
  336.                 Configuration config = launcher.getConfig();
  337.                 if (!config.isOfflineEnabled()) {
  338.                     config.setOfflineEnabled(true);
  339.                     Persistence.commitAndForget(config);
  340.                 }
  341.  
  342.                 Persistence.commitAndForget(getAccounts());
  343.                 return identities.get(0);
  344.             } else {
  345.                 throw new AuthenticationException("Minecraft not owned", SharedLocale.tr("login.minecraftNotOwnedError"));
  346.             }
  347.         }
  348.  
  349.         @Override
  350.         public double getProgress() {
  351.             return -1;
  352.         }
  353.  
  354.         @Override
  355.         public String getStatus() {
  356.             return SharedLocale.tr("login.loggingInStatus");
  357.         }
  358.     }
  359.  
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement