import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
private PasswordEncoder passwordEncoder;
private final Random random;
+ /** 0 is always sync */
+ private Long syncLatency = 10 * 60 * 1000l;
+
public JcrUserDetailsContextMapper() {
random = createRandom();
}
}
/** @return path to the user home node */
- protected synchronized String mapLdapToJcr(String username, DirContextOperations ctx) {
+ protected synchronized String mapLdapToJcr(String username,
+ DirContextOperations ctx) {
String usernameLdap = ctx.getStringAttribute(usernameAttribute);
// log.debug("username=" + username + ", usernameLdap=" + usernameLdap);
if (!username.equals(usernameLdap)) {
String msg = "Provided username '" + username
+ "' is different from username stored in LDAP '"
- + usernameLdap+"'";
+ + usernameLdap + "'";
// we log it because the exception may not be displayed
log.error(msg);
throw new BadCredentialsException(msg);
Node userProfile; // = userHome.getNode(ARGEO_PROFILE);
if (userHome.hasNode(ARGEO_PROFILE)) {
userProfile = userHome.getNode(ARGEO_PROFILE);
+ if (syncLatency != 0) {
+ Calendar lastModified = userProfile.getProperty(
+ Property.JCR_LAST_MODIFIED).getDate();
+ long timeSinceLastUpdate = System.currentTimeMillis()
+ - lastModified.getTimeInMillis();
+ if (timeSinceLastUpdate < syncLatency)// skip sync
+ return userHomePath;
+ }
} else {
throw new ArgeoException("We should never reach this point");
// userProfile = userHome.addNode(ARGEO_PROFILE);
.getProperty(ARGEO_FIRST_NAME).getString()
+ " "
+ userProfile.getProperty(ARGEO_LAST_NAME).getString());
-
+ JcrUtils.updateLastModified(userProfile);
session.save();
if (log.isTraceEnabled())
log.trace("Mapped " + ctx.getDn() + " to " + userProfile);
this.session = session;
}
+ /**
+ * Time in ms during which the LDAP server is not checked. 0 is always sync.
+ */
+ public void setSyncLatency(Long syncLatency) {
+ this.syncLatency = syncLatency;
+ }
+
}