
com.almworks.jira.structure.api.StructureAuth Maven / Gradle / Ivy
Show all versions of structure-api Show documentation
package com.almworks.jira.structure.api;
import com.almworks.jira.structure.api.view.StructureView;
import com.almworks.jira.structure.util.CallableE;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.fugue.Option;
import com.atlassian.fugue.Pair;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.user.ApplicationUsers;
import com.atlassian.jira.util.log.Log4jKit;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.atlassian.fugue.Option.option;
import static com.atlassian.fugue.Pair.pair;
/**
* This is a helper class manages the current authentication context assumed when accessing, managing
* and updating Structure entities such as {@link Structure} or {@link StructureView}.
*
* The context is local to the current thread.
*
*
By default, the context equals to {@link JiraAuthenticationContext JIRA's authentication context}.
* It is possible to specify another user or disable security checks.
* */
public class StructureAuth {
private static final Logger log = LoggerFactory.getLogger(StructureAuth.class);
/**
* Not using custom class to avoid leaking our classes through ThreadLocal.
* Second component is "override security"
* */
private static final ThreadLocal, Boolean>> sudoContext = new ThreadLocal<>();
private static final AtomicBoolean reportedNoAuthContext = new AtomicBoolean();
/**
* Returns the current user. If the user is not authenticated, i.e. the context is anonymous,
* returns {@code null}. "Override security" settings does not influence this method.
* */
@Nullable
public static ApplicationUser getUser() {
Pair