Search in sources :

Example 1 with LoginDialog

use of com.servoy.j2db.gui.LoginDialog in project servoy-client by Servoy.

the class J2DBClient method main.

/**
 * Starting point
 */
@SuppressWarnings("nls")
public static void main(final String[] args) {
    String userTimeZone = System.getProperty("user.timezone");
    // Bug around java when downloading the first time (pack or gzip seems to alter the timezone and don't set it back)
    if (userTimeZone != null && !userTimeZone.equals(TimeZone.getDefault().getID())) {
        TimeZone timeZone = TimeZone.getTimeZone(userTimeZone);
        if (userTimeZone.equals(timeZone.getID())) {
            TimeZone.setDefault(timeZone);
        }
    }
    String remoteRunnerClassName = System.getProperty("com.servoy.remote.checker");
    if (remoteRunnerClassName != null) {
        try {
            Class<?> clazz = Class.forName(remoteRunnerClassName);
            RemoteRunnerChecker.setInstance((IRemoteRunner) clazz.newInstance());
        } catch (Throwable t) {
            System.err.println("Error setting the remote runner check for " + remoteRunnerClassName);
        }
    }
    boolean toggleTracing = false;
    StartupArguments arguments = new StartupArguments(args);
    Iterator<Entry<String, Object>> iterator = arguments.entrySet().iterator();
    while (iterator.hasNext()) {
        Entry<String, Object> arg = iterator.next();
        if (arg.getKey().startsWith("system.property.")) {
            System.setProperty(arg.getKey().substring(16), (String) arg.getValue());
        }
        if (arg.getKey().equals("tracing") && arg.getValue().equals("true")) {
            toggleTracing = true;
        }
    }
    if (toggleTracing)
        Debug.toggleTracing();
    if (Boolean.getBoolean("servoy.usejaas")) {
        final boolean[] loginShown = new boolean[1];
        System.setProperty("javax.security.auth.useSubjectCredsOnly", "true");
        try {
            Debug.log("creating context");
            LoginContext lc = new LoginContext("ServoyClient", new CallbackHandler() {

                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
                    Debug.log("handle call back");
                    String loginName = null;
                    String passwordString = null;
                    for (Callback callback : callbacks) {
                        if (callback instanceof TextOutputCallback) {
                            final TextOutputCallback textOutputCallback = (TextOutputCallback) callback;
                            switch(textOutputCallback.getMessageType()) {
                                case TextOutputCallback.INFORMATION:
                                    Debug.log(textOutputCallback.getMessage());
                                    break;
                                case TextOutputCallback.WARNING:
                                    Debug.warn(textOutputCallback.getMessage());
                                    break;
                                case TextOutputCallback.ERROR:
                                    Debug.error(textOutputCallback.getMessage());
                                    break;
                                default:
                                    throw new IOException("Unsupported message type: " + textOutputCallback.getMessageType());
                            }
                        } else if (callback instanceof NameCallback) {
                            final NameCallback nameCallback = (NameCallback) callback;
                            if (loginName == null) {
                                LoginDialog ld = new LoginDialog((Frame) null, null, "Sign on", false, true);
                                Object[] credentials = ld.showDialog(null);
                                if (credentials != null && credentials.length == 2) {
                                    loginName = (String) credentials[0];
                                    passwordString = (String) credentials[1];
                                }
                                if (loginName == null) {
                                    loginName = "";
                                    passwordString = "";
                                }
                                loginShown[0] = true;
                            }
                            nameCallback.setName(loginName);
                        } else if (callback instanceof PasswordCallback) {
                            final PasswordCallback passwordCallback = (PasswordCallback) callback;
                            if (passwordString == null) {
                                LoginDialog ld = new LoginDialog((Frame) null, null, "Sign on", false, true);
                                Object[] credentials = ld.showDialog(null);
                                if (credentials != null && credentials.length == 2) {
                                    loginName = (String) credentials[0];
                                    passwordString = (String) credentials[1];
                                }
                                if (passwordString == null) {
                                    loginName = "";
                                    passwordString = "";
                                }
                                loginShown[0] = true;
                            }
                            passwordCallback.setPassword(passwordString.toCharArray());
                        } else {
                            throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
                        }
                    }
                }
            });
            Debug.log("context created");
            boolean loggedIn = true;
            try {
                lc.login();
            } catch (LoginException e) {
                Debug.log("login failed", e);
                loggedIn = false;
            }
            if (loggedIn) {
                Subject.doAsPrivileged(lc.getSubject(), new PrivilegedExceptionAction<Void>() {

                    public Void run() throws Exception {
                        mainImpl(args);
                        return null;
                    }
                }, null);
            } else {
                mainImpl(args);
            }
        } catch (Exception e) {
            Debug.log("context creation failed", e);
            if (loginShown[0]) {
                JOptionPane.showMessageDialog(null, "Couldnt login", "Login failed", JOptionPane.ERROR_MESSAGE);
            }
            mainImpl(args);
        }
    } else {
        mainImpl(args);
    }
}
Also used : CallbackHandler(javax.security.auth.callback.CallbackHandler) Frame(java.awt.Frame) JFrame(javax.swing.JFrame) Entry(java.util.Map.Entry) LoginContext(javax.security.auth.login.LoginContext) PasswordCallback(javax.security.auth.callback.PasswordCallback) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) StartupArguments(com.servoy.j2db.scripting.StartupArguments) IOException(java.io.IOException) TextOutputCallback(javax.security.auth.callback.TextOutputCallback) IOException(java.io.IOException) ApplicationException(com.servoy.j2db.ApplicationException) RemoteException(java.rmi.RemoteException) RepositoryException(com.servoy.j2db.persistence.RepositoryException) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) ServoyException(com.servoy.j2db.util.ServoyException) LoginException(javax.security.auth.login.LoginException) MalformedURLException(java.net.MalformedURLException) TimeZone(java.util.TimeZone) NameCallback(javax.security.auth.callback.NameCallback) IMessagesCallback(com.servoy.j2db.IMessagesCallback) Callback(javax.security.auth.callback.Callback) PasswordCallback(javax.security.auth.callback.PasswordCallback) TextOutputCallback(javax.security.auth.callback.TextOutputCallback) NameCallback(javax.security.auth.callback.NameCallback) LoginException(javax.security.auth.login.LoginException) UnicastRemoteObject(java.rmi.server.UnicastRemoteObject) LoginDialog(com.servoy.j2db.gui.LoginDialog)

