001/*******************************************************************************
002 * Copyright 2017 The MIT Internet Trust Consortium
003 *
004 * Portions copyright 2011-2013 The MITRE Corporation
005 *
006 * Licensed under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 *   http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 *******************************************************************************/
018package org.mitre.openid.connect.config;
019
020import java.util.List;
021
022import com.nimbusds.jose.EncryptionMethod;
023import com.nimbusds.jose.JWEAlgorithm;
024import com.nimbusds.jose.JWSAlgorithm;
025
026
027
028/**
029 *
030 * Container class for a client's view of a server's configuration
031 *
032 * @author nemonik, jricher
033 *
034 */
035public class ServerConfiguration {
036
037        /*
038         *
039    issuer
040        REQUIRED. URL using the https scheme with no query or fragment component that the OP asserts as its Issuer Identifier.
041    authorization_endpoint
042        OPTIONAL. URL of the OP's Authentication and Authorization Endpoint [OpenID.Messages].
043    token_endpoint
044        OPTIONAL. URL of the OP's OAuth 2.0 Token Endpoint [OpenID.Messages].
045    userinfo_endpoint
046        RECOMMENDED. URL of the OP's UserInfo Endpoint [OpenID.Messages]. This URL MUST use the
047        https scheme and MAY contain port, path, and query parameter components.
048    check_session_iframe
049        OPTIONAL. URL of an OP endpoint that provides a page to support cross-origin communications for
050        session state information with the RP Client, using the HTML5 postMessage API. The page is loaded
051        from an invisible iframe embedded in an RP page so that it can run in the OP's security context. See [OpenID.Session].
052    end_session_endpoint
053        OPTIONAL. URL of the OP's endpoint that initiates logging out the End-User. See [OpenID.Session].
054    jwks_uri
055        REQUIRED. URL of the OP's JSON Web Key Set [JWK] document. This contains the signing key(s) the
056        Client uses to validate signatures from the OP. The JWK Set MAY also contain the Server's encryption key(s), which are used by Clients to encrypt requests to the Server. When both signing and encryption keys are made available, a use (Key Use) parameter value is REQUIRED for all keys in the document to indicate each key's intended usage.
057    registration_endpoint
058        RECOMMENDED. URL of the OP's Dynamic Client Registration Endpoint [OpenID.Registration].
059    scopes_supported
060        RECOMMENDED. JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this server
061    response_types_supported
062        REQUIRED. JSON array containing a list of the OAuth 2.0 response_type values that this server
063        supports. The server MUST support the code, id_token, and the token id_token response type values.
064    grant_types_supported
065        OPTIONAL. JSON array containing a list of the OAuth 2.0 grant type values that this server supports.
066        The server MUST support the authorization_code and implicit grant type values and MAY support the
067        urn:ietf:params:oauth:grant-type:jwt-bearer grant type defined in OAuth JWT Bearer Token Profiles [OAuth.JWT].
068        If omitted, the default value is ["authorization_code", "implicit"].
069    acr_values_supported
070        OPTIONAL. JSON array containing a list of the Authentication Context Class References that this server supports.
071    subject_types_supported
072        REQUIRED. JSON array containing a list of the subject identifier types that this server supports.
073        Valid types include pairwise and public.
074    userinfo_signing_alg_values_supported
075        OPTIONAL. JSON array containing a list of the JWS [JWS] signing algorithms (alg values) [JWA] supported
076        by the UserInfo Endpoint to encode the Claims in a JWT [JWT].
077    userinfo_encryption_alg_values_supported
078        OPTIONAL. JSON array containing a list of the JWE [JWE] encryption algorithms (alg values) [JWA] supported
079        by the UserInfo Endpoint to encode the Claims in a JWT [JWT].
080    userinfo_encryption_enc_values_supported
081        OPTIONAL. JSON array containing a list of the JWE encryption algorithms (enc values) [JWA] supported
082        by the UserInfo Endpoint to encode the Claims in a JWT [JWT].
083    id_token_signing_alg_values_supported
084        REQUIRED. JSON array containing a list of the JWS signing algorithms (alg values) supported by the
085        Authorization Server for the ID Token to encode the Claims in a JWT [JWT].
086    id_token_encryption_alg_values_supported
087        OPTIONAL. JSON array containing a list of the JWE encryption algorithms (alg values) supported by the
088        Authorization Server for the ID Token to encode the Claims in a JWT [JWT].
089    id_token_encryption_enc_values_supported
090        OPTIONAL. JSON array containing a list of the JWE encryption algorithms (enc values) supported by the
091        Authorization Server for the ID Token to encode the Claims in a JWT [JWT].
092    request_object_signing_alg_values_supported
093        OPTIONAL. JSON array containing a list of the JWS signing algorithms (alg values) supported by the
094        Authorization Server for the Request Object described in Section 2.9 of OpenID Connect Messages 1.0
095        [OpenID.Messages]. These algorithms are used both when the Request Object is passed by value (using the
096        request parameter) and when it is passed by reference (using the request_uri parameter). Servers SHOULD
097        support none and RS256.
098    request_object_encryption_alg_values_supported
099        OPTIONAL. JSON array containing a list of the JWE encryption algorithms (alg values) supported by the
100        Authorization Server for the Request Object described in Section 2.9 of OpenID Connect Messages 1.0
101        [OpenID.Messages]. These algorithms are used both when the Request Object is passed by value and when it
102        is passed by reference.
103    request_object_encryption_enc_values_supported
104        OPTIONAL. JSON array containing a list of the JWE encryption algorithms (enc values) supported by the
105        Authorization Server for the Request Object described in Section 2.9 of OpenID Connect Messages 1.0
106        [OpenID.Messages]. These algorithms are used both when the Request Object is passed by value and when
107        it is passed by reference.
108    token_endpoint_auth_methods_supported
109        OPTIONAL. JSON array containing a list of authentication methods supported by this Token Endpoint.
110        The options are client_secret_post, client_secret_basic, client_secret_jwt, and private_key_jwt, as
111        described in Section 2.2.1 of OpenID Connect Messages 1.0 [OpenID.Messages]. Other authentication
112        methods MAY be defined by extensions. If omitted, the default is client_secret_basic -- the HTTP
113        Basic Authentication Scheme as specified in Section 2.3.1 of OAuth 2.0 [RFC6749].
114    token_endpoint_auth_signing_alg_values_supported
115        OPTIONAL. JSON array containing a list of the JWS signing algorithms (alg values) supported by the
116        Token Endpoint for the private_key_jwt and client_secret_jwt methods to encode the JWT [JWT]. Servers
117        SHOULD support RS256.
118    display_values_supported
119        OPTIONAL. JSON array containing a list of the display parameter values that the OpenID Provider
120        supports. These values are described in Section 2.1.1 of OpenID Connect Messages 1.0 [OpenID.Messages].
121    claim_types_supported
122        OPTIONAL. JSON array containing a list of the Claim Types that the OpenID Provider supports. These Claim
123        Types are described in Section 2.6 of OpenID Connect Messages 1.0 [OpenID.Messages]. Values defined by
124        this specification are normal, aggregated, and distributed. If not specified, the implementation supports
125        only normal Claims.
126    claims_supported
127        RECOMMENDED. JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY
128        be able to supply values for. Note that for privacy or other reasons, this might not be an exhaustive list.
129    service_documentation
130        OPTIONAL. URL of a page containing human-readable information that developers might want or need to
131        know when using the OpenID Provider. In particular, if the OpenID Provider does not support Dynamic
132        Client Registration, then information on how to register Clients needs to be provided in this documentation.
133    claims_locales_supported
134        OPTIONAL. Languages and scripts supported for values in Claims being returned, represented as a JSON array
135        of BCP47 [RFC5646] language tag values. Not all languages and scripts are necessarily supported for all
136        Claim values.
137    ui_locales_supported
138        OPTIONAL. Languages and scripts supported for the user interface, represented as a JSON array of BCP47
139        [RFC5646] language tag values.
140    claims_parameter_supported
141        OPTIONAL. Boolean value specifying whether the OP supports use of the claims parameter, with true
142        indicating support. If omitted, the default value is false.
143    request_parameter_supported
144        OPTIONAL. Boolean value specifying whether the OP supports use of the request parameter, with true
145        indicating support. If omitted, the default value is false.
146    request_uri_parameter_supported
147        OPTIONAL. Boolean value specifying whether the OP supports use of the request_uri parameter, with
148        true indicating support. If omitted, the default value is true.
149    require_request_uri_registration
150        OPTIONAL. Boolean value specifying whether the OP requires any request_uri values used to be
151        pre-registered using the request_uris registration parameter. Pre-registration is REQUIRED when
152        the value is true. If omitted, the default value is false.
153    op_policy_uri
154        OPTIONAL. URL that the OpenID Provider provides to the person registering the Client to read
155        about the OP's requirements on how the Relying Party can use the data provided by the OP. The
156        registration process SHOULD display this URL to the person registering the Client if it is given.
157    op_tos_uri
158        OPTIONAL. URL that the OpenID Provider provides to the person registering the Client to read about
159        OpenID Provider's terms of service. The registration process SHOULD display this URL to the person
160        registering the Client if it is given.
161         */
162
163        private String authorizationEndpointUri;
164
165        private String tokenEndpointUri;
166
167        private String registrationEndpointUri;
168
169        private String issuer;
170
171        private String jwksUri;
172
173        private String userInfoUri;
174
175        private String introspectionEndpointUri;
176
177        private String revocationEndpointUri;
178
179        private String checkSessionIframe;
180        private String endSessionEndpoint;
181        private List<String> scopesSupported;
182        private List<String> responseTypesSupported;
183        private List<String> grantTypesSupported;
184        private List<String> acrValuesSupported;
185        private List<String> subjectTypesSupported;
186        private List<JWSAlgorithm> userinfoSigningAlgValuesSupported;
187        private List<JWEAlgorithm> userinfoEncryptionAlgValuesSupported;
188        private List<EncryptionMethod> userinfoEncryptionEncValuesSupported;
189        private List<JWSAlgorithm> idTokenSigningAlgValuesSupported;
190        private List<JWEAlgorithm> idTokenEncryptionAlgValuesSupported;
191        private List<EncryptionMethod> idTokenEncryptionEncValuesSupported;
192        private List<JWSAlgorithm> requestObjectSigningAlgValuesSupported;
193        private List<JWEAlgorithm> requestObjectEncryptionAlgValuesSupported;
194        private List<EncryptionMethod> requestObjectEncryptionEncValuesSupported;
195        private List<String> tokenEndpointAuthMethodsSupported;
196        private List<JWSAlgorithm> tokenEndpointAuthSigningAlgValuesSupported;
197        private List<String> displayValuesSupported;
198        private List<String> claimTypesSupported;
199        private List<String> claimsSupported;
200        private String serviceDocumentation;
201        private List<String> claimsLocalesSupported;
202        private List<String> uiLocalesSupported;
203        private Boolean claimsParameterSupported;
204        private Boolean requestParameterSupported;
205        private Boolean requestUriParameterSupported;
206        private Boolean requireRequestUriRegistration;
207        private String opPolicyUri;
208        private String opTosUri;
209
210        //
211        // extensions to the discoverable methods
212        //
213
214        // how do we send the access token to the userinfo endpoint?
215        private UserInfoTokenMethod userInfoTokenMethod;
216
217        public enum UserInfoTokenMethod {
218                HEADER,
219                FORM,
220                QUERY;
221        }
222
223        /**
224         * @return the authorizationEndpointUri
225         */
226        public String getAuthorizationEndpointUri() {
227                return authorizationEndpointUri;
228        }
229        /**
230         * @param authorizationEndpointUri the authorizationEndpointUri to set
231         */
232        public void setAuthorizationEndpointUri(String authorizationEndpointUri) {
233                this.authorizationEndpointUri = authorizationEndpointUri;
234        }
235        /**
236         * @return the tokenEndpointUri
237         */
238        public String getTokenEndpointUri() {
239                return tokenEndpointUri;
240        }
241        /**
242         * @param tokenEndpointUri the tokenEndpointUri to set
243         */
244        public void setTokenEndpointUri(String tokenEndpointUri) {
245                this.tokenEndpointUri = tokenEndpointUri;
246        }
247        /**
248         * @return the registrationEndpointUri
249         */
250        public String getRegistrationEndpointUri() {
251                return registrationEndpointUri;
252        }
253        /**
254         * @param registrationEndpointUri the registrationEndpointUri to set
255         */
256        public void setRegistrationEndpointUri(String registrationEndpointUri) {
257                this.registrationEndpointUri = registrationEndpointUri;
258        }
259        /**
260         * @return the issuer
261         */
262        public String getIssuer() {
263                return issuer;
264        }
265        /**
266         * @param issuer the issuer to set
267         */
268        public void setIssuer(String issuer) {
269                this.issuer = issuer;
270        }
271        /**
272         * @return the jwksUri
273         */
274        public String getJwksUri() {
275                return jwksUri;
276        }
277        /**
278         * @param jwksUri the jwksUri to set
279         */
280        public void setJwksUri(String jwksUri) {
281                this.jwksUri = jwksUri;
282        }
283        /**
284         * @return the userInfoUri
285         */
286        public String getUserInfoUri() {
287                return userInfoUri;
288        }
289        /**
290         * @param userInfoUri the userInfoUri to set
291         */
292        public void setUserInfoUri(String userInfoUri) {
293                this.userInfoUri = userInfoUri;
294        }
295        /**
296         * @return the introspectionEndpointUri
297         */
298        public String getIntrospectionEndpointUri() {
299                return introspectionEndpointUri;
300        }
301        /**
302         * @param introspectionEndpointUri the introspectionEndpointUri to set
303         */
304        public void setIntrospectionEndpointUri(String introspectionEndpointUri) {
305                this.introspectionEndpointUri = introspectionEndpointUri;
306        }
307        /**
308         * @return the checkSessionIframe
309         */
310        public String getCheckSessionIframe() {
311                return checkSessionIframe;
312        }
313        /**
314         * @param checkSessionIframe the checkSessionIframe to set
315         */
316        public void setCheckSessionIframe(String checkSessionIframe) {
317                this.checkSessionIframe = checkSessionIframe;
318        }
319        /**
320         * @return the endSessionEndpoint
321         */
322        public String getEndSessionEndpoint() {
323                return endSessionEndpoint;
324        }
325        /**
326         * @param endSessionEndpoint the endSessionEndpoint to set
327         */
328        public void setEndSessionEndpoint(String endSessionEndpoint) {
329                this.endSessionEndpoint = endSessionEndpoint;
330        }
331        /**
332         * @return the scopesSupported
333         */
334        public List<String> getScopesSupported() {
335                return scopesSupported;
336        }
337        /**
338         * @param scopesSupported the scopesSupported to set
339         */
340        public void setScopesSupported(List<String> scopesSupported) {
341                this.scopesSupported = scopesSupported;
342        }
343        /**
344         * @return the responseTypesSupported
345         */
346        public List<String> getResponseTypesSupported() {
347                return responseTypesSupported;
348        }
349        /**
350         * @param responseTypesSupported the responseTypesSupported to set
351         */
352        public void setResponseTypesSupported(List<String> responseTypesSupported) {
353                this.responseTypesSupported = responseTypesSupported;
354        }
355        /**
356         * @return the grantTypesSupported
357         */
358        public List<String> getGrantTypesSupported() {
359                return grantTypesSupported;
360        }
361        /**
362         * @param grantTypesSupported the grantTypesSupported to set
363         */
364        public void setGrantTypesSupported(List<String> grantTypesSupported) {
365                this.grantTypesSupported = grantTypesSupported;
366        }
367        /**
368         * @return the acrValuesSupported
369         */
370        public List<String> getAcrValuesSupported() {
371                return acrValuesSupported;
372        }
373        /**
374         * @param acrValuesSupported the acrValuesSupported to set
375         */
376        public void setAcrValuesSupported(List<String> acrValuesSupported) {
377                this.acrValuesSupported = acrValuesSupported;
378        }
379        /**
380         * @return the subjectTypesSupported
381         */
382        public List<String> getSubjectTypesSupported() {
383                return subjectTypesSupported;
384        }
385        /**
386         * @param subjectTypesSupported the subjectTypesSupported to set
387         */
388        public void setSubjectTypesSupported(List<String> subjectTypesSupported) {
389                this.subjectTypesSupported = subjectTypesSupported;
390        }
391        /**
392         * @return the userinfoSigningAlgValuesSupported
393         */
394        public List<JWSAlgorithm> getUserinfoSigningAlgValuesSupported() {
395                return userinfoSigningAlgValuesSupported;
396        }
397        /**
398         * @param userinfoSigningAlgValuesSupported the userinfoSigningAlgValuesSupported to set
399         */
400        public void setUserinfoSigningAlgValuesSupported(List<JWSAlgorithm> userinfoSigningAlgValuesSupported) {
401                this.userinfoSigningAlgValuesSupported = userinfoSigningAlgValuesSupported;
402        }
403        /**
404         * @return the userinfoEncryptionAlgValuesSupported
405         */
406        public List<JWEAlgorithm> getUserinfoEncryptionAlgValuesSupported() {
407                return userinfoEncryptionAlgValuesSupported;
408        }
409        /**
410         * @param userinfoEncryptionAlgValuesSupported the userinfoEncryptionAlgValuesSupported to set
411         */
412        public void setUserinfoEncryptionAlgValuesSupported(List<JWEAlgorithm> userinfoEncryptionAlgValuesSupported) {
413                this.userinfoEncryptionAlgValuesSupported = userinfoEncryptionAlgValuesSupported;
414        }
415        /**
416         * @return the userinfoEncryptionEncValuesSupported
417         */
418        public List<EncryptionMethod> getUserinfoEncryptionEncValuesSupported() {
419                return userinfoEncryptionEncValuesSupported;
420        }
421        /**
422         * @param userinfoEncryptionEncValuesSupported the userinfoEncryptionEncValuesSupported to set
423         */
424        public void setUserinfoEncryptionEncValuesSupported(List<EncryptionMethod> userinfoEncryptionEncValuesSupported) {
425                this.userinfoEncryptionEncValuesSupported = userinfoEncryptionEncValuesSupported;
426        }
427        /**
428         * @return the idTokenSigningAlgValuesSupported
429         */
430        public List<JWSAlgorithm> getIdTokenSigningAlgValuesSupported() {
431                return idTokenSigningAlgValuesSupported;
432        }
433        /**
434         * @param idTokenSigningAlgValuesSupported the idTokenSigningAlgValuesSupported to set
435         */
436        public void setIdTokenSigningAlgValuesSupported(List<JWSAlgorithm> idTokenSigningAlgValuesSupported) {
437                this.idTokenSigningAlgValuesSupported = idTokenSigningAlgValuesSupported;
438        }
439        /**
440         * @return the idTokenEncryptionAlgValuesSupported
441         */
442        public List<JWEAlgorithm> getIdTokenEncryptionAlgValuesSupported() {
443                return idTokenEncryptionAlgValuesSupported;
444        }
445        /**
446         * @param idTokenEncryptionAlgValuesSupported the idTokenEncryptionAlgValuesSupported to set
447         */
448        public void setIdTokenEncryptionAlgValuesSupported(List<JWEAlgorithm> idTokenEncryptionAlgValuesSupported) {
449                this.idTokenEncryptionAlgValuesSupported = idTokenEncryptionAlgValuesSupported;
450        }
451        /**
452         * @return the idTokenEncryptionEncValuesSupported
453         */
454        public List<EncryptionMethod> getIdTokenEncryptionEncValuesSupported() {
455                return idTokenEncryptionEncValuesSupported;
456        }
457        /**
458         * @param idTokenEncryptionEncValuesSupported the idTokenEncryptionEncValuesSupported to set
459         */
460        public void setIdTokenEncryptionEncValuesSupported(List<EncryptionMethod> idTokenEncryptionEncValuesSupported) {
461                this.idTokenEncryptionEncValuesSupported = idTokenEncryptionEncValuesSupported;
462        }
463        /**
464         * @return the requestObjectSigningAlgValuesSupported
465         */
466        public List<JWSAlgorithm> getRequestObjectSigningAlgValuesSupported() {
467                return requestObjectSigningAlgValuesSupported;
468        }
469        /**
470         * @param requestObjectSigningAlgValuesSupported the requestObjectSigningAlgValuesSupported to set
471         */
472        public void setRequestObjectSigningAlgValuesSupported(List<JWSAlgorithm> requestObjectSigningAlgValuesSupported) {
473                this.requestObjectSigningAlgValuesSupported = requestObjectSigningAlgValuesSupported;
474        }
475        /**
476         * @return the requestObjectEncryptionAlgValuesSupported
477         */
478        public List<JWEAlgorithm> getRequestObjectEncryptionAlgValuesSupported() {
479                return requestObjectEncryptionAlgValuesSupported;
480        }
481        /**
482         * @param requestObjectEncryptionAlgValuesSupported the requestObjectEncryptionAlgValuesSupported to set
483         */
484        public void setRequestObjectEncryptionAlgValuesSupported(List<JWEAlgorithm> requestObjectEncryptionAlgValuesSupported) {
485                this.requestObjectEncryptionAlgValuesSupported = requestObjectEncryptionAlgValuesSupported;
486        }
487        /**
488         * @return the requestObjectEncryptionEncValuesSupported
489         */
490        public List<EncryptionMethod> getRequestObjectEncryptionEncValuesSupported() {
491                return requestObjectEncryptionEncValuesSupported;
492        }
493        /**
494         * @param requestObjectEncryptionEncValuesSupported the requestObjectEncryptionEncValuesSupported to set
495         */
496        public void setRequestObjectEncryptionEncValuesSupported(List<EncryptionMethod> requestObjectEncryptionEncValuesSupported) {
497                this.requestObjectEncryptionEncValuesSupported = requestObjectEncryptionEncValuesSupported;
498        }
499        /**
500         * @return the tokenEndpointAuthMethodsSupported
501         */
502        public List<String> getTokenEndpointAuthMethodsSupported() {
503                return tokenEndpointAuthMethodsSupported;
504        }
505        /**
506         * @param tokenEndpointAuthMethodsSupported the tokenEndpointAuthMethodsSupported to set
507         */
508        public void setTokenEndpointAuthMethodsSupported(List<String> tokenEndpointAuthMethodsSupported) {
509                this.tokenEndpointAuthMethodsSupported = tokenEndpointAuthMethodsSupported;
510        }
511        /**
512         * @return the tokenEndpointAuthSigningAlgValuesSupported
513         */
514        public List<JWSAlgorithm> getTokenEndpointAuthSigningAlgValuesSupported() {
515                return tokenEndpointAuthSigningAlgValuesSupported;
516        }
517        /**
518         * @param tokenEndpointAuthSigningAlgValuesSupported the tokenEndpointAuthSigningAlgValuesSupported to set
519         */
520        public void setTokenEndpointAuthSigningAlgValuesSupported(List<JWSAlgorithm> tokenEndpointAuthSigningAlgValuesSupported) {
521                this.tokenEndpointAuthSigningAlgValuesSupported = tokenEndpointAuthSigningAlgValuesSupported;
522        }
523        /**
524         * @return the displayValuesSupported
525         */
526        public List<String> getDisplayValuesSupported() {
527                return displayValuesSupported;
528        }
529        /**
530         * @param displayValuesSupported the displayValuesSupported to set
531         */
532        public void setDisplayValuesSupported(List<String> displayValuesSupported) {
533                this.displayValuesSupported = displayValuesSupported;
534        }
535        /**
536         * @return the claimTypesSupported
537         */
538        public List<String> getClaimTypesSupported() {
539                return claimTypesSupported;
540        }
541        /**
542         * @param claimTypesSupported the claimTypesSupported to set
543         */
544        public void setClaimTypesSupported(List<String> claimTypesSupported) {
545                this.claimTypesSupported = claimTypesSupported;
546        }
547        /**
548         * @return the claimsSupported
549         */
550        public List<String> getClaimsSupported() {
551                return claimsSupported;
552        }
553        /**
554         * @param claimsSupported the claimsSupported to set
555         */
556        public void setClaimsSupported(List<String> claimsSupported) {
557                this.claimsSupported = claimsSupported;
558        }
559        /**
560         * @return the serviceDocumentation
561         */
562        public String getServiceDocumentation() {
563                return serviceDocumentation;
564        }
565        /**
566         * @param serviceDocumentation the serviceDocumentation to set
567         */
568        public void setServiceDocumentation(String serviceDocumentation) {
569                this.serviceDocumentation = serviceDocumentation;
570        }
571        /**
572         * @return the claimsLocalesSupported
573         */
574        public List<String> getClaimsLocalesSupported() {
575                return claimsLocalesSupported;
576        }
577        /**
578         * @param claimsLocalesSupported the claimsLocalesSupported to set
579         */
580        public void setClaimsLocalesSupported(List<String> claimsLocalesSupported) {
581                this.claimsLocalesSupported = claimsLocalesSupported;
582        }
583        /**
584         * @return the uiLocalesSupported
585         */
586        public List<String> getUiLocalesSupported() {
587                return uiLocalesSupported;
588        }
589        /**
590         * @param uiLocalesSupported the uiLocalesSupported to set
591         */
592        public void setUiLocalesSupported(List<String> uiLocalesSupported) {
593                this.uiLocalesSupported = uiLocalesSupported;
594        }
595        /**
596         * @return the claimsParameterSupported
597         */
598        public Boolean getClaimsParameterSupported() {
599                return claimsParameterSupported;
600        }
601        /**
602         * @param claimsParameterSupported the claimsParameterSupported to set
603         */
604        public void setClaimsParameterSupported(Boolean claimsParameterSupported) {
605                this.claimsParameterSupported = claimsParameterSupported;
606        }
607        /**
608         * @return the requestParameterSupported
609         */
610        public Boolean getRequestParameterSupported() {
611                return requestParameterSupported;
612        }
613        /**
614         * @param requestParameterSupported the requestParameterSupported to set
615         */
616        public void setRequestParameterSupported(Boolean requestParameterSupported) {
617                this.requestParameterSupported = requestParameterSupported;
618        }
619        /**
620         * @return the requestUriParameterSupported
621         */
622        public Boolean getRequestUriParameterSupported() {
623                return requestUriParameterSupported;
624        }
625        /**
626         * @param requestUriParameterSupported the requestUriParameterSupported to set
627         */
628        public void setRequestUriParameterSupported(Boolean requestUriParameterSupported) {
629                this.requestUriParameterSupported = requestUriParameterSupported;
630        }
631        /**
632         * @return the requireRequestUriRegistration
633         */
634        public Boolean getRequireRequestUriRegistration() {
635                return requireRequestUriRegistration;
636        }
637        /**
638         * @param requireRequestUriRegistration the requireRequestUriRegistration to set
639         */
640        public void setRequireRequestUriRegistration(Boolean requireRequestUriRegistration) {
641                this.requireRequestUriRegistration = requireRequestUriRegistration;
642        }
643        /**
644         * @return the opPolicyUri
645         */
646        public String getOpPolicyUri() {
647                return opPolicyUri;
648        }
649        /**
650         * @param opPolicyUri the opPolicyUri to set
651         */
652        public void setOpPolicyUri(String opPolicyUri) {
653                this.opPolicyUri = opPolicyUri;
654        }
655        /**
656         * @return the opTosUri
657         */
658        public String getOpTosUri() {
659                return opTosUri;
660        }
661        /**
662         * @param opTosUri the opTosUri to set
663         */
664        public void setOpTosUri(String opTosUri) {
665                this.opTosUri = opTosUri;
666        }
667
668        public String getRevocationEndpointUri() {
669                return revocationEndpointUri;
670        }
671        public void setRevocationEndpointUri(String revocationEndpointUri) {
672                this.revocationEndpointUri = revocationEndpointUri;
673        }
674
675        public UserInfoTokenMethod getUserInfoTokenMethod() {
676                return userInfoTokenMethod;
677        }
678        public void setUserInfoTokenMethod(UserInfoTokenMethod userInfoTokenMethod) {
679                this.userInfoTokenMethod = userInfoTokenMethod;
680        }
681        @Override
682        public int hashCode() {
683                final int prime = 31;
684                int result = 1;
685                result = prime
686                                * result
687                                + ((acrValuesSupported == null) ? 0 : acrValuesSupported
688                                                .hashCode());
689                result = prime
690                                * result
691                                + ((authorizationEndpointUri == null) ? 0
692                                                : authorizationEndpointUri.hashCode());
693                result = prime
694                                * result
695                                + ((checkSessionIframe == null) ? 0 : checkSessionIframe
696                                                .hashCode());
697                result = prime
698                                * result
699                                + ((claimTypesSupported == null) ? 0 : claimTypesSupported
700                                                .hashCode());
701                result = prime
702                                * result
703                                + ((claimsLocalesSupported == null) ? 0
704                                                : claimsLocalesSupported.hashCode());
705                result = prime
706                                * result
707                                + ((claimsParameterSupported == null) ? 0
708                                                : claimsParameterSupported.hashCode());
709                result = prime * result
710                                + ((claimsSupported == null) ? 0 : claimsSupported.hashCode());
711                result = prime
712                                * result
713                                + ((displayValuesSupported == null) ? 0
714                                                : displayValuesSupported.hashCode());
715                result = prime
716                                * result
717                                + ((endSessionEndpoint == null) ? 0 : endSessionEndpoint
718                                                .hashCode());
719                result = prime
720                                * result
721                                + ((grantTypesSupported == null) ? 0 : grantTypesSupported
722                                                .hashCode());
723                result = prime
724                                * result
725                                + ((idTokenEncryptionAlgValuesSupported == null) ? 0
726                                                : idTokenEncryptionAlgValuesSupported.hashCode());
727                result = prime
728                                * result
729                                + ((idTokenEncryptionEncValuesSupported == null) ? 0
730                                                : idTokenEncryptionEncValuesSupported.hashCode());
731                result = prime
732                                * result
733                                + ((idTokenSigningAlgValuesSupported == null) ? 0
734                                                : idTokenSigningAlgValuesSupported.hashCode());
735                result = prime
736                                * result
737                                + ((introspectionEndpointUri == null) ? 0
738                                                : introspectionEndpointUri.hashCode());
739                result = prime * result + ((issuer == null) ? 0 : issuer.hashCode());
740                result = prime * result + ((jwksUri == null) ? 0 : jwksUri.hashCode());
741                result = prime * result
742                                + ((opPolicyUri == null) ? 0 : opPolicyUri.hashCode());
743                result = prime * result
744                                + ((opTosUri == null) ? 0 : opTosUri.hashCode());
745                result = prime
746                                * result
747                                + ((registrationEndpointUri == null) ? 0
748                                                : registrationEndpointUri.hashCode());
749                result = prime
750                                * result
751                                + ((requestObjectEncryptionAlgValuesSupported == null) ? 0
752                                                : requestObjectEncryptionAlgValuesSupported.hashCode());
753                result = prime
754                                * result
755                                + ((requestObjectEncryptionEncValuesSupported == null) ? 0
756                                                : requestObjectEncryptionEncValuesSupported.hashCode());
757                result = prime
758                                * result
759                                + ((requestObjectSigningAlgValuesSupported == null) ? 0
760                                                : requestObjectSigningAlgValuesSupported.hashCode());
761                result = prime
762                                * result
763                                + ((requestParameterSupported == null) ? 0
764                                                : requestParameterSupported.hashCode());
765                result = prime
766                                * result
767                                + ((requestUriParameterSupported == null) ? 0
768                                                : requestUriParameterSupported.hashCode());
769                result = prime
770                                * result
771                                + ((requireRequestUriRegistration == null) ? 0
772                                                : requireRequestUriRegistration.hashCode());
773                result = prime
774                                * result
775                                + ((responseTypesSupported == null) ? 0
776                                                : responseTypesSupported.hashCode());
777                result = prime
778                                * result
779                                + ((revocationEndpointUri == null) ? 0 : revocationEndpointUri
780                                                .hashCode());
781                result = prime * result
782                                + ((scopesSupported == null) ? 0 : scopesSupported.hashCode());
783                result = prime
784                                * result
785                                + ((serviceDocumentation == null) ? 0 : serviceDocumentation
786                                                .hashCode());
787                result = prime
788                                * result
789                                + ((subjectTypesSupported == null) ? 0 : subjectTypesSupported
790                                                .hashCode());
791                result = prime
792                                * result
793                                + ((tokenEndpointAuthMethodsSupported == null) ? 0
794                                                : tokenEndpointAuthMethodsSupported.hashCode());
795                result = prime
796                                * result
797                                + ((tokenEndpointAuthSigningAlgValuesSupported == null) ? 0
798                                                : tokenEndpointAuthSigningAlgValuesSupported.hashCode());
799                result = prime
800                                * result
801                                + ((tokenEndpointUri == null) ? 0 : tokenEndpointUri.hashCode());
802                result = prime
803                                * result
804                                + ((uiLocalesSupported == null) ? 0 : uiLocalesSupported
805                                                .hashCode());
806                result = prime * result
807                                + ((userInfoUri == null) ? 0 : userInfoUri.hashCode());
808                result = prime
809                                * result
810                                + ((userinfoEncryptionAlgValuesSupported == null) ? 0
811                                                : userinfoEncryptionAlgValuesSupported.hashCode());
812                result = prime
813                                * result
814                                + ((userinfoEncryptionEncValuesSupported == null) ? 0
815                                                : userinfoEncryptionEncValuesSupported.hashCode());
816                result = prime
817                                * result
818                                + ((userinfoSigningAlgValuesSupported == null) ? 0
819                                                : userinfoSigningAlgValuesSupported.hashCode());
820                return result;
821        }
822        @Override
823        public boolean equals(Object obj) {
824                if (this == obj) {
825                        return true;
826                }
827                if (obj == null) {
828                        return false;
829                }
830                if (getClass() != obj.getClass()) {
831                        return false;
832                }
833                ServerConfiguration other = (ServerConfiguration) obj;
834                if (acrValuesSupported == null) {
835                        if (other.acrValuesSupported != null) {
836                                return false;
837                        }
838                } else if (!acrValuesSupported.equals(other.acrValuesSupported)) {
839                        return false;
840                }
841                if (authorizationEndpointUri == null) {
842                        if (other.authorizationEndpointUri != null) {
843                                return false;
844                        }
845                } else if (!authorizationEndpointUri
846                                .equals(other.authorizationEndpointUri)) {
847                        return false;
848                }
849                if (checkSessionIframe == null) {
850                        if (other.checkSessionIframe != null) {
851                                return false;
852                        }
853                } else if (!checkSessionIframe.equals(other.checkSessionIframe)) {
854                        return false;
855                }
856                if (claimTypesSupported == null) {
857                        if (other.claimTypesSupported != null) {
858                                return false;
859                        }
860                } else if (!claimTypesSupported.equals(other.claimTypesSupported)) {
861                        return false;
862                }
863                if (claimsLocalesSupported == null) {
864                        if (other.claimsLocalesSupported != null) {
865                                return false;
866                        }
867                } else if (!claimsLocalesSupported.equals(other.claimsLocalesSupported)) {
868                        return false;
869                }
870                if (claimsParameterSupported == null) {
871                        if (other.claimsParameterSupported != null) {
872                                return false;
873                        }
874                } else if (!claimsParameterSupported
875                                .equals(other.claimsParameterSupported)) {
876                        return false;
877                }
878                if (claimsSupported == null) {
879                        if (other.claimsSupported != null) {
880                                return false;
881                        }
882                } else if (!claimsSupported.equals(other.claimsSupported)) {
883                        return false;
884                }
885                if (displayValuesSupported == null) {
886                        if (other.displayValuesSupported != null) {
887                                return false;
888                        }
889                } else if (!displayValuesSupported.equals(other.displayValuesSupported)) {
890                        return false;
891                }
892                if (endSessionEndpoint == null) {
893                        if (other.endSessionEndpoint != null) {
894                                return false;
895                        }
896                } else if (!endSessionEndpoint.equals(other.endSessionEndpoint)) {
897                        return false;
898                }
899                if (grantTypesSupported == null) {
900                        if (other.grantTypesSupported != null) {
901                                return false;
902                        }
903                } else if (!grantTypesSupported.equals(other.grantTypesSupported)) {
904                        return false;
905                }
906                if (idTokenEncryptionAlgValuesSupported == null) {
907                        if (other.idTokenEncryptionAlgValuesSupported != null) {
908                                return false;
909                        }
910                } else if (!idTokenEncryptionAlgValuesSupported
911                                .equals(other.idTokenEncryptionAlgValuesSupported)) {
912                        return false;
913                }
914                if (idTokenEncryptionEncValuesSupported == null) {
915                        if (other.idTokenEncryptionEncValuesSupported != null) {
916                                return false;
917                        }
918                } else if (!idTokenEncryptionEncValuesSupported
919                                .equals(other.idTokenEncryptionEncValuesSupported)) {
920                        return false;
921                }
922                if (idTokenSigningAlgValuesSupported == null) {
923                        if (other.idTokenSigningAlgValuesSupported != null) {
924                                return false;
925                        }
926                } else if (!idTokenSigningAlgValuesSupported
927                                .equals(other.idTokenSigningAlgValuesSupported)) {
928                        return false;
929                }
930                if (introspectionEndpointUri == null) {
931                        if (other.introspectionEndpointUri != null) {
932                                return false;
933                        }
934                } else if (!introspectionEndpointUri
935                                .equals(other.introspectionEndpointUri)) {
936                        return false;
937                }
938                if (issuer == null) {
939                        if (other.issuer != null) {
940                                return false;
941                        }
942                } else if (!issuer.equals(other.issuer)) {
943                        return false;
944                }
945                if (jwksUri == null) {
946                        if (other.jwksUri != null) {
947                                return false;
948                        }
949                } else if (!jwksUri.equals(other.jwksUri)) {
950                        return false;
951                }
952                if (opPolicyUri == null) {
953                        if (other.opPolicyUri != null) {
954                                return false;
955                        }
956                } else if (!opPolicyUri.equals(other.opPolicyUri)) {
957                        return false;
958                }
959                if (opTosUri == null) {
960                        if (other.opTosUri != null) {
961                                return false;
962                        }
963                } else if (!opTosUri.equals(other.opTosUri)) {
964                        return false;
965                }
966                if (registrationEndpointUri == null) {
967                        if (other.registrationEndpointUri != null) {
968                                return false;
969                        }
970                } else if (!registrationEndpointUri
971                                .equals(other.registrationEndpointUri)) {
972                        return false;
973                }
974                if (requestObjectEncryptionAlgValuesSupported == null) {
975                        if (other.requestObjectEncryptionAlgValuesSupported != null) {
976                                return false;
977                        }
978                } else if (!requestObjectEncryptionAlgValuesSupported
979                                .equals(other.requestObjectEncryptionAlgValuesSupported)) {
980                        return false;
981                }
982                if (requestObjectEncryptionEncValuesSupported == null) {
983                        if (other.requestObjectEncryptionEncValuesSupported != null) {
984                                return false;
985                        }
986                } else if (!requestObjectEncryptionEncValuesSupported
987                                .equals(other.requestObjectEncryptionEncValuesSupported)) {
988                        return false;
989                }
990                if (requestObjectSigningAlgValuesSupported == null) {
991                        if (other.requestObjectSigningAlgValuesSupported != null) {
992                                return false;
993                        }
994                } else if (!requestObjectSigningAlgValuesSupported
995                                .equals(other.requestObjectSigningAlgValuesSupported)) {
996                        return false;
997                }
998                if (requestParameterSupported == null) {
999                        if (other.requestParameterSupported != null) {
1000                                return false;
1001                        }
1002                } else if (!requestParameterSupported
1003                                .equals(other.requestParameterSupported)) {
1004                        return false;
1005                }
1006                if (requestUriParameterSupported == null) {
1007                        if (other.requestUriParameterSupported != null) {
1008                                return false;
1009                        }
1010                } else if (!requestUriParameterSupported
1011                                .equals(other.requestUriParameterSupported)) {
1012                        return false;
1013                }
1014                if (requireRequestUriRegistration == null) {
1015                        if (other.requireRequestUriRegistration != null) {
1016                                return false;
1017                        }
1018                } else if (!requireRequestUriRegistration
1019                                .equals(other.requireRequestUriRegistration)) {
1020                        return false;
1021                }
1022                if (responseTypesSupported == null) {
1023                        if (other.responseTypesSupported != null) {
1024                                return false;
1025                        }
1026                } else if (!responseTypesSupported.equals(other.responseTypesSupported)) {
1027                        return false;
1028                }
1029                if (revocationEndpointUri == null) {
1030                        if (other.revocationEndpointUri != null) {
1031                                return false;
1032                        }
1033                } else if (!revocationEndpointUri.equals(other.revocationEndpointUri)) {
1034                        return false;
1035                }
1036                if (scopesSupported == null) {
1037                        if (other.scopesSupported != null) {
1038                                return false;
1039                        }
1040                } else if (!scopesSupported.equals(other.scopesSupported)) {
1041                        return false;
1042                }
1043                if (serviceDocumentation == null) {
1044                        if (other.serviceDocumentation != null) {
1045                                return false;
1046                        }
1047                } else if (!serviceDocumentation.equals(other.serviceDocumentation)) {
1048                        return false;
1049                }
1050                if (subjectTypesSupported == null) {
1051                        if (other.subjectTypesSupported != null) {
1052                                return false;
1053                        }
1054                } else if (!subjectTypesSupported.equals(other.subjectTypesSupported)) {
1055                        return false;
1056                }
1057                if (tokenEndpointAuthMethodsSupported == null) {
1058                        if (other.tokenEndpointAuthMethodsSupported != null) {
1059                                return false;
1060                        }
1061                } else if (!tokenEndpointAuthMethodsSupported
1062                                .equals(other.tokenEndpointAuthMethodsSupported)) {
1063                        return false;
1064                }
1065                if (tokenEndpointAuthSigningAlgValuesSupported == null) {
1066                        if (other.tokenEndpointAuthSigningAlgValuesSupported != null) {
1067                                return false;
1068                        }
1069                } else if (!tokenEndpointAuthSigningAlgValuesSupported
1070                                .equals(other.tokenEndpointAuthSigningAlgValuesSupported)) {
1071                        return false;
1072                }
1073                if (tokenEndpointUri == null) {
1074                        if (other.tokenEndpointUri != null) {
1075                                return false;
1076                        }
1077                } else if (!tokenEndpointUri.equals(other.tokenEndpointUri)) {
1078                        return false;
1079                }
1080                if (uiLocalesSupported == null) {
1081                        if (other.uiLocalesSupported != null) {
1082                                return false;
1083                        }
1084                } else if (!uiLocalesSupported.equals(other.uiLocalesSupported)) {
1085                        return false;
1086                }
1087                if (userInfoUri == null) {
1088                        if (other.userInfoUri != null) {
1089                                return false;
1090                        }
1091                } else if (!userInfoUri.equals(other.userInfoUri)) {
1092                        return false;
1093                }
1094                if (userinfoEncryptionAlgValuesSupported == null) {
1095                        if (other.userinfoEncryptionAlgValuesSupported != null) {
1096                                return false;
1097                        }
1098                } else if (!userinfoEncryptionAlgValuesSupported
1099                                .equals(other.userinfoEncryptionAlgValuesSupported)) {
1100                        return false;
1101                }
1102                if (userinfoEncryptionEncValuesSupported == null) {
1103                        if (other.userinfoEncryptionEncValuesSupported != null) {
1104                                return false;
1105                        }
1106                } else if (!userinfoEncryptionEncValuesSupported
1107                                .equals(other.userinfoEncryptionEncValuesSupported)) {
1108                        return false;
1109                }
1110                if (userinfoSigningAlgValuesSupported == null) {
1111                        if (other.userinfoSigningAlgValuesSupported != null) {
1112                                return false;
1113                        }
1114                } else if (!userinfoSigningAlgValuesSupported
1115                                .equals(other.userinfoSigningAlgValuesSupported)) {
1116                        return false;
1117                }
1118                return true;
1119        }
1120
1121
1122}