Commit Graph

1000 Commits

Author SHA1 Message Date
Rob Winch 3281cea46a Default use WebSessionServerSecurityContextRepository
Issue: gh-4719
2017-10-27 18:17:47 -05:00
Rob Winch faa0bd7143 Update WebFilter ordering
Issue: gh-4719
2017-10-27 18:17:44 -05:00
Rob Winch 9c31041dce EnableWebFluxSecurityTests fixes
Issue: gh-4719
2017-10-27 18:17:25 -05:00
Rob Winch 437ba56415 ReactorContextWebFilter & SecurityContextServerWebExchangeWebFilter
Issue: gh-4719
2017-10-27 18:17:10 -05:00
Joe Grandja 8527daa22a Make OAuth2UserService Generic using OAuth2AuthorizedClient and OAuth2User types
Fixes gh-4706
2017-10-27 11:49:29 -04:00
Joe Grandja 3b80b6ded8 Move AuthorizationRequestUriBuilder to oauth2-client
Fixes gh-4703
2017-10-26 21:23:06 -04:00
Rob Winch 747473257f Use ReactorSecurityContextHolder
Issue gh-4713
2017-10-26 20:11:42 -05:00
Rob Winch e23134c3ed Add LogoutBuilder ServerLogoutSuccessHandler
Fixes gh-4714
2017-10-26 20:11:42 -05:00
Joe Grandja ef197d8215 Move JwtDecoderRegistry to oauth2.client.jwt package
Fixes gh-4705
2017-10-26 21:06:28 -04:00
Joe Grandja 70543dcb30 Move oidc package in oauth2-core and oauth2-client
Fixes gh-4710
2017-10-26 21:06:28 -04:00
Rob Winch 86875e117b Prevent ServerHttpSecurity from being built twice
Issue: gh-4711
2017-10-26 19:48:38 -05:00
Rob Winch 36501f4530 Remove ServerHttpSecurity duplicate build
WebFluxSecurityConfiguration invoked build twice
which caused each WebFilter to be added twice