Example 2 with LoginDialog

use of com.servoy.j2db.gui.LoginDialog in project servoy-client by Servoy.

the class DebugJ2DBClient method createLoginDialog.

@Override
protected LoginDialog createLoginDialog() {
    // Override login dialog, add a 'use dummy login' checkbox
    return new LoginDialog(frame, this, Messages.getString("servoy.logindialog.title"), false, false) {

        /* do not show remember-me/dummy login check */
        @Override
        protected JCheckBox createRememberMeCheckbox() {
            return new JCheckBox("Use dummy login (set in Preferences)", false);
        }

        @Override
        public Object[] showDialog(String name) {
            if (current == null) {
                return null;
            }
            if (current.getMustAuthenticate()) {
                return super.showDialog(name);
            }
            // will only get here when enhanced security is turned on and solution.mustAuthenticate = false
            // Use the dummy auth to access the appserver, in real server access a login dialog would be shown
            DeveloperPreferences developerPreferences = new DeveloperPreferences(Settings.getInstance());
            boolean dummyAuth = developerPreferences.getUseDummyAuth();
            if (!dummyAuth) {
                Object[] loginResult = super.showDialog(name);
                dummyAuth = loginResult != null && loginResult.length >= 3 && Boolean.TRUE.equals(loginResult[2]);
                if (!dummyAuth) {
                    return loginResult;
                }
                developerPreferences.setUseDummyAuth(true);
            }
            // dummy authentication
            try {
                authenticate(new Credentials(getClientID(), null, null, IApplicationServer.DUMMY_LOGIN));
            } catch (RepositoryException e) {
                Debug.error(e);
            }
            // return null means user hit cancel, in case of dummy login, user id has changed
            handleClientUserUidChanged(null, getClientInfo().getUserUid());
            return null;
        }
    };
}
Also used : JCheckBox(javax.swing.JCheckBox) RepositoryException(com.servoy.j2db.persistence.RepositoryException) LoginDialog(com.servoy.j2db.gui.LoginDialog) Credentials(com.servoy.j2db.Credentials)

Aggregations

LoginDialog (com.servoy.j2db.gui.LoginDialog)2 RepositoryException (com.servoy.j2db.persistence.RepositoryException)2 ApplicationException (com.servoy.j2db.ApplicationException)1 Credentials (com.servoy.j2db.Credentials)1 IMessagesCallback (com.servoy.j2db.IMessagesCallback)1 StartupArguments (com.servoy.j2db.scripting.StartupArguments)1 ServoyException (com.servoy.j2db.util.ServoyException)1 Frame (java.awt.Frame)1 IOException (java.io.IOException)1 MalformedURLException (java.net.MalformedURLException)1 RemoteException (java.rmi.RemoteException)1 UnicastRemoteObject (java.rmi.server.UnicastRemoteObject)1 Entry (java.util.Map.Entry)1 TimeZone (java.util.TimeZone)1 Callback (javax.security.auth.callback.Callback)1 CallbackHandler (javax.security.auth.callback.CallbackHandler)1 NameCallback (javax.security.auth.callback.NameCallback)1 PasswordCallback (javax.security.auth.callback.PasswordCallback)1 TextOutputCallback (javax.security.auth.callback.TextOutputCallback)1 UnsupportedCallbackException (javax.security.auth.callback.UnsupportedCallbackException)1