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