/**
* 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);
}
}