/** * Same as {@link #getRequestedProjects()}, but with a variable cookieName and parameter name. * This way it is trivial to implement a project filter ... * * @param paramName the name of the request parameter, which possibly contains the project list in * question. * @param cookieName name of the cookie which possible contains project lists used as fallback * @return a possible empty set but never {@code null}. */ protected SortedSet<String> getRequestedProjects(String paramName, String cookieName) { TreeSet<String> set = new TreeSet<>(); List<Project> projects = getEnv().getProjects(); if (projects == null) { return set; } if (projects.size() == 1 && authFramework.isAllowed(req, projects.get(0))) { set.add(projects.get(0).getDescription()); return set; } List<String> vals = getParamVals(paramName); for (String s : vals) { Project x = Project.getByDescription(s); if (x != null && authFramework.isAllowed(req, x)) { set.add(s); } } if (set.isEmpty()) { List<String> cookies = getCookieVals(cookieName); for (String s : cookies) { Project x = Project.getByDescription(s); if (x != null && authFramework.isAllowed(req, x)) { set.add(s); } } } if (set.isEmpty()) { Project defaultProject = env.getDefaultProject(); if (defaultProject != null && authFramework.isAllowed(req, defaultProject)) { set.add(defaultProject.getDescription()); } } return set; }
private PageConfig(HttpServletRequest req) { this.req = req; this.authFramework = AuthorizationFramework.getInstance(); }