01: package com.sun.portal.wsrp.producer;
02:
03: import com.sun.xml.wss.impl.callback.PasswordValidationCallback;
04: import com.sun.portal.util.SSOUtil;
05: import com.sun.portal.log.common.PortalLogger;
06: import com.iplanet.am.sdk.*;
07: import com.iplanet.am.util.SystemProperties;
08: import com.iplanet.sso.SSOException;
09: import com.iplanet.sso.SSOTokenManager;
10: import com.iplanet.sso.SSOToken;
11:
12: import java.util.HashSet;
13: import java.util.Set;
14: import java.util.logging.Logger;
15: import java.util.logging.Level;
16:
17: public class AMIdentityValidator extends IdentityValidator {
18: private static AMIdentityValidator amIdentityValidator = new AMIdentityValidator();
19:
20: public static final String AM_DEFAULT_ORG = "com.iplanet.am.defaultOrg";
21: public static final String AM_ROOT_SUFFIX = "com.iplanet.am.rootsuffix";
22: /* Search scope is SUB so that it can search the sub trees
23: */
24: public static final int SEARCH_SCOPE_SUB = 2;
25: public static final String USER_PASSWORD = "userpassword";
26:
27: private static Logger logger = PortalLogger
28: .getLogger(AMIdentityValidator.class);
29: private AMStoreConnection amStoreConnection = null;
30: private SSOToken adminSSOToken = null;
31:
32: private AMIdentityValidator() {
33: }
34:
35: public static AMIdentityValidator getInstance() {
36: return amIdentityValidator;
37: }
38:
39: protected String getPlainPassword(
40: PasswordValidationCallback.DigestPasswordRequest request)
41: throws Exception {
42: String plainPassword = null;
43: try {
44: if (amStoreConnection == null) {
45: adminSSOToken = SSOUtil.getAdminSSOToken();
46: amStoreConnection = new AMStoreConnection(adminSSOToken);
47: } else {
48: if (!SSOTokenManager.getInstance().isValidToken(
49: adminSSOToken)) {
50: adminSSOToken = SSOUtil.getAdminSSOToken();
51: amStoreConnection = new AMStoreConnection(
52: adminSSOToken);
53: }
54: }
55: /* Get the default OrgDN */
56: String amDefaultOrg = SystemProperties.get(AM_DEFAULT_ORG);
57: String amRootSuffix = SystemProperties.get(AM_ROOT_SUFFIX);
58: String defaultOrgDN = amDefaultOrg;
59: if (!amDefaultOrg.equalsIgnoreCase(amRootSuffix)) {
60: defaultOrgDN += "," + amRootSuffix;
61: }
62: AMOrganization amOrganization = amStoreConnection
63: .getOrganization(defaultOrgDN);
64:
65: /* Populate the search criteria */
66: AMSearchControl scontrol = new AMSearchControl();
67: HashSet wantattr = new HashSet();
68: String namingAttr = AMStoreConnection
69: .getNamingAttribute(AMObject.USER);
70: wantattr.add(namingAttr);
71: scontrol.setReturnAttributes(wantattr);
72: scontrol.setSearchScope(SEARCH_SCOPE_SUB);
73:
74: AMSearchResults results = amOrganization.searchUsers(
75: request.getUsername(), scontrol);
76: Set searchResults = results.getSearchResults();
77:
78: /* If there is more than one user with the same name, then return the password as null
79: so that it can break the login */
80:
81: if (searchResults != null && searchResults.size() == 1) {
82: String userDN = ((String[]) results.getSearchResults()
83: .toArray(new String[] {}))[0];
84: AMUser amUser = amStoreConnection.getUser(userDN);
85: Set password = amUser.getAttribute(USER_PASSWORD);
86: plainPassword = ((String[]) password
87: .toArray(new String[] {}))[0];
88: }
89: } catch (AMException ame) {
90: logger.log(Level.SEVERE, ame.getMessage(), ame);
91: throw new Exception(ame);
92: } catch (SSOException ssoe) {
93: logger.log(Level.SEVERE, ssoe.getMessage(), ssoe);
94: throw new Exception(ssoe);
95: }
96: return plainPassword;
97: }
98: }
|