package eu.fbk.knowledgestore.server.http; import java.net.URL; import java.util.Arrays; import java.util.Set; import javax.annotation.Nullable; import com.google.common.base.Joiner; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import eu.fbk.knowledgestore.internal.Util; public final class SecurityConfig { public static final String ROLE_DOWNLOADER = "downloader"; public static final String ROLE_CRUD_READER = "crud_reader"; public static final String ROLE_SPARQL_READER = "sparql_reader"; public static final String ROLE_WRITER = "writer"; public static final String ROLE_UI_USER = "ui_user"; static final Set<String> ALL_ROLES = ImmutableSet.of(ROLE_DOWNLOADER, ROLE_CRUD_READER, ROLE_SPARQL_READER, ROLE_WRITER, ROLE_UI_USER); @Nullable private final String realm; private final String userdbLocation; private final URL userdbURL; private final Set<String> anonymousRoles; public SecurityConfig(@Nullable final String realm, final String userdbLocation, final String... anonymousRoles) { this(realm, userdbLocation, Arrays.asList(anonymousRoles)); } public SecurityConfig(@Nullable final String realm, final String userdbLocation, final Iterable<? extends String> anonymousRoles) { this.realm = realm; this.userdbLocation = Preconditions.checkNotNull(userdbLocation); this.userdbURL = Util.getURL(userdbLocation); this.anonymousRoles = ImmutableSet.copyOf(anonymousRoles); for (final String role : anonymousRoles) { Preconditions.checkArgument(ALL_ROLES.contains(role), "Invalid role %s", role); } } @Nullable public String getRealm() { return this.realm; } public String getUserdbLocation() { return this.userdbLocation; } public URL getUserdbURL() { return this.userdbURL; } public Set<String> getAnonymousRoles() { return this.anonymousRoles; } @Override public boolean equals(final Object object) { if (object == this) { return true; } if (!(object instanceof SecurityConfig)) { return false; } final SecurityConfig o = (SecurityConfig) object; return Objects.equal(this.realm, o.realm) && this.userdbLocation.equals(o.userdbLocation) && this.anonymousRoles.equals(o.anonymousRoles); } @Override public int hashCode() { return Objects.hashCode(this.realm, this.userdbLocation, this.anonymousRoles); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); if (this.realm != null) { builder.append("realm=").append(this.realm).append(", "); } builder.append("userdb=").append(this.userdbLocation); builder.append(", anonymousRoles=").append(Joiner.on(";").join(this.anonymousRoles)); return super.toString(); } }