/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: IdRepoSample.java,v 1.2 2008/06/25 05:41:13 qcheng Exp $ * */ /* * Portions Copyright 2015 ForgeRock AS. */ package com.sun.identity.samples.clientsdk.idrepo; import java.util.Iterator; import java.util.Set; import com.iplanet.sso.SSOException; import com.iplanet.sso.SSOToken; import com.sun.identity.authentication.spi.AuthLoginException; import com.sun.identity.idm.AMIdentity; import com.sun.identity.idm.AMIdentityRepository; import com.sun.identity.idm.IdRepoException; import com.sun.identity.idm.IdSearchControl; import com.sun.identity.idm.IdType; /** * This class * * * @author */ public class IdRepoSample { static final String DEF_USERNAME = "amAdmin"; static final String DEF_USERPWD = "openssoxxx"; static final String DEF_REALM = "/"; SSOToken ssoToken = null; String currentRealm = DEF_REALM; // string rep of current realm Set currentSubRealms = null; // subrealms of currentRealm AMIdentityRepository idRepo = null; // idrepo for currentRealm IdRepoSampleUtils sampleUtils = null; public IdRepoSample() { sampleUtils = new IdRepoSampleUtils(); } private int printIdRepoMenu() { System.out.println ("\nCurrently in realm '" + currentRealm + "'."); sampleUtils.printResultsRealm ("Realm '" + currentRealm + "'", currentSubRealms, "subrealms"); System.out.println ( " AMIdentityRepository operations\n" + "\t0: Select (sub)Realm 1: Create Identity\n" + "\t2: Delete Identity 3: Get Allowed Operations\n" + "\t4: Get Supported IdTypes 5: Search/Select Identities\n" + "\t6: Return to / realm 7: Exit\n"); String sval = sampleUtils.getLine ("Enter selection: "); return (sampleUtils.getIntValue(sval)); } /* * for the current Realm, get: * 1. its AMIdentityRepository object * 2. its AMIdentity (via getRealmIdentity()) * 3. realm for the AMIdentity (via getRealm()) * 4. name for the AMIdentity (via getName()) * 5. its subrealms (via * OrganizationConfigManager.getSubOrganizationNames()) */ private void doCurrentRealm () { String currentAMIdName = null; String currentRealmAMIdName = null; try { idRepo = new AMIdentityRepository(ssoToken, currentRealm); AMIdentity currentRealmAMId = idRepo.getRealmIdentity(); currentRealmAMIdName = currentRealmAMId.getRealm(); currentAMIdName = currentRealmAMId.getName(); } catch (IdRepoException ire) { System.err.println( "doCurrentRealm:IdRepoException getting AMIdentityRepository" + " object for '" + currentRealm + "': " + ire.getMessage()); System.exit(7); } catch (SSOException sse) { System.err.println( "doCurrentRealm: SSOException getting AMIdentityRepository" + " object for '" + currentRealm + "': " + sse.getMessage()); System.exit(8); } System.out.println ("AMIdentity realm name for realm '" + currentRealm + "' is '" + currentRealmAMIdName + "'"); System.out.println ("getting subrealms"); try { currentSubRealms = (idRepo.searchIdentities(IdType.REALM, "*", new IdSearchControl())).getSearchResults(); } catch (SSOException ssoe) { System.err.println ( "doCurrentRealm: SSOException getting subrealms for '" + currentRealm + "': " + ssoe.getMessage()); } catch (IdRepoException ire) { System.err.println ( "doCurrentRealm: IdRepoException getting subrealms for '" + currentRealm + "': " + ire.getMessage()); } sampleUtils.printResultsRealm("Realm '" + currentRealm + "'", currentSubRealms, "subrealms"); } /* * start of IdRepo processing. have the starting realm name. * get an SSOToken, and start processing requests. */ private void idRepoProcessing() { /* * get: * 1. userid (default "amadmin") * 2. userid password (default "openssoxxx") * 3. starting realm (default "/") */ String userSID = sampleUtils.getLine("Userid", DEF_USERNAME); String userPWD = sampleUtils.getLine("Userid " + userSID + "'s password", DEF_USERPWD); String realmName = sampleUtils.getLine("Realm", DEF_REALM); // login and get the SSOToken try { ssoToken = sampleUtils.realmLogin(userSID, userPWD, realmName); } catch (SSOException ssoe) { System.err.println ("idRepoProcessing: could not get SSOToken: " + ssoe.getMessage()); System.exit(3); } catch (AuthLoginException ale) { System.err.println ("idRepoProcessing: could not authenticate: " + ale.getMessage()); System.exit(4); } catch (Exception e) { System.err.println ( "idRepoProcessing: exception getting SSOToken: " + e.getMessage()); System.exit(5); } /* * retrieve some information about the current realm, if * we can as the userid specified. */ currentRealm = realmName; doCurrentRealm(); int i = -1; boolean doMore = true; String ans = null; int ians = -1; while (doMore) { i = printIdRepoMenu(); switch (i) { case 0: // select (sub)realm IdRepoSampleSubRealm issr = new IdRepoSampleSubRealm (currentRealm); String nextSubRealm = issr.selectSubRealm (currentSubRealms); if (nextSubRealm != currentRealm) { currentRealm = nextSubRealm; idRepo = new AMIdentityRepository(currentRealm, ssoToken); doCurrentRealm(); } break; case 1: // create identity IdRepoSampleCreateId isci = new IdRepoSampleCreateId (idRepo); isci.createAMId(); break; case 2: // delete identity IdRepoSampleDeleteId isdi = new IdRepoSampleDeleteId (idRepo); isdi.deleteAMId(); break; case 3: // get allowed id operations try { Set types = idRepo.getSupportedIdTypes(); IdType itype = null; Set ops = null; for (Iterator it = types.iterator(); it.hasNext(); ) { itype = (IdType)it.next(); ops = idRepo.getAllowedIdOperations (itype); sampleUtils.printResults ("IdType '" + itype.getName() + "'", ops, "allowed Identity Operations"); } } catch (IdRepoException ire) { System.err.println ( "idRepoProcessing:IdRepoException: " + ire.getMessage()); } catch (SSOException ssoe) { System.err.println ( "idRepoProcessing:SSOException: " + ssoe.getMessage()); } break; case 4: // get supported IdTypes try { Set types = idRepo.getSupportedIdTypes(); sampleUtils.printIdTypeResults("This deployment", types, "supported IdTypes"); } catch (IdRepoException ire) { System.err.println ( "idRepoProcessing:IdRepoException: " + ire.getMessage()); } catch (SSOException ssoe) { System.err.println ( "idRepoProcessing:SSOException: " + ssoe.getMessage()); } break; case 5: // search/select Identities IdRepoSampleSearchIds issi = new IdRepoSampleSearchIds (idRepo); issi.searchAMIds(); break; case 6: // return to '/' realm currentRealm = DEF_REALM; doCurrentRealm(); break; case 7: // exit doMore = false; break; default: System.err.println ("Invalid selection; try again."); } } try { sampleUtils.logout(); } catch (AuthLoginException alexc) { System.err.println ("idRepoProcessing: logout failed for user '" + userSID + "'"); alexc.printStackTrace(); System.exit(10); } System.out.println ("idRepoProcessing: user '" + userSID + "' logged out"); } public static void main(String[] args) { IdRepoSample idRS = new IdRepoSample(); idRS.idRepoProcessing(); System.exit(0); } }