package org.jboss.resteasy.skeleton.key.representations; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.jboss.resteasy.jwt.JsonWebToken; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class SkeletonKeyToken extends JsonWebToken { public static class Access { @JsonProperty("roles") protected Set<String> roles; @JsonProperty("verify_caller") protected Boolean verifyCaller; public Set<String> getRoles() { return roles; } public Access roles(Set<String> roles) { this.roles = roles; return this; } @JsonIgnore public boolean isUserInRole(String role) { if (roles == null) return false; return roles.contains(role); } public Access addRole(String role) { if (roles == null) roles = new HashSet<String>(); roles.add(role); return this; } public Boolean getVerifyCaller() { return verifyCaller; } public Access verifyCaller(Boolean required) { this.verifyCaller = required; return this; } } @JsonProperty("trusted-certs") protected Set<String> trustedCertificates; @JsonProperty("realm_access") protected Access realmAccess; @JsonProperty("resource_access") protected Map<String, Access> resourceAccess = new HashMap<String, Access>(); public Map<String, Access> getResourceAccess() { return resourceAccess; } /** * Does the realm require verifying the caller? * * @return */ @JsonIgnore public boolean isVerifyCaller() { if (getRealmAccess() != null && getRealmAccess().getVerifyCaller() != null) return getRealmAccess().getVerifyCaller().booleanValue(); return false; } /** * Does the resource override the requirement of verifying the caller? * * @param resource * @return */ @JsonIgnore public boolean isVerifyCaller(String resource) { Access access = getResourceAccess(resource); if (access != null && access.getVerifyCaller() != null) return access.getVerifyCaller().booleanValue(); return false; } @JsonIgnore public Access getResourceAccess(String resource) { return resourceAccess.get(resource); } public Access addAccess(String service) { Access token = new Access(); resourceAccess.put(service, token); return token; } @Override public SkeletonKeyToken id(String id) { return (SkeletonKeyToken)super.id(id); } @Override public SkeletonKeyToken expiration(long expiration) { return (SkeletonKeyToken)super.expiration(expiration); } @Override public SkeletonKeyToken notBefore(long notBefore) { return (SkeletonKeyToken)super.notBefore(notBefore); } @Override public SkeletonKeyToken issuedAt(long issuedAt) { return (SkeletonKeyToken)super.issuedAt(issuedAt); } @Override public SkeletonKeyToken issuer(String issuer) { return (SkeletonKeyToken)super.issuer(issuer); } @Override public SkeletonKeyToken audience(String audience) { return (SkeletonKeyToken)super.audience(audience); } @Override public SkeletonKeyToken principal(String principal) { return (SkeletonKeyToken)super.principal(principal); } @Override public SkeletonKeyToken type(String type) { return (SkeletonKeyToken)super.type(type); } public Access getRealmAccess() { return realmAccess; } public void setRealmAccess(Access realmAccess) { this.realmAccess = realmAccess; } public Set<String> getTrustedCertificates() { return trustedCertificates; } public void setTrustedCertificates(Set<String> trustedCertificates) { this.trustedCertificates = trustedCertificates; } }