Skip to content

Commit

Permalink
Add CurrentUser
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed Jan 29, 2018
1 parent 664b944 commit 7ddbec7
Show file tree
Hide file tree
Showing 34 changed files with 287 additions and 116 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import org.zanata.dao.PersonDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HPerson;
import org.zanata.seam.security.CurrentUser;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;
import org.zanata.ui.faces.FacesMessages;

/**
Expand All @@ -33,8 +33,7 @@ public abstract class AbstractProfileAction implements HasUserDetail {
private FacesMessages facesMessages;

@Inject
@Authenticated
HAccount authenticatedAccount;
CurrentUser currentUser;

@Inject
PersonDAO personDAO;
Expand All @@ -45,7 +44,7 @@ public abstract class AbstractProfileAction implements HasUserDetail {
protected void validateEmail(String email) {
HPerson person = personDAO.findByEmail(email);

if (person != null && !person.getAccount().equals(authenticatedAccount)) {
if (person != null && !person.getAccount().equals(currentUser.account())) {
valid = false;
facesMessages.addToControl("email",
"This email address is already taken");
Expand All @@ -62,7 +61,7 @@ protected void validateUsername(String username) {

protected boolean isUsernameTaken(String username) {
HAccount account = accountDAO.getByUsername(username);
return account != null && !account.equals(authenticatedAccount);
return account != null && !account.equals(currentUser.account());
}

@NotEmpty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
import org.apache.deltaspike.jpa.api.transaction.Transactional;
import org.zanata.dao.AccountDAO;
import org.zanata.model.HAccount;
import org.zanata.seam.security.CurrentUser;
import org.zanata.security.AuthenticationManager;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;
import org.zanata.security.openid.OpenIdAuthCallback;
import org.zanata.security.openid.OpenIdAuthenticationResult;
import org.zanata.security.openid.OpenIdProviderType;
Expand Down Expand Up @@ -65,8 +65,7 @@ static class ObsoleteHolder implements Serializable {

private static final long serialVersionUID = 1L;
@Inject
@Authenticated
private HAccount authenticatedAccount;
private CurrentUser currentUser;
@Inject
private FacesMessages facesMessages;
@Inject
Expand Down Expand Up @@ -136,7 +135,7 @@ public void validateAccounts() {
facesMessages.addGlobal(SEVERITY_ERROR,
"Could not find an account for that user.");
valid = false;
} else if (authenticatedAccount.getId()
} else if (currentUser.account().getId()
.equals(obsoleteAccount.getId())) {
facesMessages.addGlobal(SEVERITY_ERROR,
"You are attempting to merge the same account.");
Expand All @@ -147,7 +146,7 @@ public void validateAccounts() {
}

public void mergeAccounts() {
registerServiceImpl.mergeAccounts(authenticatedAccount,
registerServiceImpl.mergeAccounts(currentUser.account(),
getObsoleteAccount());
setObsoleteAccount(null); // reset the obsolete account
facesMessages.addGlobal("Your accounts have been merged.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ public class ProfileAction extends AbstractProfileAction
public void onCreate() {
username = identity.getCredentials().getUsername();
HPerson person = personDAO
.findById(authenticatedAccount.getPerson().getId(), false);
.findById(currentUser.getPerson().getId(), false);
name = person.getName();
email = person.getEmail();
authenticatedAccount.getPerson().setName(this.name);
authenticatedAccount.getPerson().setEmail(this.email);
currentUser.getPerson().setName(this.name);
currentUser.getPerson().setEmail(this.email);
}
}
12 changes: 5 additions & 7 deletions server/services/src/main/java/org/zanata/action/ProjectHome.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
import org.zanata.dao.WebHookDAO;
import org.zanata.exception.ProjectNotFoundException;
import org.zanata.i18n.Messages;
import org.zanata.model.HAccount;
import org.zanata.model.HAccountRole;
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
Expand All @@ -66,8 +65,8 @@
import org.zanata.model.WebHook;
import org.zanata.model.type.WebhookType;
import org.zanata.model.validator.SlugValidator;
import org.zanata.seam.security.CurrentUser;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;
import org.zanata.service.LocaleService;
import org.zanata.service.ProjectService;
import org.zanata.service.SlugEntityService;
Expand Down Expand Up @@ -119,8 +118,7 @@ public class ProjectHome extends SlugHome<HProject>
@Inject
private ZanataIdentity identity;
@Inject
@Authenticated
private HAccount authenticatedAccount;
private CurrentUser currentUser;
@Inject
private LocaleService localeServiceImpl;
@Inject
Expand Down Expand Up @@ -817,11 +815,11 @@ public String persist() {
return null;
}
updateProjectType();
if (authenticatedAccount != null) {
if (currentUser.isLoggedIn()) {
// authenticatedAccount person is a detached entity, so fetch a copy
// that is attached to the current session.
HPerson creator = personDAO
.findById(authenticatedAccount.getPerson().getId());
.findById(currentUser.getPerson().getId());
getInstance().addMaintainer(creator);
getInstance().getCustomizedValidations().clear();
for (ValidationAction validationAction : validationServiceImpl
Expand Down Expand Up @@ -873,7 +871,7 @@ public String removeMaintainer(HPerson person) {
person.getAccount().getUsername(), Maintainer,
getInstance().getWebHooks(),
ProjectMaintainerChangedEvent.ChangeType.REMOVE);
if (person.equals(authenticatedAccount.getPerson())) {
if (person.equals(currentUser.getPerson())) {
urlUtil.redirectToInternal(urlUtil.projectUrl(getSlug()));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import org.zanata.dao.ProjectIterationDAO;
import org.zanata.i18n.Messages;
import org.zanata.model.Activity;
import org.zanata.model.HAccount;
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
import org.zanata.model.HProject;
Expand All @@ -60,8 +59,8 @@
import org.zanata.model.LocaleRole;
import org.zanata.model.ProjectRole;
import org.zanata.rest.service.GlossaryService;
import org.zanata.seam.security.CurrentUser;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;
import org.zanata.service.ActivityService;
import org.zanata.service.LocaleService;
import org.zanata.service.VersionStateCache;
Expand Down Expand Up @@ -108,8 +107,7 @@ public class ProjectHomeAction extends AbstractSortAction
@Inject
private LocaleMemberDAO localeMemberDAO;
@Inject
@Authenticated
private HAccount authenticatedAccount;
private CurrentUser currentUser;
@Inject
private ZanataIdentity identity;
@Inject
Expand Down Expand Up @@ -231,7 +229,7 @@ private List<Activity> fetchProjectLastActivity() {
getProjectVersions(),
input -> input != null ? input.getId(): null);
return activityServiceImpl.findLatestVersionActivitiesByUser(
authenticatedAccount.getPerson().getId(),
currentUser.getPerson().getId(),
Lists.newArrayList(versionIds), 0, 1);
}

Expand Down Expand Up @@ -366,11 +364,11 @@ public List<HLocale> getSupportedLocale(HProjectIteration version) {
}

public List<HLocale> getUserJoinedLocales(HProjectIteration version) {
if (authenticatedAccount == null) {
if (!currentUser.isLoggedIn()) {
return Collections.emptyList();
}
List<HLocale> userJoinedLocales = Lists.newArrayList();
Long personId = authenticatedAccount.getPerson().getId();
Long personId = currentUser.getPerson().getId();
for (HLocale supportedLocale : getSupportedLocale(version)) {
if (localeMemberDAO.isLocaleMember(personId,
supportedLocale.getLocaleId())
Expand Down
22 changes: 9 additions & 13 deletions server/services/src/main/java/org/zanata/dao/ProjectDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import com.google.common.annotations.VisibleForTesting;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.index.Term;
Expand All @@ -52,8 +51,8 @@
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.ProjectRole;
import org.zanata.seam.security.CurrentUser;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;

import static org.zanata.hibernate.search.IndexFieldLabels.FULL_SLUG_FIELD;

Expand All @@ -63,17 +62,18 @@ public class ProjectDAO extends AbstractDAOImpl<HProject, Long> {
@SuppressFBWarnings(value = "SE_BAD_FIELD")
@Inject @FullText
private FullTextEntityManager entityManager;
@Inject @Authenticated
private HAccount authenticatedAccount;
@Inject
private CurrentUser currentUser;
@Inject
private ZanataIdentity identity;

public ProjectDAO() {
super(HProject.class);
}

public ProjectDAO(Session session) {
public ProjectDAO(Session session, CurrentUser currentUser) {
super(HProject.class, session);
this.currentUser = currentUser;
}

public ProjectDAO(FullTextEntityManager entityManager, Session session,
Expand All @@ -96,8 +96,8 @@ public List<HProject> getOffsetList(int offset, int count,
boolean filterOutActive, boolean filterOutReadOnly,
boolean filterOutObsolete) {

HPerson person = authenticatedAccount != null ?
authenticatedAccount.getPerson() : null;
HPerson person = currentUser.isLoggedIn() ?
currentUser.getPerson() : null;

String condition =
constructFilterCondition(filterOutActive, filterOutReadOnly,
Expand Down Expand Up @@ -129,8 +129,8 @@ public List<HProject> getOffsetList(int offset, int count,

public int getFilterProjectSize(boolean filterOutActive,
boolean filterOutReadOnly, boolean filterOutObsolete) {
HPerson person = authenticatedAccount != null ?
authenticatedAccount.getPerson() : null;
HPerson person = currentUser.isLoggedIn() ?
currentUser.getPerson() : null;

String condition = constructFilterCondition(filterOutActive,
filterOutReadOnly, filterOutObsolete, person);
Expand Down Expand Up @@ -522,8 +522,4 @@ public int getTotalDocCount(String projectSlug) {
return ((Long) q.uniqueResult()).intValue();
}

@VisibleForTesting
protected void setAuthenticatedAccount(HAccount authenticatedAccount) {
this.authenticatedAccount = authenticatedAccount;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
import org.zanata.rest.editor.service.resource.UserResource;
import org.zanata.rest.service.AccountService;
import org.zanata.rest.service.GlossaryService;
import org.zanata.seam.security.CurrentUser;
import org.zanata.seam.security.IdentityManager;
import org.zanata.security.ZanataIdentity;
import org.zanata.security.annotations.Authenticated;
import org.zanata.security.annotations.CheckLoggedIn;
import org.zanata.service.GravatarService;
import com.google.common.base.Strings;
Expand All @@ -44,8 +44,7 @@
@Transactional(readOnly = true)
public class UserService implements UserResource {
@Inject
@Authenticated
private HAccount authenticatedAccount;
private CurrentUser currentUser;
@Inject
private GravatarService gravatarServiceImpl;
@Inject
Expand All @@ -67,10 +66,10 @@ public class UserService implements UserResource {
@Override
@CheckLoggedIn
public Response getMyInfo() {
if (authenticatedAccount == null) {
if (!currentUser.isLoggedIn()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
User user = getUserInfo(authenticatedAccount, true);
User user = getUserInfo(currentUser.account(), true);
return Response.ok(user).build();
}

Expand All @@ -85,14 +84,15 @@ public Response getUserInfo(String username) {

@Override
public Response getAccountDetails() {
if (authenticatedAccount == null) {
if (!currentUser.isLoggedIn()) {
return Response.status(Response.Status.FORBIDDEN).build();
}
HAccount account =
accountDAO.getByUsername(authenticatedAccount.getUsername());
accountDAO.getByUsername(currentUser.getUsername());
assert account != null;
// we may not need to return apiKey (and generating it
// without asking) anymore once client switched to OAuth
if (Strings.isNullOrEmpty(authenticatedAccount.getApiKey())) {
if (Strings.isNullOrEmpty(account.getApiKey())) {
accountDAO.createApiKey(account);
}
Account dto = new Account();
Expand All @@ -103,7 +103,7 @@ public Response getAccountDetails() {
@Override
public Response getGlossaryPermission(
@DefaultValue(GlossaryService.GLOBAL_QUALIFIED_NAME) String qualifiedName) {
if (authenticatedAccount == null) {
if (!currentUser.isLoggedIn()) {
return Response.status(Response.Status.FORBIDDEN).build();
}
Permission permission = new Permission();
Expand Down Expand Up @@ -134,7 +134,7 @@ public Response getGlossaryPermission(

@Override
public Response getLocalesPermission() {
if (authenticatedAccount == null) {
if (!currentUser.isLoggedIn()) {
return Response.status(Response.Status.FORBIDDEN).build();
}
Permission permission = new Permission();
Expand Down Expand Up @@ -198,27 +198,24 @@ public User getUserInfo(HAccount account, boolean includeEmail) {
public Permission getUserPermission() {
Permission permission = new Permission();
boolean isAdmin = false;
if (authenticatedAccount != null) {
if (currentUser.isLoggedIn()) {
isAdmin = identity.hasRole("admin");
}
permission.put("isAdmin", isAdmin);
permission.put("isLoggedIn", authenticatedAccount != null);
permission.put("isLoggedIn", currentUser.isLoggedIn());
return permission;
}

public UserService() {
}

@java.beans.ConstructorProperties({ "authenticatedAccount",
"gravatarServiceImpl", "accountDAO", "personDAO", "projectDAO",
"identity", "applicationConfiguration" })
protected UserService(final HAccount authenticatedAccount,
protected UserService(final CurrentUser currentUser,
final GravatarService gravatarServiceImpl,
final AccountDAO accountDAO, final PersonDAO personDAO,
final ProjectDAO projectDAO, final ZanataIdentity identity,
final ApplicationConfiguration applicationConfiguration,
final IdentityManager identityManager) {
this.authenticatedAccount = authenticatedAccount;
this.currentUser = currentUser;
this.gravatarServiceImpl = gravatarServiceImpl;
this.accountDAO = accountDAO;
this.personDAO = personDAO;
Expand All @@ -240,7 +237,7 @@ protected UserService(final HAccount authenticatedAccount,
public Response getSettings(String prefix) {
String dotPrefix = prefix + ".";
int trim = dotPrefix.length();
HAccount account = accountDAO.findById(authenticatedAccount.getId(), true);
HAccount account = accountDAO.findById(currentUser.account().getId(), true);
Map<String, String> options = new HashMap<String, String>();
account.getEditorOptions().values().stream()
.filter(o -> o.getName().startsWith(dotPrefix))
Expand All @@ -256,7 +253,7 @@ public Response getSettings(String prefix) {
*/
@Transactional(readOnly = false)
public Response postSettings(String prefix, Map<String, String> settings) {
HAccount account = accountDAO.findById(authenticatedAccount.getId(), true);
HAccount account = accountDAO.findById(currentUser.account().getId(), true);
for (Map.Entry<String, String> entry : settings.entrySet()) {
String name = prefix + "." + entry.getKey();
// Look up the existing option
Expand Down
Loading

0 comments on commit 7ddbec7

Please sign in to comment.