package edu.harvard.iq.dataverse.authorization.groups.impl.shib;
import edu.harvard.iq.dataverse.authorization.RoleAssignee;
import edu.harvard.iq.dataverse.authorization.RoleAssigneeDisplayInfo;
import edu.harvard.iq.dataverse.authorization.groups.Group;
import edu.harvard.iq.dataverse.authorization.groups.GroupProvider;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
/**
* Persistence for Shibboleth groups.
*/
@Entity
public class ShibGroup implements Group, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public void setShibGroupProvider(ShibGroupProvider shibGroupProvider) {
this.shibGroupProvider = shibGroupProvider;
}
/**
* The name of the group that will be displayed to the end user.
*/
@Column(nullable = false)
private String name;
/**
* The Shibboleth attribute to match against, such as
* "Shib-Identity-Provider" or "memberOf".
*/
@Column(nullable = false)
private String attribute;
/**
* A regular expression to match the attribute against.
*/
@Column(nullable = false)
private String pattern;
@Transient
private ShibGroupProvider shibGroupProvider;
/**
* JPA constructor, humans should use {@link #ShibGroup(java.lang.String, java.lang.String, java.lang.String, edu.harvard.iq.dataverse.authorization.groups.impl.shib.ShibGroupProvider)}
*
* @see #ShibGroup(java.lang.String, java.lang.String, java.lang.String, edu.harvard.iq.dataverse.authorization.groups.impl.shib.ShibGroupProvider)
*/
public ShibGroup() {
}
public ShibGroup(String name, String attribute, String pattern, ShibGroupProvider shibGroupProvider) {
this.name = name;
this.attribute = attribute;
this.pattern = pattern;
this.shibGroupProvider = shibGroupProvider;
}
@Override
public String toString() {
return "ShibGroup{" + "id=" + id + ", name=" + name + ", attribute=" + attribute + ", pattern=" + pattern + '}';
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getAttribute() {
return attribute;
}
public String getPattern() {
return pattern;
}
@Override
public String getAlias() {
return ShibGroupProvider.getShibProviderAlias() + Group.PATH_SEPARATOR + getId().toString();
}
@Override
public String getDisplayName() {
return getName();
}
@Override
public String getDescription() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean isEditable() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public GroupProvider<ShibGroup> getGroupProvider() {
return shibGroupProvider;
}
/**
* i.e. &shib/1
*/
@Override
public String getIdentifier() {
return Group.IDENTIFIER_PREFIX + ShibGroupProvider.getShibProviderAlias() + Group.PATH_SEPARATOR + getId();
}
@Override
public RoleAssigneeDisplayInfo getDisplayInfo() {
// String debugTitle = "Shibboleth group " + getId() + " (" + getAlias() + ") \"" + getAttribute() + "\" exact string match of \"" + getPattern() + "\"";
String title = getName();
/**
* @todo should email be null for Shibboleth groups?
*/
// String email = "FIXME RoleAssigneeDisplayInfo email for shibgroup id " + getId();
String email = null;
RoleAssigneeDisplayInfo roleAssigneeDisplayInfo = new RoleAssigneeDisplayInfo(title, email);
return roleAssigneeDisplayInfo;
}
@Override
public boolean contains(DataverseRequest aRequest) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}