diff --git a/src/main/java/org/gcube/common/keycloak/model/TokenIntrospectionResponse.java b/src/main/java/org/gcube/common/keycloak/model/TokenIntrospectionResponse.java new file mode 100644 index 0000000..814f837 --- /dev/null +++ b/src/main/java/org/gcube/common/keycloak/model/TokenIntrospectionResponse.java @@ -0,0 +1,24 @@ +package org.gcube.common.keycloak.model; + +import java.util.List; + +import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; +import org.gcube.common.keycloak.model.idm.authorization.Permission; + +public class TokenIntrospectionResponse extends JsonWebToken { + + private static final long serialVersionUID = -3105799239959636906L; + + @JsonProperty + private Boolean active; + + private List permissions; + + public Boolean getActive() { + return this.active; + } + + public List getPermissions() { + return this.permissions; + } +} diff --git a/src/main/java/org/gcube/common/keycloak/model/idm/authorization/Permission.java b/src/main/java/org/gcube/common/keycloak/model/idm/authorization/Permission.java new file mode 100644 index 0000000..ef7a7ae --- /dev/null +++ b/src/main/java/org/gcube/common/keycloak/model/idm/authorization/Permission.java @@ -0,0 +1,119 @@ +package org.gcube.common.keycloak.model.idm.authorization; + +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import org.gcube.com.fasterxml.jackson.annotation.JsonInclude; +import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class Permission { + + @JsonProperty("rsid") + private String resourceId; + + @JsonProperty("rsname") + private String resourceName; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Set scopes; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map> claims; + + public Permission() { + this(null, null, null, null); + } + + public Permission(final String resourceId, final Set scopes) { + this(resourceId, null, scopes, null); + } + + public Permission(final String resourceId, String resourceName, final Set scopes, Map> claims) { + this.resourceId = resourceId; + this.resourceName = resourceName; + this.scopes = scopes; + this.claims = claims; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public String getResourceId() { + if (resourceId == null || "".equals(resourceId.trim())) { + return null; + } + return this.resourceId; + } + + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + + public String getResourceName() { + return this.resourceName; + } + + public Set getScopes() { + if (this.scopes == null) { + this.scopes = new HashSet<>(); + } + + return this.scopes; + } + + public Map> getClaims() { + return claims; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || !getClass().isAssignableFrom(o.getClass())) return false; + + Permission that = (Permission) o; + + if (getResourceId() != null || getResourceName() != null) { + if (!getResourceId().equals(that.resourceId)) { + return false; + } + + if (getScopes().isEmpty() && that.getScopes().isEmpty()) { + return true; + } + } else if (that.resourceId != null) { + return false; + } + + for (String scope : that.getScopes()) { + if (getScopes().contains(scope)) { + return true; + } + } + + return false; + } + + @Override + public int hashCode() { + return Objects.hash(resourceId); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + + builder.append("Permission {").append("id=").append(resourceId).append(", name=").append(resourceName) + .append(", scopes=").append(scopes).append("}"); + + return builder.toString(); + } + + public void setScopes(Set scopes) { + this.scopes = scopes; + } +}