Fixes gh-4711
2017-10-26 19:48:32 -05:00
Joe Grandja ef83bc8dd7 Move package client.authentication.userinfo -> client.userinfo
Fixes gh-4708
2017-10-26 15:39:04 -04:00
Joe Grandja 027ea78dab Revert "Move OAuth2LoginAuthenticationProvider into userinfo package"
This reverts commit 54547f35b7.
2017-10-26 14:55:25 -04:00
Joe Grandja 942b647c0d OAuth2LoginAuthenticationFilter processes uri /login/oauth2/code/*
Issue gh-4687
2017-10-26 14:20:19 -04:00
Rob Winch 54547f35b7 Move OAuth2LoginAuthenticationProvider into userinfo package
Fix package tangles. OAuth2LoginAuthenticationProvider requires
OAuth2UserService which is in a child package. We should move
OAuth2LoginAuthenticationProvider to the same package.

Issue: gh-4614
2017-10-26 11:22:21 -05:00
Johnny Lim 875aae012b Polish 2017-10-26 07:50:32 -05:00
Joe Grandja d0a4e49870 Map custom OAuth2User types using String
Fixes gh-4691
2017-10-25 17:13:44 -04:00
Joe Grandja 9fbea5a11e Refactor SecurityTokenRepository
Fixes gh-4650
2017-10-25 16:00:34 -04:00
Rob Winch 44b41e78cd Flux member variables in favor of Collections
Fix gh-4694
2017-10-25 07:41:37 -05:00
Rob Winch 3b85512e48 Polish
Issue gh-4694
2017-10-25 07:41:29 -05:00
Joe Grandja 4dbbcabacf Rename AuthorizationCodeAuthenticationProvider -> OAuth2LoginAuthenticationProvider
Fixes gh-4690
2017-10-24 15:24:26 -04:00
Joe Grandja 049080290e Refactor OAuth2 AuthenticationProvider's
Fixes gh-4689
2017-10-24 15:24:26 -04:00
Joe Grandja 0fb32a052e OAuth2LoginAuthenticationFilter processes uri /login/oauth2/*
Fixes gh-4687
2017-10-24 15:24:26 -04:00
Joe Grandja 4ae24f2fbe Rename AuthorizationCodeAuthenticationFilter -> OAuth2LoginAuthenticationFilter
Fixes gh-4686
2017-10-24 15:24:25 -04:00
Joe Grandja 09a94a4ef4 Merge AuthorizationCodeGrantConfigurer -> OAuth2LoginConfigurer
Fixes gh-4684
2017-10-24 15:24:25 -04:00
Rob Winch 8291f20796 DaoAuthenticationProvider uses DelegatingPasswordEncoder
This means that passwords will be encoded with BCrypt by default

Fixes: gh-2775
2017-10-24 07:56:28 -05:00
Rob Winch d19b222b55 UserDetailsRepositoryReactiveAuthenticationManager uses DelegatingPasswordEncoder
This means passwords will be encoded with BCrypt by default

Issue: gh-2775
2017-10-24 07:56:28 -05:00
Rob Winch cdc992b132 Remove SaltSource
Fixes gh-4681
2017-10-24 07:56:28 -05:00
Rob Winch 4529e09339 Remove PasswordEncoder from core
Issue: gh-4674
2017-10-24 07:56:28 -05:00
Rob Winch 3a4a32e654 Remove LdapShaPasswordEncoder from core
Issue: gh-4674
2017-10-24 07:56:20 -05:00
Rob Winch 6a3e981c80 Remove BaseDigestPasswordEncoder from core
Issue: gh-4674
2017-10-24 07:55:40 -05:00
Rob Winch a8aa65b828 Remove Md4PasswordEncoder from core
Issue: gh-4674
2017-10-24 07:55:32 -05:00
Rob Winch 12dbf2e961 Remove PlainTextPasswordEncoder from core
Issue: gh-4674
2017-10-23 22:27:16 -05:00
Rob Winch 40fd8d7aa7 Remove ShaPasswordEncoder from core
Issue: gh-4674
2017-10-23 22:27:16 -05:00
Rob Winch e98fc3556e Remove Md5PasswordEncoder from core
Issue: gh-4674
2017-10-23 22:27:16 -05:00
Rob Winch 7c95c88601 Add User/UserBuilder in UserDetailsManagerConfigurer
Fixes gh-4679
2017-10-23 22:27:16 -05:00
Rob Winch c5d4041ca8 Add 5.0.xsd
Fixes gh-4675
2017-10-23 22:27:16 -05:00
Joe Grandja 6d7d34c549 Move AuthorizationRequestUriBuilder and DefaultAuthorizationRequestUriBuilder
Fixes gh-4658
2017-10-23 10:19:31 -04:00
Joe Grandja f0c9f85292 spring-security-jwt-jose -> spring-security-oauth2-jose
Fixes gh-4595
2017-10-23 09:04:01 -04:00
Joe Grandja 8e3a2a7123 Remove AuthorizationCodeAuthenticationFilter.AuthorizationResponseMatcher
Fixes gh-4654
2017-10-20 06:09:31 -04:00
Joe Grandja eb82a79068 OAuth2 login url starts with /login/
Fixes gh-4659
2017-10-19 17:32:21 -04:00
Joe Grandja d4dac21ca5 Make ClientRegistration.Builder constructor private
Fixes gh-4656
2017-10-19 14:15:59 -04:00
Joe Grandja 1f5edc98d5 ClientRegistration.Builder.scopes -> scope
Fixes gh-4663
2017-10-19 11:24:01 -04:00
Joe Grandja 1e891b38ab Rename scope -> scopes for Set types
Fixes gh-4644
2017-10-18 17:56:39 -04:00
Rob Winch b81c1ce2c0 Move spring-security-webflux into spring-security-web
Fixes gh-4662
2017-10-18 16:20:09 -05:00
Rob Winch d231441cc0 EnableWebFluxSecurityTests uses SpringTestRule
This will hopefully resolve the periodic failures in
EnableWebFluxSecurityTests
2017-10-18 15:14:43 -05:00
Rob Winch 9d46af3d7c Introduce SpringTestContext
This adds support for testing different configurations per method.
2017-10-18 15:14:43 -05:00
Joe Grandja 7b8d131386 Fix package tangles -> OAuth2/Oidc AuthenticationProvider's
Fixes gh-4614
2017-10-16 20:56:32 -04:00
Johnny Lim 25052214ae Polish 2017-10-16 18:33:27 -05:00
Rob Winch a74f7c6faa Fix CSRF / DefaultLoginPageGeneratingFilter package tangle
Issue: gh-4636
2017-10-16 16:36:49 -05:00
Rob Winch 7fd1cff3ce Fix PrePostAdviceReactiveMethodInterceptor tangle
Issue: gh-4636
2017-10-16 16:36:43 -05:00
Rob Winch 579282437b Move GlobalAuthenticationConfigurerAdapter
Issue: gh-4636
2017-10-16 16:36:33 -05:00
Joe Grandja a7d054c9f3 Remove AuthorizationGrantAuthenticator 2017-10-16 13:43:11 -04:00
Joe Grandja 3c824dc44b Fix package tangles -> OAuth2UserService
Fixes gh-4614
2017-10-13 18:59:41 -04:00
Joe Grandja cfa4858b04 Fix package tangles -> AuthorizationGrantTokenExchanger
Fixes gh-4614
2017-10-13 16:35:48 -04:00
Joe Grandja c441f99567 Polish oauth2-client 2017-10-13 07:09:00 -04:00
Rob Winch 211e8eae90 Remove formLogin() and httpBasic() from defaults 2017-10-12 16:41:01 -05:00
Rob Winch 5fae710d69 Polish ServerHttpSecurityConfigurationBuilder
Fix copyright
2017-10-12 16:20:18 -05:00
Rob Winch 30487c3b4b Polish ServerHttpSecurity testing 2017-10-12 15:54:54 -05:00
Rob Winch 015cc2203e Fix ServerHttpSecurity 2017-10-12 15:54:54 -05:00
bbelovic 91d9404828 Fixed typo in HttpSecurity.authorizeRequests javadoc 2017-10-12 07:36:37 -05:00
Joe Grandja 18df9a869e Move config AuthorizationCodeGrantConfigurer -> OAuth2LoginConfigurer 2017-10-11 17:39:21 -04:00
Rob Winch 247f737bc8 Move HttpBasicServerAuthenticationEntryPoint
Move it up a package as www is too sparse. This is different than servlet
based support, but we also are now using a generic AuthenticationWebFilter

Fixes gh-4617
2017-10-11 16:24:14 -05:00
Rob Winch 7271a427e8 SecurityContextServerRepository->ServerSecurityContextRepository
Issue gh-4615
2017-10-11 13:58:28 -05:00
Rob Winch 792944eee7 HttpSecurity->ServerHttpSecurity
Issue gh-4615
2017-10-11 13:58:24 -05:00
Rob Winch 185d3032f5 LogoutHandler->ServerLogoutHandler
Issue gh-4615
2017-10-11 13:58:21 -05:00
Rob Winch c9ce528206 AuthenticationFailureHandler->ServerAuthenticationFailureHandler
Issue gh-4615
2017-10-11 13:58:18 -05:00
Rob Winch 897e7111e3 AccessDeniedHandler->ServerAccessDeniedHandler
Issue gh-4615
2017-10-11 13:58:14 -05:00
Rob Winch a5af2a07d7 HttpHeadersWriter->ServerHttpHeadersWriter
Issue gh-4615
2017-10-11 13:58:09 -05:00
Rob Winch 2982b82b2d AuthenticationSuccessHandler->ServerAuthenticationSuccessHandler
Issue gh-4615
2017-10-11 13:58:06 -05:00
Rob Winch b858985b0e AuthenticationReactorContextFilter->AuthenticationReactorContextWebFilter
Issue gh-4615
2017-10-11 13:58:02 -05:00
Rob Winch bfcc2a602d SecurityContextRepository->SecurityContextServerRepository
Issue gh-4615
2017-10-11 13:57:59 -05:00
Rob Winch e99e2a9f09 PrePostAdviceMethodInterceptor->PrePostAdviceReactiveMethodInterceptor
Issue gh-4615
2017-10-11 13:57:54 -05:00
Rob Winch d0de8d40dd WebFilterChainFilter -> WebFilterChainProxy
Issue gh-4615
2017-10-11 13:57:50 -05:00
Rob Winch cfc5572b7a AuthenticationEntryPoint->ServerAuthenticationEntryPoint
Issue gh-4615
2017-10-11 13:57:46 -05:00
Rob Winch 8d4a73cf3f Use Server<Description>AuthenticationConverter
Issue gh-4615
2017-10-11 13:57:43 -05:00
Rob Winch 5502856095 UserDetailsRepositoryAuthenticationManager->UserDetailsRepositoryReactiveAuthenticationManager
Issue gh-4615
2017-10-11 13:57:35 -05:00
Rob Winch 4681697581 UserDetailsRepository->ReactiveUserDetailsService
Issue gh-4615
2017-10-11 13:57:30 -05:00
Rob Winch f1bc82dcef AuthenticatedAuthorizationManager->AuthenticatedReactiveAuthorizationManager
Issue gh-4615
2017-10-11 13:57:26 -05:00
Rob Winch 866ce5eaec AuthorityAuthorizationManager->AuthorityReactiveAuthorizationManager
Issue gh-4615
2017-10-11 13:57:08 -05:00
Joe Grandja d840090cb0 Add support for implicit grant type
Fixes gh-4500
2017-10-11 13:54:59 -04:00
Joe Grandja 6963b3c5d5 Expose login page config for oauth2Login
Fixes gh-4570
2017-10-10 19:05:57 -04:00
Joe Grandja da0a7afa38 Polish AuthorizationCodeAuthenticationFilter
Fixes gh-4599
2017-10-10 14:39:47 -04:00
Joe Grandja efa4bf409c Remove AuthorizationCodeRequestRedirectFilter. setAuthorizationRequestMatcher 2017-10-10 14:38:06 -04:00
Joe Grandja 6b16fa0d8c Polish OAuth Security Configurers 2017-10-10 14:38:06 -04:00
Rob Winch 23f56f568c Update MockitJunitRunner import
Issue: gh-4608
2017-10-09 16:13:33 -05:00
Rob Winch 445834784a Update to Mockito 2.10.0
Issue: gh-4608
2017-10-09 16:13:11 -05:00
Rob Winch 370fc48afe Polish LogoutBuilder
Issue gh-4603
2017-10-06 16:37:11 -05:00
shazin.sadakath@gmail.com 79e749790f Add Reactive LogoutBuilder
Fixes gh-4541
2017-10-06 16:36:19 -05:00
Rob Winch c77cc72cd3 Fix EnableWebFluxSecurityTests
Fixes gh-4604
2017-10-06 16:28:57 -05:00
Joe Grandja 926ad45f21 Add default config for common OAuth2 Providers
Fixes gh-4597
2017-10-06 10:17:32 -04:00
Joe Grandja 29d36e4d16 Remove OAuth2ClientTemplatePropertiesLoader
Fixes gh-4598
2017-10-05 20:15:28 -04:00
Joe Grandja 1b7e761be4 Remove SecurityTokenRepository from AuthorizationCodeAuthenticationProvider constructor
Fixes gh-4591
2017-10-05 17:05:56 -04:00
Joe Grandja eb320bfed4 AuthorizationCodeAuthenticationProcessingFilter -> AuthorizationCodeAuthenticationFilter 2017-10-05 16:40:12 -04:00
Joe Grandja 5c14e48b18 Add OAuth2UserAuthenticationProvider
Moved logic from AuthorizationCodeAuthenticationProvider
to OAuth2UserAuthenticationProvider (new) related to
loading user attributes via OAuth2UserService.

This re-factor is part of the work required for Issue gh-4513
2017-10-05 15:15:35 -04:00
Joe Grandja f8a9077d5a Generalize AuthorizationCodeAuthenticationProvider
The AuthorizationCodeAuthenticationProvider implements part of the
Authorization Code Grant flow as defined in
OAuth 2.0 Authorization Framework and OpenID Connect Core 1.0.
The implementation needs to be de-coupled to allow for better re-use and readability.
This commit introduces the AuthorizationGrantAuthenticator and extracts logic from
AuthorizationCodeAuthenticationProvider and provides different implementations
for OAuth 2.0 and OpenID Connect 1.0.

This re-factor is part of the work required for Issue gh-4513
2017-10-05 05:02:22 -04:00
Joe Grandja fb57111ecd redirect-uri property supports 'baseRedirectUrl' uri variable
Fixes gh-4589
2017-10-02 15:29:03 -04:00
Joe Grandja 66647070ab Default login page supports Iterable<ClientRegistration>
Fixes gh-4596
2017-09-29 19:54:17 -04:00
Rob Winch 99f06ca58c HttpSecurity invokes configure(this)
Issue gh-4542
2017-09-29 16:04:47 -05:00
Rob Winch b3bd5ba946 Add Reactive HttpSecurity.addWebFilterAt
Fixes gh-4542
2017-09-29 16:04:35 -05:00
Rob Winch 737c48de06 Polish 2017-09-29 14:13:02 -05:00
Joe Grandja b9258aa6ee Make AuthorizationRequestUriBuilder optional
Fixes gh-4577
2017-09-28 16:43:11 -04:00
Joe Grandja 9a8ddebc94 Use param matching for Authorization Response
Fixes gh-4576
2017-09-28 10:21:01 -04:00
Joe Grandja 8448a54678 Remove ClientRegistrationRepository.getRegistrations()
Fixes gh-4582
2017-09-28 07:02:59 -04:00
Joe Grandja b463f8e6b5 Remove httpSecurity.oauth2Login().userInfoEndpoint().userNameAttributeName()
Related gh-4580
2017-09-27 15:39:39 -04:00
Joe Grandja 814742fef6 Rename ClientRegistration.clientAlias -> registrationId
Fixes gh-4575
2017-09-27 09:14:55 -04:00
Joe Grandja 38be35677d Add userNameAttributeName to ClientRegistration
Fixes gh-4580
2017-09-26 21:55:19 -04:00
Joe Grandja 0e9b2807bf Split up NimbusOAuth2UserService
Fixes gh-4447
2017-09-26 11:32:49 -04:00
Rob Winch 6d26b86792 Add UserDetailsRepositoryResourceFactoryBean.fromString
Fixes gh-4566
2017-09-22 20:18:59 -05:00
Rob Winch a4c2073bcd Add UserDetailsManagerResourceFactoryBean.fromString
Fixes gh-4567
2017-09-22 20:18:59 -05:00
Rob Winch bc99f8aff3 Add UserDetailsResourceFactoryBean.fromString
Fixes gh-4568
2017-09-22 20:18:59 -05:00
Stephan Schroevers 9e719bc313 Drop the `aopalliance:aopalliance` dependency
As of Spring 4.3 RC1 the `org.aopalliance` interfaces are once again bundled
with `spring-aop` [1]. Moreover, all modules with a dependency on
`aopalliance:aopalliance` directly or indirectly also depend on `spring-aop`.

This change drops the `aopalliance:aopalliance` dependency in all places it's
declared. Where applicable an explicit dependency on `spring-aop` was added in
its place. (This dependency was already present in most places; in one case the
module didn't require `aopalliance:aopalliance` in the first place.)

The documentation is updated accordingly.

[1] https://jira.spring.io/browse/SPR-13984
2017-09-22 11:11:04 -05:00
Joe Grandja 8521ca8f94 Polish gh-4560 2017-09-21 17:21:41 -04:00
Joe Grandja baa3b6f258 Add utility for loading properties of client types
Fixes gh-4560
2017-09-20 22:50:19 -04:00
Rob Winch 8a66d0c78d Polish PermissionEvaluator Autowired into Web Security
Issue gh-4077
2017-09-18 16:53:19 -05:00
Craig Andrews 3bf6bf10de Configure permissionEvaluator and roleHierarchy by default
Implementations of AbstractSecurityExpressionHandler (such as the very commonly used DefaultWebSecurityExpressionHandler) get PermissionEvaluator and RoleHierarchy from the application context (if the application context is provided, and exactly one of such a bean exists in it). This approach matches that used in GlobalMethodSecurityConfiguration, making everything in Spring Security work the same way (including WebSecurity).

Issue gh-4077
2017-09-18 16:35:16 -05:00
Rob Winch f8ee9944ff Copyright date range 2017-09-18 11:18:46 -05:00
Rob Winch 1f4082e754 Fix copyright lines 2017-09-18 11:11:25 -05:00
Rob Winch 01d4387f56 Fix empty lines in copyright 2017-09-18 10:53:04 -05:00
Rob Winch 3ecf3ea034 Fix double * in Copyright headers 2017-09-18 10:47:26 -05:00
Rob Winch e14af37775 Add LogoutWebFilter
Fixes gh-4539
2017-09-13 16:43:04 -05:00
Rob Winch 426e24c18e Polish
Formatting changes
2017-09-13 15:31:32 -05:00
Joe Grandja 65b968f04a Move servlet-specific classes to 'web' package
Fixes gh-4366
2017-09-13 16:13:32 -04:00
Rob Winch 0a36359f11 WebFlux HTTP Basic & Form Login Sessions
By default both HTTP Basic and form log are enabled. Now HTTP Session will
not be used for HTTP Basic, but will be for form log in.
2017-09-13 14:47:44 -05:00
Rob Winch 3d745e63f6 HttpSecurityConfiguration applies all defaults
HttpSecurity headers is off by default and relies on
HttpSecurityConfiguration to enable it. This is more consistent with the
other operators
2017-09-12 22:07:12 -05:00
Rob Winch b5edb58050 Polish reactive config
Code Checkstyle fixes
2017-09-12 21:56:09 -05:00
Rob Winch 8b32b8db74 Polish
HeadersBuilder build is protected
2017-09-12 21:51:26 -05:00
Rob Winch d93c774691 Add FormLogin Configuration
Fixes gh-4537
2017-09-12 20:40:56 -05:00
Rob Winch a0a0a32bda Add WebTestClient HtmlUnit Support
Fixes gh-4534
2017-09-12 20:40:56 -05:00
Rob Winch 8d997fd079 Remove DefaultAuthenticationSuccessHandler
We always need to save the user after authentication, so it should be
part of AuthenticationWebFilter

Fixes gh-4524
2017-09-12 20:40:56 -05:00
Joe Grandja 4ff0b52f74 Remove HttpClientConfig
Issue gh-4478
2017-09-12 21:03:40 -04:00
Rob Winch d9bad2bc9d Mono.currentContext()->subscriberContext()
Fixing refactoring by Reactor
2017-09-01 17:20:47 -05:00
Rob Winch be0081290b EnableWebFluxSecurity uses PasswordEncoder Bean 2017-08-30 10:02:00 -05:00
Rob Winch 9f2ea90f0d Polish HttpSecurity
Code Style fixes
2017-08-29 20:34:20 -05:00
Rob Winch 51ad53f76a Remove Optional from Reactive HttpSecurity 2017-08-29 20:30:04 -05:00
Rob Winch 20befc3702 Support .and() in Reactive HttpBasic & HeaderBuilder 2017-08-29 20:17:56 -05:00
Rob Winch c4917f359a Fix for Reactor Refactor
- contextStart -> subscriberContext
2017-08-29 08:24:55 -05:00
Joe Grandja bc6be86aec Add in-memory AccessTokenRepository
Fixes gh-4508
2017-08-23 17:18:35 -04:00
Joe Grandja 91b0bd4ba5 Provide oauth2login.tokenEndpoint config
Fixes gh-4506
2017-08-23 17:18:01 -04:00
Joe Grandja c06975080f Allow configuring oauth2 authentication handlers
Fixes gh-4472
2017-08-23 17:17:34 -04:00
Joe Grandja 93c2b2533e Allow configuring request paths for oauth2 filters
Fixes gh-4473
2017-08-23 17:17:01 -04:00
Rob Winch 416ff3c77a Add EnableReactiveMethodSecurity
Issue gh-4496
2017-08-17 16:42:01 -05:00
Rob Winch b0b9b32c0c Add AuthenticationReactorContextFilter
Fixes gh-4501
2017-08-17 16:42:01 -05:00
Rob Winch e16b8e7976 Fix logback-test.xml 2017-08-17 16:42:01 -05:00
Rob Winch f3737b61e8 Add logback-classic as test dependency 2017-08-17 15:42:39 -05:00
Rob Winch efc3cadd43 Fixed Circular Bean References in Java Config
Fixes gh-4489
2017-08-09 16:24:01 -05:00
Rob Winch bfaead6f68 Removal of ParsingPathMatcher
Changes needed for the removal of ParsingPathMatcher in Spring Framework

b1440b6816 (diff-972650c759c249004b9725f94b570db3R156)
2017-08-02 11:11:11 -05:00
Joe Grandja c872499eee Enable custom configuration for HTTP client
Fixes gh-4477
2017-07-28 16:43:44 -04:00
Rob Winch 9b7883fe10 Add WEB_FILTER_CHAIN_FILTER_ORDER
Fixes gh-4475
2017-07-27 21:02:38 -05:00