/*
* 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.action;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.xdi.oxauth.client.RegisterClient;
import org.xdi.oxauth.client.RegisterRequest;
import org.xdi.oxauth.client.RegisterResponse;
import org.xdi.oxauth.model.common.AuthenticationMethod;
import org.xdi.oxauth.model.common.GrantType;
import org.xdi.oxauth.model.common.ResponseType;
import org.xdi.oxauth.model.common.SubjectType;
import org.xdi.oxauth.model.crypto.encryption.BlockEncryptionAlgorithm;
import org.xdi.oxauth.model.crypto.encryption.KeyEncryptionAlgorithm;
import org.xdi.oxauth.model.crypto.signature.SignatureAlgorithm;
import org.xdi.oxauth.model.register.ApplicationType;
import org.xdi.oxauth.model.util.StringUtils;
import com.google.common.collect.Lists;
/**
* @author Javier Rojas Blum
* @version February 5, 2016
*/
@Named
@SessionScoped
public class RegistrationAction implements Serializable {
private static final long serialVersionUID = -5920839612180688968L;
@Inject
private Logger log;
@Inject
private AuthorizationAction authorizationAction;
@Inject
private TokenAction tokenAction;
private String registrationEndpoint;
private String redirectUris;
private List<ResponseType> responseTypes;
private List<GrantType> grantTypes;
private ApplicationType applicationType;
private String contacts;
private String clientName;
private String logoUri;
private String clientUri;
private String policyUri;
private String logoutUri;
private Boolean logoutSessionRequired;
private String tosUri;
private String jwksUri;
private String sectorIdentifierUri;
private SubjectType subjectType;
private SignatureAlgorithm idTokenSignedResponseAlg;
private KeyEncryptionAlgorithm idTokenEncryptedResponseAlg;
private BlockEncryptionAlgorithm idTokenEncryptedResponseEnc;
private SignatureAlgorithm userInfoSignedResponseAlg;
private KeyEncryptionAlgorithm userInfoEncryptedResponseAlg;
private BlockEncryptionAlgorithm userInfoEncryptedResponseEnc;
private SignatureAlgorithm requestObjectSigningAlg;
private KeyEncryptionAlgorithm requestObjectEncryptionAlg;
private BlockEncryptionAlgorithm requestObjectEncryptionEnc;
private AuthenticationMethod tokenEndpointAuthMethod;
private SignatureAlgorithm tokenEndpointAuthSigningAlg;
private Integer defaultMaxAge;
private Boolean requireAuthTime;
private String defaultAcrValues;
private String initiateLoginUri;
private String postLogoutRedirectUris;
private String requestUris;
private String registrationClientUri;
private String registrationAccessToken;
private boolean showResults;
private String requestString;
private String responseString;
private boolean showClientReadResults;
private String clientReadRequestString;
private String clientReadResponseString;
public void exec() {
try {
RegisterRequest request = new RegisterRequest(applicationType, clientName, StringUtils.spaceSeparatedToList(redirectUris));
request.setResponseTypes(responseTypes);
request.setGrantTypes(grantTypes);
request.setContacts(StringUtils.spaceSeparatedToList(contacts));
request.setLogoUri(logoUri);
request.setClientUri(clientUri);
request.setPolicyUri(policyUri);
request.setTosUri(tosUri);
request.setJwksUri(jwksUri);
request.setSectorIdentifierUri(sectorIdentifierUri);
request.setSubjectType(subjectType);
request.setIdTokenSignedResponseAlg(idTokenSignedResponseAlg);
request.setIdTokenEncryptedResponseAlg(idTokenEncryptedResponseAlg);
request.setIdTokenEncryptedResponseEnc(idTokenEncryptedResponseEnc);
request.setUserInfoSignedResponseAlg(userInfoSignedResponseAlg);
request.setUserInfoEncryptedResponseAlg(userInfoEncryptedResponseAlg);
request.setUserInfoEncryptedResponseEnc(userInfoEncryptedResponseEnc);
request.setRequestObjectSigningAlg(requestObjectSigningAlg);
request.setRequestObjectEncryptionAlg(requestObjectEncryptionAlg);
request.setRequestObjectEncryptionEnc(requestObjectEncryptionEnc);
request.setTokenEndpointAuthMethod(tokenEndpointAuthMethod);
request.setTokenEndpointAuthSigningAlg(tokenEndpointAuthSigningAlg);
request.setDefaultMaxAge(defaultMaxAge);
request.setRequireAuthTime(requireAuthTime);
request.setDefaultAcrValues(StringUtils.spaceSeparatedToList(defaultAcrValues));
request.setInitiateLoginUri(initiateLoginUri);
request.setPostLogoutRedirectUris(StringUtils.spaceSeparatedToList(postLogoutRedirectUris));
request.setRequestUris(StringUtils.spaceSeparatedToList(requestUris));
request.setFrontChannelLogoutUris(Lists.newArrayList(logoutUri));
request.setFrontChannelLogoutSessionRequired(logoutSessionRequired);
RegisterClient client = new RegisterClient(registrationEndpoint);
client.setRequest(request);
RegisterResponse response = client.exec();
if (response.getStatus() == 200) {
registrationClientUri = response.getRegistrationClientUri();
registrationAccessToken = response.getRegistrationAccessToken();
authorizationAction.setClientId(response.getClientId());
authorizationAction.setClientSecret(response.getClientSecret());
if (request.getRedirectUris() != null && request.getRedirectUris().size() > 0) {
authorizationAction.setRedirectUri(request.getRedirectUris().get(0));
}
tokenAction.setClientId(response.getClientId());
tokenAction.setClientSecret(response.getClientSecret());
}
showResults = true;
requestString = client.getRequestAsString();
responseString = client.getResponseAsString();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public void execClientRead() {
try {
RegisterRequest registerRequest = new RegisterRequest(registrationAccessToken);
RegisterClient client = new RegisterClient(registrationClientUri);
client.setRequest(registerRequest);
client.exec();
showClientReadResults = true;
clientReadRequestString = client.getRequestAsString();
clientReadResponseString = client.getResponseAsString();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public String getRegistrationEndpoint() {
return registrationEndpoint;
}
public void setRegistrationEndpoint(String registrationEndpoint) {
this.registrationEndpoint = registrationEndpoint;
}
public String getRedirectUris() {
return redirectUris;
}
public void setRedirectUris(String redirectUris) {
this.redirectUris = redirectUris;
}
public List<ResponseType> getResponseTypes() {
return responseTypes;
}
public void setResponseTypes(List<ResponseType> responseTypes) {
this.responseTypes = responseTypes;
}
public List<GrantType> getGrantTypes() {
return grantTypes;
}
public void setGrantTypes(List<GrantType> grantTypes) {
this.grantTypes = grantTypes;
}
public ApplicationType getApplicationType() {
return applicationType;
}
public void setApplicationType(ApplicationType applicationType) {
this.applicationType = applicationType;
}
public String getContacts() {
return contacts;
}
public void setContacts(String contacts) {
this.contacts = contacts;
}
public String getClientName() {
return clientName;
}
public void setClientName(String clientName) {
this.clientName = clientName;
}
public String getLogoUri() {
return logoUri;
}
public void setLogoUri(String logoUri) {
this.logoUri = logoUri;
}
public String getClientUri() {
return clientUri;
}
public void setClientUri(String clientUri) {
this.clientUri = clientUri;
}
public String getPolicyUri() {
return policyUri;
}
public void setPolicyUri(String policyUri) {
this.policyUri = policyUri;
}
public String getLogoutUri() {
return logoutUri;
}
public void setLogoutUri(String logoutUri) {
this.logoutUri = logoutUri;
}
public Boolean getLogoutSessionRequired() {
return logoutSessionRequired;
}
public void setLogoutSessionRequired(Boolean logoutSessionRequired) {
this.logoutSessionRequired = logoutSessionRequired;
}
public String getTosUri() {
return tosUri;
}
public void setTosUri(String tosUri) {
this.tosUri = tosUri;
}
public String getJwksUri() {
return jwksUri;
}
public void setJwksUri(String jwksUri) {
this.jwksUri = jwksUri;
}
public String getSectorIdentifierUri() {
return sectorIdentifierUri;
}
public void setSectorIdentifierUri(String sectorIdentifierUri) {
this.sectorIdentifierUri = sectorIdentifierUri;
}
public SubjectType getSubjectType() {
return subjectType;
}
public void setSubjectType(SubjectType subjectType) {
this.subjectType = subjectType;
}
public SignatureAlgorithm getIdTokenSignedResponseAlg() {
return idTokenSignedResponseAlg;
}
public void setIdTokenSignedResponseAlg(SignatureAlgorithm idTokenSignedResponseAlg) {
this.idTokenSignedResponseAlg = idTokenSignedResponseAlg;
}
public KeyEncryptionAlgorithm getIdTokenEncryptedResponseAlg() {
return idTokenEncryptedResponseAlg;
}
public void setIdTokenEncryptedResponseAlg(KeyEncryptionAlgorithm idTokenEncryptedResponseAlg) {
this.idTokenEncryptedResponseAlg = idTokenEncryptedResponseAlg;
}
public BlockEncryptionAlgorithm getIdTokenEncryptedResponseEnc() {
return idTokenEncryptedResponseEnc;
}
public void setIdTokenEncryptedResponseEnc(BlockEncryptionAlgorithm idTokenEncryptedResponseEnc) {
this.idTokenEncryptedResponseEnc = idTokenEncryptedResponseEnc;
}
public SignatureAlgorithm getUserInfoSignedResponseAlg() {
return userInfoSignedResponseAlg;
}
public void setUserInfoSignedResponseAlg(SignatureAlgorithm userInfoSignedResponseAlg) {
this.userInfoSignedResponseAlg = userInfoSignedResponseAlg;
}
public KeyEncryptionAlgorithm getUserInfoEncryptedResponseAlg() {
return userInfoEncryptedResponseAlg;
}
public void setUserInfoEncryptedResponseAlg(KeyEncryptionAlgorithm userInfoEncryptedResponseAlg) {
this.userInfoEncryptedResponseAlg = userInfoEncryptedResponseAlg;
}
public BlockEncryptionAlgorithm getUserInfoEncryptedResponseEnc() {
return userInfoEncryptedResponseEnc;
}
public void setUserInfoEncryptedResponseEnc(BlockEncryptionAlgorithm userInfoEncryptedResponseEnc) {
this.userInfoEncryptedResponseEnc = userInfoEncryptedResponseEnc;
}
public SignatureAlgorithm getRequestObjectSigningAlg() {
return requestObjectSigningAlg;
}
public void setRequestObjectSigningAlg(SignatureAlgorithm requestObjectSigningAlg) {
this.requestObjectSigningAlg = requestObjectSigningAlg;
}
public KeyEncryptionAlgorithm getRequestObjectEncryptionAlg() {
return requestObjectEncryptionAlg;
}
public void setRequestObjectEncryptionAlg(KeyEncryptionAlgorithm requestObjectEncryptionAlg) {
this.requestObjectEncryptionAlg = requestObjectEncryptionAlg;
}
public BlockEncryptionAlgorithm getRequestObjectEncryptionEnc() {
return requestObjectEncryptionEnc;
}
public void setRequestObjectEncryptionEnc(BlockEncryptionAlgorithm requestObjectEncryptionEnc) {
this.requestObjectEncryptionEnc = requestObjectEncryptionEnc;
}
public AuthenticationMethod getTokenEndpointAuthMethod() {
return tokenEndpointAuthMethod;
}
public void setTokenEndpointAuthMethod(AuthenticationMethod tokenEndpointAuthMethod) {
this.tokenEndpointAuthMethod = tokenEndpointAuthMethod;
}
public SignatureAlgorithm getTokenEndpointAuthSigningAlg() {
return tokenEndpointAuthSigningAlg;
}
public void setTokenEndpointAuthSigningAlg(SignatureAlgorithm tokenEndpointAuthSigningAlg) {
this.tokenEndpointAuthSigningAlg = tokenEndpointAuthSigningAlg;
}
public Integer getDefaultMaxAge() {
return defaultMaxAge;
}
public void setDefaultMaxAge(Integer defaultMaxAge) {
this.defaultMaxAge = defaultMaxAge;
}
public Boolean getRequireAuthTime() {
return requireAuthTime;
}
public void setRequireAuthTime(Boolean requireAuthTime) {
this.requireAuthTime = requireAuthTime;
}
public String getDefaultAcrValues() {
return defaultAcrValues;
}
public void setDefaultAcrValues(String defaultAcrValues) {
this.defaultAcrValues = defaultAcrValues;
}
public String getInitiateLoginUri() {
return initiateLoginUri;
}
public void setInitiateLoginUri(String initiateLoginUri) {
this.initiateLoginUri = initiateLoginUri;
}
public String getPostLogoutRedirectUris() {
return postLogoutRedirectUris;
}
public void setPostLogoutRedirectUris(String postLogoutRedirectUris) {
this.postLogoutRedirectUris = postLogoutRedirectUris;
}
public String getRequestUris() {
return requestUris;
}
public void setRequestUris(String requestUris) {
this.requestUris = requestUris;
}
public String getRegistrationClientUri() {
return registrationClientUri;
}
public void setRegistrationClientUri(String registrationClientUri) {
this.registrationClientUri = registrationClientUri;
}
public String getRegistrationAccessToken() {
return registrationAccessToken;
}
public void setRegistrationAccessToken(String registrationAccessToken) {
this.registrationAccessToken = registrationAccessToken;
}
public boolean isShowResults() {
return showResults;
}
public void setShowResults(boolean showResults) {
this.showResults = showResults;
}
public String getRequestString() {
return requestString;
}
public void setRequestString(String requestString) {
this.requestString = requestString;
}
public String getResponseString() {
return responseString;
}
public void setResponseString(String responseString) {
this.responseString = responseString;
}
public boolean isShowClientReadResults() {
return showClientReadResults;
}
public void setShowClientReadResults(boolean showClientReadResults) {
this.showClientReadResults = showClientReadResults;
}
public String getClientReadRequestString() {
return clientReadRequestString;
}
public void setClientReadRequestString(String clientReadRequestString) {
this.clientReadRequestString = clientReadRequestString;
}
public String getClientReadResponseString() {
return clientReadResponseString;
}
public void setClientReadResponseString(String clientReadResponseString) {
this.clientReadResponseString = clientReadResponseString;
}
}