/*
* oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text.
*
* Copyright (c) 2014, Gluu
*/
package org.xdi.oxauth.client;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.jboss.resteasy.client.ClientResponse;
import org.xdi.oxauth.model.register.RegisterErrorResponseType;
import org.xdi.oxauth.model.register.RegisterResponseParam;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import static org.xdi.oxauth.model.register.RegisterResponseParam.*;
/**
* Represents a register response received from the authorization server.
*
* @author Javier Rojas Blum
* @version December 26, 2016
*/
public class RegisterResponse extends BaseResponseWithErrors<RegisterErrorResponseType> {
private static final Logger LOG = Logger.getLogger(RegisterResponse.class);
private String clientId;
private String clientSecret;
private String registrationAccessToken;
private String registrationClientUri;
private Date clientIdIssuedAt;
private Date clientSecretExpiresAt;
private Map<String, String> claims = new HashMap<String, String>();
public RegisterResponse() {
}
/**
* Constructs a register response.
*/
public RegisterResponse(ClientResponse<String> clientResponse) {
super(clientResponse);
String entity = clientResponse.getEntity(String.class);
setEntity(entity);
setHeaders(clientResponse.getMetadata());
injectDataFromJson(entity);
}
@Override
public RegisterErrorResponseType fromString(String p_string) {
return RegisterErrorResponseType.fromString(p_string);
}
public void injectDataFromJson() {
injectDataFromJson(getEntity());
}
public static RegisterResponse valueOf(String p_json) {
final RegisterResponse r = new RegisterResponse();
r.injectDataFromJson(p_json);
return r;
}
public void injectDataFromJson(String p_json) {
if (StringUtils.isNotBlank(p_json)) {
try {
JSONObject jsonObj = new JSONObject(p_json);
if (jsonObj.has(RegisterResponseParam.CLIENT_ID.toString())) {
setClientId(jsonObj.getString(RegisterResponseParam.CLIENT_ID.toString()));
jsonObj.remove(RegisterResponseParam.CLIENT_ID.toString());
}
if (jsonObj.has(CLIENT_SECRET.toString())) {
setClientSecret(jsonObj.getString(CLIENT_SECRET.toString()));
jsonObj.remove(CLIENT_SECRET.toString());
}
if (jsonObj.has(RegisterResponseParam.REGISTRATION_ACCESS_TOKEN.toString())) {
setRegistrationAccessToken(jsonObj.getString(RegisterResponseParam.REGISTRATION_ACCESS_TOKEN.toString()));
jsonObj.remove(RegisterResponseParam.REGISTRATION_ACCESS_TOKEN.toString());
}
if (jsonObj.has(REGISTRATION_CLIENT_URI.toString())) {
setRegistrationClientUri(jsonObj.getString(REGISTRATION_CLIENT_URI.toString()));
jsonObj.remove(REGISTRATION_CLIENT_URI.toString());
}
if (jsonObj.has(CLIENT_ID_ISSUED_AT.toString())) {
long clientIdIssuedAt = jsonObj.getLong(CLIENT_ID_ISSUED_AT.toString());
if (clientIdIssuedAt > 0) {
setClientIdIssuedAt(new Date(clientIdIssuedAt * 1000L));
}
jsonObj.remove(CLIENT_ID_ISSUED_AT.toString());
}
if (jsonObj.has(CLIENT_SECRET_EXPIRES_AT.toString())) {
long clientSecretExpiresAt = jsonObj.getLong(CLIENT_SECRET_EXPIRES_AT.toString());
if (clientSecretExpiresAt > 0) {
setClientSecretExpiresAt(new Date(clientSecretExpiresAt * 1000L));
}
jsonObj.remove(CLIENT_SECRET_EXPIRES_AT.toString());
}
for (Iterator<String> it = jsonObj.keys(); it.hasNext(); ) {
String key = it.next();
getClaims().put(key, jsonObj.getString(key));
}
} catch (JSONException e) {
LOG.error(e.getMessage(), e);
}
}
}
/**
* Returns the client's identifier.
*
* @return The client's identifier.
*/
public String getClientId() {
return clientId;
}
/**
* Sets the client's identifier.
*
* @param clientId The client's identifier.
*/
public void setClientId(String clientId) {
this.clientId = clientId;
}
/**
* Returns the client's password.
*
* @return The client's password.
*/
public String getClientSecret() {
return clientSecret;
}
/**
* Sets the client's password.
*
* @param clientSecret The client's password.
*/
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getRegistrationAccessToken() {
return registrationAccessToken;
}
public void setRegistrationAccessToken(String registrationAccessToken) {
this.registrationAccessToken = registrationAccessToken;
}
public String getRegistrationClientUri() {
return registrationClientUri;
}
public void setRegistrationClientUri(String registrationClientUri) {
this.registrationClientUri = registrationClientUri;
}
public Date getClientIdIssuedAt() {
// findbugs : return copy instead of original object
return clientIdIssuedAt != null ? new Date(clientIdIssuedAt.getTime()) : null;
}
public void setClientIdIssuedAt(Date clientIdIssuedAt) {
// findbugs : save copy instead of original object
this.clientIdIssuedAt = clientIdIssuedAt != null ? new Date(clientIdIssuedAt.getTime()) : null;
}
/**
* Return the expiration date after which the client's account will expire.
* <code>null</code> if the client's account never expires.
*
* @return The expiration date.
*/
public Date getClientSecretExpiresAt() {
// findbugs : return copy instead of original object
return clientSecretExpiresAt != null ? new Date(clientSecretExpiresAt.getTime()) : null;
}
/**
* Sets the expiration date after which the client's account will expire.
* <code>null</code> if the client's account never expires.
*
* @param clientSecretExpiresAt The expiration date.
*/
public void setClientSecretExpiresAt(Date clientSecretExpiresAt) {
// findbugs : save copy instead of original object
this.clientSecretExpiresAt = clientSecretExpiresAt != null ? new Date(clientSecretExpiresAt.getTime()) : null;
}
public Map<String, String> getClaims() {
return claims;
}
public void setClaims(Map<String, String> claims) {
this.claims = claims;
}
}