From 11fdf85d5f36095ed29857e647dc5fb1b9d84524 Mon Sep 17 00:00:00 2001 From: Dominik Frantisek Bucik Date: Wed, 3 Nov 2021 08:23:34 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Merge=20with=20perun-mit?= =?UTF-8?q?reid=20overlay,=20add=20SAML=20auth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge with overlay repository into one big repo. Added SAML authentication BREAKING CHANGE: 🧨 Merge and auth --- .../src/main/webapp/WEB-INF/data-context.xml | 128 -- .../src/main/webapp/WEB-INF/server-config.xml | 77 - .../main/webapp/WEB-INF/tags/copyright.tag | 4 - .../connect/web/EndSessionEndpoint.java | 197 --- .../.gitignore | 0 .../pom.xml | 110 +- .../src/main/resources/db/hsql/clients.sql | 0 .../resources/db/hsql/hsql_database_index.sql | 0 .../db/hsql/hsql_database_tables.sql | 0 .../resources/db/hsql/loading_temp_tables.sql | 0 .../src/main/resources/db/hsql/scopes.sql | 0 .../resources/db/hsql/security-schema.sql | 0 .../src/main/resources/db/hsql/users.sql | 0 .../src/main/resources/db/mysql/clients.sql | 0 .../db/mysql/mysql_database_index.sql | 0 .../db/mysql/mysql_database_tables.sql | 0 .../src/main/resources/db/mysql/scopes.sql | 0 .../resources/db/mysql/security-schema.sql | 0 .../src/main/resources/db/mysql/users.sql | 0 .../resources/db/oracle/clients_oracle.sql | 0 .../main/resources/db/oracle/create_db-user | 0 .../db/oracle/entity-mappings_oracle.xml | 50 +- .../db/oracle/loading_temp_tables_oracle.sql | 0 .../db/oracle/oracle_database_index.sql | 0 .../db/oracle/oracle_database_tables.sql | 0 .../resources/db/oracle/scopes_oracle.sql | 0 .../db/oracle/security-schema_oracle.sql | 0 .../main/resources/db/oracle/users_oracle.sql | 0 .../src/main/resources/db/psql/clients.sql | 0 .../resources/db/psql/psql_database_index.sql | 0 .../db/psql/psql_database_tables.sql | 0 .../src/main/resources/db/psql/scopes.sql | 0 .../resources/db/psql/security-schema.sql | 0 .../src/main/resources/db/psql/users.sql | 0 .../src/main/resources/keystore.jwks | 0 .../main/resources/localization/cs.properties | 173 +++ .../main/resources/localization/en.properties | 172 +++ .../src/main/resources/log4j.xml | 16 +- .../src/main/resources/logback.xml | 58 + .../web_classes/web_html_classes.properties | 4 + .../src/main/webapp/META-INF/MANIFEST.MF | 0 .../webapp/WEB-INF/application-context.xml | 72 +- .../main/webapp/WEB-INF/assertion-config.xml | 10 +- .../src/main/webapp/WEB-INF/authz-config.xml | 2 +- .../webapp/WEB-INF/classes/db/mysql/acrs.sql | 22 + .../WEB-INF/classes/db/mysql/db_update.sql | 10 + .../WEB-INF/classes/db/mysql/scopes.sql | 39 + .../webapp/WEB-INF/classes/db/psql/acrs.sql | 12 + .../WEB-INF/classes/db/psql/db_update.sql | 7 + .../classes/db/psql/loading_temp_tables.sql | 73 + .../classes/db/psql/psql_database_tables.sql | 384 +++++ .../webapp/WEB-INF/classes/db/psql/scopes.sql | 35 + .../src/main/webapp/WEB-INF/crypto-config.xml | 6 +- .../src/main/webapp/WEB-INF/data-context.xml | 53 + .../main/webapp/WEB-INF/endpoint-config.xml | 14 +- .../src/main/webapp/WEB-INF/jpa-config.xml | 2 +- .../src/main/webapp/WEB-INF/local-config.xml | 0 .../src/main/webapp/WEB-INF/locale-config.xml | 4 +- .../src/main/webapp/WEB-INF/server-config.xml | 37 +- .../main/webapp/WEB-INF/spring-servlet.xml | 0 .../main/webapp/WEB-INF/tags/actionmenu.tag | 0 .../main/webapp/WEB-INF/tags/bbmri/footer.tag | 25 + .../main/webapp/WEB-INF/tags/bbmri/header.tag | 22 + .../webapp/WEB-INF/tags/ceitec/footer.tag | 26 + .../webapp/WEB-INF/tags/ceitec/header.tag | 22 + .../webapp/WEB-INF/tags/cesnet/footer.tag | 50 + .../webapp/WEB-INF/tags/cesnet/header.tag | 22 + .../WEB-INF/tags/common/attributesConsent.tag | 82 ++ .../WEB-INF/tags/common/consentButtons.tag | 22 + .../webapp/WEB-INF/tags/common/footer.tag | 38 + .../webapp/WEB-INF/tags/common/header.tag | 38 + .../webapp/WEB-INF/tags/common/headerBody.tag | 14 + .../WEB-INF/tags/common/headerCssLinks.tag | 7 + .../webapp/WEB-INF/tags/common/headerInit.tag | 22 + .../webapp/WEB-INF/tags/common/langbar.tag | 34 + .../main/webapp/WEB-INF/tags/copyright.tag | 11 + .../webapp/WEB-INF/tags/elixir/footer.tag | 27 + .../webapp/WEB-INF/tags/elixir/header.tag | 22 + .../webapp/WEB-INF/tags/europdx/footer.tag | 35 + .../webapp/WEB-INF/tags/europdx/header.tag | 22 + .../src/main/webapp/WEB-INF/tags/footer.tag | 0 .../src/main/webapp/WEB-INF/tags/header.tag | 0 .../main/webapp/WEB-INF/tags/muni/footer.tag | 17 + .../main/webapp/WEB-INF/tags/muni/header.tag | 84 ++ .../src/main/webapp/WEB-INF/tags/navmenu.tag | 0 .../src/main/webapp/WEB-INF/tags/sidebar.tag | 0 .../src/main/webapp/WEB-INF/tags/topbar.tag | 0 .../src/main/webapp/WEB-INF/task-config.xml | 13 - .../src/main/webapp/WEB-INF/ui-config.xml | 2 +- .../src/main/webapp/WEB-INF/user-context.xml | 824 +++++++++++ .../src/main/webapp/WEB-INF/views/about.jsp | 0 .../src/main/webapp/WEB-INF/views/approve.jsp | 0 .../webapp/WEB-INF/views/approveDevice.jsp | 0 .../src/main/webapp/WEB-INF/views/aup.jsp | 39 + .../src/main/webapp/WEB-INF/views/contact.jsp | 0 .../webapp/WEB-INF/views/continue_direct.jsp | 34 + .../webapp/WEB-INF/views/deviceApproved.jsp | 0 .../src/main/webapp/WEB-INF/views/error.jsp | 0 .../src/main/webapp/WEB-INF/views/home.jsp | 0 .../webapp/WEB-INF/views/isTestSpWarning.jsp | 39 + .../src/main/webapp/WEB-INF/views/login.jsp | 0 .../webapp/WEB-INF/views/login_failure.jsp | 31 + .../webapp/WEB-INF/views/login_success.jsp | 30 + .../src/main/webapp/WEB-INF/views/logout.jsp | 42 + .../WEB-INF/views/logoutConfirmation.jsp | 0 .../webapp/WEB-INF/views/logout_denied.jsp | 30 + .../webapp/WEB-INF/views/logout_success.jsp | 30 + .../src/main/webapp/WEB-INF/views/manage.jsp | 0 .../main/webapp/WEB-INF/views/postLogout.jsp | 0 .../webapp/WEB-INF/views/registrationForm.jsp | 71 + .../views/registrationFormContinue.jsp | 51 + .../webapp/WEB-INF/views/requestUserCode.jsp | 0 .../webapp/WEB-INF/views/themedApprove.jsp | 54 + .../WEB-INF/views/themedApproveDevice.jsp | 50 + .../WEB-INF/views/themedDeviceApproved.jsp | 45 + .../WEB-INF/views/themedRequestUserCode.jsp | 69 + .../main/webapp/WEB-INF/views/unapproved.jsp | 48 + .../webapp/WEB-INF/views/unapproved_spec.jsp | 29 + .../src/main/webapp/WEB-INF/web.xml | 0 .../img/glyphicons-halflings-white.png | Bin .../bootstrap/img/glyphicons-halflings.png | Bin .../resources/bootstrap/js/bootstrap.js | 0 .../resources/bootstrap/js/bootstrap.min.js | 0 .../css/bootstrap-responsive.min.css | 0 .../webapp/resources/css/bootstrap-sheet.css | 0 .../webapp/resources/css/bootstrap.min.css | 0 .../src/main/webapp/resources/css/customs.css | 36 + .../resources/css/mitreid-connect-local.css | 0 .../css/mitreid-connect-responsive-local.css | 0 .../css/mitreid-connect-responsive.css | 0 .../webapp/resources/css/mitreid-connect.css | 0 .../main/webapp/resources/images/arrow.png | Bin 0 -> 1673 bytes .../webapp/resources/images/heart_mode.png | Bin .../resources/images/logo_placeholder.gif | Bin .../resources/images/mitreid-connect.ico | Bin .../resources/images/openid_connect_large.png | Bin .../resources/images/openid_connect_small.png | Bin .../webapp/resources/images/perun_24px.png | Bin 0 -> 1094 bytes .../src/main/webapp/resources/js/admin.js | 0 .../src/main/webapp/resources/js/blacklist.js | 0 .../src/main/webapp/resources/js/client.js | 0 .../src/main/webapp/resources/js/dynreg.js | 0 .../src/main/webapp/resources/js/grant.js | 0 .../webapp/resources/js/jquery-3-3-1.min.js | 2 + .../main/webapp/resources/js/lib/backbone.js | 0 .../resources/js/lib/backbone.validations.js | 0 .../main/webapp/resources/js/lib/bootpag.js | 0 .../resources/js/lib/bootstrap-sheet.js | 0 .../resources/js/lib/bootstrapx-clickover.js | 0 .../src/main/webapp/resources/js/lib/html5.js | 0 .../main/webapp/resources/js/lib/i18next.js | 0 .../main/webapp/resources/js/lib/jquery.js | 0 .../resources/js/lib/moment-with-locales.js | 0 .../src/main/webapp/resources/js/lib/purl.js | 0 .../webapp/resources/js/lib/underscore.js | 0 .../resources/js/locale/en/messages.json | 0 .../resources/js/locale/fr/messages.json | 0 .../resources/js/locale/sv/messages.json | 0 .../resources/js/locale/zh/messages.json | 0 .../resources/js/locale/zh_CN/messages.json | 0 .../resources/js/locale/zh_TW/messages.json | 0 .../src/main/webapp/resources/js/profile.js | 0 .../webapp/resources/js/reg_form_select.js | 25 + .../src/main/webapp/resources/js/rsreg.js | 0 .../src/main/webapp/resources/js/scope.js | 0 .../src/main/webapp/resources/js/token.js | 0 .../src/main/webapp/resources/js/whitelist.js | 0 .../main/webapp/resources/template/admin.html | 0 .../webapp/resources/template/blacklist.html | 0 .../webapp/resources/template/client.html | 0 .../webapp/resources/template/dynreg.html | 0 .../main/webapp/resources/template/grant.html | 0 .../main/webapp/resources/template/rsreg.html | 0 .../main/webapp/resources/template/scope.html | 0 .../main/webapp/resources/template/token.html | 0 .../webapp/resources/template/whitelist.html | 0 .../.gitignore | 0 .../pom.xml | 107 +- .../data/AbstractPageOperationTemplate.java | 2 +- .../muni/ics}/data/DefaultPageCriteria.java | 2 +- .../java/cz/muni/ics}/data/PageCriteria.java | 2 +- .../util/WebfingerURLNormalizer.java | 2 +- .../ics}/discovery/view/WebfingerView.java | 4 +- .../ics}/discovery/web/DiscoveryEndpoint.java | 36 +- .../ics}/jose/keystore/JWKSetKeyStore.java | 2 +- .../assertion/AbstractAssertionValidator.java | 2 +- .../jwt/assertion/AssertionValidator.java | 2 +- .../impl/NullAssertionValidator.java | 4 +- .../impl/SelfAssertionValidator.java | 10 +- .../WhitelistedIssuerAssertionValidator.java | 10 +- .../JWTEncryptionAndDecryptionService.java | 2 +- ...aultJWTEncryptionAndDecryptionService.java | 6 +- .../JWTSigningAndValidationService.java | 2 +- .../service/impl/ClientKeyCacheService.java | 12 +- ...DefaultJWTSigningAndValidationService.java | 6 +- .../service/impl/JWKSetCacheService.java | 10 +- .../SymmetricKeyJWTValidatorCacheService.java | 6 +- .../java/cz/muni/ics}/mdc/MultiMDCFilter.java | 2 +- .../muni/ics}/mdc/RemoteAddressMDCFilter.java | 2 +- .../cz/muni/ics}/mdc/SessionIdMDCFilter.java | 2 +- .../AssertionOAuth2RequestFactory.java | 2 +- .../impl/DirectCopyRequestFactory.java | 4 +- .../AuthorizationPendingException.java | 2 +- .../DeviceCodeCreationException.java | 2 +- .../exception/DeviceCodeExpiredException.java | 2 +- .../exception/DuplicateClientIdException.java | 2 +- .../model/AuthenticationHolderEntity.java | 8 +- .../oauth2/model/AuthorizationCodeEntity.java | 2 +- .../oauth2/model/ClientDetailsEntity.java | 16 +- .../cz/muni/ics}/oauth2/model/DeviceCode.java | 2 +- .../oauth2/model/OAuth2AccessTokenEntity.java | 8 +- .../model/OAuth2RefreshTokenEntity.java | 4 +- .../muni/ics}/oauth2/model/PKCEAlgorithm.java | 2 +- .../ics}/oauth2/model/RegisteredClient.java | 17 +- .../oauth2/model/RegisteredClientFields.java | 2 +- .../oauth2/model/SavedUserAuthentication.java | 4 +- .../muni/ics}/oauth2/model/SystemScope.java | 2 +- .../convert/JWEAlgorithmStringConverter.java | 2 +- .../JWEEncryptionMethodStringConverter.java | 2 +- .../model/convert/JWKSetStringConverter.java | 2 +- .../convert/JWSAlgorithmStringConverter.java | 2 +- .../model/convert/JWTStringConverter.java | 2 +- .../convert/JsonElementStringConverter.java | 2 +- .../convert/PKCEAlgorithmStringConverter.java | 4 +- .../convert/SerializableStringConverter.java | 2 +- ...SimpleGrantedAuthorityStringConverter.java | 2 +- .../AuthenticationHolderRepository.java | 6 +- .../AuthorizationCodeRepository.java | 6 +- .../repository/OAuth2ClientRepository.java | 4 +- .../repository/OAuth2TokenRepository.java | 14 +- .../repository/SystemScopeRepository.java | 4 +- .../repository/impl/DeviceCodeRepository.java | 4 +- .../JpaAuthenticationHolderRepository.java | 12 +- .../impl/JpaAuthorizationCodeRepository.java | 18 +- .../impl/JpaDeviceCodeRepository.java | 18 +- .../impl/JpaOAuth2ClientRepository.java | 14 +- .../impl/JpaOAuth2TokenRepository.java | 20 +- .../impl/JpaSystemScopeRepository.java | 24 +- .../service/ClientDetailsEntityService.java | 4 +- .../oauth2/service/DeviceCodeService.java | 8 +- .../service/IntrospectionResultAssembler.java | 9 +- .../service/OAuth2TokenEntityService.java | 10 +- .../oauth2/service/SystemScopeService.java | 7 +- .../impl/BlacklistAwareRedirectResolver.java | 14 +- .../impl/DefaultClientUserDetailsService.java | 9 +- .../impl/DefaultDeviceCodeService.java | 26 +- .../DefaultIntrospectionResultAssembler.java | 12 +- ...DefaultOAuth2AuthorizationCodeService.java | 12 +- ...faultOAuth2ClientDetailsEntityService.java | 30 +- .../DefaultOAuth2ProviderTokenService.java | 42 +- .../impl/DefaultSystemScopeService.java | 24 +- .../oauth2/service/impl/ServiceUtils.java | 6 +- .../UriEncodedClientUserDetailsService.java | 8 +- .../oauth2/token/ChainedTokenGranter.java | 8 +- .../ics}/oauth2/token/DeviceTokenGranter.java | 12 +- .../token/JWTAssertionTokenGranter.java | 12 +- ...opeServiceAwareOAuth2RequestValidator.java | 4 +- .../muni/ics}/oauth2/view/TokenApiView.java | 10 +- .../oauth2/web/AuthenticationUtilities.java | 2 +- .../cz/muni/ics}/oauth2/web/CorsFilter.java | 2 +- .../muni/ics}/oauth2/web/DeviceEndpoint.java | 30 +- .../oauth2/web/IntrospectionEndpoint.java | 34 +- .../oauth2/web/OAuth2ExceptionHandler.java | 2 +- .../web/OAuthConfirmationController.java | 27 +- .../ics}/oauth2/web/RevocationEndpoint.java | 18 +- .../cz/muni/ics}/oauth2/web/ScopeAPI.java | 14 +- .../cz/muni/ics}/oauth2/web/TokenAPI.java | 26 +- .../main/java/cz/muni/ics/oidc/BeanUtil.java | 34 + .../oidc/aop/ExecutionTimeLoggingAspect.java | 21 + .../java/cz/muni/ics/oidc/aop/LogTimes.java | 11 + .../cz/muni/ics/oidc/aop/LoggingUtils.java | 72 + .../ics/oidc/aop/MapperLoggingAspect.java | 27 + .../ics/oidc/aop/ServerLoggingAspect.java | 27 + .../muni/ics/oidc/aop/WebLoggingAspect.java | 27 + .../exceptions/ConfigurationException.java | 25 + .../InconvertibleValueException.java | 24 + .../exceptions/MissingFieldException.java | 23 + .../ics/oidc/models/AttributeMapping.java | 141 ++ .../java/cz/muni/ics/oidc/models/Aup.java | 127 ++ .../cz/muni/ics/oidc/models/ExtSource.java | 72 + .../cz/muni/ics/oidc/models/Facility.java | 68 + .../java/cz/muni/ics/oidc/models/Group.java | 169 +++ .../java/cz/muni/ics/oidc/models/Member.java | 88 ++ .../java/cz/muni/ics/oidc/models/Model.java | 46 + .../muni/ics/oidc/models/PerunAttribute.java | 194 +++ .../ics/oidc/models/PerunAttributeValue.java | 48 + .../models/PerunAttributeValueAwareModel.java | 164 +++ .../cz/muni/ics/oidc/models/PerunUser.java | 71 + .../cz/muni/ics/oidc/models/Resource.java | 121 ++ .../muni/ics/oidc/models/UserExtSource.java | 113 ++ .../main/java/cz/muni/ics/oidc/models/Vo.java | 71 + .../ics/oidc/models/enums/MemberStatus.java | 36 + .../oidc/models/enums/PerunAttrValueType.java | 28 + .../oidc/models/enums/PerunEntityType.java | 11 + .../InconvertibleValueException.java | 29 + .../ics/oidc/models/mappers/RpcMapper.java | 541 +++++++ .../muni/ics/oidc/saml/IdpMetadataBeans.java | 44 + .../saml/PerunOidcLogoutSuccessHandler.java | 52 + .../saml/PerunSamlAuthenticationProvider.java | 51 + ...PerunSamlAuthenticationSuccessHandler.java | 57 + .../ics/oidc/saml/PerunSamlEntryPoint.java | 248 ++++ .../oidc/saml/PerunSamlProcessingFilter.java | 50 + .../saml/PerunSamlUserDetailsService.java | 32 + .../cz/muni/ics/oidc/saml/PerunSamlUtils.java | 42 + .../saml/PerunWebSSOProfileConsumerImpl.java | 86 ++ .../saml/SamlInvalidateSessionFilter.java | 81 + .../cz/muni/ics/oidc/saml/SamlProperties.java | 128 ++ .../oidc/server/AttributeMappingsService.java | 120 ++ .../ics/oidc/server/CustomClearTasks.java | 172 +++ .../ics/oidc/server/CustomTaskScheduler.java | 140 ++ .../oidc/server/PerunAccessTokenEnhancer.java | 163 ++ .../ics/oidc/server/PerunAcrRepository.java | 81 + .../server/PerunDeviceCodeAcrRepository.java | 91 ++ .../PerunIntrospectionResultAssembler.java | 65 + .../oidc/server/PerunOIDCTokenService.java | 124 ++ .../muni/ics/oidc/server/PerunPrincipal.java | 35 + .../PerunScopeClaimTranslationService.java | 88 ++ .../oidc/server/adapters/PerunAdapter.java | 94 ++ .../server/adapters/PerunAdapterMethods.java | 343 +++++ .../adapters/PerunAdapterMethodsLdap.java | 9 + .../adapters/PerunAdapterMethodsRpc.java | 231 +++ .../adapters/impl/PerunAdapterImpl.java | 404 +++++ .../adapters/impl/PerunAdapterLdap.java | 867 +++++++++++ .../impl/PerunAdapterLdapConstants.java | 43 + .../server/adapters/impl/PerunAdapterRpc.java | 1312 +++++++++++++++++ .../impl/PerunAdapterWithMappingServices.java | 75 + .../claims/ClaimContextCommonParameters.java | 21 + .../ics/oidc/server/claims/ClaimModifier.java | 47 + .../claims/ClaimModifierInitContext.java | 42 + .../ics/oidc/server/claims/ClaimSource.java | 39 + .../server/claims/ClaimSourceInitContext.java | 54 + .../claims/ClaimSourceProduceContext.java | 68 + .../ics/oidc/server/claims/ClaimUtils.java | 38 + .../claims/PerunCustomClaimDefinition.java | 71 + .../claims/modifiers/AppendModifier.java | 46 + .../GroupNamesAARCFormatModifier.java | 64 + .../claims/modifiers/NoOperationModifier.java | 30 + .../modifiers/RegexReplaceModifier.java | 53 + .../EdupersonScopedAffiliationsMUSource.java | 112 ++ .../EntitlementExtendedClaimSource.java | 82 ++ .../claims/sources/EntitlementSource.java | 185 +++ .../sources/ExtractValuesByDomainSource.java | 99 ++ .../claims/sources/GroupNamesSource.java | 92 ++ .../sources/IsCesnetEligibleClaimSource.java | 100 ++ .../sources/PerunAttributeClaimSource.java | 64 + .../sources/StaticValueClaimSource.java | 87 ++ .../TwoArrayAttributesClaimSource.java | 90 ++ .../configurations/FacilityAttrsConfig.java | 128 ++ .../configurations/PerunOidcConfig.java | 275 ++++ .../oidc/server/connectors/Affiliation.java | 41 + .../server/connectors/PerunConnectorLdap.java | 147 ++ .../server/connectors/PerunConnectorRpc.java | 183 +++ .../server/elixir/AddHeaderInterceptor.java | 30 + .../elixir/ElixirAccessTokenModifier.java | 36 + .../oidc/server/elixir/GA4GHClaimSource.java | 593 ++++++++ .../oidc/server/elixir/GA4GHTokenParser.java | 64 + .../filters/CallPerunFiltersFilter.java | 86 ++ .../ics/oidc/server/filters/FilterParams.java | 39 + .../ics/oidc/server/filters/FiltersUtils.java | 328 +++++ .../server/filters/PerunFilterConstants.java | 40 + .../server/filters/PerunFiltersContext.java | 93 ++ .../server/filters/PerunRequestFilter.java | 110 ++ .../filters/PerunRequestFilterParams.java | 45 + .../server/filters/impl/MultiMDCFilter.java | 33 + .../impl/PerunAuthorizationFilter.java | 93 ++ .../filters/impl/PerunEnsureVoMember.java | 190 +++ .../filters/impl/PerunForceAupFilter.java | 323 ++++ .../impl/PerunIsCesnetEligibleFilter.java | 145 ++ .../filters/impl/PerunIsTestSpFilter.java | 108 ++ .../filters/impl/ProxyStatisticsFilter.java | 204 +++ .../server/filters/impl/ValidUserFilter.java | 181 +++ .../impl/mdc/RemoteAddressMDCFilter.java | 43 + .../filters/impl/mdc/SessionIdMDCFilter.java | 23 + .../oidc/server/userInfo/PerunUserInfo.java | 68 + .../server/userInfo/PerunUserInfoService.java | 670 +++++++++ .../server/userInfo/UserInfoModifier.java | 32 + .../userInfo/UserInfoModifierContext.java | 83 ++ .../userInfo/UserInfoModifierInitContext.java | 36 + .../cz/muni/ics/oidc/web/WebHtmlClasses.java | 65 + .../controllers/ApproveDeviceController.java | 219 +++ .../oidc/web/controllers/AupController.java | 162 ++ .../oidc/web/controllers/ControllerUtils.java | 304 ++++ .../web/controllers/IsTestSpController.java | 68 + .../oidc/web/controllers/LoginController.java | 45 + .../web/controllers/LogoutController.java | 38 + .../PerunOAuthConfirmationController.java | 83 ++ .../PerunUnapprovedController.java | 287 ++++ ...PerunUnapprovedRegistrationController.java | 182 +++ .../controllers/RegistrationController.java | 47 + .../muni/ics/oidc/web/langs/Localization.java | 105 ++ .../ClientDetailsEntityJsonProcessor.java | 194 ++- ...JWTBearerAssertionAuthenticationToken.java | 2 +- .../JWTBearerAuthenticationProvider.java | 14 +- ...rerClientAssertionTokenEndpointFilter.java | 2 +- .../ConfigurationBeanLocaleResolver.java | 2 +- .../config/ConfigurationPropertiesBean.java | 2 +- .../openid/connect/config/JWKSetEditor.java | 2 +- .../connect/config/JsonMessageSource.java | 2 +- .../connect/config/ServerConfiguration.java | 2 +- .../connect/config/UIConfiguration.java | 2 +- .../exception/ValidationException.java | 2 +- .../filter/AuthorizationRequestFilter.java | 47 +- .../filter/MultiUrlRequestMatcher.java | 2 +- .../ics}/openid/connect/model/Address.java | 2 +- .../openid/connect/model/ApprovedSite.java | 2 +- .../openid/connect/model/BlacklistedSite.java | 2 +- .../openid/connect/model/DefaultAddress.java | 2 +- .../openid/connect/model/DefaultUserInfo.java | 5 +- .../model/OIDCAuthenticationToken.java | 2 +- .../connect/model/PairwiseIdentifier.java | 2 +- .../model/PendingOIDCAuthenticationToken.java | 4 +- .../ics}/openid/connect/model/UserInfo.java | 2 +- .../openid/connect/model/WhitelistedSite.java | 2 +- .../convert/JsonObjectStringConverter.java | 3 +- .../muni/ics/openid/connect/models/Acr.java | 137 ++ .../openid/connect/models/DeviceCodeAcr.java | 122 ++ .../connect/repository/AddressRepository.java | 4 +- .../repository/ApprovedSiteRepository.java | 4 +- .../repository/BlacklistedSiteRepository.java | 4 +- .../PairwiseIdentifierRepository.java | 4 +- .../repository/UserInfoRepository.java | 4 +- .../repository/WhitelistedSiteRepository.java | 4 +- .../repository/impl/JpaAddressRepository.java | 6 +- .../impl/JpaApprovedSiteRepository.java | 11 +- .../impl/JpaBlacklistedSiteRepository.java | 23 +- .../impl/JpaPairwiseIdentifierRepository.java | 18 +- .../impl/JpaUserInfoRepository.java | 15 +- .../impl/JpaWhitelistedSiteRepository.java | 14 +- .../request/ConnectOAuth2RequestFactory.java | 122 +- .../request/ConnectRequestParameters.java | 2 +- .../connect/service/ApprovedSiteService.java | 6 +- .../service/BlacklistedSiteService.java | 4 +- .../connect/service/LoginHintExtracter.java | 2 +- .../connect/service/OIDCTokenService.java | 6 +- .../service/PairwiseIdentiferService.java | 6 +- .../service/ScopeClaimTranslationService.java | 2 +- .../connect/service/UserInfoService.java | 4 +- .../service/WhitelistedSiteService.java | 4 +- .../impl/DefaultApprovedSiteService.java | 16 +- .../impl/DefaultBlacklistedSiteService.java | 20 +- .../service/impl/DefaultOIDCTokenService.java | 34 +- .../DefaultScopeClaimTranslationService.java | 8 +- .../service/impl/DefaultUserInfoService.java | 16 +- .../impl/DefaultWhitelistedSiteService.java | 8 +- .../service/impl/DummyResourceSetService.java | 8 +- .../impl/MatchLoginHintsAgainstUsers.java | 10 +- .../service/impl/PassAllLoginHints.java | 6 +- .../impl/RemoveLoginHintsWithHTTP.java | 6 +- .../impl/UUIDPairwiseIdentiferService.java | 12 +- .../connect/token/ConnectTokenEnhancer.java | 22 +- .../token/TofuUserApprovalHandler.java | 30 +- .../openid/connect/util/IdTokenHashUtils.java | 4 +- .../view/AbstractClientEntityView.java | 4 +- .../view/ClientEntityViewForAdmins.java | 2 +- .../view/ClientEntityViewForUsers.java | 4 +- .../view/ClientInformationResponseView.java | 6 +- .../openid/connect/view/HttpCodeView.java | 2 +- .../ics}/openid/connect/view/JWKSetView.java | 2 +- .../connect/view/JsonApprovedSiteView.java | 6 +- .../openid/connect/view/JsonEntityView.java | 2 +- .../openid/connect/view/JsonErrorView.java | 2 +- .../openid/connect/view/UserInfoJWTView.java | 14 +- .../openid/connect/view/UserInfoView.java | 6 +- .../openid/connect/web/ApprovedSiteAPI.java | 14 +- .../web/AuthenticationTimeStamper.java | 4 +- .../ics}/openid/connect/web/BlacklistAPI.java | 12 +- .../ics}/openid/connect/web/ClientAPI.java | 104 +- .../DynamicClientRegistrationEndpoint.java | 114 +- .../connect/web/EndSessionEndpoint.java | 224 +++ .../connect/web/JWKSetPublishingEndpoint.java | 6 +- ...ProtectedResourceRegistrationEndpoint.java | 32 +- .../openid/connect/web/RootController.java | 2 +- .../connect/web/ServerConfigInterceptor.java | 6 +- .../openid/connect/web/UserInfoEndpoint.java | 18 +- .../connect/web/UserInfoInterceptor.java | 8 +- .../ics}/openid/connect/web/WhitelistAPI.java | 12 +- .../java/cz/muni/ics}/uma/model/Claim.java | 4 +- .../ics}/uma/model/ClaimProcessingResult.java | 2 +- .../cz/muni/ics}/uma/model/Permission.java | 2 +- .../muni/ics}/uma/model/PermissionTicket.java | 2 +- .../java/cz/muni/ics}/uma/model/Policy.java | 2 +- .../cz/muni/ics}/uma/model/ResourceSet.java | 2 +- .../ics}/uma/model/SavedRegisteredClient.java | 7 +- .../RegisteredClientStringConverter.java | 6 +- .../uma/repository/PermissionRepository.java | 8 +- .../uma/repository/ResourceSetRepository.java | 4 +- .../uma/service/ClaimsProcessingService.java | 8 +- .../ics}/uma/service/PermissionService.java | 6 +- .../ics}/uma/service/ResourceSetService.java | 6 +- .../service/SavedRegisteredClientService.java | 6 +- .../ics}/uma/service/UmaTokenService.java | 8 +- .../java/cz/muni/ics}/util/JsonUtils.java | 4 +- .../java/cz/muni/ics}/util/jpa/JpaUtil.java | 4 +- .../AbstractPageOperationTemplateTest.java | 2 +- .../util/TestWebfingerURLNormalizer.java | 2 +- .../cz/muni/ics}/jose/TestJWKSetKeyStore.java | 4 +- ...aultJWTEncryptionAndDecryptionService.java | 4 +- .../oauth2/model/ClientDetailsEntityTest.java | 4 +- .../oauth2/model/RegisteredClientTest.java | 8 +- .../impl/TestDatabaseConfiguration.java | 6 +- .../impl/TestJpaOAuth2TokenRepository.java | 10 +- .../TestBlacklistAwareRedirectResolver.java | 9 +- ...stDefaultIntrospectionResultAssembler.java | 12 +- ...faultOAuth2ClientDetailsEntityService.java | 26 +- ...TestDefaultOAuth2ProviderTokenService.java | 20 +- .../impl/TestDefaultSystemScopeService.java | 6 +- .../ClientDetailsEntityJsonProcessorTest.java | 12 +- .../TestJWTBearerAuthenticationProvider.java | 14 +- .../ConfigurationPropertiesBeanTest.java | 2 +- .../config/ServerConfigurationTest.java | 4 +- .../connect/config/TestJsonMessageSource.java | 2 +- .../impl/TestDefaultApprovedSiteService.java | 14 +- .../TestDefaultBlacklistedSiteService.java | 6 +- .../impl/TestDefaultOIDCTokenService.java | 11 +- .../impl/TestDefaultUserInfoService.java | 27 +- .../TestDefaultWhitelistedSiteService.java | 6 +- .../TestUUIDPairwiseIdentiferService.java | 25 +- .../token/TestConnectTokenEnhancer.java | 20 +- .../connect/util/TestIdTokenHashUtils.java | 6 +- .../resources/js/locale/en/messages.json | 0 pom.xml | 329 +++-- 521 files changed, 20661 insertions(+), 1873 deletions(-) delete mode 100644 openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml delete mode 100644 openid-connect-server-webapp/src/main/webapp/WEB-INF/server-config.xml delete mode 100644 openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/copyright.tag delete mode 100644 openid-connect-server/src/main/java/org/mitre/openid/connect/web/EndSessionEndpoint.java rename {openid-connect-server-webapp => perun-oidc-server-webapp}/.gitignore (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/pom.xml (71%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/clients.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/hsql_database_index.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/hsql_database_tables.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/loading_temp_tables.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/scopes.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/security-schema.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/hsql/users.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/clients.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/mysql_database_index.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/mysql_database_tables.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/scopes.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/security-schema.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/mysql/users.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/clients_oracle.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/create_db-user (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/entity-mappings_oracle.xml (84%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/loading_temp_tables_oracle.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/oracle_database_index.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/oracle_database_tables.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/scopes_oracle.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/security-schema_oracle.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/oracle/users_oracle.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/clients.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/psql_database_index.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/psql_database_tables.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/scopes.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/security-schema.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/db/psql/users.sql (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/keystore.jwks (100%) create mode 100644 perun-oidc-server-webapp/src/main/resources/localization/cs.properties create mode 100644 perun-oidc-server-webapp/src/main/resources/localization/en.properties rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/resources/log4j.xml (88%) create mode 100644 perun-oidc-server-webapp/src/main/resources/logback.xml create mode 100644 perun-oidc-server-webapp/src/main/resources/web_classes/web_html_classes.properties rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/META-INF/MANIFEST.MF (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/application-context.xml (76%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/assertion-config.xml (83%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/authz-config.xml (96%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/acrs.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/db_update.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/scopes.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/acrs.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/db_update.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/loading_temp_tables.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/psql_database_tables.sql create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/scopes.sql rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/crypto-config.xml (88%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/data-context.xml rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/endpoint-config.xml (69%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/jpa-config.xml (98%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/local-config.xml (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/locale-config.xml (84%) rename openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml => perun-oidc-server-webapp/src/main/webapp/WEB-INF/server-config.xml (63%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/spring-servlet.xml (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/actionmenu.tag (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/header.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/header.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/header.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/attributesConsent.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/consentButtons.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/header.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerBody.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerCssLinks.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerInit.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/langbar.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/copyright.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/elixir/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/elixir/header.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/europdx/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/europdx/header.tag rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/footer.tag (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/header.tag (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/muni/footer.tag create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/muni/header.tag rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/navmenu.tag (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/sidebar.tag (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/tags/topbar.tag (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/task-config.xml (54%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/ui-config.xml (96%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/user-context.xml rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/about.jsp (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/approve.jsp (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/approveDevice.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/aup.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/contact.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/continue_direct.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/deviceApproved.jsp (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/error.jsp (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/home.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/isTestSpWarning.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/login.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_failure.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_success.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/logoutConfirmation.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_denied.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_success.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/manage.jsp (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/postLogout.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationForm.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationFormContinue.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/views/requestUserCode.jsp (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApprove.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApproveDevice.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedDeviceApproved.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedRequestUserCode.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved.jsp create mode 100644 perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved_spec.jsp rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/WEB-INF/web.xml (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/bootstrap/img/glyphicons-halflings-white.png (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/bootstrap/img/glyphicons-halflings.png (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/bootstrap/js/bootstrap.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/bootstrap/js/bootstrap.min.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/bootstrap-responsive.min.css (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/bootstrap-sheet.css (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/bootstrap.min.css (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/resources/css/customs.css rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/mitreid-connect-local.css (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/mitreid-connect-responsive-local.css (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/mitreid-connect-responsive.css (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/css/mitreid-connect.css (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/resources/images/arrow.png rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/images/heart_mode.png (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/images/logo_placeholder.gif (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/images/mitreid-connect.ico (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/images/openid_connect_large.png (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/images/openid_connect_small.png (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/resources/images/perun_24px.png rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/admin.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/blacklist.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/client.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/dynreg.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/grant.js (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/resources/js/jquery-3-3-1.min.js rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/backbone.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/backbone.validations.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/bootpag.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/bootstrap-sheet.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/bootstrapx-clickover.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/html5.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/i18next.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/jquery.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/moment-with-locales.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/purl.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/lib/underscore.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/en/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/fr/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/sv/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/zh/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/zh_CN/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/locale/zh_TW/messages.json (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/profile.js (100%) create mode 100644 perun-oidc-server-webapp/src/main/webapp/resources/js/reg_form_select.js rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/rsreg.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/scope.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/token.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/js/whitelist.js (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/admin.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/blacklist.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/client.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/dynreg.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/grant.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/rsreg.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/scope.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/token.html (100%) rename {openid-connect-server-webapp => perun-oidc-server-webapp}/src/main/webapp/resources/template/whitelist.html (100%) rename {openid-connect-server => perun-oidc-server}/.gitignore (100%) rename {openid-connect-server => perun-oidc-server}/pom.xml (65%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/data/AbstractPageOperationTemplate.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/data/DefaultPageCriteria.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/data/PageCriteria.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/discovery/util/WebfingerURLNormalizer.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/discovery/view/WebfingerView.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/discovery/web/DiscoveryEndpoint.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jose/keystore/JWKSetKeyStore.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/assertion/AbstractAssertionValidator.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/assertion/AssertionValidator.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/assertion/impl/NullAssertionValidator.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/assertion/impl/SelfAssertionValidator.java (87%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/assertion/impl/WhitelistedIssuerAssertionValidator.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/encryption/service/JWTEncryptionAndDecryptionService.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/encryption/service/impl/DefaultJWTEncryptionAndDecryptionService.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/signer/service/JWTSigningAndValidationService.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/signer/service/impl/ClientKeyCacheService.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/signer/service/impl/DefaultJWTSigningAndValidationService.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/signer/service/impl/JWKSetCacheService.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/jwt/signer/service/impl/SymmetricKeyJWTValidatorCacheService.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/mdc/MultiMDCFilter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/mdc/RemoteAddressMDCFilter.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/mdc/SessionIdMDCFilter.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/assertion/AssertionOAuth2RequestFactory.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/assertion/impl/DirectCopyRequestFactory.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/exception/AuthorizationPendingException.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/exception/DeviceCodeCreationException.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/exception/DeviceCodeExpiredException.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/exception/DuplicateClientIdException.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/AuthenticationHolderEntity.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/AuthorizationCodeEntity.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/ClientDetailsEntity.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/DeviceCode.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/OAuth2AccessTokenEntity.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/OAuth2RefreshTokenEntity.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/PKCEAlgorithm.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/RegisteredClient.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/RegisteredClientFields.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/SavedUserAuthentication.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/SystemScope.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JWEAlgorithmStringConverter.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JWEEncryptionMethodStringConverter.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JWKSetStringConverter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JWSAlgorithmStringConverter.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JWTStringConverter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/JsonElementStringConverter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/PKCEAlgorithmStringConverter.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/SerializableStringConverter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/model/convert/SimpleGrantedAuthorityStringConverter.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/AuthenticationHolderRepository.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/AuthorizationCodeRepository.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/OAuth2ClientRepository.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/OAuth2TokenRepository.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/SystemScopeRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/DeviceCodeRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaAuthenticationHolderRepository.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaAuthorizationCodeRepository.java (82%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaDeviceCodeRepository.java (84%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaOAuth2ClientRepository.java (84%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaOAuth2TokenRepository.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/repository/impl/JpaSystemScopeRepository.java (75%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/ClientDetailsEntityService.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/DeviceCodeService.java (88%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/IntrospectionResultAssembler.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/OAuth2TokenEntityService.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/SystemScopeService.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/BlacklistAwareRedirectResolver.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultClientUserDetailsService.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultDeviceCodeService.java (81%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultIntrospectionResultAssembler.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultOAuth2ClientDetailsEntityService.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultOAuth2ProviderTokenService.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/DefaultSystemScopeService.java (85%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/ServiceUtils.java (87%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/service/impl/UriEncodedClientUserDetailsService.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/token/ChainedTokenGranter.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/token/DeviceTokenGranter.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/token/JWTAssertionTokenGranter.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/token/ScopeServiceAwareOAuth2RequestValidator.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/view/TokenApiView.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/AuthenticationUtilities.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/CorsFilter.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/DeviceEndpoint.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/IntrospectionEndpoint.java (88%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/OAuth2ExceptionHandler.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/OAuthConfirmationController.java (88%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/RevocationEndpoint.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/ScopeAPI.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/oauth2/web/TokenAPI.java (93%) create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/BeanUtil.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/ExecutionTimeLoggingAspect.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/LogTimes.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/LoggingUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/MapperLoggingAspect.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/ServerLoggingAspect.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/aop/WebLoggingAspect.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/exceptions/ConfigurationException.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/exceptions/InconvertibleValueException.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/exceptions/MissingFieldException.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/AttributeMapping.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Aup.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/ExtSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Facility.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Group.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Member.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Model.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/PerunAttribute.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/PerunAttributeValue.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/PerunAttributeValueAwareModel.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/PerunUser.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Resource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/UserExtSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/Vo.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/enums/MemberStatus.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/enums/PerunAttrValueType.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/enums/PerunEntityType.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/exceptions/InconvertibleValueException.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/models/mappers/RpcMapper.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/IdpMetadataBeans.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunOidcLogoutSuccessHandler.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlAuthenticationProvider.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlAuthenticationSuccessHandler.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlEntryPoint.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlProcessingFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlUserDetailsService.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunWebSSOProfileConsumerImpl.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/SamlInvalidateSessionFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/SamlProperties.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/AttributeMappingsService.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/CustomClearTasks.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/CustomTaskScheduler.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAccessTokenEnhancer.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAcrRepository.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunDeviceCodeAcrRepository.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunIntrospectionResultAssembler.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunOIDCTokenService.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunPrincipal.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunScopeClaimTranslationService.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/PerunAdapter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/PerunAdapterMethods.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/PerunAdapterMethodsLdap.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/PerunAdapterMethodsRpc.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterImpl.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterLdap.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterLdapConstants.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterRpc.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterWithMappingServices.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimContextCommonParameters.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimModifierInitContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimSourceInitContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimSourceProduceContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/PerunCustomClaimDefinition.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/modifiers/AppendModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/modifiers/GroupNamesAARCFormatModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/modifiers/NoOperationModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/modifiers/RegexReplaceModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/EdupersonScopedAffiliationsMUSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/EntitlementExtendedClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/EntitlementSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/ExtractValuesByDomainSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/GroupNamesSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/IsCesnetEligibleClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/PerunAttributeClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/StaticValueClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/TwoArrayAttributesClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/configurations/FacilityAttrsConfig.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/configurations/PerunOidcConfig.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/connectors/Affiliation.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/connectors/PerunConnectorLdap.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/connectors/PerunConnectorRpc.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/elixir/AddHeaderInterceptor.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/elixir/ElixirAccessTokenModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/elixir/GA4GHClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/elixir/GA4GHTokenParser.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/CallPerunFiltersFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/FilterParams.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/FiltersUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/PerunFilterConstants.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/PerunFiltersContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/PerunRequestFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/PerunRequestFilterParams.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/MultiMDCFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/PerunAuthorizationFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/PerunEnsureVoMember.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/PerunForceAupFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/PerunIsCesnetEligibleFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/PerunIsTestSpFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/ProxyStatisticsFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/ValidUserFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/mdc/RemoteAddressMDCFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/impl/mdc/SessionIdMDCFilter.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfo.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoService.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/UserInfoModifier.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/UserInfoModifierContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/UserInfoModifierInitContext.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/WebHtmlClasses.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/ApproveDeviceController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/AupController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/ControllerUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/IsTestSpController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/LoginController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/LogoutController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/PerunOAuthConfirmationController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/PerunUnapprovedController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/PerunUnapprovedRegistrationController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/controllers/RegistrationController.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/web/langs/Localization.java rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/ClientDetailsEntityJsonProcessor.java (53%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/assertion/JWTBearerAssertionAuthenticationToken.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/assertion/JWTBearerAuthenticationProvider.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/assertion/JWTBearerClientAssertionTokenEndpointFilter.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/ConfigurationBeanLocaleResolver.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/ConfigurationPropertiesBean.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/JWKSetEditor.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/JsonMessageSource.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/ServerConfiguration.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/config/UIConfiguration.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/exception/ValidationException.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/filter/AuthorizationRequestFilter.java (81%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/filter/MultiUrlRequestMatcher.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/Address.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/ApprovedSite.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/BlacklistedSite.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/DefaultAddress.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/DefaultUserInfo.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/OIDCAuthenticationToken.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/PairwiseIdentifier.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/PendingOIDCAuthenticationToken.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/UserInfo.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/WhitelistedSite.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/model/convert/JsonObjectStringConverter.java (94%) create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/models/Acr.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/models/DeviceCodeAcr.java rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/AddressRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/ApprovedSiteRepository.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/BlacklistedSiteRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/PairwiseIdentifierRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/UserInfoRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/WhitelistedSiteRepository.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaAddressRepository.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaApprovedSiteRepository.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaBlacklistedSiteRepository.java (72%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaPairwiseIdentifierRepository.java (74%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaUserInfoRepository.java (83%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/repository/impl/JpaWhitelistedSiteRepository.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/request/ConnectOAuth2RequestFactory.java (71%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/request/ConnectRequestParameters.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/ApprovedSiteService.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/BlacklistedSiteService.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/LoginHintExtracter.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/OIDCTokenService.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/PairwiseIdentiferService.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/ScopeClaimTranslationService.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/UserInfoService.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/WhitelistedSiteService.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultApprovedSiteService.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultBlacklistedSiteService.java (72%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultOIDCTokenService.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultScopeClaimTranslationService.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultUserInfoService.java (81%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DefaultWhitelistedSiteService.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/DummyResourceSetService.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/MatchLoginHintsAgainstUsers.java (83%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/PassAllLoginHints.java (84%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/RemoveLoginHintsWithHTTP.java (86%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/service/impl/UUIDPairwiseIdentiferService.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/token/ConnectTokenEnhancer.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/token/TofuUserApprovalHandler.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/util/IdTokenHashUtils.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/AbstractClientEntityView.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/ClientEntityViewForAdmins.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/ClientEntityViewForUsers.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/ClientInformationResponseView.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/HttpCodeView.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/JWKSetView.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/JsonApprovedSiteView.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/JsonEntityView.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/JsonErrorView.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/UserInfoJWTView.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/view/UserInfoView.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/ApprovedSiteAPI.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/AuthenticationTimeStamper.java (96%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/BlacklistAPI.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/ClientAPI.java (85%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/DynamicClientRegistrationEndpoint.java (88%) create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/EndSessionEndpoint.java rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/JWKSetPublishingEndpoint.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/ProtectedResourceRegistrationEndpoint.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/RootController.java (97%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/ServerConfigInterceptor.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/UserInfoEndpoint.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/UserInfoInterceptor.java (94%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/openid/connect/web/WhitelistAPI.java (95%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/Claim.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/ClaimProcessingResult.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/Permission.java (98%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/PermissionTicket.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/Policy.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/ResourceSet.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/SavedRegisteredClient.java (92%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/model/convert/RegisteredClientStringConverter.java (90%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/repository/PermissionRepository.java (87%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/repository/ResourceSetRepository.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/service/ClaimsProcessingService.java (88%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/service/PermissionService.java (93%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/service/ResourceSetService.java (91%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/service/SavedRegisteredClientService.java (89%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/uma/service/UmaTokenService.java (86%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/util/JsonUtils.java (99%) rename {openid-connect-server/src/main/java/org/mitre => perun-oidc-server/src/main/java/cz/muni/ics}/util/jpa/JpaUtil.java (96%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/data/AbstractPageOperationTemplateTest.java (99%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/discovery/util/TestWebfingerURLNormalizer.java (99%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/jose/TestJWKSetKeyStore.java (98%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/jwt/encryption/service/impl/TestDefaultJWTEncryptionAndDecryptionService.java (99%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/model/ClientDetailsEntityTest.java (96%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/model/RegisteredClientTest.java (95%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/repository/impl/TestDatabaseConfiguration.java (94%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/repository/impl/TestJpaOAuth2TokenRepository.java (91%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/service/impl/TestBlacklistAwareRedirectResolver.java (93%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/service/impl/TestDefaultIntrospectionResultAssembler.java (97%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/service/impl/TestDefaultOAuth2ClientDetailsEntityService.java (96%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/service/impl/TestDefaultOAuth2ProviderTokenService.java (97%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/oauth2/service/impl/TestDefaultSystemScopeService.java (97%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/ClientDetailsEntityJsonProcessorTest.java (95%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/assertion/TestJWTBearerAuthenticationProvider.java (97%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/config/ConfigurationPropertiesBeanTest.java (99%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/config/ServerConfigurationTest.java (95%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/config/TestJsonMessageSource.java (96%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestDefaultApprovedSiteService.java (89%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestDefaultBlacklistedSiteService.java (93%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestDefaultOIDCTokenService.java (89%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestDefaultUserInfoService.java (91%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestDefaultWhitelistedSiteService.java (94%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/service/impl/TestUUIDPairwiseIdentiferService.java (88%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/token/TestConnectTokenEnhancer.java (86%) rename {openid-connect-server/src/test/java/org/mitre => perun-oidc-server/src/test/java/cz/muni/ics}/openid/connect/util/TestIdTokenHashUtils.java (96%) rename {openid-connect-server => perun-oidc-server}/src/test/resources/resources/js/locale/en/messages.json (100%) diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml deleted file mode 100644 index 67d8bd146..000000000 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/server-config.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/server-config.xml deleted file mode 100644 index 544f01c98..000000000 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/server-config.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/copyright.tag b/openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/copyright.tag deleted file mode 100644 index 4b0aa920a..000000000 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/copyright.tag +++ /dev/null @@ -1,4 +0,0 @@ -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -HEART Mode - diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/web/EndSessionEndpoint.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/web/EndSessionEndpoint.java deleted file mode 100644 index 26055501a..000000000 --- a/openid-connect-server/src/main/java/org/mitre/openid/connect/web/EndSessionEndpoint.java +++ /dev/null @@ -1,197 +0,0 @@ -/******************************************************************************* - * Copyright 2018 The MIT Internet Trust Consortium - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *******************************************************************************/ - -package org.mitre.openid.connect.web; - -import java.text.ParseException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.mitre.jwt.assertion.AssertionValidator; -import org.mitre.jwt.assertion.impl.SelfAssertionValidator; -import org.mitre.oauth2.model.ClientDetailsEntity; -import org.mitre.oauth2.service.ClientDetailsEntityService; -import org.mitre.openid.connect.model.UserInfo; -import org.mitre.openid.connect.service.UserInfoService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.common.exceptions.InvalidClientException; -import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.util.UriComponents; -import org.springframework.web.util.UriComponentsBuilder; -import org.springframework.web.util.UriUtils; - -import com.google.common.base.Strings; -import com.google.common.collect.Iterables; -import com.nimbusds.jwt.JWT; -import com.nimbusds.jwt.JWTClaimsSet; -import com.nimbusds.jwt.JWTParser; - -/** - * Implementation of the End Session Endpoint from OIDC session management - * - * @author jricher - * - */ -@Controller -public class EndSessionEndpoint { - - public static final String URL = "endsession"; - - private static final String CLIENT_KEY = "client"; - private static final String STATE_KEY = "state"; - private static final String REDIRECT_URI_KEY = "redirectUri"; - - private static Logger logger = LoggerFactory.getLogger(EndSessionEndpoint.class); - - @Autowired - private SelfAssertionValidator validator; - - @Autowired - private UserInfoService userInfoService; - - @Autowired - private ClientDetailsEntityService clientService; - - @RequestMapping(value = "/" + URL, method = RequestMethod.GET) - public String endSession(@RequestParam (value = "id_token_hint", required = false) String idTokenHint, - @RequestParam (value = "post_logout_redirect_uri", required = false) String postLogoutRedirectUri, - @RequestParam (value = STATE_KEY, required = false) String state, - HttpServletRequest request, - HttpServletResponse response, - HttpSession session, - Authentication auth, Model m) { - - // conditionally filled variables - JWTClaimsSet idTokenClaims = null; // pulled from the parsed and validated ID token - ClientDetailsEntity client = null; // pulled from ID token's audience field - - if (!Strings.isNullOrEmpty(postLogoutRedirectUri)) { - session.setAttribute(REDIRECT_URI_KEY, postLogoutRedirectUri); - } - if (!Strings.isNullOrEmpty(state)) { - session.setAttribute(STATE_KEY, state); - } - - // parse the ID token hint to see if it's valid - if (!Strings.isNullOrEmpty(idTokenHint)) { - try { - JWT idToken = JWTParser.parse(idTokenHint); - - if (validator.isValid(idToken)) { - // we issued this ID token, figure out who it's for - idTokenClaims = idToken.getJWTClaimsSet(); - - String clientId = Iterables.getOnlyElement(idTokenClaims.getAudience()); - - client = clientService.loadClientByClientId(clientId); - - // save a reference in the session for us to pick up later - //session.setAttribute("endSession_idTokenHint_claims", idTokenClaims); - session.setAttribute(CLIENT_KEY, client); - } - } catch (ParseException e) { - // it's not a valid ID token, ignore it - logger.debug("Invalid id token hint", e); - } catch (InvalidClientException e) { - // couldn't find the client, ignore it - logger.debug("Invalid client", e); - } - } - - // are we logged in or not? - if (auth == null || !request.isUserInRole("ROLE_USER")) { - // we're not logged in anyway, process the final redirect bits if needed - return processLogout(null, request, response, session, auth, m); - } else { - // we are logged in, need to prompt the user before we log out - - // see who the current user is - UserInfo ui = userInfoService.getByUsername(auth.getName()); - - if (idTokenClaims != null) { - String subject = idTokenClaims.getSubject(); - // see if the current user is the same as the one in the ID token - // TODO: should we do anything different in these cases? - if (!Strings.isNullOrEmpty(subject) && subject.equals(ui.getSub())) { - // it's the same user - } else { - // it's not the same user - } - } - - m.addAttribute("client", client); - m.addAttribute("idToken", idTokenClaims); - - // display the log out confirmation page - return "logoutConfirmation"; - } - } - - @RequestMapping(value = "/" + URL, method = RequestMethod.POST) - public String processLogout(@RequestParam(value = "approve", required = false) String approved, - HttpServletRequest request, - HttpServletResponse response, - HttpSession session, - Authentication auth, Model m) { - - String redirectUri = (String) session.getAttribute(REDIRECT_URI_KEY); - String state = (String) session.getAttribute(STATE_KEY); - ClientDetailsEntity client = (ClientDetailsEntity) session.getAttribute(CLIENT_KEY); - - if (!Strings.isNullOrEmpty(approved)) { - // use approved, perform the logout - if (auth != null){ - new SecurityContextLogoutHandler().logout(request, response, auth); - } - SecurityContextHolder.getContext().setAuthentication(null); - // TODO: hook into other logout post-processing - } - - // if the user didn't approve, don't log out but hit the landing page anyway for redirect as needed - - - - // if we have a client AND the client has post-logout redirect URIs - // registered AND the URI given is in that list, then... - if (!Strings.isNullOrEmpty(redirectUri) && - client != null && client.getPostLogoutRedirectUris() != null) { - - if (client.getPostLogoutRedirectUris().contains(redirectUri)) { - // TODO: future, add the redirect URI to the model for the display page for an interstitial - // m.addAttribute("redirectUri", postLogoutRedirectUri); - - UriComponents uri = UriComponentsBuilder.fromHttpUrl(redirectUri).queryParam("state", state).build(); - - return "redirect:" + uri; - } - } - - // otherwise, return to a nice post-logout landing page - return "postLogout"; - } - -} diff --git a/openid-connect-server-webapp/.gitignore b/perun-oidc-server-webapp/.gitignore similarity index 100% rename from openid-connect-server-webapp/.gitignore rename to perun-oidc-server-webapp/.gitignore diff --git a/openid-connect-server-webapp/pom.xml b/perun-oidc-server-webapp/pom.xml similarity index 71% rename from openid-connect-server-webapp/pom.xml rename to perun-oidc-server-webapp/pom.xml index be9e63a13..8163fe1c4 100644 --- a/openid-connect-server-webapp/pom.xml +++ b/perun-oidc-server-webapp/pom.xml @@ -19,17 +19,84 @@ 4.0.0 - org.mitre - openid-connect-parent + cz.muni.ics + perun-oidc-parent 2.0.0 ../pom.xml - openid-connect-server-webapp + perun-oidc-server-webapp war - OpenID Connect Server Webapp + + + /etc/perun + FILE + oidc + LOCAL7 + info + + ${catalina.base}/logs/${CONTEXT_NAME} + + ${catalina.base}/logs/${CONTEXT_NAME} + trace + log + times + oidc + + + + + org.springframework + spring-orm + + + commons-logging + commons-logging + + + + + org.hsqldb + hsqldb + + + org.eclipse.persistence + org.eclipse.persistence.jpa + + + org.springframework.security + spring-security-taglibs + + + javax.servlet.jsp.jstl + jstl-api + + + com.zaxxer + HikariCP + + + cz.muni.ics + perun-oidc-server + + + org.springframework.security.extensions + spring-security-saml2-core + + + ${final.name} + + + src/main/resources + true + + logback.xml + **/* + + + org.apache.maven.plugins @@ -51,6 +118,7 @@ **/*.tag **/*.jsp + WEB-INF/user-context.xml @@ -81,38 +149,4 @@ - - - org.springframework - spring-orm - - - commons-logging - commons-logging - - - - - org.hsqldb - hsqldb - - - org.eclipse.persistence - org.eclipse.persistence.jpa - - - org.springframework.security - spring-security-taglibs - - - javax.servlet.jsp.jstl - jstl-api - - - com.zaxxer - HikariCP - - - - Deployable package of the OpenID Connect server diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/clients.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/clients.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/clients.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/clients.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/hsql_database_index.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_index.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/hsql_database_index.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_index.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/loading_temp_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/loading_temp_tables.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/loading_temp_tables.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/loading_temp_tables.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/scopes.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/scopes.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/scopes.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/scopes.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/security-schema.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/security-schema.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/security-schema.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/security-schema.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/hsql/users.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/users.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/hsql/users.sql rename to perun-oidc-server-webapp/src/main/resources/db/hsql/users.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/clients.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/clients.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/clients.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/clients.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/mysql_database_index.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_index.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/mysql_database_index.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_index.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/scopes.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/scopes.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/scopes.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/scopes.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/security-schema.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/security-schema.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/security-schema.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/security-schema.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/mysql/users.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/users.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/mysql/users.sql rename to perun-oidc-server-webapp/src/main/resources/db/mysql/users.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/clients_oracle.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/clients_oracle.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/clients_oracle.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/clients_oracle.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/create_db-user b/perun-oidc-server-webapp/src/main/resources/db/oracle/create_db-user similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/create_db-user rename to perun-oidc-server-webapp/src/main/resources/db/oracle/create_db-user diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml b/perun-oidc-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml similarity index 84% rename from openid-connect-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml rename to perun-oidc-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml index 2aba62824..1578a9de6 100644 --- a/openid-connect-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml +++ b/perun-oidc-server-webapp/src/main/resources/db/oracle/entity-mappings_oracle.xml @@ -20,7 +20,7 @@ OpenID Connect Server entities - + @@ -33,7 +33,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -92,27 +92,27 @@ - + - + - + - + - + @@ -124,7 +124,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -157,7 +157,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -179,7 +179,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -201,7 +201,7 @@ - + @@ -212,7 +212,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -234,7 +234,7 @@ - + @@ -245,7 +245,7 @@ - + @@ -256,7 +256,7 @@ - + @@ -267,7 +267,7 @@ - + @@ -278,4 +278,4 @@ - \ No newline at end of file + diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/loading_temp_tables_oracle.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/loading_temp_tables_oracle.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/loading_temp_tables_oracle.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/loading_temp_tables_oracle.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/oracle_database_index.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/oracle_database_index.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/oracle_database_index.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/oracle_database_index.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/oracle_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/oracle_database_tables.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/oracle_database_tables.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/oracle_database_tables.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/scopes_oracle.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/scopes_oracle.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/scopes_oracle.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/scopes_oracle.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/security-schema_oracle.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/security-schema_oracle.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/security-schema_oracle.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/security-schema_oracle.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/oracle/users_oracle.sql b/perun-oidc-server-webapp/src/main/resources/db/oracle/users_oracle.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/oracle/users_oracle.sql rename to perun-oidc-server-webapp/src/main/resources/db/oracle/users_oracle.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/clients.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/clients.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/clients.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/clients.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/psql_database_index.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_index.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/psql_database_index.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_index.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/psql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/psql_database_tables.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/scopes.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/scopes.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/scopes.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/scopes.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/security-schema.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/security-schema.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/security-schema.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/security-schema.sql diff --git a/openid-connect-server-webapp/src/main/resources/db/psql/users.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/users.sql similarity index 100% rename from openid-connect-server-webapp/src/main/resources/db/psql/users.sql rename to perun-oidc-server-webapp/src/main/resources/db/psql/users.sql diff --git a/openid-connect-server-webapp/src/main/resources/keystore.jwks b/perun-oidc-server-webapp/src/main/resources/keystore.jwks similarity index 100% rename from openid-connect-server-webapp/src/main/resources/keystore.jwks rename to perun-oidc-server-webapp/src/main/resources/keystore.jwks diff --git a/perun-oidc-server-webapp/src/main/resources/localization/cs.properties b/perun-oidc-server-webapp/src/main/resources/localization/cs.properties new file mode 100644 index 000000000..bdd8ac27e --- /dev/null +++ b/perun-oidc-server-webapp/src/main/resources/localization/cs.properties @@ -0,0 +1,173 @@ +#CONSENT +yes=Ano, akceptuji +no=Ne, neakceptuji +login=Login +consent_privacy_policy=Zásady zpracování osobních údajů pro službu +consent_header=Obsah odesílaných osobních informací službě +consent_title=Obsah odesílaných osobních informací službě +remember=Příště se již neptat + +#APPROVE_DEVICE +device_approve_privacy=Bezpečnostní politika služby +device_approve_header=Schválení přístupu k Vašim datům +device_approve_title=Schválení přístupu k Vašim datům + +#DEVICE_APPROVED +device_approved_approved=Zařížení bylo autorizováno +device_approved_rejected=Zařízení byl odmítnut přístup +device_approved_title=Autorizace zařízení dokončena +device_approved_text_approved_start=Zařízení bylo úspěšně autorizováno. Nyní můžete pokračovat ke službě +device_approved_text_approved_end=na Vašem zařízení. Tahle stránka může být zavřena. +device_approved_text_rejected_start=Zařízení byl odmítnut přístup ke službě +device_approved_text_rejected_end=Jestli jste tak nechtěli učinit, zahajte proces autorizace od začátku. Tahle stránka může být zavřena. + + +#REQUEST USER CODE +request_code_title=Zadejte autorizační kód zařízení +request_code_header=Zadejte autorizační kód zařízení +user_code_empty_or_not_found=Nebyl zadán žádný kód anebo zadanej kód je nesprávný. +user_code_expired=Platnost použitého kódu vypršela. Prosíme, vyžádejte si nový a opakujte proces. +user_code_already_approved=Zadaný kód už byl použit. Prosíme, vyžádejte si nový a opakujte proces. +user_code_mismatch=Zadaný kód nebyl rozpoznán. Prosíme, ověřte že jste zadali správný kód. +user_code_error=Vyskytla se chyba pri zpracování Vašeho požadavku. Zkuste jej zopakovat. +user_code_submit=Pokračovat +user_code_info=Zadejte autorizační kód zobrazen na zařízení z kterého se snažíte přihlásit. +code=Kód + +#IsTestSpWarning +is_test_sp_warning_title=Varování - služba je testovací +is_test_sp_warning_header=Varování +is_test_sp_warning_text=Přistupujete ke službě, která je v testovacím režimu. +is_test_sp_warning_continue=Pokračovat + +#CLAIMS AND SCOPES +no_scopes=Žádné data nebudou odeslány +openid=Identifikátor uživatele na službě +sub=Identifikátor uživatele +profile=Profil uživatele +email=Email +address=Adresa +phone=Telefonní číslo +offline_access=Offline přístup +perun_api=Volání Perun API ve jménu uživatele +groupNames=Jména skupin ve kterých je uživatel členem +eduPersonEntitlement=Oprávnění +permissions_ega=Povolení pro EGA datasety +permissions_rems=Povolení pro REMS datasety +forwardedScopedAffiliations=Vztah k domovské(ým) organizaci(cím) +bona_fide_status=Bona fide status +country=Krajina +ga4gh=Global Alliance For Genomics and Health +eppns=Identifikátory osoby v organizaci +name=Jméno uživatele +preferred_username=Uživatelské jméno +given_name=Křestní jméno +middle_name=Střední jméno +family_name=Příjmení +locale=Jazyk +zoneinfo=Zóna +phone_number=Telefon + +#UNAPPROVED +contact_p=V případě nejasností nás kontaktujte na +403_header=Přístup odmítnut +403_text=Nemáte dostatečná práva pro přístup ke službě: +403_informationPage=Pro více informací o službě navštivte +403_contactSupport=Pokud si myslíte že máte mít přístup, kontaktujte administrátora: +403_subject=Problém s přihlášením do služby +403_isCesnetEligible_notSet_hdr=Přístup zamítnut +403_isCesnetEligible_notSet_msg=Přístup ke službě zamítnut, protože Váš účet není z české akademické instituce. Přihlaste se, prosím, pomocí svého účtu u akademické instituce.
Znovu přihlásit +403_isCesnetEligible_expired_hdr=Přístup zamítnut +403_isCesnetEligible_expired_msg=Přístup ke službě zamítnut, protože plynula doba 12 měsíců od Vašeho posledního přihlášení účtem z české akademické instituce. Přihlaste se, prosím, pomocí svého účtu u akademické instituce.
Znovu přihlásit +403_ensure_vo_hdr=Přístup zamítnut +403_ensure_vo_msg=Nemáte dostatečná práva pro přístup ke službě +403_authorization_hdr=Přístup zamítnut +403_authorization_msg=Tato stránka se Vám zobrazuje, protože nemáte přístup ke službě. To může být důsledkem přístupových omezení nastavených administrátorem. +403_not_in_test_vos_groups_hdr=Přístup zamítnut +403_not_in_test_vos_groups_msg=Tato stránka se Vám zobrazuje, protože nemáte přístup k testovacím službám AAI. +403_not_in_prod_vos_groups_hdr=Přístup zamítnut +403_not_in_prod_vos_groups_msg=Tato stránka se Vám zobrazuje, protože nemáte přístup ke službám AAI. +403_not_in_mandatory_vos_groups_hdr=Přístup zamítnut +403_not_in_mandatory_vos_groups_msg=Tato stránka se Vám zobrazuje, protože Vaše požadované členství v organizaci je nevalidní. +403_not_logged_in_hdr=Přístup zamítnut +403_not_logged_in_msg=Zdá se, že přihlášení selhalo. Zkuste, prosím, zavřít Váš prohlížeč a přihlásit se znovu. + +#GO TO REGISTRATION +go_to_registration_title=Je vyžadována Vaše aktivita +go_to_registration_header1=Pro přístup ke službě +go_to_registration_header2=je vyžadována Vaše aktivita +go_to_registration_continue=Pokračovat na stránku s doplňujícími informacemi + +#REGISTRATION +registration_title=Registrace pro přístup ke službě +registration_header1=Přístup ke službě +registration_header2=byl zamítnut +registration_message=Pro získání přístupu k dané službě je nutné být členem jedné z následujících skupin. Pokračujte výběrem příslušné organizace a skupiny. +registration_select_vo=Vyberte virtuální organizaci: +registration_select_group=Vyberte skupinu pro registraci: +registration_continue=Pokračovat na registrační stránku do vybrané skupiny + +#CESNET footer specific +footer_other_projects=OSTATNÍ PROJEKTY +footer_helpdesk=HELPDESK + +#AUP +aup_header=Formulář s podmínkami užití +must_agree_aup=Pro pokračování musíte souhlasit s následujícími podmínkami užití: +org_vo=Organizace / Virtuální Organizace +see_aup=Prohlédněte si podmínky užití ve verzi +here=zde. +agree_aup=Souhlasím s podmínkami užití + +#MUNI header specific +unif_login="Přihlášení na MU" +go_to_login_title=Přejít k přihlášení (Klávesová zkratka: Alt + 2) +go_to_login_text=Přejít k přihlášení +language=Česky +img_name=sso +img_width=180 +img_height=34 +other_lang=en +other_language=English +muni_logo=MUNI Jednotné přihlášení + +#MUNI footer specific +masaryk_university=© Masarykova univerzita +service=Službu +unified_login=Jednotné přihlášení na MU +provided=zajišťuje +ics=Ústav výpočetní techniky MU + +#Logout +logout.confirmation.submit=Odhlásit +logout.confirmation.deny=Zůstat přihlášen(a) +logout.confirmation.header=Potvrzení odhlášení +logout.confirmation.explanation=Skutečně se chcete odhlásit od poskytovatele identity? + +#Continue in ensure_vo +continue_direct_title=Přesměrování na registraci +continue_direct_header=Budete přesměrován(a) +continue_direct_heading=Zaregistrujte se pro získaní přístupu +continue_direct_text=Nemáte dostatečná oprávnení po přístup ke službě. Kliknutím na tlačítko níže, budete přesměrován(a) na registraci pro získání přístupu. +continue_direct_btn=Pokračovat + +# SAML Logout Success (/logout_success) +logout_success_title=Odhlášení proběhlo úspěšně +logout_success_header=Odhlášení proběhlo úspěšně +logout_success_msg=Byl(a) jste úspěšně odhlášen(a). + +# SAML Login Failure (/login_failure) +login_failure_title=Problém s přihlášením +login_failure_header=Problém s přihlášením +login_failure_msg=Ups! Zdá se, že jsme Vás nemohli přihlásit. Zkuste to znovu. +login_failure_contact_us=Pokud problém přetrvává, kontaktuje nás na + +# SAML Login Success (/login_success) +login_success_title=Přihlášení proběhlo úspěšně +login_success_header=Přihlášení proběhlo úspěšně +login_success_msg=Byl(a) jste úspěšně přihlášen(a), avšak neregistrujeme žádnou službu, na kterou jste se pokoušel(a) přistoupit. + +# Logout denied (endsession endpoint with clicking NO) +logout_denied_title=Odhlášení zrušeno +logout_denied_header=Odhlášení zrušeno +logout_denied_msg=Proces odhlášení byl zastaven. diff --git a/perun-oidc-server-webapp/src/main/resources/localization/en.properties b/perun-oidc-server-webapp/src/main/resources/localization/en.properties new file mode 100644 index 000000000..be19a55ef --- /dev/null +++ b/perun-oidc-server-webapp/src/main/resources/localization/en.properties @@ -0,0 +1,172 @@ +#CONSENT +yes=Yes, continue +no=No, cancel +login=login +consent_privacy_policy=Privacy policy for the service +consent_header=Consent about releasing personal information to service +consent_title=Consent about releasing personal information to service +remember=Do not ask again + +#APPROVE_DEVICE +device_approve_privacy=Privacy policy for the service +device_approve_header=Approve device to access your data +device_approve_title=Approve device to access your data + +#DEVICE_APPROVED +device_approved_approved=The device has been authorized. +device_approved_rejected=The device has been rejected authorization. +device_approved_title=Device approval result +device_approved_text_approved_start=The device has been successfully authorized. You can now access the service +device_approved_text_approved_end=on your device. You may now close this page. +device_approved_text_rejected_start=The device has been denied access to the service +device_approved_text_rejected_end=If you did not intend to do this, start the authorization process again. You may now close this page. + +#REQUEST USER CODE +request_code_title=Enter the device authorization code +request_code_header=Enter the device authorization code +user_code_empty_or_not_found=No authorization code has been provided or it has not been recognized. +user_code_expired=The authorization code you have used has expired. Please request a new one and restart the process. +user_code_already_approved=The authorization code you have used has been already used. Please request a new one and restart the process. +user_code_mismatch=The code you have used has not been recognized. Please verify your input. +user_code_error=An error has occurred while processing your request. Please try it again. +user_code_submit=Submit +user_code_info=Enter the code displayed on the device you are trying to authenticate on. +code=Code + +#IsTestSpWarning +is_test_sp_warning_title=Warning - test service +is_test_sp_warning_header=Warning +is_test_sp_warning_text=You are about to access service, which is in testing environment. +is_test_sp_warning_continue=Continue + + +#CLAIMS AND SCOPES +no_scopes=No data will be released +sub=Identifier of user +openid=Identifier of user on a service +profile=Profile +email=Email +address=Adress +phone=Phone number +offline_access=Offline access +perun_api=Calls to Perun API in the name of user +groupNames=Names of groups that user is member of +eduPersonEntitlement=Entitlement +permissions_ega=Permissions for EGA datasets +permissions_rems=Permissions for REMS datasets +forwardedScopedAffiliations=Home organization affiliation +bona_fide_status=Bona fide status +country=Country +eppns=Person principal names +name=Name of user +preferred_username=Username +given_name=Given name +middle_name=Middle name +family_name=Family name +locale=Language +zoneinfo=Zone +phone_number=Phone + +#UNAPPROVED +contact_p=In case of any questions, do not hesitate to contact us at +403_header=Access forbidden +403_text=You don't meet the prerequisites for accessing the service: +403_informationPage=For more information about this service please visit this +403_contactSupport=If you think you should have an access contact service operator at +403_subject=Problem with login to service: +403_isCesnetEligible_notSet_hdr=Access denied +403_isCesnetEligible_notSet_msg=Your account is not from Czech academic institution. Please log in with your account from academic institution.Log in again +403_isCesnetEligible_expired_hdr=Access denied +403_isCesnetEligible_expired_msg=Your last login, from Czech academic institution, has been registered 12 months ago. Please sign in with your account from academic institution.Log in again +403_ensure_vo_hdr=Access denied +403_ensure_vo_msg=You don't meet the prerequisites to access the service. +403_authorization_hdr=Access denied +403_authorization_msg=You see this page because you are not allowed to access the service. This situation can be a result of the access restrictions that the service administrator has set up. +403_not_in_test_vos_groups_hdr=Access denied +403_not_in_test_vos_groups_msg=You see this page because you are not allowed to access AAI's testing services. +403_not_in_prod_vos_groups_hdr=Access denied +403_not_in_prod_vos_groups_msg=You see this page because you are not allowed to access AAI's services. +403_not_in_mandatory_vos_groups_hdr=Access denied +403_not_in_mandatory_vos_groups_msg=You are seeing this page because your membership in the required organizational units is invalid. +403_not_logged_in_hdr=Access denied +403_not_logged_in_msg=It appears the login process has failed. Please close your browser and try to log in again. + +#GO TO REGISTRATION +go_to_registration_title=Your activity is necessary +go_to_registration_header1=Your activity is necessary to access the +go_to_registration_header2=service +go_to_registration_continue=Continue to a page with additional information + +#REGISTRATION +registration_title=Registration for access to the service +registration_header1=Access to the service +registration_header2=has been forbidden +registration_message=To access the service it is necessary to have a valid membership in one of the following groups. Please proceed with selection of organization and group for registration. +registration_select_vo=Select virtual organization for registration: +registration_select_group=Select group for registration: +registration_continue=Continue to the registration page for selected group + +#CESNET footer specific +footer_other_projects=OTHER CESNET PROJECTS +footer_helpdesk=HELPDESK + +#AUP +aup_header=Acceptable Usage Policy form +must_agree_aup=You must agree to the following acceptable usage policies: +org_vo=Organization / Virtual Organization +see_aup=See the acceptable usage policy in version +here=here. +agree_aup=I agree with the acceptable usage policy + +#MUNI header specific +unif_login=Unified MU login +go_to_login_title=Go to login (Shortcut: Alt + 2) +go_to_login_text=Go to login +language=English +img_name=sso-en +img_width=160 +img_height=35 +other_lang=cs +other_language=Česky +muni_logo=MUNI Unified login + +#MUNI footer specific +masaryk_university=© Masaryk University +service=The service +unified_login=Unified MU login +provided=is provided by +ics=Institute of Computer Science + +#Logout +logout.confirmation.submit=Log Out +logout.confirmation.deny=Stay Logged In +logout.confirmation.header=Confirm logout +logout.confirmation.explanation=Do you want to log out of the identity provider? + +#Continue in ensure_vo +continue_direct_title=Redirect to registration +continue_direct_header=You will be redirected +continue_direct_heading=Register to get access +continue_direct_text=You don't meet the prerequisites to access the service. By clicking the button below, you will be redirected to a registration page, where you can apply for access. +continue_direct_btn=Continue + +# SAML Logout Success (/logout_success) +logout_success_title=Logout success +logout_success_header=Logout success +logout_success_msg=You have been successfully logged out. + +# SAML Login Failure (/login_failure) +login_failure_title=Login failure +login_failure_header=Login error +login_failure_msg=Ooops! It seems like an error during the login. Please try to log in again. +login_failure_contact_us=If the problem persists, contact us at + +# SAML Login Success (/login_success) +login_success_title=Login success +login_success_header=Login success +login_success_msg=You have successfully logged in. However, it seems we have no service to forward you to. + +# Logout denied (endsession endpoint with clicking NO) +logout_denied_title=Logout denied +logout_denied_header=Logout canceled +logout_denied_msg=You have canceled the logout process. diff --git a/openid-connect-server-webapp/src/main/resources/log4j.xml b/perun-oidc-server-webapp/src/main/resources/log4j.xml similarity index 88% rename from openid-connect-server-webapp/src/main/resources/log4j.xml rename to perun-oidc-server-webapp/src/main/resources/log4j.xml index efb4074fe..3293dcfd4 100644 --- a/openid-connect-server-webapp/src/main/resources/log4j.xml +++ b/perun-oidc-server-webapp/src/main/resources/log4j.xml @@ -32,28 +32,28 @@ - + - + - + - + - + - + - + - + diff --git a/perun-oidc-server-webapp/src/main/resources/logback.xml b/perun-oidc-server-webapp/src/main/resources/logback.xml new file mode 100644 index 000000000..30fe672a2 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/resources/logback.xml @@ -0,0 +1,58 @@ + + ${log.contextName} + + + + + + ${log.rolling-file}.${log.file-extension} + + ${log.rolling-file}.${log.file-extension}.%d{yyyy-MM-dd} + + + ${PATTERN} + + + + + + ${log.file}.${log.file-extension} + + ${PATTERN} + + + + + + + ${log.facility} + true + ${PATTERN_SYSLOG} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/resources/web_classes/web_html_classes.properties b/perun-oidc-server-webapp/src/main/resources/web_classes/web_html_classes.properties new file mode 100644 index 000000000..d5fa0d22d --- /dev/null +++ b/perun-oidc-server-webapp/src/main/resources/web_classes/web_html_classes.properties @@ -0,0 +1,4 @@ +perun-attrname.h2.class=h4 oh mb-0 mt-0 +perun-attrname.label.class=h4 mb-0 mt-0 +perun-attrcontainer.ul.class= +perun-attrlist.h3.class=h5 mb-0 mt-0 \ No newline at end of file diff --git a/openid-connect-server-webapp/src/main/webapp/META-INF/MANIFEST.MF b/perun-oidc-server-webapp/src/main/webapp/META-INF/MANIFEST.MF similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/META-INF/MANIFEST.MF rename to perun-oidc-server-webapp/src/main/webapp/META-INF/MANIFEST.MF diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml similarity index 76% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml index ed566e002..dae4f464f 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml @@ -33,7 +33,7 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> - + @@ -44,23 +44,23 @@ - - + + - - + + - - - - - - - + + + + + + + @@ -68,17 +68,17 @@ - - + + - - - - - - - + + + + + + + @@ -102,7 +102,7 @@ - + @@ -127,14 +127,14 @@ - - + + - - + + @@ -149,7 +149,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -167,7 +167,7 @@ - + @@ -175,14 +175,14 @@ - + - - - - + /introspect @@ -256,7 +256,7 @@ - + @@ -270,7 +270,7 @@ - + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml similarity index 83% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml index 0ec4ce7f6..4836d3614 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/assertion-config.xml @@ -29,16 +29,16 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> - + - + - + - + @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/authz-config.xml similarity index 96% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/authz-config.xml index 4d5242ae1..4ca0109b9 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/authz-config.xml @@ -52,7 +52,7 @@ - + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/acrs.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/acrs.sql new file mode 100644 index 000000000..0013f501a --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/acrs.sql @@ -0,0 +1,22 @@ +CREATE TABLE IF NOT EXISTS acrs ( + id BIGINT AUTO_INCREMENT, + client_id VARCHAR(2048) NOT NULL, + sub VARCHAR(2048) NOT NULL, + state VARCHAR(2048) NOT NULL, + shib_authn_context_class VARCHAR(2048) NOT NULL, + expiration BIGINT NOT NULL, + PRIMARY KEY (id) +); + +ALTER TABLE acrs MODIFY COLUMN expiration BIGINT; + +CREATE TABLE IF NOT EXISTS device_code_acrs ( + id BIGINT AUTO_INCREMENT, + device_code VARCHAR(2048) NOT NULL, + user_code VARCHAR(2048) NOT NULL, + shib_authn_context_class VARCHAR(2048), + expiration BIGINT NOT NULL, + PRIMARY KEY (id) +); + +ALTER TABLE device_code_acrs MODIFY COLUMN expiration BIGINT; diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/db_update.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/db_update.sql new file mode 100644 index 000000000..733cc6e7d --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/db_update.sql @@ -0,0 +1,10 @@ +ALTER TABLE authentication_holder_request_parameter +MODIFY COLUMN val TEXT; + +CREATE TABLE shedlock( + name VARCHAR(64), + lock_until TIMESTAMP(3) NULL, + locked_at TIMESTAMP(3) NULL, + locked_by VARCHAR(255), + PRIMARY KEY (name) +); diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/scopes.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/scopes.sql new file mode 100644 index 000000000..15bb8f1ef --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/mysql/scopes.sql @@ -0,0 +1,39 @@ +-- +-- Turn off autocommit and start a transaction so that we can use the temp tables +-- + +SET AUTOCOMMIT = 0; + +START TRANSACTION; + +CREATE TEMPORARY TABLE IF NOT EXISTS system_scope_TEMP ( + scope VARCHAR(256), + description VARCHAR(4096), + icon VARCHAR(256), + restricted BOOLEAN, + default_scope BOOLEAN +); +-- +-- Insert scope information into the temporary tables. +-- + +INSERT INTO system_scope_TEMP (scope, description, icon, restricted, default_scope) VALUES + ('openid', 'log in using your identity', 'user', false, true), + ('profile', 'basic profile information', 'list-alt', false, true), + ('email', 'email address', 'envelope', false, true), + ('address', 'physical address', 'home', false, true), + ('phone', 'telephone number', 'bell', false, true), + ('offline_access', 'offline access', 'time', false, false), + ('perun_api', 'calls to Perun API in your roles', 'cog', true, false); + +-- +-- Merge the temporary scopes safely into the database. This is a two-step process to keep scopes from being created on every startup with a persistent store. +-- + +INSERT INTO system_scope (scope, description, icon, restricted, default_scope) + SELECT scope, description, icon, restricted, default_scope FROM system_scope_TEMP + ON DUPLICATE KEY UPDATE system_scope.scope = system_scope.scope; + +COMMIT; + +SET AUTOCOMMIT = 1; diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/acrs.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/acrs.sql new file mode 100644 index 000000000..96f415140 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/acrs.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS acrs ( + id BIGINT AUTO_INCREMENT, + client_id VARCHAR(2048) NOT NULL, + sub VARCHAR(2048) NOT NULL, + acr_values VARCHAR(2048) NOT NULL, + state VARCHAR(2048) NOT NULL, + shib_authn_context_class VARCHAR(2048) NOT NULL, + expiration BIGINT NOT NULL, + PRIMARY KEY (id) +); + +ALTER TABLE acrs MODIFY COLUMN expiration BIGINT; diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/db_update.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/db_update.sql new file mode 100644 index 000000000..5eca832d6 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/db_update.sql @@ -0,0 +1,7 @@ +CREATE TABLE shedlock( + name VARCHAR(64), + lock_until TIMESTAMP(3) NULL, + locked_at TIMESTAMP(3) NULL, + locked_by VARCHAR(255), + PRIMARY KEY (name) +); diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/loading_temp_tables.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/loading_temp_tables.sql new file mode 100644 index 000000000..37b0092e7 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/loading_temp_tables.sql @@ -0,0 +1,73 @@ +-- +-- Temporary tables used during the bootstrapping process to safely load users and clients. +-- These are not needed if you're not using the users.sql/clients.sql files to bootstrap the database. +-- + +CREATE TEMPORARY TABLE IF NOT EXISTS authorities_TEMP ( + username varchar(50) not null, + authority varchar(50) not null, + constraint ix_authority_TEMP unique (username,authority)); + +CREATE TEMPORARY TABLE IF NOT EXISTS users_TEMP ( + username varchar(50) not null primary key, + password varchar(50) not null, + enabled boolean not null); + +CREATE TEMPORARY TABLE IF NOT EXISTS user_info_TEMP ( + sub VARCHAR(256) not null primary key, + preferred_username VARCHAR(256), + name VARCHAR(256), + given_name VARCHAR(256), + family_name VARCHAR(256), + middle_name VARCHAR(256), + nickname VARCHAR(256), + profile VARCHAR(256), + picture VARCHAR(256), + website VARCHAR(256), + email VARCHAR(256), + email_verified BOOLEAN, + gender VARCHAR(256), + zone_info VARCHAR(256), + locale VARCHAR(256), + phone_number VARCHAR(256), + address_id VARCHAR(256), + updated_time VARCHAR(256), + birthdate VARCHAR(256) +); + +CREATE TEMPORARY TABLE IF NOT EXISTS client_details_TEMP ( + client_description VARCHAR(256), + dynamically_registered BOOLEAN, + id_token_validity_seconds BIGINT, + + client_id VARCHAR(256), + client_secret VARCHAR(2048), + access_token_validity_seconds BIGINT, + refresh_token_validity_seconds BIGINT, + allow_introspection BOOLEAN, + + client_name VARCHAR(256) +); + +CREATE TEMPORARY TABLE IF NOT EXISTS client_scope_TEMP ( + owner_id VARCHAR(256), + scope VARCHAR(2048) +); + +CREATE TEMPORARY TABLE IF NOT EXISTS client_redirect_uri_TEMP ( + owner_id VARCHAR(256), + redirect_uri VARCHAR(2048) +); + +CREATE TEMPORARY TABLE IF NOT EXISTS client_grant_type_TEMP ( + owner_id VARCHAR(256), + grant_type VARCHAR(2000) +); + +CREATE TEMPORARY TABLE IF NOT EXISTS system_scope_TEMP ( + scope VARCHAR(256), + description VARCHAR(4096), + icon VARCHAR(256), + restricted BOOLEAN, + default_scope BOOLEAN +); \ No newline at end of file diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/psql_database_tables.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/psql_database_tables.sql new file mode 100644 index 000000000..9a5c867d5 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/psql_database_tables.sql @@ -0,0 +1,384 @@ +-- +-- Tables for OIDC Server functionality, PostgreSQL +-- + +CREATE TABLE IF NOT EXISTS access_token ( + id SERIAL PRIMARY KEY, + token_value VARCHAR(4096), + expiration TIMESTAMP, + token_type VARCHAR(256), + refresh_token_id BIGINT, + client_id BIGINT, + auth_holder_id BIGINT, + approved_site_id BIGINT, + UNIQUE(token_value) +); + +CREATE TABLE IF NOT EXISTS access_token_permissions ( + access_token_id BIGINT NOT NULL, + permission_id BIGINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS address ( + id SERIAL PRIMARY KEY, + formatted VARCHAR(256), + street_address VARCHAR(256), + locality VARCHAR(256), + region VARCHAR(256), + postal_code VARCHAR(256), + country VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS approved_site ( + id SERIAL PRIMARY KEY, + user_id VARCHAR(256), + client_id VARCHAR(256), + creation_date TIMESTAMP, + access_date TIMESTAMP, + timeout_date TIMESTAMP, + whitelisted_site_id BIGINT +); + +CREATE TABLE IF NOT EXISTS approved_site_scope ( + owner_id BIGINT, + scope VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS authentication_holder ( + id SERIAL PRIMARY KEY, + user_auth_id BIGINT, + approved BOOLEAN, + redirect_uri VARCHAR(2048), + client_id VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_authority ( + owner_id BIGINT, + authority VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_resource_id ( + owner_id BIGINT, + resource_id VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_response_type ( + owner_id BIGINT, + response_type VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_extension ( + owner_id BIGINT, + extension VARCHAR(2048), + val VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_scope ( + owner_id BIGINT, + scope VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS authentication_holder_request_parameter ( + owner_id BIGINT, + param VARCHAR(2048), + val TEXT +); + +CREATE TABLE IF NOT EXISTS saved_user_auth ( + id SERIAL PRIMARY KEY, + name VARCHAR(1024), + authenticated BOOLEAN, + source_class VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS saved_user_auth_authority ( + owner_id BIGINT, + authority VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS client_authority ( + owner_id BIGINT, + authority VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS authorization_code ( + id SERIAL PRIMARY KEY, + code VARCHAR(256), + auth_holder_id BIGINT, + expiration TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS client_grant_type ( + owner_id BIGINT, + grant_type VARCHAR(2000) +); + +CREATE TABLE IF NOT EXISTS client_response_type ( + owner_id BIGINT, + response_type VARCHAR(2000) +); + +CREATE TABLE IF NOT EXISTS blacklisted_site ( + id SERIAL PRIMARY KEY, + uri VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS client_details ( + id SERIAL PRIMARY KEY, + + client_description VARCHAR(1024), + reuse_refresh_tokens BOOLEAN DEFAULT true NOT NULL, + dynamically_registered BOOLEAN DEFAULT false NOT NULL, + allow_introspection BOOLEAN DEFAULT false NOT NULL, + id_token_validity_seconds BIGINT DEFAULT 600 NOT NULL, + device_code_validity_seconds BIGINT, + + client_id VARCHAR(256), + client_secret VARCHAR(2048), + access_token_validity_seconds BIGINT, + refresh_token_validity_seconds BIGINT, + + application_type VARCHAR(256), + client_name VARCHAR(256), + token_endpoint_auth_method VARCHAR(256), + subject_type VARCHAR(256), + + logo_uri VARCHAR(2048), + policy_uri VARCHAR(2048), + client_uri VARCHAR(2048), + tos_uri VARCHAR(2048), + + jwks_uri VARCHAR(2048), + jwks VARCHAR(8192), + sector_identifier_uri VARCHAR(2048), + + request_object_signing_alg VARCHAR(256), + + user_info_signed_response_alg VARCHAR(256), + user_info_encrypted_response_alg VARCHAR(256), + user_info_encrypted_response_enc VARCHAR(256), + + id_token_signed_response_alg VARCHAR(256), + id_token_encrypted_response_alg VARCHAR(256), + id_token_encrypted_response_enc VARCHAR(256), + + token_endpoint_auth_signing_alg VARCHAR(256), + + default_max_age BIGINT, + require_auth_time BOOLEAN, + created_at TIMESTAMP, + initiate_login_uri VARCHAR(2048), + clear_access_tokens_on_refresh BOOLEAN DEFAULT true NOT NULL, + + software_statement VARCHAR(4096), + software_id VARCHAR(2048), + software_version VARCHAR(2048), + + code_challenge_method VARCHAR(256), + + UNIQUE (client_id) +); + +CREATE TABLE IF NOT EXISTS client_request_uri ( + owner_id BIGINT, + request_uri VARCHAR(2000) +); + +CREATE TABLE IF NOT EXISTS client_post_logout_redirect_uri ( + owner_id BIGINT, + post_logout_redirect_uri VARCHAR(2000) +); + +CREATE TABLE IF NOT EXISTS client_default_acr_value ( + owner_id BIGINT, + default_acr_value VARCHAR(2000) +); + +CREATE TABLE IF NOT EXISTS client_contact ( + owner_id BIGINT, + contact VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS client_redirect_uri ( + owner_id BIGINT, + redirect_uri VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS client_claims_redirect_uri ( + owner_id BIGINT, + redirect_uri VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS refresh_token ( + id SERIAL PRIMARY KEY, + token_value VARCHAR(4096), + expiration TIMESTAMP, + auth_holder_id BIGINT, + client_id BIGINT +); + +CREATE TABLE IF NOT EXISTS client_resource ( + owner_id BIGINT, + resource_id VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS client_scope ( + owner_id BIGINT, + scope VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS token_scope ( + owner_id BIGINT, + scope VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS system_scope ( + id SERIAL PRIMARY KEY, + scope VARCHAR(256) NOT NULL, + description VARCHAR(4096), + icon VARCHAR(256), + restricted BOOLEAN DEFAULT false NOT NULL, + default_scope BOOLEAN DEFAULT false NOT NULL, + UNIQUE (scope) +); + +CREATE TABLE IF NOT EXISTS user_info ( + id SERIAL PRIMARY KEY, + sub VARCHAR(256), + preferred_username VARCHAR(256), + name VARCHAR(256), + given_name VARCHAR(256), + family_name VARCHAR(256), + middle_name VARCHAR(256), + nickname VARCHAR(256), + profile VARCHAR(256), + picture VARCHAR(256), + website VARCHAR(256), + email VARCHAR(256), + email_verified BOOLEAN, + gender VARCHAR(256), + zone_info VARCHAR(256), + locale VARCHAR(256), + phone_number VARCHAR(256), + phone_number_verified BOOLEAN, + address_id VARCHAR(256), + updated_time VARCHAR(256), + birthdate VARCHAR(256), + src VARCHAR(4096) +); + +CREATE TABLE IF NOT EXISTS whitelisted_site ( + id SERIAL PRIMARY KEY, + creator_user_id VARCHAR(256), + client_id VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS whitelisted_site_scope ( + owner_id BIGINT, + scope VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS pairwise_identifier ( + id SERIAL PRIMARY KEY, + identifier VARCHAR(256), + sub VARCHAR(256), + sector_identifier VARCHAR(2048) +); + +CREATE TABLE IF NOT EXISTS resource_set ( + id SERIAL PRIMARY KEY, + name VARCHAR(1024) NOT NULL, + uri VARCHAR(1024), + icon_uri VARCHAR(1024), + rs_type VARCHAR(256), + owner VARCHAR(256) NOT NULL, + client_id VARCHAR(256) +); + +CREATE TABLE IF NOT EXISTS resource_set_scope ( + owner_id BIGINT NOT NULL, + scope VARCHAR(256) NOT NULL +); + +CREATE TABLE IF NOT EXISTS permission_ticket ( + id SERIAL PRIMARY KEY, + ticket VARCHAR(256) NOT NULL, + permission_id BIGINT NOT NULL, + expiration TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS permission ( + id SERIAL PRIMARY KEY, + resource_set_id BIGINT +); + +CREATE TABLE IF NOT EXISTS permission_scope ( + owner_id BIGINT NOT NULL, + scope VARCHAR(256) NOT NULL +); + +CREATE TABLE IF NOT EXISTS claim ( + id SERIAL PRIMARY KEY, + name VARCHAR(256), + friendly_name VARCHAR(1024), + claim_type VARCHAR(1024), + claim_value VARCHAR(1024) +); + +CREATE TABLE IF NOT EXISTS claim_to_policy ( + policy_id BIGINT NOT NULL, + claim_id BIGINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS claim_to_permission_ticket ( + permission_ticket_id BIGINT NOT NULL, + claim_id BIGINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS policy ( + id SERIAL PRIMARY KEY, + name VARCHAR(1024), + resource_set_id BIGINT +); + +CREATE TABLE IF NOT EXISTS policy_scope ( + owner_id BIGINT NOT NULL, + scope VARCHAR(256) NOT NULL +); + +CREATE TABLE IF NOT EXISTS claim_token_format ( + owner_id BIGINT NOT NULL, + claim_token_format VARCHAR(1024) +); + +CREATE TABLE IF NOT EXISTS claim_issuer ( + owner_id BIGINT NOT NULL, + issuer VARCHAR(1024) +); + +CREATE TABLE IF NOT EXISTS saved_registered_client ( + id SERIAL PRIMARY KEY, + issuer VARCHAR(1024), + registered_client VARCHAR(8192) +); + +CREATE TABLE IF NOT EXISTS device_code ( + id BIGSERIAL PRIMARY KEY, + device_code VARCHAR(1024), + user_code VARCHAR(1024), + expiration TIMESTAMP NULL, + client_id VARCHAR(256), + approved BOOLEAN, + auth_holder_id BIGINT +); + +CREATE TABLE IF NOT EXISTS device_code_scope ( + owner_id BIGINT NOT NULL, + scope VARCHAR(256) NOT NULL +); + +CREATE TABLE IF NOT EXISTS device_code_request_parameter ( + owner_id BIGINT, + param VARCHAR(2048), + val VARCHAR(2048) +); diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/scopes.sql b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/scopes.sql new file mode 100644 index 000000000..e316b04db --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/classes/db/psql/scopes.sql @@ -0,0 +1,35 @@ +-- +-- Turn off autocommit and start a transaction so that we can use the temp tables +-- + +--SET AUTOCOMMIT = OFF; + +START TRANSACTION; + +-- +-- Insert scope information into the temporary tables. +-- + +INSERT INTO system_scope_TEMP (scope, description, icon, restricted, default_scope) VALUES + ('openid', 'log in using your identity', 'user', false, true), + ('profile', 'basic profile information', 'list-alt', false, true), + ('email', 'email address', 'envelope', false, true), + ('address', 'physical address', 'home', false, true), + ('phone', 'telephone number', 'bell', false, true), + ('offline_access', 'offline access', 'time', false, false), + ('perun_api', 'calls to Perun API in your roles', 'cog', true, false) + ; + +-- +-- Merge the temporary scopes safely into the database. This is a two-step process to keep scopes from being created on every startup with a persistent store. +-- + +INSERT INTO system_scope (scope, description, icon, restricted, default_scope) + SELECT scope, description, icon, restricted, default_scope FROM system_scope_TEMP + ON CONFLICT(scope) + DO NOTHING; + +COMMIT; + +--SET AUTOCOMMIT = ON; + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml similarity index 88% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml index c1e47a8dc..933b5c333 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/crypto-config.xml @@ -30,17 +30,17 @@ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> - + - + - + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/data-context.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/data-context.xml new file mode 100644 index 000000000..b484eb6c9 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/data-context.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml similarity index 69% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml index 14fbcf2ea..44390d5de 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/endpoint-config.xml @@ -29,6 +29,18 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> - + + + + + + + + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml similarity index 98% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml index 592d56a2e..4cbd44c60 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml @@ -34,7 +34,7 @@ - + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/local-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/local-config.xml similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/local-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/local-config.xml diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/locale-config.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/locale-config.xml similarity index 84% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/locale-config.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/locale-config.xml index 60cdb6b0f..7f6e95dc7 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/locale-config.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/locale-config.xml @@ -19,11 +19,11 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - + - + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/server-config.xml similarity index 63% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/server-config.xml index 86e4be23c..e28024d45 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/server-config.xml @@ -30,29 +30,18 @@ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/spring-servlet.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/spring-servlet.xml similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/spring-servlet.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/spring-servlet.xml diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/footer.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/footer.tag new file mode 100644 index 000000000..e6d160f0b --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/footer.tag @@ -0,0 +1,25 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ attribute name="js" required="false"%> +<%@ attribute name="baseURL" required="true"%> +<%@ attribute name="samlResourcesURL" required="true"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/header.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/header.tag new file mode 100644 index 000000000..aeb0a8b7e --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/bbmri/header.tag @@ -0,0 +1,22 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="title" required="true" %> +<%@ attribute name="reqURL" required="true" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="samlResourcesURL" required="true" %> +<%@ attribute name="cssLinks" required="true" type="java.util.ArrayList" %> + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/footer.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/footer.tag new file mode 100644 index 000000000..124fc6fb0 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/footer.tag @@ -0,0 +1,26 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ attribute name="js" required="false"%> +<%@ attribute name="baseURL" required="true"%> +<%@ attribute name="samlResourcesURL" required="true"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/header.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/header.tag new file mode 100644 index 000000000..4214110df --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/ceitec/header.tag @@ -0,0 +1,22 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="title" required="true" %> +<%@ attribute name="reqURL" required="true" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="samlResourcesURL" required="true" %> +<%@ attribute name="cssLinks" required="true" type="java.util.ArrayList" %> + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/footer.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/footer.tag new file mode 100644 index 000000000..e84472bb5 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/footer.tag @@ -0,0 +1,50 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ attribute name="js" required="false"%> +<%@ attribute name="baseURL" required="true"%> +<%@ attribute name="samlResourcesURL" required="true"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/header.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/header.tag new file mode 100644 index 000000000..e25dce99c --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/cesnet/header.tag @@ -0,0 +1,22 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="title" required="true" %> +<%@ attribute name="reqURL" required="true" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="samlResourcesURL" required="true" %> +<%@ attribute name="cssLinks" required="true" type="java.util.ArrayList" %> + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/attributesConsent.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/attributesConsent.tag new file mode 100644 index 000000000..150501da8 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/attributesConsent.tag @@ -0,0 +1,82 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" + import="cz.muni.ics.oidc.server.elixir.GA4GHClaimSource" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags" %> + + +

${langProps['no_scopes']}

+
+ +
    + + + + + + +
  • +
    +
    +
    + +
    +

    "> + +

    +
    +
    + +
      "> + + + +
    • + + + + +

      "> + ${claimKey}: +

      + +
        visible-md-inline-block + +
      • ${subValue}
      • +
        +
      +
      + + ${claim.value} + +
    • +
      + + + + +
    • <%= GA4GHClaimSource.parseAndVerifyVisa( + (String) jspContext.findAttribute("subValue")).getPrettyString() %>
    • +
      + +
    • ${subValue}
    • +
      +
      +
      +
      + +
    • ${claim.value}
    • +
      +
      +
      +
    +
    +
    +
    +
  • +
    +
+
\ No newline at end of file diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/consentButtons.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/consentButtons.tag new file mode 100644 index 000000000..9b65cc499 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/consentButtons.tag @@ -0,0 +1,22 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags" %> + +
+
+
+ +
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/footer.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/footer.tag new file mode 100644 index 000000000..7a9a97f96 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/footer.tag @@ -0,0 +1,38 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="elixir" tagdir="/WEB-INF/tags/elixir" %> +<%@ taglib prefix="cesnet" tagdir="/WEB-INF/tags/cesnet" %> +<%@ taglib prefix="bbmri" tagdir="/WEB-INF/tags/bbmri" %> +<%@ taglib prefix="ceitec" tagdir="/WEB-INF/tags/ceitec" %> +<%@ taglib prefix="europdx" tagdir="/WEB-INF/tags/europdx" %> +<%@ taglib prefix="muni" tagdir="/WEB-INF/tags/muni" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="theme" required="true" %> + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/header.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/header.tag new file mode 100644 index 000000000..7814e0936 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/header.tag @@ -0,0 +1,38 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="elixir" tagdir="/WEB-INF/tags/elixir" %> +<%@ taglib prefix="cesnet" tagdir="/WEB-INF/tags/cesnet" %> +<%@ taglib prefix="bbmri" tagdir="/WEB-INF/tags/bbmri" %> +<%@ taglib prefix="ceitec" tagdir="/WEB-INF/tags/ceitec" %> +<%@ taglib prefix="europdx" tagdir="/WEB-INF/tags/europdx" %> +<%@ taglib prefix="muni" tagdir="/WEB-INF/tags/muni" %> +<%@ attribute name="title" required="true" %> +<%@ attribute name="reqURL" required="true" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="theme" required="true" %> +<%@ attribute name="cssLinks" required="true" type="java.util.ArrayList" %> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerBody.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerBody.tag new file mode 100644 index 000000000..6c6df4df3 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/common/headerBody.tag @@ -0,0 +1,14 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="logoURL" required="true" %> + + + +
+ + + + +
+ + + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/muni/header.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/muni/header.tag new file mode 100644 index 000000000..a425f3c3a --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/muni/header.tag @@ -0,0 +1,84 @@ +<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="o" tagdir="/WEB-INF/tags/common" %> +<%@ attribute name="title" required="true" %> +<%@ attribute name="reqURL" required="true" %> +<%@ attribute name="baseURL" required="true" %> +<%@ attribute name="samlResourcesURL" required="true" %> +<%@ attribute name="cssLinks" required="true" type="java.util.ArrayList" %> + + + + + + + + + ${langProps['unified_login']} | ${title} + + + + + + + + + + + + + + + +
+ +
+ + +
+ <%-- header --%> + +
+ +

${langProps['continue_direct_text']}

+
+
+ ${langProps['continue_direct_btn']} +
+ + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/deviceApproved.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/deviceApproved.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/deviceApproved.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/deviceApproved.jsp diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/error.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/error.jsp diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/home.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/home.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/home.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/home.jsp diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/isTestSpWarning.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/isTestSpWarning.jsp new file mode 100644 index 000000000..3322c47a7 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/isTestSpWarning.jsp @@ -0,0 +1,39 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + + + +<% + List cssLinks = new ArrayList<>(); + pageContext.setAttribute("cssLinks", cssLinks); +%> + + + + <%-- header --%> + +
+ +

${langProps['is_test_sp_warning_text']}

+ +
+
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/login.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/login.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login.jsp diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_failure.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_failure.jsp new file mode 100644 index 000000000..035ae11ae --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_failure.jsp @@ -0,0 +1,31 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +List cssLinks = new ArrayList<>(); +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
${langProps['login_failure_msg']}
+
${langProps['login_failure_contact_us']}${contactMail}.
+
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_success.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_success.jsp new file mode 100644 index 000000000..c6da0c4a0 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/login_success.jsp @@ -0,0 +1,30 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +List cssLinks = new ArrayList<>(); +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
${langProps['login_success_msg']}
+
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout.jsp new file mode 100644 index 000000000..0d678f6d1 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout.jsp @@ -0,0 +1,42 @@ +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + + +<% + + List cssLinks = new ArrayList<>(); + pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + +

${langProps['logout.confirmation.header']}

+ <%-- header --%> + +
+
+

${langProps["logout.confirmation.explanation"]}

+
+
+ +
+
+ +
+
+ +
+
+ + + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/logoutConfirmation.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logoutConfirmation.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/logoutConfirmation.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logoutConfirmation.jsp diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_denied.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_denied.jsp new file mode 100644 index 000000000..f9886bd86 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_denied.jsp @@ -0,0 +1,30 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +List cssLinks = new ArrayList<>(); +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
${langProps['logout_denied_msg']}
+
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_success.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_success.jsp new file mode 100644 index 000000000..aaed2b8aa --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/logout_success.jsp @@ -0,0 +1,30 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +List cssLinks = new ArrayList<>(); +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
${langProps['logout_success_msg']}
+
+ + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/manage.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/manage.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/manage.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/manage.jsp diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/postLogout.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/postLogout.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/postLogout.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/postLogout.jsp diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationForm.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationForm.jsp new file mode 100644 index 000000000..fb8af4cd3 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationForm.jsp @@ -0,0 +1,71 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +String samlCssUrl = (String) pageContext.getAttribute("samlResourcesURL"); +List cssLinks = new ArrayList<>(); + +cssLinks.add(samlCssUrl + "/module.php/perun/res/css/perun_identity_choose_vo_and_group.css"); + +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
${langProps['registration_message']}
+ +
+
+

${langProps['registration_select_vo']}

+ + + + + + +
+
+
+ + + + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationFormContinue.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationFormContinue.jsp new file mode 100644 index 000000000..a8bf430b9 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/registrationFormContinue.jsp @@ -0,0 +1,51 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + + + +<% + +String samlCssUrl = (String) pageContext.getAttribute("samlResourcesURL"); +List cssLinks = new ArrayList<>(); + +cssLinks.add(samlCssUrl + "/module.php/perun/res/css/perun_identity_go_to_registration.css"); + +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+ +
+
+
+ + + + +
+
+ + + \ No newline at end of file diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/requestUserCode.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/requestUserCode.jsp similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/views/requestUserCode.jsp rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/requestUserCode.jsp diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApprove.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApprove.jsp new file mode 100644 index 000000000..f65506dca --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApprove.jsp @@ -0,0 +1,54 @@ +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + +<% + + String samlCssUrl = (String) pageContext.getAttribute("samlResourcesURL"); + List cssLinks = new ArrayList<>(); + + cssLinks.add(samlCssUrl + "/module.php/consent/assets/css/consent.css"); + cssLinks.add(samlCssUrl + "/module.php/perun/res/css/consent.css"); + + pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + +

${langProps['consent_header']} ${" "} ${fn:escapeXml(client.clientName)}

+ + <%-- header --%> + +
+ +
+

+ + ${langProps['consent_privacy_policy']} + ${fn:escapeXml(client.clientName)} + +

+ +
+
+
+ + +
+
+
+ + + + +
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApproveDevice.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApproveDevice.jsp new file mode 100644 index 000000000..9c78e5cc9 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedApproveDevice.jsp @@ -0,0 +1,50 @@ +<%@ page import="cz.muni.ics.oidc.server.elixir.GA4GHClaimSource" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + + +<% + + String samlCssUrl = (String) pageContext.getAttribute("samlResourcesURL"); + List cssLinks = new ArrayList<>(); + + cssLinks.add(samlCssUrl + "/module.php/consent/assets/css/consent.css"); + cssLinks.add(samlCssUrl + "/module.php/perun/res/css/consent.css"); + + pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + +

${langProps['device_approve_header']} ${" "} ${fn:escapeXml(client.clientName)}

+ + <%-- header --%> + +
+ +
+

+ + ${langProps['device_approve_privacy']} + ${fn:escapeXml(client.clientName)} + +

+ + + + + + +
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedDeviceApproved.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedDeviceApproved.jsp new file mode 100644 index 000000000..111be0a7d --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedDeviceApproved.jsp @@ -0,0 +1,45 @@ +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> + + + + +<% + +List cssLinks = new ArrayList<>(); +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+

+

✔ ${langProps['device_approved_approved']}

+

✗ ${langProps['device_approved_rejected']}

+

+

+ + ${langProps['device_approved_text_approved_start']}${" "} + + + ${" "}${langProps['device_approved_text_approved_end']} + + + ${langProps['device_approved_text_rejected_start']}${" "} + + + ${". "}${langProps['device_approved_text_rejected_end']} + +

+
+ + <%-- wrap --%> + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedRequestUserCode.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedRequestUserCode.jsp new file mode 100644 index 000000000..bc60de450 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/themedRequestUserCode.jsp @@ -0,0 +1,69 @@ +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + +<% + + List cssLinks = new ArrayList<>(); + pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+

${langProps['request_code_header']}

+ + +

+ + ${langProps['user_code_empty_or_not_found']} + ${langProps['user_code_expired']} + ${langProps['user_code_already_approved']} + ${langProps['user_code_mismatch']} + ${langProps['user_code_error']} + +

+
+ +

+ ${langProps['user_code_info']} +

+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + + +
+ +
+
+ + + + \ No newline at end of file diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved.jsp new file mode 100644 index 000000000..49ffd8a08 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved.jsp @@ -0,0 +1,48 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + +<% + +List cssLinks = new ArrayList<>(); + +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+
+ + + + + + +

${langProps['403_header']}

+

${langProps['403_text']} ${fn:escapeXml(client.clientName)} + +
+ ${langProps['403_informationPage']} + + ${fn:escapeXml(client.clientUri)} + +
+

+ +

${langProps['403_contactSupport']} + + ${fn:escapeXml(contact)} + +

+
+
+ + + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved_spec.jsp b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved_spec.jsp new file mode 100644 index 000000000..6a2535752 --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/views/unapproved_spec.jsp @@ -0,0 +1,29 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.List" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="t" tagdir="/WEB-INF/tags/common"%> + +<% + +List cssLinks = new ArrayList<>(); + +pageContext.setAttribute("cssLinks", cssLinks); + +%> + + + + <%-- header --%> + +
+
+

+

+

${langProps['contact_p']}${" "}${contactMail}

+
+
+ + + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml rename to perun-oidc-server-webapp/src/main/webapp/WEB-INF/web.xml diff --git a/openid-connect-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings-white.png b/perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings-white.png similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings-white.png rename to perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings-white.png diff --git a/openid-connect-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings.png b/perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings.png similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings.png rename to perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/img/glyphicons-halflings.png diff --git a/openid-connect-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.js b/perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.js similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.js rename to perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.js diff --git a/openid-connect-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.min.js b/perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.min.js similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.min.js rename to perun-oidc-server-webapp/src/main/webapp/resources/bootstrap/js/bootstrap.min.js diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap-responsive.min.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap-responsive.min.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap-responsive.min.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap-responsive.min.css diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap-sheet.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap-sheet.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap-sheet.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap-sheet.css diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap.min.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap.min.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/bootstrap.min.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/bootstrap.min.css diff --git a/perun-oidc-server-webapp/src/main/webapp/resources/css/customs.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/customs.css new file mode 100644 index 000000000..69684b74b --- /dev/null +++ b/perun-oidc-server-webapp/src/main/webapp/resources/css/customs.css @@ -0,0 +1,36 @@ +.mt-0 { + margin-top: 0 !important; +} +.mr-half { + margin-right: .5em !important; +} +.checkbox-wrapper { + float: left; +} +.h4 { + clear: inherit !important; +} +.h1, .h2, .h3, .h4, .h5, .h6 { + letter-spacing: normal; +} +.mb-0 { + margin-bottom: 0 !important; +} +.mb-4 { + margin-bottom: 1.5rem; +} +.mt-0 { + margin-top: 0 !important; +} +.oh { + overflow: hidden; +} +.mt-2 { + margin-top: 2% !important; +} +.cw { + color: #FAFAFA !important; +} +.hidden { + display: none; +} diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-local.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-local.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-local.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-local.css diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive-local.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive-local.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive-local.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive-local.css diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect-responsive.css diff --git a/openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect.css b/perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect.css similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/css/mitreid-connect.css rename to perun-oidc-server-webapp/src/main/webapp/resources/css/mitreid-connect.css diff --git a/perun-oidc-server-webapp/src/main/webapp/resources/images/arrow.png b/perun-oidc-server-webapp/src/main/webapp/resources/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ce608b467fc890edfd375c732ab80d600d6c7aa5 GIT binary patch literal 1673 zcmZ{kYg7^l7RLc$1$^*O#7Cu#XiB0GX=-DJqZl&2?ZK=$VBjNcMNurZM2@C5?pnH< zN~CFq&M_a2GgzU5k2W1WPTJI%Wr!1oDNEDjJ6zgt`(Z!a`#<;o@9*3%_uR6mh)@f- zJsbc4SkR6I#~3xx7;Grmn8l7xOrwAj>7l`Zosx?20b>Q@9b@nTKuE{u0M4KUw?1wy9MCb)zaWoBF9x1+L5`ht+%_w95M3Ux zyojJ(_V8fAzS~O;DQk7nIp`YI9Vs+gb;}!(TgORcNYoR&@;%GHijkYN`BL|6tFlg) z_s7LW!NPob@QF8#EF&dU{{aCrEoCft>g0tr_MOr3?%+HORq9ZT{C|eI7>>*z@U1KQ5 zMKV%~iD@mx@zo`0t)(ip@X`Z0mPnzLp7@JjCwtNkr~UIAMUUz$j?p@vgP(BK)(d z6xn)BN+H@Q(LiS<|G|eQM=j5v~k82fdc+1qV&(w8H7VfzPMG3xU}Iyw#jp_}Deh(hoAp;k zXMNBZvv##ln~;?gMe!E5TAAVQpLS)w*j=u0&#n9Y2K3tze>B)7wmW*cNHmj{Sj+=Q zRIy7wpomu*Vu<4Cvm>BS%c>h>VDnQNgm2sO%z&;&zFn|P22r)sa7|a8xCkVDyAZJt zM7?kM0@Szc;T2_rfNSp6IebF$gfj3?UGZ*u?xu#|qJpNw(l~Xem@YZhXkMu)1lv{Z zFboP<#(S!4jn1VXS?!ny1kNFVs6E#4k9}(33lUQjuLPhVxeJf{+|0S)mN*X% z89q;EmcJVYoqj3ya(Z|rb_Klh<m`6Kb?_1+k2yN!j zy``j%jD3w|lhCxqv)xBcA4$Ez*VVe#Vvi$Z~JA10$@5?ao$ zzA2;|_rexDY~b6$4u}VjlBrD5$e`kk`MdDLegqJ&vRSRT5U&L$v>cL%i&*Y^nnu3k zeoH}o8eF+=jhG(GxIXh&{SneO>V>b)(BIi8HncC5kk^}gc;;W!@1Hv;r<)jT@22+Z zMD#l^Yn}>a`sVC`w`y{>qus7Olb5;byH~Drdv!x6YAt7*VzsN_@Yb|m>Z%Jq;f-oy zgC{XvA)YfYn~$6tMr`m{t94CP*8Tt5?&^q~`{&Ys~^h7l>yd5>v&{CLAS4z$iAgRxU zfuR@u&d+c=osL;?y;U5tm$*;l^!N6bFlfQe+D%Pr!}=Dkph``zVT<+e^^RMIv_o$p?iZJ+A7m3`LDl$M@dP`TiN8v zu>^_`la}}s(SS+Z^`tm*;0Us@CYrQ;JTdnrBu4Rb`t09veh5{&q#Sua^!<9Aj+A-wWm3hf0Nn4B&N|nzXif-S^>TKgXcF77kmBnUdas1C@ za*P5vKqQd}L^9!kZyfQEzc1AM85WP@nVy*})_rMj9722^ic8H(;{eh)Nm;DS%=DZ)D~H^S O7JwEK5!?~P6#WPLR@rg@ literal 0 HcmV?d00001 diff --git a/openid-connect-server-webapp/src/main/webapp/resources/images/heart_mode.png b/perun-oidc-server-webapp/src/main/webapp/resources/images/heart_mode.png similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/images/heart_mode.png rename to perun-oidc-server-webapp/src/main/webapp/resources/images/heart_mode.png diff --git a/openid-connect-server-webapp/src/main/webapp/resources/images/logo_placeholder.gif b/perun-oidc-server-webapp/src/main/webapp/resources/images/logo_placeholder.gif similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/images/logo_placeholder.gif rename to perun-oidc-server-webapp/src/main/webapp/resources/images/logo_placeholder.gif diff --git a/openid-connect-server-webapp/src/main/webapp/resources/images/mitreid-connect.ico b/perun-oidc-server-webapp/src/main/webapp/resources/images/mitreid-connect.ico similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/images/mitreid-connect.ico rename to perun-oidc-server-webapp/src/main/webapp/resources/images/mitreid-connect.ico diff --git a/openid-connect-server-webapp/src/main/webapp/resources/images/openid_connect_large.png b/perun-oidc-server-webapp/src/main/webapp/resources/images/openid_connect_large.png similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/images/openid_connect_large.png rename to perun-oidc-server-webapp/src/main/webapp/resources/images/openid_connect_large.png diff --git a/openid-connect-server-webapp/src/main/webapp/resources/images/openid_connect_small.png b/perun-oidc-server-webapp/src/main/webapp/resources/images/openid_connect_small.png similarity index 100% rename from openid-connect-server-webapp/src/main/webapp/resources/images/openid_connect_small.png rename to perun-oidc-server-webapp/src/main/webapp/resources/images/openid_connect_small.png diff --git a/perun-oidc-server-webapp/src/main/webapp/resources/images/perun_24px.png b/perun-oidc-server-webapp/src/main/webapp/resources/images/perun_24px.png new file mode 100644 index 0000000000000000000000000000000000000000..c0134b936b36a17f9862126fac9cb387e8b4187d GIT binary patch literal 1094 zcmV-M1iAZ(P)jZCgwiie;p0tmY@dB~+I2qh$5FT|85RK0CpA2|gv#aXnTb?-rlG6&9Nb?V#tPlJ#$Jq5rRYB%Y(_kB(nMu9(LzW{(J8VBZD;91<9 zuQj%&ecG*$AFpUYSY9ved})BG5>^!xjC>NERpMjVqnL?O;FFfGpk+mvG)Z))hc6uhmlXsE7(xLMj6^o#OmJIS8*4OgVojEY{1#)4Y9OqHGzEe}XFcG~+ zl`lm@0V<{Ac>_7V=$BLRh#J|*C(&cOtib+En(*P(y(K9sGFY0)H{4zyrE=y*;Jh07 zDf5{1wnI6qmg_ALpPHVR8JWNPo;dUVcJ(tFp({0#d456kf0gLV?T((g-s>3+yJ%HtO zwNhS8rB*JVc@3ZvP;{C~(FGs9m536pA%AGiCTel~$`iO(2*Xhw&Y}bhNfWw<-IzW)9IsiOvznINF5Lz+9<#8jJs8ypPvlJXFt`#9pdC$Hl zhWx`oA+juy@<;Vz%77k^8`FQUQxzAlPn=5!emPl;sRoTRJ0H_FcD~73>O1yWekZ3N z`3#X;26PX*F&VQexRlB?Gw=H;b!F&8=EmgDrCJq|oHbhOX#Mu6_Pf>%OJnfC*Pi1XebQr@%2q@~$Q zck2Jw=h=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("