org.openid4java.message.sreg.SRegResponse Maven / Gradle / Ivy
Show all versions of openid4java-shaded Show documentation
/*
* Copyright 2006-2008 Sxip Identity Corporation
*/
package org.openid4java.message.sreg;
import org.openid4java.message.ParameterList;
import org.openid4java.message.MessageException;
import org.openid4java.message.Parameter;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Implements the extension for Simple Registration fetch responses.
*
* @author Marius Scurtescu, Johnny Bufu
*/
public class SRegResponse extends SRegMessage
{
private static Log _log = LogFactory.getLog(SRegResponse.class);
private static final boolean DEBUG = _log.isDebugEnabled();
protected final static List SREG_FIELDS = Arrays.asList( new String[] {
"nickname", "email", "fullname", "dob", "gender",
"postcode", "country", "language", "timezone"
});
/**
* Constructs a SReg Response with an empty parameter list.
*/
protected SRegResponse()
{
if (DEBUG) _log.debug("Created empty fetch response.");
}
/**
* Constructs a SReg Response with an empty parameter list.
*/
public static SRegResponse createFetchResponse()
{
return new SRegResponse();
}
/**
* Constructs a SReg Response from a parameter list.
*
* The parameter list can be extracted from a received message with the
* getExtensionParams method of the Message class, and MUST NOT contain
* the "openid.." prefix.
*/
protected SRegResponse(ParameterList params)
{
_parameters = params;
}
public static SRegResponse createSRegResponse(ParameterList params)
throws MessageException
{
SRegResponse resp = new SRegResponse(params);
if (! resp.isValid())
throw new MessageException("Invalid parameters for a SReg response");
if (DEBUG)
_log.debug("Created SReg response from parameter list:\n" + params);
return resp;
}
/**
* Creates a SRegResponse from a SRegRequest message and the data released
* by the user.
*
* @param req SRegRequest message.
* @param userData Map with the
* data released by the user.
* @return Properly formed SRegResponse.
* @throws MessageException if any attribute-name in the userData map does not
* correspond to an SREG field-name.
*/
public static SRegResponse createSRegResponse(SRegRequest req, Map userData)
throws MessageException
{
SRegResponse resp = new SRegResponse();
List attributes = req.getAttributes();
Iterator iter = attributes.iterator();
while (iter.hasNext())
{
String attr = (String) iter.next();
String value = (String) userData.get(attr);
if (value != null)
resp.addAttribute(attr, value);
}
return resp;
}
/**
* Adds an attribute to the SReg response. The allowed attribute names are
* the ones defined in the SReg specification: nickname, email, fullname,
* dob, gender, postcode, country, language, timezone.
*
* @param attr An attribute name.
* @param value The value of the attribute.
*/
public void addAttribute(String attr, String value) throws MessageException
{
_parameters.set(new Parameter(attr, value));
if (! SREG_FIELDS.contains(attr))
throw new MessageException("Invalid attribute for SReg: " + attr);
if (DEBUG)
_log.debug("Added new attribute to SReg response: " + attr +
" value: " + value);
}
/**
* Returns the value of an attribute.
*
* @param attr The attribute name.
* @return The attribute value.
*/
public String getAttributeValue(String attr)
{
return getParameterValue(attr);
}
/**
* Gets a list of attribute names in the SReg response.
*/
public List getAttributeNames()
{
List attributes = new ArrayList();
Iterator it = _parameters.getParameters().iterator();
while (it.hasNext())
{
attributes.add(((Parameter) it.next()).getKey());
}
return attributes;
}
/**
* Gets a map with attribute names -> values.
*/
public Map getAttributes()
{
Map attributes = new HashMap();
Iterator it = _parameters.getParameters().iterator();
while (it.hasNext())
{
String attr = ((Parameter) it.next()).getKey();
attributes.put(attr, getAttributeValue(attr));
}
return attributes;
}
/**
* Checks the validity of the extension.
*
* Used when constructing a extension from a parameter list.
*
* @return True if the extension is valid, false otherwise.
*/
private boolean isValid()
{
Iterator it = _parameters.getParameters().iterator();
while (it.hasNext())
{
String paramName = ((Parameter) it.next()).getKey();
if (! SREG_FIELDS.contains(paramName))
{
_log.warn("Invalid parameter name in SReg response: " + paramName);
return false;
}
}
return true;
}
}