@Test public void testSaslClientCallbackHandler() throws UnsupportedCallbackException { final Token<? extends TokenIdentifier> token = createTokenMock(); when(token.getIdentifier()).thenReturn(DEFAULT_USER_NAME.getBytes()); when(token.getPassword()).thenReturn(DEFAULT_USER_PASSWORD.getBytes()); final NameCallback nameCallback = mock(NameCallback.class); final PasswordCallback passwordCallback = mock(PasswordCallback.class); final RealmCallback realmCallback = mock(RealmCallback.class); final RealmChoiceCallback realmChoiceCallback = mock(RealmChoiceCallback.class); Callback[] callbackArray = {nameCallback, passwordCallback, realmCallback, realmChoiceCallback}; final SaslClientCallbackHandler saslClCallbackHandler = new SaslClientCallbackHandler(token); saslClCallbackHandler.handle(callbackArray); verify(nameCallback).setName(anyString()); verify(realmCallback).setText(anyString()); verify(passwordCallback).setPassword(any(char[].class)); }
/** * */ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback ncb = (NameCallback)callbacks[i]; ncb.setName(authenticationId); } else if(callbacks[i] instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback)callbacks[i]; pcb.setPassword(password.toCharArray()); } else if(callbacks[i] instanceof RealmCallback) { RealmCallback rcb = (RealmCallback)callbacks[i]; rcb.setText(hostname); } else if(callbacks[i] instanceof RealmChoiceCallback){ //unused //RealmChoiceCallback rccb = (RealmChoiceCallback)callbacks[i]; } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
@Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback cb : callbacks) { if (cb instanceof RealmChoiceCallback) { continue; // Ignore. } else if (cb instanceof NameCallback) { ((NameCallback)cb).setName(token_.identifier); } else if (cb instanceof PasswordCallback) { PasswordCallback pcb = ((PasswordCallback)cb); if (token_.password == null) { pcb.setPassword(null); } else { pcb.setPassword(token_.password.toCharArray()); } } else if (cb instanceof RealmCallback) { RealmCallback rcb = (RealmCallback)cb; rcb.setText(rcb.getDefaultText()); } else { throw new UnsupportedCallbackException(cb, "Unexpected DIGEST-MD5 callback"); } } }
@Test public void testSaslClientCallbackHandler() throws UnsupportedCallbackException { final Token<? extends TokenIdentifier> token = createTokenMock(); when(token.getIdentifier()).thenReturn(Bytes.toBytes(DEFAULT_USER_NAME)); when(token.getPassword()).thenReturn(Bytes.toBytes(DEFAULT_USER_PASSWORD)); final NameCallback nameCallback = mock(NameCallback.class); final PasswordCallback passwordCallback = mock(PasswordCallback.class); final RealmCallback realmCallback = mock(RealmCallback.class); final RealmChoiceCallback realmChoiceCallback = mock(RealmChoiceCallback.class); Callback[] callbackArray = {nameCallback, passwordCallback, realmCallback, realmChoiceCallback}; final SaslClientCallbackHandler saslClCallbackHandler = new SaslClientCallbackHandler(token); saslClCallbackHandler.handle(callbackArray); verify(nameCallback).setName(anyString()); verify(realmCallback).setText(any()); verify(passwordCallback).setPassword(any()); }
@Override protected Object[] getData() { Object [] oo = { new RealmChoiceCallback(msgs[0], msgs, 0, true), new RealmChoiceCallback(msgs[1], msgs, 1, true), new RealmChoiceCallback(msgs[1], msgs, 0, false), new RealmChoiceCallback(msgs[2], msgs, 0, false) }; for (Object element : oo) { RealmChoiceCallback rc = (RealmChoiceCallback)element; if (rc.allowMultipleSelections()) { rc.setSelectedIndexes(idx); } else { rc.setSelectedIndex(msgs.length - 1); } } return oo; }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback current : callbacks) { if (current instanceof RealmCallback) { RealmCallback rcb = (RealmCallback) current; String defaultText = rcb.getDefaultText(); rcb.setText(defaultText); // For now just use the realm suggested. } else if (current instanceof RealmChoiceCallback) { throw DomainManagementLogger.ROOT_LOGGER.realmNotSupported(current); } else if (current instanceof OptionalNameCallback) { // Do nothing as we don't want to set a name for local authentication. } else if (current instanceof NameCallback) { NameCallback ncb = (NameCallback) current; ncb.setName(userName); } else if (current instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) current; pcb.setPassword(password); } else { throw new UnsupportedCallbackException(current); } } }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback current : callbacks) { if (current instanceof RealmCallback) { RealmCallback rcb = (RealmCallback) current; String defaultText = rcb.getDefaultText(); rcb.setText(defaultText); // For now just use the realm suggested. } else if (current instanceof RealmChoiceCallback) { throw new UnsupportedCallbackException(current, "Realm choice not currently supported."); } else if (current instanceof NameCallback) { NameCallback ncb = (NameCallback) current; ncb.setName(userName); } else if (current instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) current; pcb.setPassword(authKey.toCharArray()); } else { throw new UnsupportedCallbackException(current); } } }
/** * */ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback ncb = (NameCallback)callbacks[i]; ncb.setName(authenticationId); } else if(callbacks[i] instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback)callbacks[i]; pcb.setPassword(password.toCharArray()); } else if(callbacks[i] instanceof RealmCallback) { RealmCallback rcb = (RealmCallback)callbacks[i]; //Retrieve the REALM from the challenge response that the server returned when the client initiated the authentication //exchange. If this value is not null or empty, *this value* has to be sent back to the server in the client's response //to the server's challenge String text = rcb.getDefaultText(); //The SASL client (sc) created in smack uses rcb.getText when creating the negotiatedRealm to send it back to the server //Make sure that this value matches the server's realm rcb.setText(text); } else if(callbacks[i] instanceof RealmChoiceCallback){ //unused //RealmChoiceCallback rccb = (RealmChoiceCallback)callbacks[i]; } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
@Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback callback : callbacks) { if (callback instanceof NameCallback) { System.out.println("NameCallback"); ((NameCallback) callback).setName(userId); } else if (callback instanceof PasswordCallback) { System.out.println("PasswordCallback"); ((PasswordCallback) callback).setPassword(passwd); } else if (callback instanceof RealmCallback) { System.out.println("RealmCallback"); ((RealmCallback) callback).setText(realm); } else if (callback instanceof RealmChoiceCallback) { System.out.println("RealmChoiceCallback"); RealmChoiceCallback choice = (RealmChoiceCallback) callback; if (realm == null) { choice.setSelectedIndex(choice.getDefaultChoice()); } else { String[] choices = choice.getChoices(); for (int j = 0; j < choices.length; j++) { if (realm.equals(choices[j])) { choice.setSelectedIndex(j); break; } } } } else if (callback instanceof AuthorizeCallback) { System.out.println("AuthorizeCallback"); ((AuthorizeCallback) callback).setAuthorized(true); if (authId == null || authId.trim().length() == 0) { authId = userId; } ((AuthorizeCallback) callback).setAuthorizedID(authId); } else { throw new UnsupportedCallbackException(callback); } } }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { // Special case for anonymous authentication to avoid prompting user for their name. if (callbacks.length == 1 && callbacks[0] instanceof NameCallback) { ((NameCallback)callbacks[0]).setName("anonymous CLI user"); //$NON-NLS-1$ return; } for (Callback current : callbacks) { if (current instanceof RealmCallback) { RealmCallback rcb = (RealmCallback) current; String defaultText = rcb.getDefaultText(); rcb.setText(defaultText); // For now just use the realm suggested. if (this.realmShown == false) { this.realmShown = true; } } else if (current instanceof RealmChoiceCallback) { throw new UnsupportedCallbackException(current, "Realm choice not currently supported."); //$NON-NLS-1$ } else if (current instanceof NameCallback) { NameCallback ncb = (NameCallback) current; ncb.setName(this.userName); } else if (current instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) current; pcb.setPassword(this.password); } else { throw new UnsupportedCallbackException(current); } } }
public void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof RealmChoiceCallback) { // TODO what to do here? // RealmChoiceCallback rcc = (RealmChoiceCallback) callbacks[i]; } else if (callbacks[i] instanceof RealmCallback) { RealmCallback rc = (RealmCallback) callbacks[i]; if (env.get(JAVA_NAMING_SECURITY_SASL_REALM) != null) { realm = (String) env.get(JAVA_NAMING_SECURITY_SASL_REALM); rc.setText(realm); } else { rc.setText(realm); } } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback pc = (PasswordCallback) callbacks[i]; pc.setPassword(Utils.getCharArray(env .get(Context.SECURITY_CREDENTIALS))); } else if (callbacks[i] instanceof NameCallback) { //authentication Id NameCallback nc = (NameCallback) callbacks[i]; nc.setName((String) env.get(Context.SECURITY_PRINCIPAL)); } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
public void assertDeserialized(Serializable oref, Serializable otest) { RealmChoiceCallback ref = (RealmChoiceCallback) oref; RealmChoiceCallback test = (RealmChoiceCallback) otest; boolean all = ref.allowMultipleSelections(); assertEquals(all, test.allowMultipleSelections()); String prompt = ref.getPrompt(); assertEquals(prompt, test.getPrompt()); String [] ch = ref.getChoices(); String [] tCh = test.getChoices(); assertEquals(ch.length, tCh.length); for (int i = 0; i < ch.length; i++) { assertEquals(ch[i], tCh[i]); } assertEquals(ref.getDefaultChoice(), test.getDefaultChoice()); int [] in = ref.getSelectedIndexes(); int [] tIn = test.getSelectedIndexes(); // assertNull("in is not null", in); // assertNull("tIn is not null", tIn); if (!all) { assertEquals("Incorrect length in ", in.length, 1); assertEquals("Incorrect length tIn ", tIn.length, 1); assertEquals("Incorrect index", in[0], tIn[0]); } else { assertEquals("Incorrect length", in.length, tIn.length); for (int i = 0; i < in.length; i++) { assertEquals(in[i], tIn[i]); } } }
/** * */ public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback ncb = (NameCallback) callbacks[i]; ncb.setName(authenticationId); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) callbacks[i]; pcb.setPassword(password.toCharArray()); } else if (callbacks[i] instanceof RealmCallback) { RealmCallback rcb = (RealmCallback) callbacks[i]; // Retrieve the REALM from the challenge response that the // server returned when the client initiated the authentication // exchange. If this value is not null or empty, *this value* // has to be sent back to the server in the client's response // to the server's challenge String text = rcb.getDefaultText(); // The SASL client (sc) created in smack uses rcb.getText when // creating the negotiatedRealm to send it back to the server // Make sure that this value matches the server's realm rcb.setText(text); } else if (callbacks[i] instanceof RealmChoiceCallback) { // unused // RealmChoiceCallback rccb = (RealmChoiceCallback)callbacks[i]; } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
@Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { // Special case for anonymous authentication to avoid prompting user for their name. if (callbacks.length == 1 && callbacks[0] instanceof NameCallback) { ((NameCallback) callbacks[0]).setName("anonymous demo user"); return; } for (Callback current : callbacks) { if (current instanceof RealmCallback) { final RealmCallback rcb = (RealmCallback) current; final String defaultText = rcb.getDefaultText(); rcb.setText(defaultText); // For now just use the realm suggested. prompt(defaultText); } else if (current instanceof RealmChoiceCallback) { throw new UnsupportedCallbackException(current, "Realm choice not currently supported."); } else if (current instanceof NameCallback) { final NameCallback ncb = (NameCallback) current; final String userName = obtainUsername("Username:"); ncb.setName(userName); } else if (current instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) current; char[] password = obtainPassword("Password:"); pcb.setPassword(password); } else { throw new UnsupportedCallbackException(current); } } }
/** * {@inheritDoc} */ @Override public void handle( Callback[] callbacks ) throws IOException, UnsupportedCallbackException { for ( Callback cb : callbacks ) { if ( cb instanceof NameCallback ) { NameCallback ncb = ( NameCallback ) cb; String name = saslReq.getUsername(); LOG.debug( "sending name {} in the NameCallback", name ); ncb.setName( name ); } else if ( cb instanceof PasswordCallback ) { PasswordCallback pcb = ( PasswordCallback ) cb; LOG.debug( "sending credentials in the PasswordCallback" ); pcb.setPassword( Strings.utf8ToString( saslReq.getCredentials() ).toCharArray() ); } else if ( cb instanceof RealmCallback ) { RealmCallback rcb = ( RealmCallback ) cb; if ( saslReq.getRealmName() != null ) { LOG.debug( "sending the user specified realm value {} in the RealmCallback", saslReq.getRealmName() ); rcb.setText( saslReq.getRealmName() ); } else { LOG.debug( "No user specified relam value, sending the default realm value {} in the RealmCallback", rcb.getDefaultText() ); rcb.setText( rcb.getDefaultText() ); } } else if ( cb instanceof RealmChoiceCallback ) { RealmChoiceCallback rccb = ( RealmChoiceCallback ) cb; boolean foundRealmName = false; String[] realmNames = rccb.getChoices(); for ( int i = 0; i < realmNames.length; i++ ) { String realmName = realmNames[i]; if ( realmName.equals( saslReq.getRealmName() ) ) { foundRealmName = true; LOG.debug( "sending the user specified realm value {} in the RealmChoiceCallback", realmName ); rccb.setSelectedIndex( i ); break; } } if ( !foundRealmName ) { throw new IOException( I18n.format( "Cannot match ''java.naming.security.sasl.realm'' property value ''{0}'' with choices ''{1}'' in RealmChoiceCallback.", saslReq.getRealmName(), getRealmNamesAsString( realmNames ) ) ); } } } }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { ((NameCallback)callbacks[i]).setName(authenticationID); } else if (callbacks[i] instanceof PasswordCallback) { ((PasswordCallback)callbacks[i]).setPassword(passwd); } else if (callbacks[i] instanceof RealmChoiceCallback) { /* Deals with a choice of realms */ String[] choices = ((RealmChoiceCallback)callbacks[i]).getChoices(); int selected = 0; if (authRealm != null && authRealm.length() > 0) { selected = -1; // no realm chosen for (int j = 0; j < choices.length; j++) { if (choices[j].equals(authRealm)) { selected = j; } } if (selected == -1) { StringBuffer allChoices = new StringBuffer(); for (int j = 0; j < choices.length; j++) { allChoices.append(choices[j] + ","); } throw new IOException("Cannot match " + "'java.naming.security.sasl.realm' property value, '" + authRealm + "' with choices " + allChoices + "in RealmChoiceCallback"); } } ((RealmChoiceCallback)callbacks[i]).setSelectedIndex(selected); } else if (callbacks[i] instanceof RealmCallback) { /* 1 or 0 realms specified in challenge */ RealmCallback rcb = (RealmCallback) callbacks[i]; if (authRealm != null) { rcb.setText(authRealm); // Use what user supplied } else { String defaultRealm = rcb.getDefaultText(); if (defaultRealm != null) { rcb.setText(defaultRealm); // Use what server supplied } else { rcb.setText(""); // Specify no realm } } } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { ((NameCallback)callbacks[i]).setName(authenticationID); } else if (callbacks[i] instanceof PasswordCallback) { ((PasswordCallback)callbacks[i]).setPassword(passwd); } else if (callbacks[i] instanceof RealmChoiceCallback) { /* Deals with a choice of realms */ String[] choices = ((RealmChoiceCallback)callbacks[i]).getChoices(); int selected = 0; if (authRealm != null && authRealm.length() > 0) { selected = -1; // no realm chosen for (int j = 0; j < choices.length; j++) { if (choices[j].equals(authRealm)) { selected = j; } } if (selected == -1) { StringBuilder allChoices = new StringBuilder(); for (int j = 0; j < choices.length; j++) { allChoices.append(choices[j]).append(','); } throw new IOException("Cannot match " + "'java.naming.security.sasl.realm' property value, '" + authRealm + "' with choices " + allChoices + "in RealmChoiceCallback"); } } ((RealmChoiceCallback)callbacks[i]).setSelectedIndex(selected); } else if (callbacks[i] instanceof RealmCallback) { /* 1 or 0 realms specified in challenge */ RealmCallback rcb = (RealmCallback) callbacks[i]; if (authRealm != null) { rcb.setText(authRealm); // Use what user supplied } else { String defaultRealm = rcb.getDefaultText(); if (defaultRealm != null) { rcb.setText(defaultRealm); // Use what server supplied } else { rcb.setText(""); // Specify no realm } } } else { throw new UnsupportedCallbackException(callbacks[i]); } } }
@Override protected void authenticateInternal() throws SmackException { String[] mechanisms = { getName() }; Map<String, String> props = getSaslProps(); try { sc = Sasl.createSaslClient(mechanisms, null, "xmpp", getServerName(), props, new CallbackHandler() { @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback ncb = (NameCallback) callbacks[i]; ncb.setName(authenticationId); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback pcb = (PasswordCallback) callbacks[i]; pcb.setPassword(password.toCharArray()); } else if (callbacks[i] instanceof RealmCallback) { RealmCallback rcb = (RealmCallback) callbacks[i]; // Retrieve the REALM from the challenge response that // the server returned when the client initiated the // authentication exchange. If this value is not null or // empty, *this value* has to be sent back to the server // in the client's response to the server's challenge String text = rcb.getDefaultText(); // The SASL client (sc) created in smack uses // rcb.getText when creating the negotiatedRealm to send // it back to the server. Make sure that this value // matches the server's realm rcb.setText(text); } else if (callbacks[i] instanceof RealmChoiceCallback) { // unused, prevents UnsupportedCallbackException // RealmChoiceCallback rccb = // (RealmChoiceCallback)callbacks[i]; } else { throw new UnsupportedCallbackException(callbacks[i]); } } } }); } catch (SaslException e) { throw new SmackException(e); } }