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