Provide a SessionHelper to manage the session

This commit is contained in:
Sankaranarayanan Viswanathan
2014-10-22 01:17:33 -04:00
parent 8d5c3bdec8
commit 12030f6ce9
12 changed files with 148 additions and 70 deletions

View File

@@ -15,6 +15,7 @@ import javax.persistence.TemporalType;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang.time.DateUtils;
import org.hibernate.annotations.Cascade;
import com.commafeed.backend.model.UserRole.Role;
@@ -77,5 +78,13 @@ public class User extends AbstractModel {
}
return false;
}
public boolean shouldRefreshFeedsAt(Date when) {
return (lastFullRefresh == null || lastFullRefreshMoreThan30MinutesBefore(when));
}
private boolean lastFullRefreshMoreThan30MinutesBefore(Date when) {
return lastFullRefresh.before(DateUtils.addMinutes(when, -30));
}
}

View File

@@ -51,7 +51,7 @@ public class UserService {
if (user != null && !user.isDisabled()) {
boolean authenticated = encryptionService.authenticate(password, user.getPassword(), user.getSalt());
if (authenticated) {
afterLogin(user);
performPostLoginActivities(user);
return Optional.of(user);
}
}
@@ -68,8 +68,8 @@ public class UserService {
User user = userDAO.findByApiKey(apiKey);
if (user != null && !user.isDisabled()) {
afterLogin(user);
return Optional.fromNullable(user);
performPostLoginActivities(user);
return Optional.of(user);
}
return Optional.absent();
}
@@ -77,7 +77,7 @@ public class UserService {
/**
* should triggers after successful login
*/
public void afterLogin(User user) {
public void performPostLoginActivities(User user) {
postLoginActivities.executeFor(user);
}

View File

@@ -28,16 +28,15 @@ public class PostLoginActivities {
boolean saveUser = false;
// only update lastLogin field every hour in order to not
// invalidate the cache everytime someone logs in
// invalidate the cache every time someone logs in
if (lastLogin == null || lastLogin.before(DateUtils.addHours(now, -1))) {
user.setLastLogin(now);
saveUser = true;
}
if (config.getApplicationSettings().isHeavyLoad()
&& (user.getLastFullRefresh() == null || user.getLastFullRefresh().before(DateUtils.addMinutes(now, -30)))) {
if (config.getApplicationSettings().isHeavyLoad() && user.shouldRefreshFeedsAt(now)) {
feedSubscriptionService.refreshAll(user);
user.setLastFullRefresh(now);
saveUser = true;
feedSubscriptionService.refreshAll(user);
}
if (saveUser) {
userDAO.merge(user);