package net.curisit.securis.security; import java.security.Principal; import java.util.Map; import java.util.Set; import javax.ws.rs.core.SecurityContext; import net.curisit.integrity.commons.Utils; import net.curisit.securis.db.User; public class BasicSecurityContext implements SecurityContext { final public static String ROL_ADVANCE = "advance"; final public static String ROL_ADMIN = "admin"; final public static String ROL_BASIC = "basic"; final static Map ROLES = Utils. createMap(ROL_BASIC, User.Rol.BASIC, ROL_ADVANCE, User.Rol.ADVANCE, ROL_ADMIN, User.Rol.ADMIN); Principal user = null; int roles = 0; boolean secure = false; Set organizationsIds = null; Set applicationsIds = null; double ran = 0; public BasicSecurityContext(String username, int roles, boolean secure) { user = new UserPrincipal(username); this.roles = roles; this.secure = secure; ran = Math.random(); } @Override public Principal getUserPrincipal() { return user; } @Override public boolean isUserInRole(String role) { Integer introle = ROLES.get(role); return introle != null && (introle & roles) != 0; } @Override public boolean isSecure() { return secure; } @Override public String getAuthenticationScheme() { return null; } @Override public String toString() { return String.format("SecurityContextWrapper(%f) %s", ran, user); } public void setOrganizationsIds(Set orgs) { this.organizationsIds = orgs; } public Set getOrganizationsIds() { return this.organizationsIds; } public Set getApplicationsIds() { return applicationsIds; } public void setApplicationsIds(Set applicationsIds) { this.applicationsIds = applicationsIds; } private class UserPrincipal implements Principal { final String name; public UserPrincipal(String name) { this.name = name; } @Override public String getName() { return this.name; } @Override public String toString() { return String.format("[%s]", name); } } public boolean isOrgAccesible(Integer orgid) { if (organizationsIds == null || orgid == null) { return false; } return organizationsIds.contains(orgid); } public boolean isAppAccesible(Integer appid) { if (applicationsIds == null || appid == null) { return false; } return applicationsIds.contains(appid); } }