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; } }