pluralized post-logout redirect URI on client, closes #654

pull/779/head
Justin Richer 2015-02-16 16:43:34 -05:00
parent b7612520c4
commit cc02f8fbe8
9 changed files with 47 additions and 22 deletions

View File

@ -118,7 +118,7 @@ public class ClientDetailsEntity implements ClientDetails {
private Set<String> defaultACRvalues; // default_acr_values private Set<String> defaultACRvalues; // default_acr_values
private String initiateLoginUri; // initiate_login_uri private String initiateLoginUri; // initiate_login_uri
private String postLogoutRedirectUri; // post_logout_redirect_uri private Set<String> postLogoutRedirectUris; // post_logout_redirect_uris
private Set<String> requestUris; // request_uris private Set<String> requestUris; // request_uris
@ -983,17 +983,21 @@ public class ClientDetailsEntity implements ClientDetails {
/** /**
* @return the postLogoutRedirectUri * @return the postLogoutRedirectUri
*/ */
@Basic @ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(
name="client_post_logout_redirect_uri",
joinColumns=@JoinColumn(name="owner_id")
)
@Column(name="post_logout_redirect_uri") @Column(name="post_logout_redirect_uri")
public String getPostLogoutRedirectUri() { public Set<String> getPostLogoutRedirectUris() {
return postLogoutRedirectUri; return postLogoutRedirectUris;
} }
/** /**
* @param postLogoutRedirectUri the postLogoutRedirectUri to set * @param postLogoutRedirectUri the postLogoutRedirectUri to set
*/ */
public void setPostLogoutRedirectUri(String postLogoutRedirectUri) { public void setPostLogoutRedirectUris(Set<String> postLogoutRedirectUri) {
this.postLogoutRedirectUri = postLogoutRedirectUri; this.postLogoutRedirectUris = postLogoutRedirectUri;
} }
/** /**

View File

@ -549,17 +549,17 @@ public class RegisteredClient {
} }
/** /**
* @return * @return
* @see org.mitre.oauth2.model.ClientDetailsEntity#getPostLogoutRedirectUri() * @see org.mitre.oauth2.model.ClientDetailsEntity#getPostLogoutRedirectUris()
*/ */
public String getPostLogoutRedirectUri() { public Set<String> getPostLogoutRedirectUris() {
return client.getPostLogoutRedirectUri(); return client.getPostLogoutRedirectUris();
} }
/** /**
* @param postLogoutRedirectUri * @param postLogoutRedirectUri
* @see org.mitre.oauth2.model.ClientDetailsEntity#setPostLogoutRedirectUri(java.lang.String) * @see org.mitre.oauth2.model.ClientDetailsEntity#setPostLogoutRedirectUris(java.lang.String)
*/ */
public void setPostLogoutRedirectUri(String postLogoutRedirectUri) { public void setPostLogoutRedirectUris(Set<String> postLogoutRedirectUri) {
client.setPostLogoutRedirectUri(postLogoutRedirectUri); client.setPostLogoutRedirectUris(postLogoutRedirectUri);
} }
/** /**
* @return * @return

View File

@ -137,7 +137,7 @@ public class ClientDetailsEntityJsonProcessor {
c.setDefaultACRvalues(getAsStringSet(o, "default_acr_values")); c.setDefaultACRvalues(getAsStringSet(o, "default_acr_values"));
c.setInitiateLoginUri(getAsString(o, "initiate_login_uri")); c.setInitiateLoginUri(getAsString(o, "initiate_login_uri"));
c.setPostLogoutRedirectUri(getAsString(o, "post_logout_redirect_uri")); c.setPostLogoutRedirectUris(getAsStringSet(o, "post_logout_redirect_uris"));
c.setRequestUris(getAsStringSet(o, "request_uris")); c.setRequestUris(getAsStringSet(o, "request_uris"));
return c; return c;
@ -241,7 +241,7 @@ public class ClientDetailsEntityJsonProcessor {
o.addProperty("require_auth_time", c.getRequireAuthTime()); o.addProperty("require_auth_time", c.getRequireAuthTime());
o.add("default_acr_values", getAsArray(c.getDefaultACRvalues())); o.add("default_acr_values", getAsArray(c.getDefaultACRvalues()));
o.addProperty("initiate_login_uri", c.getInitiateLoginUri()); o.addProperty("initiate_login_uri", c.getInitiateLoginUri());
o.addProperty("post_logout_redirect_uri", c.getPostLogoutRedirectUri()); o.add("post_logout_redirect_uris", getAsArray(c.getPostLogoutRedirectUris()));
o.add("request_uris", getAsArray(c.getRequestUris())); o.add("request_uris", getAsArray(c.getRequestUris()));
return o; return o;
} }

View File

@ -122,6 +122,11 @@ CREATE TABLE IF NOT EXISTS client_request_uri (
request_uri VARCHAR(2000) request_uri VARCHAR(2000)
); );
CREATE TABLE IF NOT EXISTS client_post_logout_redirect_uri (
owner_id BIGINT,
post_logout_redirect_uri VARCHAR(2000)
);
CREATE TABLE IF NOT EXISTS client_default_acr_value ( CREATE TABLE IF NOT EXISTS client_default_acr_value (
owner_id BIGINT, owner_id BIGINT,
default_acr_value VARCHAR(2000) default_acr_value VARCHAR(2000)

View File

@ -137,6 +137,11 @@ CREATE TABLE IF NOT EXISTS client_redirect_uri (
redirect_uri VARCHAR(2048) redirect_uri VARCHAR(2048)
); );
CREATE TABLE IF NOT EXISTS client_post_logout_redirect_uri (
owner_id BIGINT,
post_logout_redirect_uri VARCHAR(2000)
);
CREATE TABLE IF NOT EXISTS refresh_token ( CREATE TABLE IF NOT EXISTS refresh_token (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT PRIMARY KEY,
token_value VARCHAR(4096), token_value VARCHAR(4096),

View File

@ -70,7 +70,7 @@ var ClientModel = Backbone.Model.extend({
defaultACRvalues:null, defaultACRvalues:null,
initiateLoginUri:"", initiateLoginUri:"",
postLogoutRedirectUri:"", postLogoutRedirectUris:[],
requestUris:[], requestUris:[],
@ -611,6 +611,7 @@ var ClientFormView = Backbone.View.extend({
this.contactsCollection = new Backbone.Collection(); this.contactsCollection = new Backbone.Collection();
this.defaultAcrValuesCollection = new Backbone.Collection(); this.defaultAcrValuesCollection = new Backbone.Collection();
this.requestUrisCollection = new Backbone.Collection(); this.requestUrisCollection = new Backbone.Collection();
this.postLogoutRedirectUrisCollection = new Backbone.Collection();
// TODO: add Spring authorities collection and resource IDs collection? // TODO: add Spring authorities collection and resource IDs collection?
// collection of sub-views that need to be sync'd on save // collection of sub-views that need to be sync'd on save
@ -904,7 +905,7 @@ var ClientFormView = Backbone.View.extend({
responseTypes: responseTypes, responseTypes: responseTypes,
sectorIdentifierUri: $('#sectorIdentifierUri input').val(), sectorIdentifierUri: $('#sectorIdentifierUri input').val(),
initiateLoginUri: $('#initiateLoginUri input').val(), initiateLoginUri: $('#initiateLoginUri input').val(),
postLogoutRedirectUri: $('#postLogoutRedirectUri input').val(), postLogoutRedirectUris: this.postLogoutRedirectUrisCollection.pluck('item'),
reuseRefreshToken: $('#reuseRefreshToken').is(':checked'), reuseRefreshToken: $('#reuseRefreshToken').is(':checked'),
requireAuthTime: $('#requireAuthTime input').is(':checked'), requireAuthTime: $('#requireAuthTime input').is(':checked'),
defaultMaxAge: parseInt($('#defaultMaxAge input').val()), defaultMaxAge: parseInt($('#defaultMaxAge input').val()),
@ -1039,6 +1040,18 @@ var ClientFormView = Backbone.View.extend({
$("#contacts .controls", this.el).html(contactsView.render().el); $("#contacts .controls", this.el).html(contactsView.render().el);
this.listWidgetViews.push(contactsView); this.listWidgetViews.push(contactsView);
// build and bind post-logout redirect URIs
_.each(this.model.get('postLogoutRedirectUris'), function(postLogoutRedirectUri) {
_self.postLogoutRedirectUrisCollection.add(new URIModel({item:postLogoutRedirectUri}));
});
var postLogoutRedirectUrisView = new ListWidgetView({
type: 'uri',
placeholder: 'https://',
helpBlockText: $.t('client.client-form.post-logout-help'),
collection: this.postLogoutRedirectUrisCollection});
$('#postLogoutRedirectUri .controls', this.el).html(postLogoutRedirectUrisView.render().el);
this.listWidgetViews.push(postLogoutRedirectUrisView);
// build and bind request URIs // build and bind request URIs
_.each(this.model.get('requestUris'), function (requestUri) { _.each(this.model.get('requestUris'), function (requestUri) {

View File

@ -703,8 +703,6 @@
<div class="control-group" id="postLogoutRedirectUri"> <div class="control-group" id="postLogoutRedirectUri">
<label class="control-label"><span class="label label-default nyi"><i class="icon-road icon-white"></i> NYI </span> <span data-i18n="client.client-form.post-logout">Post-Logout Redirect</span></label> <label class="control-label"><span class="label label-default nyi"><i class="icon-road icon-white"></i> NYI </span> <span data-i18n="client.client-form.post-logout">Post-Logout Redirect</span></label>
<div class="controls"> <div class="controls">
<input placeholder="https://" value="<%-postLogoutRedirectUri%>" maxlength="1000" type="text" class=""/>
<p class="help-block" data-i18n="client.client-form.post-logout-help">URL to redirect the client to after a logout operation</p>
</div> </div>
</div> </div>

View File

@ -398,7 +398,7 @@ public class MITREidDataService_1_2 extends MITREidDataService_1_X {
writer.name("defaultACRValues"); writer.name("defaultACRValues");
writeNullSafeArray(writer, client.getDefaultACRvalues()); writeNullSafeArray(writer, client.getDefaultACRvalues());
writer.name("intitateLoginUri").value(client.getInitiateLoginUri()); writer.name("intitateLoginUri").value(client.getInitiateLoginUri());
writer.name("postLogoutRedirectUri").value(client.getPostLogoutRedirectUri()); writer.name("postLogoutRedirectUri").value(client.getPostLogoutRedirectUris());
writer.name("requestUris"); writer.name("requestUris");
writeNullSafeArray(writer, client.getRequestUris()); writeNullSafeArray(writer, client.getRequestUris());
writer.name("description").value(client.getClientDescription()); writer.name("description").value(client.getClientDescription());
@ -1022,7 +1022,7 @@ public class MITREidDataService_1_2 extends MITREidDataService_1_X {
} else if (name.equals("initiateLoginUri")) { } else if (name.equals("initiateLoginUri")) {
client.setInitiateLoginUri(reader.nextString()); client.setInitiateLoginUri(reader.nextString());
} else if (name.equals("postLogoutRedirectUri")) { } else if (name.equals("postLogoutRedirectUri")) {
client.setPostLogoutRedirectUri(reader.nextString()); client.setPostLogoutRedirectUris(reader.nextString());
} else if (name.equals("requestUris")) { } else if (name.equals("requestUris")) {
Set<String> requestUris = readSet(reader); Set<String> requestUris = readSet(reader);
client.setRequestUris(requestUris); client.setRequestUris(requestUris);

View File

@ -147,7 +147,7 @@ public class ProtectedResourceRegistrationEndpoint {
newClient.setIdTokenEncryptedResponseEnc(null); newClient.setIdTokenEncryptedResponseEnc(null);
newClient.setIdTokenSignedResponseAlg(null); newClient.setIdTokenSignedResponseAlg(null);
newClient.setInitiateLoginUri(null); newClient.setInitiateLoginUri(null);
newClient.setPostLogoutRedirectUri(null); newClient.setPostLogoutRedirectUris(null);
newClient.setRequestObjectSigningAlg(null); newClient.setRequestObjectSigningAlg(null);
newClient.setRequireAuthTime(null); newClient.setRequireAuthTime(null);
newClient.setReuseRefreshToken(false); newClient.setReuseRefreshToken(false);
@ -314,7 +314,7 @@ public class ProtectedResourceRegistrationEndpoint {
newClient.setIdTokenEncryptedResponseEnc(null); newClient.setIdTokenEncryptedResponseEnc(null);
newClient.setIdTokenSignedResponseAlg(null); newClient.setIdTokenSignedResponseAlg(null);
newClient.setInitiateLoginUri(null); newClient.setInitiateLoginUri(null);
newClient.setPostLogoutRedirectUri(null); newClient.setPostLogoutRedirectUris(null);
newClient.setRequestObjectSigningAlg(null); newClient.setRequestObjectSigningAlg(null);
newClient.setRequireAuthTime(null); newClient.setRequireAuthTime(null);
newClient.setReuseRefreshToken(false); newClient.setReuseRefreshToken(false);