package io.lumify.core.user; import com.altamiracorp.bigtable.model.user.ModelUserContext; import io.lumify.core.model.user.UserRepository; import io.lumify.web.clientapi.model.Privilege; import io.lumify.web.clientapi.model.UserStatus; import io.lumify.web.clientapi.model.UserType; import org.json.JSONObject; import java.util.Date; import java.util.Set; /** * This class is used to store the userId only in a web session. If we were to store the entire * user object in the session, any changes to the user would not be reflected unless the user object * was refreshed. */ public class ProxyUser implements User { private final String userId; private final UserRepository userRepository; private User proxiedUser; public ProxyUser(String userId, UserRepository userRepository) { this.userId = userId; this.userRepository = userRepository; } @Override public String getUserId() { return userId; } public User getProxiedUser() { ensureUser(); return proxiedUser; } @Override public ModelUserContext getModelUserContext() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getModelUserContext(); } @Override public String getUsername() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getUsername(); } @Override public String getDisplayName() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getDisplayName(); } @Override public String getEmailAddress() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getEmailAddress(); } @Override public Date getCreateDate() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getCreateDate(); } @Override public Date getCurrentLoginDate() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getCurrentLoginDate(); } @Override public String getCurrentLoginRemoteAddr() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getCurrentLoginRemoteAddr(); } @Override public Date getPreviousLoginDate() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getPreviousLoginDate(); } @Override public String getPreviousLoginRemoteAddr() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getPreviousLoginRemoteAddr(); } @Override public int getLoginCount() { ensureUser(); if (proxiedUser == null) { return 0; } return proxiedUser.getLoginCount(); } @Override public UserType getUserType() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getUserType(); } @Override public UserStatus getUserStatus() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getUserStatus(); } @Override public String getCurrentWorkspaceId() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getCurrentWorkspaceId(); } @Override public JSONObject getUiPreferences() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getUiPreferences(); } @Override public Set<Privilege> getPrivileges() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getPrivileges(); } @Override public String getPasswordResetToken() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getPasswordResetToken(); } @Override public Date getPasswordResetTokenExpirationDate() { ensureUser(); if (proxiedUser == null) { return null; } return proxiedUser.getPasswordResetTokenExpirationDate(); } private void ensureUser() { if (proxiedUser == null) { proxiedUser = userRepository.findById(userId); } } }