diff --git a/para-server/pom.xml b/para-server/pom.xml index 507a1b59..1a9a2d14 100644 --- a/para-server/pom.xml +++ b/para-server/pom.xml @@ -12,8 +12,8 @@ para-server - 5.6.3 - 2.3.6.RELEASE + 5.7.1 + 2.4.0 @@ -23,7 +23,7 @@ ${project.version} - + @@ -130,7 +130,7 @@ com.unboundid unboundid-ldapsdk - 6.0.4 + 6.0.5 diff --git a/para-server/src/main/java/com/erudika/para/server/security/JWTRestfulAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/JWTRestfulAuthFilter.java index ca233657..0d5387d0 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/JWTRestfulAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/JWTRestfulAuthFilter.java @@ -34,6 +34,7 @@ import com.erudika.para.server.security.filters.MicrosoftAuthFilter; import com.erudika.para.server.security.filters.PasswordAuthFilter; import com.erudika.para.server.security.filters.PasswordlessAuthFilter; +import com.erudika.para.server.security.filters.SAMLAuthFilter; import com.erudika.para.server.security.filters.SlackAuthFilter; import com.erudika.para.server.security.filters.TwitterAuthFilter; import com.nimbusds.jwt.SignedJWT; @@ -52,6 +53,8 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; @@ -68,6 +71,8 @@ */ public class JWTRestfulAuthFilter extends GenericFilterBean { + private static final Logger logger = LoggerFactory.getLogger(JWTRestfulAuthFilter.class); + private AuthenticationManager authenticationManager; private AntPathRequestMatcher authenticationRequestMatcher; @@ -83,6 +88,7 @@ public class JWTRestfulAuthFilter extends GenericFilterBean { private LdapAuthFilter ldapAuth; private PasswordAuthFilter passwordAuth; private PasswordlessAuthFilter passwordlessAuth; + private SAMLAuthFilter samlAuth; /** * The default filter mapping. @@ -91,10 +97,11 @@ public class JWTRestfulAuthFilter extends GenericFilterBean { /** * Default constructor. - * @param defaultFilterProcessesUrl filter URL + * @param authenticationManager auth manager */ - public JWTRestfulAuthFilter(String defaultFilterProcessesUrl) { - setFilterProcessesUrl(defaultFilterProcessesUrl); + public JWTRestfulAuthFilter(AuthenticationManager authenticationManager) { + this.authenticationManager = authenticationManager; + setFilterProcessesUrl("/" + JWT_ACTION); } @Override @@ -201,7 +208,7 @@ private boolean refreshTokenHandler(HttpServletRequest request, HttpServletRespo } } } catch (Exception ex) { - logger.debug(ex); + logger.debug(null, ex); } } response.setHeader(HttpHeaders.WWW_AUTHENTICATE, "Bearer error=\"invalid_token\""); @@ -226,7 +233,7 @@ private boolean revokeAllTokensHandler(HttpServletRequest request, HttpServletRe } } } catch (Exception ex) { - logger.debug(ex); + logger.debug(null, ex); } } response.setHeader(HttpHeaders.WWW_AUTHENTICATE, "Bearer"); @@ -485,6 +492,7 @@ public LdapAuthFilter getLdapAuth() { /** * @param ldapAuth auth filter */ + @Inject public void setLdapAuth(LdapAuthFilter ldapAuth) { this.ldapAuth = ldapAuth; } @@ -519,6 +527,21 @@ public void setPasswordlessAuth(PasswordlessAuthFilter passwordlessAuth) { this.passwordlessAuth = passwordlessAuth; } + /** + * @return auth filter + */ + public SAMLAuthFilter getSamlAuth() { + return samlAuth; + } + + /** + * @param samlAuth auth filter + */ + @Inject + public void setSamlAuth(SAMLAuthFilter samlAuth) { + this.samlAuth = samlAuth; + } + private void validateDelegatedTokenIfNecessary(JWTAuthentication jwt) throws AuthenticationException, IOException { User user = SecurityUtils.getAuthenticatedUser(jwt); if (user != null && jwt != null) { diff --git a/para-server/src/main/java/com/erudika/para/server/security/JwtConfigurer.java b/para-server/src/main/java/com/erudika/para/server/security/JwtConfigurer.java new file mode 100644 index 00000000..34652e25 --- /dev/null +++ b/para-server/src/main/java/com/erudika/para/server/security/JwtConfigurer.java @@ -0,0 +1,88 @@ +/* + * Copyright 2013-2022 Erudika. http://erudika.com + * + * 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. + * + * For issues and patches go to: https://github.com/erudika + */ +package com.erudika.para.server.security; + +import com.erudika.para.server.ParaServer; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; + +/** + * + * @author Alex Bogdanovski [alex@erudika.com] + */ +public class JwtConfigurer extends AbstractHttpConfigurer { + + @Override + public void configure(HttpSecurity builder) throws Exception { + AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class); + JWTRestfulAuthFilter jwtAuthFilter = new JWTRestfulAuthFilter(authenticationManager); + RestAuthFilter restAuthFilter = new RestAuthFilter(); + ParaServer.injectInto(jwtAuthFilter); + + jwtAuthFilter.getPasswordAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getPasswordAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getPasswordlessAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getPasswordlessAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getFacebookAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getFacebookAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getGoogleAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getGoogleAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getLinkedinAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getLinkedinAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getTwitterAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getTwitterAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getGithubAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getGithubAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getMicrosoftAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getMicrosoftAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getSlackAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getSlackAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getAmazonAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getAmazonAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getGenericOAuth2Auth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getGenericOAuth2Auth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getLdapAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getLdapAuth(), BasicAuthenticationFilter.class); + + jwtAuthFilter.getSamlAuth().setAuthenticationManager(authenticationManager); + builder.addFilterAfter(jwtAuthFilter.getSamlAuth(), BasicAuthenticationFilter.class); + + builder.addFilterBefore(jwtAuthFilter, RememberMeAuthenticationFilter.class); + + builder.addFilterBefore(restAuthFilter, RememberMeAuthenticationFilter.class); + } + + public static JwtConfigurer customDsl() { + return new JwtConfigurer(); + } + +} diff --git a/para-server/src/main/java/com/erudika/para/server/security/SecurityConfig.java b/para-server/src/main/java/com/erudika/para/server/security/SecurityConfig.java index 0d04f7c6..25a94274 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/SecurityConfig.java +++ b/para-server/src/main/java/com/erudika/para/server/security/SecurityConfig.java @@ -19,20 +19,6 @@ import com.erudika.para.core.utils.Para; import static com.erudika.para.server.ParaServer.getInstance; -import com.erudika.para.server.security.filters.AmazonAuthFilter; -import com.erudika.para.server.security.filters.FacebookAuthFilter; -import com.erudika.para.server.security.filters.GenericOAuth2Filter; -import com.erudika.para.server.security.filters.GitHubAuthFilter; -import com.erudika.para.server.security.filters.GoogleAuthFilter; -import com.erudika.para.server.security.filters.LdapAuthFilter; -import com.erudika.para.server.security.filters.LinkedInAuthFilter; -import com.erudika.para.server.security.filters.MicrosoftAuthFilter; -import com.erudika.para.server.security.filters.PasswordAuthFilter; -import com.erudika.para.server.security.filters.PasswordlessAuthFilter; -import com.erudika.para.server.security.filters.SAMLAuthFilter; -import com.erudika.para.server.security.filters.SAMLMetadataFilter; -import com.erudika.para.server.security.filters.SlackAuthFilter; -import com.erudika.para.server.security.filters.TwitterAuthFilter; import com.typesafe.config.ConfigList; import com.typesafe.config.ConfigObject; import com.typesafe.config.ConfigValue; @@ -41,18 +27,16 @@ import javax.annotation.security.DeclareRoles; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.RememberMeAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy; -import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.firewall.DefaultHttpFirewall; /** @@ -62,29 +46,13 @@ @Configuration @EnableWebSecurity @DeclareRoles({ "ROLE_USER", "ROLE_MOD", "ROLE_ADMIN", "ROLE_APP" }) -public class SecurityConfig extends WebSecurityConfigurerAdapter { +public class SecurityConfig { private static final Logger logger = LoggerFactory.getLogger(SecurityConfig.class); private static final String[] DEFAULT_ROLES = {"USER", "MOD", "ADMIN", "APP"}; private final CachedCsrfTokenRepository csrfTokenRepository; private final SimpleRememberMeServices rememberMeServices; - private final PasswordAuthFilter passwordFilter; - private final PasswordlessAuthFilter passwordlessFilter; - private final FacebookAuthFilter facebookFilter; - private final GoogleAuthFilter googleFilter; - private final LinkedInAuthFilter linkedinFilter; - private final TwitterAuthFilter twitterFilter; - private final GitHubAuthFilter githubFilter; - private final MicrosoftAuthFilter microsoftFilter; - private final SlackAuthFilter slackFilter; - private final AmazonAuthFilter amazonFilter; - private final GenericOAuth2Filter oauth2Filter; - private final LdapAuthFilter ldapFilter; - private final SAMLAuthFilter samlFilter; - private final SAMLMetadataFilter samlMetaFilter; - private final JWTRestfulAuthFilter jwtFilter; - private final RestAuthFilter restAuthFilter; /** * No-args constructor. @@ -92,54 +60,20 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { public SecurityConfig() { csrfTokenRepository = getInstance(CachedCsrfTokenRepository.class); rememberMeServices = getInstance(SimpleRememberMeServices.class); - passwordFilter = getInstance(PasswordAuthFilter.class); - passwordlessFilter = getInstance(PasswordlessAuthFilter.class); - facebookFilter = getInstance(FacebookAuthFilter.class); - googleFilter = getInstance(GoogleAuthFilter.class); - linkedinFilter = getInstance(LinkedInAuthFilter.class); - twitterFilter = getInstance(TwitterAuthFilter.class); - githubFilter = getInstance(GitHubAuthFilter.class); - microsoftFilter = getInstance(MicrosoftAuthFilter.class); - slackFilter = getInstance(SlackAuthFilter.class); - amazonFilter = getInstance(AmazonAuthFilter.class); - oauth2Filter = getInstance(GenericOAuth2Filter.class); - ldapFilter = getInstance(LdapAuthFilter.class); - samlFilter = getInstance(SAMLAuthFilter.class); - samlMetaFilter = getInstance(SAMLMetadataFilter.class); - jwtFilter = getInstance(JWTRestfulAuthFilter.class); - restAuthFilter = getInstance(RestAuthFilter.class); - } - - /** - * Configures the authentication providers. - * - * @param auth a builder - * @throws Exception ex - */ - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - RememberMeAuthenticationProvider rmeProvider = new RememberMeAuthenticationProvider(Para.getConfig().appSecretKey()); - auth.authenticationProvider(rmeProvider); - - JWTAuthenticationProvider jwtProvider = new JWTAuthenticationProvider(); - auth.authenticationProvider(jwtProvider); - - LDAPAuthenticationProvider ldapProvider = new LDAPAuthenticationProvider(); - auth.authenticationProvider(ldapProvider); } /** * Configures the unsecured public resources. - * - * @param web web sec object - * @throws Exception ex + * @return web */ - @Override - public void configure(WebSecurity web) throws Exception { - DefaultHttpFirewall firewall = new DefaultHttpFirewall(); - firewall.setAllowUrlEncodedSlash(true); - web.httpFirewall(firewall); - //web.debug(true); + @Bean + public WebSecurityCustomizer webSecurityCustomizer() { + return (web) -> { + DefaultHttpFirewall firewall = new DefaultHttpFirewall(); + firewall.setAllowUrlEncodedSlash(true); + web.httpFirewall(firewall); + //web.debug(true); + }; } /** @@ -147,9 +81,10 @@ public void configure(WebSecurity web) throws Exception { * * @param http HTTP sec object * @throws Exception ex + * @return http */ - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { String signinPath = Para.getConfig().signinPath(); String signoutPath = Para.getConfig().signoutPath(); String accessDeniedPath = Para.getConfig().accessDeniedPath(); @@ -176,84 +111,13 @@ protected void configure(HttpSecurity http) throws Exception { http.logout().logoutUrl(signoutPath).logoutSuccessUrl(signoutSuccessPath); http.rememberMe().rememberMeServices(rememberMeServices); - registerAuthFilters(http); - - if (jwtFilter != null) { - jwtFilter.setAuthenticationManager(authenticationManager()); - http.addFilterBefore(jwtFilter, RememberMeAuthenticationFilter.class); - } - if (restAuthFilter != null) { - http.addFilterBefore(restAuthFilter, RememberMeAuthenticationFilter.class); - } - } - - private void registerAuthFilters(HttpSecurity http) throws Exception { - if (passwordFilter != null) { - passwordFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(passwordFilter, BasicAuthenticationFilter.class); - } - - if (passwordlessFilter != null) { - passwordlessFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(passwordlessFilter, BasicAuthenticationFilter.class); - } - - if (facebookFilter != null) { - facebookFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(facebookFilter, BasicAuthenticationFilter.class); - } + http.authenticationProvider(new RememberMeAuthenticationProvider(Para.getConfig().appSecretKey())); + http.authenticationProvider(new JWTAuthenticationProvider()); + http.authenticationProvider(new LDAPAuthenticationProvider()); - if (googleFilter != null) { - googleFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(googleFilter, BasicAuthenticationFilter.class); - } - - if (linkedinFilter != null) { - linkedinFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(linkedinFilter, BasicAuthenticationFilter.class); - } - - if (twitterFilter != null) { - twitterFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(twitterFilter, BasicAuthenticationFilter.class); - } - - if (githubFilter != null) { - githubFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(githubFilter, BasicAuthenticationFilter.class); - } - - if (microsoftFilter != null) { - microsoftFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(microsoftFilter, BasicAuthenticationFilter.class); - } - - if (slackFilter != null) { - slackFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(slackFilter, BasicAuthenticationFilter.class); - } - - if (amazonFilter != null) { - amazonFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(amazonFilter, BasicAuthenticationFilter.class); - } - - if (oauth2Filter != null) { - oauth2Filter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(oauth2Filter, BasicAuthenticationFilter.class); - } - - if (ldapFilter != null) { - ldapFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(ldapFilter, BasicAuthenticationFilter.class); - } - - if (samlFilter != null) { - samlFilter.setAuthenticationManager(authenticationManager()); - http.addFilterAfter(samlFilter, BasicAuthenticationFilter.class); - } + http.apply(new JwtConfigurer()); - http.addFilterAfter(samlMetaFilter, BasicAuthenticationFilter.class); + return http.build(); } private void parseProtectedResources(HttpSecurity http, ConfigObject protectedResources) throws Exception { diff --git a/para-server/src/main/java/com/erudika/para/server/security/SecurityModule.java b/para-server/src/main/java/com/erudika/para/server/security/SecurityModule.java index a228900a..677d3a0e 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/SecurityModule.java +++ b/para-server/src/main/java/com/erudika/para/server/security/SecurityModule.java @@ -60,7 +60,6 @@ public class SecurityModule extends AbstractModule { private LdapAuthFilter ldapFilter; private SAMLAuthFilter samlFilter; private SAMLMetadataFilter samlMetaFilter; - private JWTRestfulAuthFilter jwtFilter; protected void configure() { } @@ -440,49 +439,4 @@ public void setSamlMetadataFilter(SAMLMetadataFilter samleMetaFilter) { this.samlMetaFilter = samleMetaFilter; } - /** - * @param fbAuth filter - * @param gpAuth filter - * @param ghAuth filter - * @param liAuth filter - * @param twAuth filter - * @param msAuth filter - * @param slAuth filter - * @param azAuth filter - * @param oAuth2 filter - * @param ldAuth filter - * @param pwAuth filter - * @param plAuth filter - * @return filter - */ - @Provides - public JWTRestfulAuthFilter getJWTAuthFilter(FacebookAuthFilter fbAuth, GoogleAuthFilter gpAuth, - GitHubAuthFilter ghAuth, LinkedInAuthFilter liAuth, TwitterAuthFilter twAuth, - MicrosoftAuthFilter msAuth, SlackAuthFilter slAuth, AmazonAuthFilter azAuth, - GenericOAuth2Filter oAuth2, LdapAuthFilter ldAuth, - PasswordAuthFilter pwAuth, PasswordlessAuthFilter plAuth) { - if (jwtFilter == null) { - jwtFilter = new JWTRestfulAuthFilter("/" + JWTRestfulAuthFilter.JWT_ACTION); - jwtFilter.setFacebookAuth(fbAuth); - jwtFilter.setGoogleAuth(gpAuth); - jwtFilter.setGithubAuth(ghAuth); - jwtFilter.setLinkedinAuth(liAuth); - jwtFilter.setTwitterAuth(twAuth); - jwtFilter.setMicrosoftAuth(msAuth); - jwtFilter.setSlackAuth(slAuth); - jwtFilter.setAmazonAuth(azAuth); - jwtFilter.setGenericOAuth2Auth(oAuth2); - jwtFilter.setLdapAuth(ldAuth); - jwtFilter.setPasswordAuth(pwAuth); - jwtFilter.setPasswordlessAuth(plAuth); - } - return jwtFilter; - } - - /** - * @param jwtFilter filter - */ - public void setJwtFilter(JWTRestfulAuthFilter jwtFilter) { - this.jwtFilter = jwtFilter; - } } diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/AmazonAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/AmazonAuthFilter.java index b3486863..358c8bf6 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/AmazonAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/AmazonAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -44,6 +44,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -54,6 +56,8 @@ */ public class AmazonAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(AmazonAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://api.amazon.com/user/profile"; diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/FacebookAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/FacebookAuthFilter.java index 66d2c363..e141cff0 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/FacebookAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/FacebookAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; @@ -42,6 +42,8 @@ import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -52,6 +54,8 @@ */ public class FacebookAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(FacebookAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://graph.facebook.com/me?" diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/GitHubAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/GitHubAuthFilter.java index 23999a28..14c344cb 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/GitHubAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/GitHubAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.MappingIterator; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; @@ -45,6 +45,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -55,6 +57,8 @@ */ public class GitHubAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(GitHubAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://api.github.com/user"; diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/GoogleAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/GoogleAuthFilter.java index 3221e3fe..47c44285 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/GoogleAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/GoogleAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; import java.util.Map; @@ -43,6 +43,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -53,6 +55,8 @@ */ public class GoogleAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(GoogleAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://www.googleapis.com/oauth2/v3/userinfo"; diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/LinkedInAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/LinkedInAuthFilter.java index 1c91522f..da8ed73e 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/LinkedInAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/LinkedInAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; @@ -45,6 +45,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -55,6 +57,8 @@ */ public class LinkedInAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(LinkedInAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://api.linkedin.com/v2/me" diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/MicrosoftAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/MicrosoftAuthFilter.java index 196b8872..48224b93 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/MicrosoftAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/MicrosoftAuthFilter.java @@ -44,6 +44,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -54,6 +56,8 @@ */ public class MicrosoftAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(MicrosoftAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://graph.microsoft.com/v1.0/me"; diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/PasswordlessAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/PasswordlessAuthFilter.java index eec70c47..35014b4d 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/PasswordlessAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/PasswordlessAuthFilter.java @@ -32,6 +32,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -42,6 +44,8 @@ */ public class PasswordlessAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(PasswordlessAuthFilter.class); + /** * The default filter mapping. */ diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/SlackAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/SlackAuthFilter.java index 21757064..d2d4cfb3 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/SlackAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/SlackAuthFilter.java @@ -17,15 +17,15 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -45,6 +45,8 @@ import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; @@ -55,6 +57,8 @@ */ public class SlackAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(SlackAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String PROFILE_URL = "https://slack.com/api/users.identity"; diff --git a/para-server/src/main/java/com/erudika/para/server/security/filters/TwitterAuthFilter.java b/para-server/src/main/java/com/erudika/para/server/security/filters/TwitterAuthFilter.java index decc75fa..744f3b1c 100644 --- a/para-server/src/main/java/com/erudika/para/server/security/filters/TwitterAuthFilter.java +++ b/para-server/src/main/java/com/erudika/para/server/security/filters/TwitterAuthFilter.java @@ -17,16 +17,16 @@ */ package com.erudika.para.server.security.filters; -import com.erudika.para.core.utils.Para; import com.erudika.para.core.App; -import com.erudika.para.core.utils.ParaObjectUtils; import com.erudika.para.core.User; +import com.erudika.para.core.utils.Config; +import com.erudika.para.core.utils.Para; +import com.erudika.para.core.utils.ParaObjectUtils; +import com.erudika.para.core.utils.Utils; import com.erudika.para.server.security.AuthenticatedUserDetails; import com.erudika.para.server.security.OAuth1HmacSigner; import com.erudika.para.server.security.SecurityUtils; import com.erudika.para.server.security.UserAuthentication; -import com.erudika.para.core.utils.Config; -import com.erudika.para.core.utils.Utils; import com.fasterxml.jackson.databind.ObjectReader; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -46,6 +46,8 @@ import org.apache.hc.core5.http.ParseException; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.Authentication; @@ -57,6 +59,8 @@ */ public class TwitterAuthFilter extends AbstractAuthenticationProcessingFilter { + private static final Logger logger = LoggerFactory.getLogger(TwitterAuthFilter.class); + private final CloseableHttpClient httpclient; private final ObjectReader jreader; private static final String FLOW_URL1 = "https://api.twitter.com/oauth/request_token"; diff --git a/para-server/src/test/java/com/erudika/para/client/ParaClientIT.java b/para-server/src/test/java/com/erudika/para/client/ParaClientIT.java index afab4a92..a9899aeb 100644 --- a/para-server/src/test/java/com/erudika/para/client/ParaClientIT.java +++ b/para-server/src/test/java/com/erudika/para/client/ParaClientIT.java @@ -355,7 +355,7 @@ public void testBatchCRUDForChildApp() throws InterruptedException { s.addProperty("text", "a b c"); articles.add(s); } - + pcc.signOut(); Para.getDAO().deleteAll(pcc.findQuery("article", "*")); List l1 = pcc.createAll(articles); assertEquals(3, l1.size()); diff --git a/pom.xml b/pom.xml index da694b68..aedfc2f7 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 1.2.11 2.17.160 2.35 - 2.6.7 + 2.7.0 4.2.5 5.1.3 5.1.3