Revision 98:a32b7e5528ad

View differences:

src/main/java/my/com/upass/MinimalUPassControllerV2.java
566 566
					}
567 567
				} else {
568 568
					if (MinimalUPassControllerV2.getMaybankLdapDAO().isUserExist(username)) {
569
						MinimalUPassControllerV2.getMaybankLdapDAO().updateUser(username, attrMap);
569
						if(profile instanceof Im2uUser){
570
							//cater creation of additional objectClass
571
							MinimalUPassControllerV2.getMaybankLdapDAO().updateUser(username, attrMap, new String[]{MaybankLdapConstant.OBJECT_CLASS_IM2U});
572
						}else if(profile instanceof StockUser){
573
							//cater creation of additional objectClass
574
							MinimalUPassControllerV2.getMaybankLdapDAO().updateUser(username, attrMap, new String[]{MaybankLdapConstant.OBJECT_CLASS_ONLINE_STOCK1, MaybankLdapConstant.OBJECT_CLASS_ONLINE_STOCK2});
575
						}else if(profile instanceof M2uUser){
576
							//cater creation of additional objectClass
577
							MinimalUPassControllerV2.getMaybankLdapDAO().updateUser(username, attrMap, new String[]{MaybankLdapConstant.OBJECT_CLASS_M2U});
578
						}else{
579
							MinimalUPassControllerV2.getMaybankLdapDAO().updateUser(username, attrMap);
580
						}
570 581
						logger.info("User updated in LDAP: " + username);
571 582
					} else {
572 583
						MinimalUPassControllerV2.getMaybankLdapDAO().createUser(username, userPassword, objectClasses,
src/main/java/my/com/upass/spring/ldap/MaybankLdap.java
1
package my.com.upass.spring.ldap;
2

  
3
import java.util.HashMap;
4
import java.util.Map;
5

  
6
public class MaybankLdap {
7

  
8
	private String[] objectClasses;
9
	private Map attrMap;
10
	
11
	public MaybankLdap() {
12
		attrMap = new HashMap();
13
	}
14
	
15
	public MaybankLdap(Map attrMap) {
16
		this.attrMap = attrMap;
17
	}
18

  
19
	public String[] getObjectClasses() {
20
		return objectClasses;
21
	}
22

  
23
	public void setObjectClasses(String[] objectClasses) {
24
		this.objectClasses = objectClasses;
25
	}
26

  
27
	public Map getAttrMap() {
28
		return attrMap;
29
	}
30

  
31
	public void setAttrMap(Map attrMap) {
32
		this.attrMap = attrMap;
33
	}
34
	
35
}
src/main/java/my/com/upass/spring/ldap/MaybankLdapAttributeMapper.java
1
package my.com.upass.spring.ldap;
2

  
3
import java.util.HashMap;
4
import java.util.Map;
5

  
6
import javax.naming.NamingEnumeration;
7
import javax.naming.NamingException;
8
import javax.naming.directory.Attribute;
9
import javax.naming.directory.Attributes;
10

  
11
import org.apache.commons.logging.Log;
12
import org.apache.commons.logging.LogFactory;
13
import org.springframework.ldap.core.DirContextOperations;
14
import org.springframework.ldap.core.support.AbstractContextMapper;
15

  
16
public class MaybankLdapAttributeMapper  extends AbstractContextMapper {
17
	
18
	private Log logger = LogFactory.getLog(MaybankLdapAttributeMapper.class);
19
	
20
	public Object doMapFromContext(DirContextOperations context) {
21
		MaybankLdap maybankLdap = new MaybankLdap();
22
		maybankLdap.setObjectClasses(context.getStringAttributes("objectClass"));
23

  
24
		try {
25
			Map attrMap = new HashMap();
26
			Attributes attributes = context.getAttributes();
27
			NamingEnumeration e = attributes.getAll();
28
			while(e.hasMore()){
29
				Attribute attr = (Attribute)e.next();
30
				if(!("objectClass".equals(attr.getID()) || "userPassword".equals(attr.getID()))){
31
					attrMap.put(attr.getID(), (String)attr.get(0));
32
				}
33
			}
34
			
35
			maybankLdap.setAttrMap(attrMap);
36
		} catch (NamingException e) {
37
			logger.warn("Error parsing LDAP attributes.");
38
		}
39
		
40
		return maybankLdap;
41
	}
42
}
src/main/java/my/com/upass/spring/ldap/MaybankLdapDAO.java
13 13
	
14 14
	public void updateUser(String mbbuserid, Map/*<String, String>*/ attributesMap) throws UPassException;
15 15
	
16
	public void updateUser(String mbbuserid, Map/*<String, String>*/ attributesMap, String[] objectClasses) throws UPassException;
17
	
16 18
	public void updateTicketingUser(String mbbuserid, Map/*<String, String>*/ attributesMap) throws UPassException;
17 19
	
18 20
	public void createUser(String mbbuserid, String password, String[] objectClasses, Map/*<String, String>*/ attributesMap) throws UPassException; 
19 21
	
20 22
	public void createTicketingUser(String mbbuserid, String password, String[] objectClasses, Map attributesMap) throws UPassException;
21 23
	
24
	public void rebindUser(String mbbuserid, String password, String[] objectClasses, Map attributesMap) throws UPassException;
25
	
22 26
	/*
23 27
	 * To be used in Load Test ONLY!
24 28
	 */
src/main/java/my/com/upass/spring/ldap/MaybankLdapDAOImpl.java
1 1
package my.com.upass.spring.ldap;
2 2

  
3
import java.util.ArrayList;
4
import java.util.Arrays;
5
import java.util.HashSet;
3 6
import java.util.Iterator;
7
import java.util.List;
4 8
import java.util.Map;
9
import java.util.Set;
5 10

  
6 11
import javax.naming.Name;
7 12
import javax.naming.directory.Attributes;
8 13
import javax.naming.directory.BasicAttribute;
9 14
import javax.naming.directory.BasicAttributes;
15
import javax.naming.directory.DirContext;
16
import javax.naming.directory.ModificationItem;
10 17

  
11 18
import my.com.upass.MinimalConstants;
12 19
import my.com.upass.UPassException;
......
161 168
		return attrs;
162 169
	}
163 170
	
171
	public void rebindUser(String mbbuserid, String password, String[] objectClasses, Map/*<String, String>*/ attributesMap) throws UPassException {
172
		Name dn = buildDn(mbbuserid);
173
		//retrieve profile from LDAP
174
		MaybankLdap maybankLdap = (MaybankLdap) ldapTemplate.lookup(dn, new MaybankLdapAttributeMapper());
175
		
176
		//existing objectClass 
177
		Set objectClassSet = new HashSet(Arrays.asList(maybankLdap.getObjectClasses()));
178
		//add new or replace the objectClass
179
		if(objectClasses != null && objectClasses.length > 0){
180
			for(int i=0; i<objectClasses.length; i++){
181
				objectClassSet.add(objectClasses[i]);
182
			}
183
		}
184
		
185
		//existing attribute map
186
		Map existingAttr = maybankLdap.getAttrMap();
187
		//add new or replace the attributes
188
		existingAttr.putAll(attributesMap);
189

  
190
		//construct LDAP entry
191
		Attributes attrs = new BasicAttributes();
192
		BasicAttribute basicAttribute = new BasicAttribute("objectclass");
193
		//add objectClass in LDAP Attribute
194
		Iterator itr = objectClassSet.iterator();
195
		while(itr.hasNext()){
196
			basicAttribute.add((String)itr.next());
197
		}
198
		attrs.put(basicAttribute);
199
		//add attributes in LDAP Attribute
200
		itr = existingAttr.entrySet().iterator();
201
	    while (itr.hasNext()) {
202
	        Map.Entry pairs = (Map.Entry)itr.next();
203
	        attrs.put((String)pairs.getKey(), (String)pairs.getValue());
204
	    }
205
		
206
		try {
207
			ldapTemplate.rebind(dn, null, attrs);
208
		} catch (NamingException e) {
209
			logger.warn("LDAP Error code:"+LdapStatusCodeParser.getCode(e.getExplanation()) + " - " + e.getExplanation());
210
			throw new UPassException(MinimalConstants.ERR_LDAP);
211
		}
212
	}
213
	
214
	public void updateUser(String mbbuserid, Map attributesMap, String[] objectClasses) throws UPassException {
215
		Name dn = buildDn(mbbuserid);
216
		//retrieve profile from LDAP
217
		MaybankLdap maybankLdap = (MaybankLdap) ldapTemplate.lookup(dn, new MaybankLdapAttributeMapper());
218
		//existing objectClass 
219
		Set objectClassSet = new HashSet(Arrays.asList(maybankLdap.getObjectClasses()));
220
		List itemList = new ArrayList();
221
		if(!objectClassSet.contains(objectClasses[0])){
222
			for(int i=0; i<objectClasses.length; i++){
223
				itemList.add(new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("objectClass", objectClasses[i])));
224
			}
225
		}
226
		
227
		//DirContext.REPLACE_ATTRIBUTE will create attribute if it does not exist
228
		if(objectClasses[0].equals(MaybankLdapConstant.OBJECT_CLASS_IM2U)){
229
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("wsFlag", (String)attributesMap.get("wsFlag"))));
230
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("wsIdentCode", (String)attributesMap.get("wsIdentCode"))));
231
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("wsRegTimeStamp", (String)attributesMap.get("wsRegTimeStamp"))));
232
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("wsMySgID", (String)attributesMap.get("wsMySgID"))));
233
		}else if(objectClasses[0].equals(MaybankLdapConstant.OBJECT_CLASS_ONLINE_STOCK1) || objectClasses[0].equals(MaybankLdapConstant.OBJECT_CLASS_ONLINE_STOCK2)){
234
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("IDNo", (String)attributesMap.get("IDNo"))));
235
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("CustType", (String)attributesMap.get("CustType"))));
236
		}else if(objectClasses[0].equals(MaybankLdapConstant.OBJECT_CLASS_M2U)){
237
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("ibpan", (String)attributesMap.get("ibpan"))));
238
			itemList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("ibpan2", (String)attributesMap.get("ibpan2"))));
239
		}
240
		
241
		try {
242
			if(itemList != null && !itemList.isEmpty()){
243
				if(logger.isDebugEnabled()){
244
					try {
245
						Iterator itr = itemList.iterator();
246
						while(itr.hasNext()){
247
							ModificationItem debugItem = (ModificationItem)itr.next();
248
							logger.debug("LDAP Operation:"+debugItem.getModificationOp()+" "+debugItem.getAttribute().getID() + " = "+(String)debugItem.getAttribute().get());
249
						}
250
					} catch (Exception e) {}
251
				}
252
				ldapTemplate.modifyAttributes(dn, (ModificationItem[])itemList.toArray(new ModificationItem[itemList.size()]));
253
			}
254
		} catch (NamingException e) {
255
			logger.warn("LDAP Error code:"+LdapStatusCodeParser.getCode(e.getExplanation()) + " - " + e.getExplanation());
256
			throw new UPassException(MinimalConstants.ERR_LDAP);
257
		}
258
	}
259
	
164 260
	public void updateUser(String mbbuserid, Map/*<String, String>*/ attributesMap) throws UPassException{
165 261
		Name dn = buildDn(mbbuserid);
166 262
		DirContextOperations context = ldapTemplate.lookupContext(dn);

Also available in: Unified diff