package edu.harvard.iq.dataverse.engine.command;
import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.ip.IpAddress;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import javax.servlet.http.HttpServletRequest;
/**
*
* A request in the dataverse context. Similar to an HTTP request (and indeed
* wraps one) but has more data that's specific to the Dataverse application.
*
* @author michael
*/
public class DataverseRequest {
private final User user;
private final IpAddress sourceAddress;
public DataverseRequest(User aUser, HttpServletRequest aHttpServletRequest) {
this.user = aUser;
final String undefined = "0.0.0.0";
String saneDefault = undefined;
String remoteAddressStr = saneDefault;
if (aHttpServletRequest != null) {
String remoteAddressFromRequest = aHttpServletRequest.getRemoteAddr();
if (remoteAddressFromRequest != null) {
remoteAddressStr = remoteAddressFromRequest;
}
}
sourceAddress = IpAddress.valueOf( remoteAddressStr );
}
public DataverseRequest( User aUser, IpAddress aSourceAddress ) {
user = aUser;
sourceAddress = aSourceAddress;
}
public User getUser() {
return user;
}
/**
* @return The IP address from which this request arrived.
*/
public IpAddress getSourceAddress() {
return sourceAddress;
}
@Override
public String toString() {
return "[DataverseRequest user:" + getUser() + "@" + getSourceAddress() + "]";
}
/**
* Get an AuthenticatedUser or return null
* @return
*/
public AuthenticatedUser getAuthenticatedUser(){
User authUser = this.getUser();
if (authUser instanceof AuthenticatedUser){
return (AuthenticatedUser)authUser;
}
return null;
}
}