package codeine.servlets.api_servlets.angular;
import java.util.Set;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import codeine.configuration.IConfigurationManager;
import codeine.jsons.info.CodeineRuntimeInfo;
import codeine.jsons.info.SessionInfo;
import codeine.jsons.project.ProjectJson;
import codeine.permissions.IUserWithPermissions;
import codeine.permissions.UserPermissionsGetter;
import codeine.permissions.UserPermissions;
import codeine.servlet.AbstractApiServlet;
import codeine.servlet.PrepareForShutdown;
import com.google.common.collect.Sets;
public class RuntimeInfoApiServlet extends AbstractApiServlet {
private static final long serialVersionUID = 1L;
@Inject private CodeineRuntimeInfo runtimeInfo;
@Inject private UserPermissionsGetter permissionsManager;
@Inject private IConfigurationManager configurationManager;
@Inject private PrepareForShutdown prepareForShutdown;
@Override
protected boolean checkPermissions(HttpServletRequest request) {
return true;
}
@Override
protected void myGet(HttpServletRequest request, HttpServletResponse response) {
IUserWithPermissions user = permissionsManager.user(request);
Set<String> canCommand = Sets.newHashSet();
Set<String> canConfigure = Sets.newHashSet();
Set<String> canRead = Sets.newHashSet();
for (ProjectJson p : configurationManager.getConfiguredProjects()) {
if (user.canCommand(p.name())) {
canCommand.add(p.name());
}
if (user.canConfigure(p.name())) {
canConfigure.add(p.name());
}
if (user.canRead(p.name())) {
canRead.add(p.name());
}
}
UserPermissions userPermissions = new UserPermissions(user.user(), user.isAdministrator(), canRead, canCommand, canConfigure);
writeResponseJson(response, new SessionInfo(runtimeInfo.version(), userPermissions, prepareForShutdown.isSequnceActivated()));
}
}