package codeine.permissions;
import java.util.List;
import java.util.Map;
import codeine.jsons.auth.CodeineUser;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
public class CompoundUserPermissions implements IUserWithPermissions{
private UserPermissions userPermissions;
private Map<String, UserProjectPermissions> specificProjectConfiguration;
private Map<String, UserPermissions> groupsPermissions;
private Map<String, Map<String, UserProjectPermissions>> groupsProjectsPermissions;
public CompoundUserPermissions(UserPermissions userPermissions,
Map<String, UserProjectPermissions> specificProjectConfiguration, Map<String, UserPermissions> groupsPermissions, Map<String, Map<String, UserProjectPermissions>> groupsProjectsPermissions) {
super();
this.userPermissions = userPermissions;
this.specificProjectConfiguration = specificProjectConfiguration;
this.groupsPermissions = groupsPermissions;
this.groupsProjectsPermissions = groupsProjectsPermissions;
}
@Override
public boolean canRead(String projectName) {
for (UserPermissions userPermissions2 : getUserPermissions()) {
if (userPermissions2.canRead(projectName)) {
return true;
}
}
for (Map<String, UserProjectPermissions> userProjectPermissions : getUserProjectPermissions()) {
if (getForProject(userProjectPermissions, projectName).canRead()) {
return true;
}
}
return false;
}
private List<Map<String, UserProjectPermissions>> getUserProjectPermissions() {
List<Map<String, UserProjectPermissions>> $ = Lists.newArrayList();
$.add(specificProjectConfiguration);
$.addAll(groupsProjectsPermissions.values());
return $;
}
private List<UserPermissions> getUserPermissions() {
List<UserPermissions> $ = Lists.newArrayList(userPermissions);
$.addAll(groupsPermissions.values());
return $;
}
private UserProjectPermissions getForProject(Map<String, UserProjectPermissions> userProjectPermissions, String projectName) {
if (userProjectPermissions.containsKey(projectName)) {
return userProjectPermissions.get(projectName);
}
return createUnauthorizedUser();
}
private UserProjectPermissions createUnauthorizedUser() {
return new UserProjectPermissions("unauthorized", false, Sets.<String>newHashSet(), false);
}
@Override
public boolean canCommand(String projectName) {
for (UserPermissions userPermissions2 : getUserPermissions()) {
if (userPermissions2.canCommand(projectName)) {
return true;
}
}
for (Map<String, UserProjectPermissions> userProjectPermissions : getUserProjectPermissions()) {
if (getForProject(userProjectPermissions, projectName).canCommand()) {
return true;
}
}
return false;
}
@Override
public boolean canCommand(String projectName, String nodeAlias) {
for (UserPermissions userPermissions2 : getUserPermissions()) {
if (userPermissions2.canCommand(projectName)) {
return true;
}
}
for (Map<String, UserProjectPermissions> userProjectPermissions : getUserProjectPermissions()) {
if (getForProject(userProjectPermissions, projectName).canCommand(nodeAlias)) {
return true;
}
}
return false;
}
@Override
public boolean canConfigure(String projectName) {
for (UserPermissions userPermissions2 : getUserPermissions()) {
if (userPermissions2.canConfigure(projectName)) {
return true;
}
}
for (Map<String, UserProjectPermissions> userProjectPermissions : getUserProjectPermissions()) {
if (getForProject(userProjectPermissions, projectName).canConfigure()) {
return true;
}
}
return false;
}
@Override
public boolean isAdministrator() {
for (UserPermissions userPermissions2 : getUserPermissions()) {
if (userPermissions2.isAdministrator()) {
return true;
}
}
return false;
}
@Override
public CodeineUser user() {
return userPermissions.user();
}
}