diff --git a/distribution/Dockerfile b/distribution/Dockerfile
index da17dbdb..0578be08 100644
--- a/distribution/Dockerfile
+++ b/distribution/Dockerfile
@@ -21,7 +21,7 @@ RUN cd ${WEBAPP_TARGET_DIR} && jar -xvf /tmp/wisemapping.war
RUN rm /tmp/wisemapping.war
# Change logger to
-RUN cp ${WEBAPP_TARGET_DIR}/WEB-INF/classes/log4j-stdout.properties ${WEBAPP_TARGET_DIR}/WEB-INF/classes/log4j.properties
+RUN cp ${WEBAPP_TARGET_DIR}/WEB-INF/classes/log4j-stdout.xml ${WEBAPP_TARGET_DIR}/WEB-INF/classes/log4j.properties
# Add support for proxy
RUN sed -i 's|\
diff --git a/wise-webapp/pom.xml b/wise-webapp/pom.xml
index b9b83a78..7bc83645 100644
--- a/wise-webapp/pom.xml
+++ b/wise-webapp/pom.xml
@@ -13,11 +13,11 @@
- 5.3.28
- 5.8.4
- 5.6.15.Final
+ 6.0.10
+ 6.1.1
+ 6.2.6.Final
6.0.21.Final
- 5.6.1
+ 6.0.2
@@ -56,12 +56,6 @@
postgresql
42.5.4
-
- org.springframework.security
- spring-security-ldap
- ${org.springframework.addons}
- compile
-
org.springframework
spring-beans
@@ -82,16 +76,17 @@
org.hibernate
- hibernate-core
- ${hibernate.version}
+ hibernate-core-jakarta
+ 5.6.15.Final
org.hibernate.validator
hibernate-validator
- ${hibernate-validator.version}
+ 8.0.1.Final
+
org.springframework
spring-orm
@@ -104,12 +99,6 @@
${org.springframework.version}
compile
-
- org.slf4j
- slf4j-log4j12
- 1.7.25
- runtime
-
org.springframework
spring-web
@@ -139,24 +128,12 @@
5.3.15
test
-
- antlr
- antlr
- 2.7.6
- runtime
-
-
- org.apache.tiles
- tiles-jsp
- 3.0.8
- runtime
-
-
- org.slf4j
- jcl-over-slf4j
-
-
-
+
+
+
+
+
+
org.springframework
spring-aop
@@ -169,18 +146,17 @@
${org.springframework.addons}
compile
+
+
+
+
+
org.springframework.security
spring-security-core
${org.springframework.addons}
compile
-
- org.springframework.security
- spring-security-config
- ${org.springframework.addons}
- runtime
-
org.springframework
spring-jdbc
@@ -194,9 +170,9 @@
compile
- com.sun.mail
- javax.mail
- 1.6.2
+ jakarta.mail
+ jakarta.mail-api
+ 2.1.2
mysql
@@ -209,21 +185,16 @@
commons-dbcp2
2.9.0
-
- org.hibernate
- hibernate-ehcache
- ${hibernate.version}
-
-
- javax.cache
- cache-api
- 1.1.1
-
-
- org.ehcache
- ehcache
- 3.9.9
-
+
+
+
+
+
+
+
+
+
+
org.apache.logging.log4j
log4j-core
@@ -235,6 +206,7 @@
commons-validator
1.7
+
org.hsqldb
@@ -242,29 +214,26 @@
2.7.1
runtime
+
com.fasterxml.jackson.core
jackson-databind
- 2.14.2
+ 2.15.1
+
-
- javax.servlet
- jstl
- 1.2
+ jakarta.transaction
+ jakarta.transaction-api
+ 2.0.1
+
- org.slf4j
- slf4j-api
- 2.0.5
- runtime
-
-
- javax.servlet
- javax.servlet-api
- 3.1.0
+ jakarta.servlet
+ jakarta.servlet-api
+ 6.0.0
provided
+
commons-io
commons-io
@@ -275,6 +244,11 @@
fluent-hc
4.5.14
+
+ org.springframework.security
+ spring-security-config
+ ${org.springframework.addons}
+
@@ -420,6 +394,9 @@
true
+
+ WEB-INF/lib/commons-logging-*.jar,
+
src/main/resources
@@ -436,21 +413,6 @@
org.apache.maven.plugins
maven-surefire-plugin
-
-
- org.apache.tomcat.maven
- tomcat7-maven-plugin
- 2.0
-
- /wisemapping
- ${project.build.directory}/wisemapping.war
- war
- true
-
- ${project.build.directory}
-
-
-
org.jacoco
jacoco-maven-plugin
@@ -497,14 +459,6 @@
-
-
-
-
-
-
-
-
default-report
verify
@@ -518,48 +472,29 @@
org.eclipse.jetty
jetty-maven-plugin
- 9.4.34.v20201102
+ 11.0.15
foo
8080
9999
- ${project.build.directory}/wisemapping.war
- automatic
-
+ FORK
+
+ ${project.build.directory}/wisemapping.war
${project.basedir}/webdefault.xml
-
-
-
- org.mortbay.util.FileResource.checkAliases
- false
-
-
- org.mortbay.util.FileResource.checkAliases
- false
-
-
- database.base.url
- ${project.build.directory}
-
-
+
run-forked
pre-integration-test
- run-forked
+ run-war
- true
true
- 0
- false
- 200
- -Ddatabase.base.url=${project.build.directory} -Djetty.port=8080
-
+ -Ddatabase.base.url=${project.build.directory} -Djetty.port=8080 -Dlogging.level.org.springframework=TRACE
diff --git a/wise-webapp/src/main/java/com/wisemapping/config/SecurityConfig.java b/wise-webapp/src/main/java/com/wisemapping/config/SecurityConfig.java
new file mode 100644
index 00000000..545cdcf9
--- /dev/null
+++ b/wise-webapp/src/main/java/com/wisemapping/config/SecurityConfig.java
@@ -0,0 +1,126 @@
+package com.wisemapping.config;
+
+import com.wisemapping.security.AuthenticationSuccessHandler;
+import com.wisemapping.security.UserDetailsService;
+import com.wisemapping.service.UserService;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.security.web.firewall.StrictHttpFirewall;
+import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
+import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
+
+
+@Configuration
+@EnableWebSecurity(debug = true)
+public class SecurityConfig {
+ @Autowired
+ UserService userService;
+
+ @Value("${admin.user}")
+ String adminUser;
+
+ @Bean
+ public StrictHttpFirewall httpFirewall() {
+ StrictHttpFirewall firewall = new StrictHttpFirewall();
+ firewall.setAllowSemicolon(true);
+ return firewall;
+ }
+
+ @Bean
+ @Order(2)
+ SecurityFilterChain apiSecurityFilterChain(@NotNull final HttpSecurity http, @NotNull final HandlerMappingIntrospector introspector) throws Exception {
+ final MvcRequestMatcher.Builder serviceMapper = new MvcRequestMatcher.Builder(introspector).servletPath("/service");
+ return http
+ .securityMatchers((matchers) ->
+ matchers.requestMatchers(serviceMapper.pattern(("/**"))))
+ .authorizeHttpRequests(auth ->
+ auth
+ .requestMatchers("/users/").permitAll()
+ .requestMatchers("/users/resetPassword").permitAll()
+ .requestMatchers("/oauth2/googlecallback").permitAll()
+ .requestMatchers("/oauth2/confirmaccountsync").permitAll()
+ .requestMatchers("/admin/**").hasAnyRole("ADMIN")
+ .requestMatchers("/**").hasAnyRole("USER", "ADMIN")
+
+ )
+ .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
+ .httpBasic(httpBasic -> {
+ })
+ .csrf(AbstractHttpConfigurer::disable)
+ .build();
+ }
+
+ @Bean
+ @Order(1)
+ public SecurityFilterChain filterChain(@NotNull final HttpSecurity http, @NotNull final HandlerMappingIntrospector introspector) throws Exception {
+ final AuthenticationSuccessHandler authenticationSuccessHandler = new AuthenticationSuccessHandler();
+ authenticationSuccessHandler.setAlwaysUseDefaultTargetUrl(false);
+ authenticationSuccessHandler.setDefaultTargetUrl("/c/maps/");
+
+ final MvcRequestMatcher.Builder restfullMapper = new MvcRequestMatcher.Builder(introspector).servletPath("/c/restful");
+ final MvcRequestMatcher.Builder mvcMatcher = new MvcRequestMatcher.Builder(introspector).servletPath("/c");
+
+ http
+ .securityMatchers((matchers) ->
+ matchers.requestMatchers(restfullMapper.pattern(("/**"))).
+ requestMatchers(mvcMatcher.pattern(("/**"))))
+ .authorizeHttpRequests(
+ (auth) ->
+ auth
+ .requestMatchers("/login", "logout").permitAll()
+ .requestMatchers("/registration", "registration-success").permitAll()
+ .requestMatchers("/registration-google").permitAll()
+ .requestMatchers("/forgot-password", "/forgot-password-success").permitAll()
+ .requestMatchers("/maps/*/embed").permitAll()
+ .requestMatchers("/maps/*/try").permitAll()
+ .requestMatchers("/maps/*/public").permitAll()
+ .requestMatchers("/restful/maps/*/document/xml-pub").permitAll()
+ .requestMatchers("/**").hasAnyRole("USER", "ADMIN")
+ .anyRequest().authenticated())
+ .formLogin((loginForm) ->
+ loginForm.loginPage("/c/login")
+ .loginProcessingUrl("/c/perform-login")
+ .defaultSuccessUrl("/c/maps/")
+ .failureUrl("/c/login?login_error=2"))
+ .logout((logout) ->
+ logout
+ .logoutUrl("/c/logout")
+ .logoutSuccessUrl("/c/login")
+ .invalidateHttpSession(true)
+ .deleteCookies("JSESSIONID")
+ .permitAll()
+ ).rememberMe(remember ->
+ remember
+ .tokenValiditySeconds(2419200)
+ .rememberMeParameter("remember-me"
+ ).authenticationSuccessHandler(authenticationSuccessHandler)
+ )
+ .csrf((csrf) ->
+ csrf.ignoringRequestMatchers("/logout"));
+
+ return http.build();
+ }
+
+ @Bean
+ public WebSecurityCustomizer webSecurityCustomizer() {
+ return (web) -> web.ignoring().requestMatchers("/static/**", "/css/**", "/js/**", "/images/**");
+ }
+
+ @Bean
+ public UserDetailsService userDetailsService() {
+ final UserDetailsService result = new UserDetailsService();
+ result.setUserService(userService);
+ result.setAdminUser(adminUser);
+ return result;
+ }
+}
diff --git a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java
index 907a3a5e..1d8a5f8a 100644
--- a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java
+++ b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java
@@ -20,6 +20,7 @@ package com.wisemapping.dao;
import com.wisemapping.model.*;
import com.wisemapping.util.ZipUtils;
+import jakarta.persistence.Query;
import org.hibernate.Criteria;
import org.hibernate.criterion.Junction;
import org.hibernate.criterion.Order;
@@ -30,7 +31,6 @@ import org.jetbrains.annotations.Nullable;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
-import javax.persistence.Query;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidEmailException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidEmailException.java
index 92739682..97cac72d 100755
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidEmailException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidEmailException.java
@@ -21,7 +21,7 @@ package com.wisemapping.exceptions;
import org.springframework.lang.Nullable;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class InvalidEmailException
extends ClientException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidMindmapException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidMindmapException.java
index 59dcc5e9..d7db2b99 100755
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidMindmapException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/InvalidMindmapException.java
@@ -21,7 +21,7 @@ package com.wisemapping.exceptions;
import org.springframework.lang.Nullable;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class InvalidMindmapException
extends ClientException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/MapCouldNotFoundException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/MapCouldNotFoundException.java
index ee8a641e..5ed7c5f3 100755
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/MapCouldNotFoundException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/MapCouldNotFoundException.java
@@ -19,7 +19,7 @@
package com.wisemapping.exceptions;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class MapCouldNotFoundException
extends ClientException
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/OAuthAuthenticationException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/OAuthAuthenticationException.java
index f321ca30..816c423c 100644
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/OAuthAuthenticationException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/OAuthAuthenticationException.java
@@ -3,7 +3,7 @@ package com.wisemapping.exceptions;
import com.wisemapping.service.google.http.HttpInvokerException;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class OAuthAuthenticationException extends WiseMappingException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/PasswordTooLongException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/PasswordTooLongException.java
index 6409ee29..fca34aad 100755
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/PasswordTooLongException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/PasswordTooLongException.java
@@ -19,7 +19,7 @@
package com.wisemapping.exceptions;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class PasswordTooLongException
extends ClientException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/exceptions/TooManyInactiveAccountsExceptions.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/TooManyInactiveAccountsExceptions.java
index dc2c8428..dcdf5815 100755
--- a/wise-webapp/src/main/java/com/wisemapping/exceptions/TooManyInactiveAccountsExceptions.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/TooManyInactiveAccountsExceptions.java
@@ -19,7 +19,7 @@
package com.wisemapping.exceptions;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
public class TooManyInactiveAccountsExceptions
extends ClientException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/ValidationException.java b/wise-webapp/src/main/java/com/wisemapping/exceptions/ValidationException.java
similarity index 97%
rename from wise-webapp/src/main/java/com/wisemapping/rest/ValidationException.java
rename to wise-webapp/src/main/java/com/wisemapping/exceptions/ValidationException.java
index a3962513..e5464ea5 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/ValidationException.java
+++ b/wise-webapp/src/main/java/com/wisemapping/exceptions/ValidationException.java
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package com.wisemapping.rest;
+package com.wisemapping.exceptions;
import com.wisemapping.exceptions.WiseMappingException;
diff --git a/wise-webapp/src/main/java/com/wisemapping/filter/CorsFilter.java b/wise-webapp/src/main/java/com/wisemapping/filter/CorsFilter.java
index 5cc60cdb..fd0d53b9 100644
--- a/wise-webapp/src/main/java/com/wisemapping/filter/CorsFilter.java
+++ b/wise-webapp/src/main/java/com/wisemapping/filter/CorsFilter.java
@@ -20,13 +20,13 @@ package com.wisemapping.filter;
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
/**
*
diff --git a/wise-webapp/src/main/java/com/wisemapping/filter/RequestPropertiesInterceptor.java b/wise-webapp/src/main/java/com/wisemapping/filter/RequestPropertiesInterceptor.java
index 1d257177..ddc03d1b 100644
--- a/wise-webapp/src/main/java/com/wisemapping/filter/RequestPropertiesInterceptor.java
+++ b/wise-webapp/src/main/java/com/wisemapping/filter/RequestPropertiesInterceptor.java
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.HandlerInterceptor;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
public class RequestPropertiesInterceptor implements HandlerInterceptor {
diff --git a/wise-webapp/src/main/java/com/wisemapping/filter/UserLocaleInterceptor.java b/wise-webapp/src/main/java/com/wisemapping/filter/UserLocaleInterceptor.java
index dfcaa888..ed72d796 100644
--- a/wise-webapp/src/main/java/com/wisemapping/filter/UserLocaleInterceptor.java
+++ b/wise-webapp/src/main/java/com/wisemapping/filter/UserLocaleInterceptor.java
@@ -22,12 +22,11 @@ import com.wisemapping.model.User;
import com.wisemapping.security.Utils;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
import java.util.Locale;
public class UserLocaleInterceptor implements HandlerInterceptor {
diff --git a/wise-webapp/src/main/java/com/wisemapping/listener/UnlockOnExpireListener.java b/wise-webapp/src/main/java/com/wisemapping/listener/UnlockOnExpireListener.java
index 008c8155..1a706451 100644
--- a/wise-webapp/src/main/java/com/wisemapping/listener/UnlockOnExpireListener.java
+++ b/wise-webapp/src/main/java/com/wisemapping/listener/UnlockOnExpireListener.java
@@ -31,9 +31,9 @@ import org.apache.logging.log4j.Logger;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpSessionEvent;
+import jakarta.servlet.http.HttpSessionListener;
public class UnlockOnExpireListener implements HttpSessionListener {
private static final Logger logger = LogManager.getLogger();
diff --git a/wise-webapp/src/main/java/com/wisemapping/mail/Mailer.java b/wise-webapp/src/main/java/com/wisemapping/mail/Mailer.java
index 04b05f52..0cca8d1f 100644
--- a/wise-webapp/src/main/java/com/wisemapping/mail/Mailer.java
+++ b/wise-webapp/src/main/java/com/wisemapping/mail/Mailer.java
@@ -21,11 +21,11 @@ package com.wisemapping.mail;
import com.wisemapping.util.VelocityEngineUtils;
import com.wisemapping.util.VelocityEngineWrapper;
-import org.jetbrains.annotations.NotNull;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
+import jakarta.validation.constraints.NotNull;
import java.nio.charset.StandardCharsets;
import java.util.Map;
diff --git a/wise-webapp/src/main/java/com/wisemapping/mail/NotificationService.java b/wise-webapp/src/main/java/com/wisemapping/mail/NotificationService.java
index ce52f098..fc7ce39b 100644
--- a/wise-webapp/src/main/java/com/wisemapping/mail/NotificationService.java
+++ b/wise-webapp/src/main/java/com/wisemapping/mail/NotificationService.java
@@ -32,7 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ResourceBundleMessageSource;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/AccessAuditory.java b/wise-webapp/src/main/java/com/wisemapping/model/AccessAuditory.java
index 9b021285..6f9e6637 100755
--- a/wise-webapp/src/main/java/com/wisemapping/model/AccessAuditory.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/AccessAuditory.java
@@ -20,7 +20,7 @@ package com.wisemapping.model;
import org.jetbrains.annotations.NotNull;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Calendar;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Collaboration.java b/wise-webapp/src/main/java/com/wisemapping/model/Collaboration.java
index 40d892b8..3ff74905 100644
--- a/wise-webapp/src/main/java/com/wisemapping/model/Collaboration.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/Collaboration.java
@@ -21,8 +21,8 @@ package com.wisemapping.model;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/CollaborationProperties.java b/wise-webapp/src/main/java/com/wisemapping/model/CollaborationProperties.java
index 4c0fea46..155c4b82 100644
--- a/wise-webapp/src/main/java/com/wisemapping/model/CollaborationProperties.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/CollaborationProperties.java
@@ -20,7 +20,7 @@ package com.wisemapping.model;
import org.jetbrains.annotations.NotNull;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
@Entity
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java b/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java
index 02e507b7..4fa9def0 100755
--- a/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java
@@ -22,7 +22,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Calendar;
import java.util.HashSet;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Label.java b/wise-webapp/src/main/java/com/wisemapping/model/Label.java
index 6126560d..36617fd8 100644
--- a/wise-webapp/src/main/java/com/wisemapping/model/Label.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/Label.java
@@ -22,7 +22,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Objects;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/MindMapHistory.java b/wise-webapp/src/main/java/com/wisemapping/model/MindMapHistory.java
index 5ef3c1c5..14a015f2 100755
--- a/wise-webapp/src/main/java/com/wisemapping/model/MindMapHistory.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/MindMapHistory.java
@@ -22,7 +22,7 @@ import com.wisemapping.util.ZipUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.IOException;
import java.util.Calendar;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java
index 68f18c82..42621668 100644
--- a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java
@@ -30,7 +30,7 @@ import org.hibernate.annotations.NotFoundAction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
diff --git a/wise-webapp/src/main/java/com/wisemapping/model/User.java b/wise-webapp/src/main/java/com/wisemapping/model/User.java
index 615c6775..39f6e8a1 100644
--- a/wise-webapp/src/main/java/com/wisemapping/model/User.java
+++ b/wise-webapp/src/main/java/com/wisemapping/model/User.java
@@ -21,7 +21,7 @@ package com.wisemapping.model;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Calendar;
@@ -90,7 +90,7 @@ public class User
return password;
}
- public void setPassword(@javax.validation.constraints.NotNull String password) {
+ public void setPassword(@jakarta.validation.constraints.NotNull String password) {
this.password = password;
}
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/AccountController.java b/wise-webapp/src/main/java/com/wisemapping/rest/AccountController.java
index e7ef928a..571d96e2 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/AccountController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/AccountController.java
@@ -32,6 +32,7 @@ import com.wisemapping.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -41,6 +42,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
import java.util.List;
@Controller
+@PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')")
public class AccountController extends BaseController {
@Qualifier("userService")
@Autowired
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java b/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java
index 352f5681..71cf2700 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java
@@ -30,14 +30,16 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Controller
+@PreAuthorize("isAuthenticated() and hasRole('ROLE_ADMIN')")
public class AdminController extends BaseController {
@Qualifier("userService")
@Autowired
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/BaseController.java b/wise-webapp/src/main/java/com/wisemapping/rest/BaseController.java
index 89d4953e..8acc8ece 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/BaseController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/BaseController.java
@@ -20,6 +20,7 @@ package com.wisemapping.rest;
import com.wisemapping.exceptions.ClientException;
import com.wisemapping.exceptions.OAuthAuthenticationException;
import com.wisemapping.exceptions.Severity;
+import com.wisemapping.exceptions.ValidationException;
import com.wisemapping.mail.NotificationService;
import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestErrors;
@@ -37,9 +38,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.lang.reflect.UndeclaredThrowableException;
import java.util.Locale;
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java b/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java
index 7b801bb7..9a8078c1 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java
@@ -18,6 +18,7 @@
package com.wisemapping.rest;
import com.wisemapping.exceptions.LabelCouldNotFoundException;
+import com.wisemapping.exceptions.ValidationException;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
@@ -30,15 +31,17 @@ import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
@Controller
+@PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')")
public class LabelController extends BaseController {
@Qualifier("labelService")
@@ -64,7 +67,7 @@ public class LabelController extends BaseController {
response.setHeader("ResourceId", Long.toString(label.getId()));
}
- @RequestMapping(method = RequestMethod.GET, value = "/labels", produces = {"application/json"})
+ @RequestMapping(method = RequestMethod.GET, value = "/labels/", produces = {"application/json"})
public RestLabelList retrieveList() {
final User user = Utils.getUser();
assert user != null;
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java
index 1ba785b9..d033d9f4 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java
@@ -33,12 +33,13 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
@@ -46,6 +47,7 @@ import java.util.stream.Collectors;
@Controller
+@PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')")
public class MindmapController extends BaseController {
final Logger logger = LogManager.getLogger();
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/OAuth2Controller.java b/wise-webapp/src/main/java/com/wisemapping/rest/OAuth2Controller.java
index feba7457..9130a4b5 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/OAuth2Controller.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/OAuth2Controller.java
@@ -34,8 +34,8 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
@Controller
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/UserController.java b/wise-webapp/src/main/java/com/wisemapping/rest/UserController.java
index e2ee2ec2..5791fed8 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/UserController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/UserController.java
@@ -35,13 +35,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
@@ -61,7 +62,7 @@ public class UserController extends BaseController {
@Autowired
private AuthenticationManager authManager;
- @Value("${google.recaptcha2.enabled}")
+ @Value("${google.recaptcha2.enabled:false}")
private Boolean recatchaEnabled;
@Value("${accounts.exclusion.domain:''}")
@@ -70,7 +71,7 @@ public class UserController extends BaseController {
private static final Logger logger = LogManager.getLogger();
private static final String REAL_IP_ADDRESS_HEADER = "X-Real-IP";
- @RequestMapping(method = RequestMethod.POST, value = "/users", produces = { "application/json" })
+ @RequestMapping(method = RequestMethod.POST, value = "/users/", produces = { "application/json" })
@ResponseStatus(value = HttpStatus.CREATED)
public void registerUser(@RequestBody RestUserRegistration registration, @NotNull HttpServletRequest request,
@NotNull HttpServletResponse response) throws WiseMappingException, BindException {
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestCollaborator.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestCollaborator.java
index 1593af01..ede08c0e 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestCollaborator.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestCollaborator.java
@@ -24,9 +24,9 @@ import com.wisemapping.model.Collaborator;
import com.wisemapping.util.TimeUtils;
import org.jetbrains.annotations.NotNull;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.Calendar;
@JsonAutoDetect(
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestErrors.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestErrors.java
index daf4a213..7591e567 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestErrors.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestErrors.java
@@ -30,9 +30,9 @@ import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.*;
@JsonAutoDetect(
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestLabelList.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestLabelList.java
index 10f7f8f4..62a9e311 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestLabelList.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestLabelList.java
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.wisemapping.model.Label;
import org.jetbrains.annotations.NotNull;
-import javax.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElement;
import java.util.ArrayList;
import java.util.List;
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java
index 660fbb28..1e837b5c 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java
@@ -29,9 +29,9 @@ import com.wisemapping.util.TimeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlRootElement;
import java.io.IOException;
import java.util.Calendar;
diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java
index aaef046c..48dc7b54 100644
--- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java
+++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java
@@ -24,7 +24,7 @@ import com.wisemapping.model.Collaborator;
import com.wisemapping.model.Mindmap;
import org.jetbrains.annotations.NotNull;
-import javax.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElement;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
diff --git a/wise-webapp/src/main/java/com/wisemapping/security/AuthenticationSuccessHandler.java b/wise-webapp/src/main/java/com/wisemapping/security/AuthenticationSuccessHandler.java
index 923eefca..2e3945b6 100644
--- a/wise-webapp/src/main/java/com/wisemapping/security/AuthenticationSuccessHandler.java
+++ b/wise-webapp/src/main/java/com/wisemapping/security/AuthenticationSuccessHandler.java
@@ -23,9 +23,9 @@ import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
diff --git a/wise-webapp/src/main/java/com/wisemapping/security/CSFRRequestMatcher.java b/wise-webapp/src/main/java/com/wisemapping/security/CSFRRequestMatcher.java
deleted file mode 100644
index 4f3421eb..00000000
--- a/wise-webapp/src/main/java/com/wisemapping/security/CSFRRequestMatcher.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright [2022] [wisemapping]
- *
- * Licensed under WiseMapping Public License, Version 1.0 (the "License").
- * It is basically the Apache License, Version 2.0 (the "License") plus the
- * "powered by wisemapping" text requirement on every single page;
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.wisemapping.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.wisemapping.security;
-
-import org.springframework.security.web.util.matcher.RequestMatcher;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Arrays;
-
-public class CSFRRequestMatcher implements RequestMatcher {
-
- private String prefix;
- static String[] supportedMethods = {"POST", "PUT", "GET", "DELETE", "PATCH"};
-
- @Override
- public boolean matches(HttpServletRequest request) {
- final String requestURI = request.getRequestURI();
- return Arrays.stream(supportedMethods).anyMatch(p -> request.getMethod().toUpperCase().equals(p))
- && requestURI.startsWith(prefix);
- }
-
- public String getPrefix() {
- return prefix;
- }
-
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-}
diff --git a/wise-webapp/src/main/java/com/wisemapping/security/UserDetailsService.java b/wise-webapp/src/main/java/com/wisemapping/security/UserDetailsService.java
index 0d86c946..f74a582d 100644
--- a/wise-webapp/src/main/java/com/wisemapping/security/UserDetailsService.java
+++ b/wise-webapp/src/main/java/com/wisemapping/security/UserDetailsService.java
@@ -1,20 +1,20 @@
/*
-* Copyright [2022] [wisemapping]
-*
-* Licensed under WiseMapping Public License, Version 1.0 (the "License").
-* It is basically the Apache License, Version 2.0 (the "License") plus the
-* "powered by wisemapping" text requirement on every single page;
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the license at
-*
-* http://www.wisemapping.org/license
-*
-* 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.
-*/
+ * Copyright [2022] [wisemapping]
+ *
+ * Licensed under WiseMapping Public License, Version 1.0 (the "License").
+ * It is basically the Apache License, Version 2.0 (the "License") plus the
+ * "powered by wisemapping" text requirement on every single page;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the license at
+ *
+ * http://www.wisemapping.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.wisemapping.security;
@@ -23,12 +23,13 @@ import com.wisemapping.model.User;
import com.wisemapping.service.UserService;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.springframework.context.annotation.Bean;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
public class UserDetailsService
- implements org.springframework.security.core.userdetails.UserDetailsService{
+ implements org.springframework.security.core.userdetails.UserDetailsService {
private UserService userService;
private String adminUser;
diff --git a/wise-webapp/src/main/java/com/wisemapping/security/ldap/LdapUserDetailsContextMapper.java b/wise-webapp/src/main/java/com/wisemapping/security/ldap/LdapUserDetailsContextMapper.java
deleted file mode 100644
index 3bea2f97..00000000
--- a/wise-webapp/src/main/java/com/wisemapping/security/ldap/LdapUserDetailsContextMapper.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.wisemapping.security.ldap;
-
-
-import com.wisemapping.exceptions.WiseMappingException;
-import com.wisemapping.model.AuthenticationType;
-import com.wisemapping.model.User;
-import com.wisemapping.security.UserDetails;
-import com.wisemapping.service.UserService;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.ldap.userdetails.UserDetailsContextMapper;
-
-import java.util.Calendar;
-import java.util.Collection;
-
-public class LdapUserDetailsContextMapper implements UserDetailsContextMapper {
-
- private UserService userService;
- private String adminUser;
- private String ldapAttributeFirstName;
- private String ldapAttributeLastName;
-
-
- public UserService getUserService() {
- return userService;
- }
-
- public void setUserService(UserService userService) {
- this.userService = userService;
- }
-
-
- private boolean isAdmin(@Nullable String email) {
- return email != null && adminUser != null && email.trim().endsWith(adminUser);
- }
-
- public String getAdminUser() {
- return adminUser;
- }
-
- public void setAdminUser(String adminUser) {
- this.adminUser = adminUser;
- }
-
- @Override
- public UserDetails mapUserFromContext(@NotNull DirContextOperations userData,
- String email, Collection extends GrantedAuthority> arg2) {
- User user = userService.getUserBy(email);
- if (user == null) {
- // If the user was not found in the database, create a new one ...
- user = new User();
- user.setEmail(email);
-
- final String firstName = userData.getStringAttribute(ldapAttributeFirstName);
- user.setFirstname(firstName);
-
- final String lastName = userData.getStringAttribute(ldapAttributeLastName);
- user.setLastname(lastName);
-
- user.setPassword(email);
- final Calendar now = Calendar.getInstance();
- user.setActivationDate(now);
-
- try {
- user.setAuthenticationType(AuthenticationType.LDAP);
- user = userService.createUser(user, false, false);
- } catch (WiseMappingException e) {
- throw new IllegalStateException(e);
- }
- }
- return new UserDetails(user, isAdmin(email));
- }
-
- public String getLdapAttributeLastName() {
- return ldapAttributeLastName;
- }
-
- public void setLdapAttributeLastName(String ldapAttributLastName) {
- this.ldapAttributeLastName = ldapAttributLastName;
- }
-
- public String getLdapAttrbutFirstName() {
- return ldapAttributeFirstName;
- }
-
- public void setLdapAttributeFirstName(String ldapAttributeFirstName) {
- this.ldapAttributeFirstName = ldapAttributeFirstName;
- }
-
- @Override
- public void mapUserToContext(org.springframework.security.core.userdetails.UserDetails userDetails, DirContextAdapter dirContextAdapter) {
- // To be implemented ...
- }
-
-
-}
diff --git a/wise-webapp/src/main/java/com/wisemapping/service/HibernateAppListener.java b/wise-webapp/src/main/java/com/wisemapping/service/HibernateAppListener.java
index 06aa1455..1e9da9a2 100755
--- a/wise-webapp/src/main/java/com/wisemapping/service/HibernateAppListener.java
+++ b/wise-webapp/src/main/java/com/wisemapping/service/HibernateAppListener.java
@@ -18,8 +18,8 @@
package com.wisemapping.service;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
public class HibernateAppListener implements ServletContextListener {
diff --git a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java
index 927a05ca..02574da7 100755
--- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java
+++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java
@@ -22,7 +22,7 @@ import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.*;
import org.jetbrains.annotations.Nullable;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
import java.io.IOException;
import java.util.List;
diff --git a/wise-webapp/src/main/java/com/wisemapping/service/RecaptchaService.java b/wise-webapp/src/main/java/com/wisemapping/service/RecaptchaService.java
index e947090f..17d6cb1f 100644
--- a/wise-webapp/src/main/java/com/wisemapping/service/RecaptchaService.java
+++ b/wise-webapp/src/main/java/com/wisemapping/service/RecaptchaService.java
@@ -28,7 +28,7 @@ import org.apache.http.client.fluent.Form;
import org.apache.http.client.fluent.Request;
import org.jetbrains.annotations.Nullable;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
diff --git a/wise-webapp/src/main/java/com/wisemapping/service/google/http/HttpInvoker.java b/wise-webapp/src/main/java/com/wisemapping/service/google/http/HttpInvoker.java
index a33bf8af..4a8da4c1 100644
--- a/wise-webapp/src/main/java/com/wisemapping/service/google/http/HttpInvoker.java
+++ b/wise-webapp/src/main/java/com/wisemapping/service/google/http/HttpInvoker.java
@@ -47,7 +47,7 @@ import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
@Service
public class HttpInvoker {
diff --git a/wise-webapp/src/main/java/com/wisemapping/webmvc/LoginController.java b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcLoginController.java
similarity index 87%
rename from wise-webapp/src/main/java/com/wisemapping/webmvc/LoginController.java
rename to wise-webapp/src/main/java/com/wisemapping/webmvc/MvcLoginController.java
index 4c01c51d..2e972b5e 100644
--- a/wise-webapp/src/main/java/com/wisemapping/webmvc/LoginController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcLoginController.java
@@ -21,13 +21,15 @@ package com.wisemapping.webmvc;
import com.wisemapping.model.User;
import com.wisemapping.security.Utils;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
-public class LoginController {
+@PreAuthorize("permitAll()")
+public class MvcLoginController {
@Value("${database.driver}")
private String driver;
@@ -39,7 +41,7 @@ public class LoginController {
if (user != null) {
result = new ModelAndView("forward:/c/maps/");
} else {
- result = new ModelAndView("login");
+ result = new ModelAndView("reactInclude");
result.addObject("isHsql", driver.contains("hsql"));
}
return result;
diff --git a/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcMindmapController.java
similarity index 94%
rename from wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java
rename to wise-webapp/src/main/java/com/wisemapping/webmvc/MvcMindmapController.java
index 03317139..52d395b2 100644
--- a/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcMindmapController.java
@@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
@@ -45,7 +46,7 @@ import org.springframework.web.servlet.ModelAndView;
import java.util.Locale;
@Controller
-public class MindmapController {
+public class MvcMindmapController {
@Qualifier("mindmapService")
@Autowired
@@ -59,12 +60,12 @@ public class MindmapController {
model.addAttribute("mindmap", mindmap);
final Locale locale = LocaleContextHolder.getLocale();
model.addAttribute("locale", locale.toString().toLowerCase());
- return "mindmapPrint";
+ return "mindmapViewonly";
}
@RequestMapping(value = "maps/")
public String showListPage(@NotNull Model model) {
- return "mindmapList";
+ return "reactInclude";
}
@RequestMapping(value = "maps/{id}/edit", method = RequestMethod.GET)
@@ -106,6 +107,7 @@ public class MindmapController {
}
@RequestMapping(value = "maps/{id}/try", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public String showMindmapTryPage(@PathVariable int id, @NotNull Model model) throws WiseMappingException {
return showEditorPage(id, model, false);
}
@@ -118,13 +120,14 @@ public class MindmapController {
}
@RequestMapping(value = "maps/{id}/embed")
+ @PreAuthorize("permitAll()")
public ModelAndView showEmbeddedPage(@PathVariable int id, @RequestParam(required = false) Float zoom) throws MapCouldNotFoundException, MapNonPublicException, AccessDeniedSecurityException {
if (!mindmapService.isMindmapPublic(id)) {
throw new MapNonPublicException("Map " + id + " is not public.");
}
final MindMapBean mindmap = findMindmapBean(id);
- final ModelAndView view = new ModelAndView("mindmapEmbedded", "mindmap", mindmap);
+ final ModelAndView view = new ModelAndView("mindmapViewonly", "mindmap", mindmap);
view.addObject("zoom", zoom == null ? 1 : zoom);
final Locale locale = LocaleContextHolder.getLocale();
view.addObject("locale", locale.toString().toLowerCase());
@@ -132,6 +135,7 @@ public class MindmapController {
}
@RequestMapping(value = "maps/{id}/public", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public String showPublicViewPage(@PathVariable int id, @NotNull Model model) throws WiseMappingException {
if (!mindmapService.isMindmapPublic(id)) {
throw new MapNonPublicException("Map " + id + " is not public.");
@@ -141,12 +145,14 @@ public class MindmapController {
@Deprecated
@RequestMapping(value = "publicView", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public String showPublicViewPageLegacy(@RequestParam(required = true) int mapId) {
return "redirect:maps/" + mapId + "/public";
}
@Deprecated
@RequestMapping(value = "embeddedView", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public String showPublicViewLegacyPage(@RequestParam(required = true) int mapId, @RequestParam(required = false) int zoom) {
return "redirect:maps/" + mapId + "/embed?zoom=" + zoom;
}
diff --git a/wise-webapp/src/main/java/com/wisemapping/webmvc/UsersController.java b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcUsersController.java
similarity index 83%
rename from wise-webapp/src/main/java/com/wisemapping/webmvc/UsersController.java
rename to wise-webapp/src/main/java/com/wisemapping/webmvc/MvcUsersController.java
index e760c017..83add065 100644
--- a/wise-webapp/src/main/java/com/wisemapping/webmvc/UsersController.java
+++ b/wise-webapp/src/main/java/com/wisemapping/webmvc/MvcUsersController.java
@@ -22,31 +22,35 @@ package com.wisemapping.webmvc;
import com.wisemapping.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
-public class UsersController {
+public class MvcUsersController {
@Qualifier("userService")
@Autowired
private UserService userService;
@RequestMapping(value = "forgot-password", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public ModelAndView showResetPasswordPage() {
- return new ModelAndView("forgot-password");
+ return new ModelAndView("reactInclude");
}
@RequestMapping(value = "registration-google", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public ModelAndView processGoogleCallback() {
- return new ModelAndView("registration-google");
+ return new ModelAndView("reactInclude");
}
@RequestMapping(value = "registration", method = RequestMethod.GET)
+ @PreAuthorize("permitAll()")
public ModelAndView showRegistrationPage() {
- return new ModelAndView("registration");
+ return new ModelAndView("reactInclude");
}
}
diff --git a/wise-webapp/src/main/resources/Bundle.properties b/wise-webapp/src/main/resources/Bundle.properties
index c09305ac..06dfc929 100644
--- a/wise-webapp/src/main/resources/Bundle.properties
+++ b/wise-webapp/src/main/resources/Bundle.properties
@@ -1 +1 @@
-# Solves error Can't find bundle for base name javax.xml.bind.Messages, locale en_US
\ No newline at end of file
+# Solves error Can't find bundle for base name jakarta.xml.bind.Messages, locale en_US
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/WEB-INF/app.properties b/wise-webapp/src/main/webapp/WEB-INF/app.properties
index aec7793d..0046539e 100755
--- a/wise-webapp/src/main/webapp/WEB-INF/app.properties
+++ b/wise-webapp/src/main/webapp/WEB-INF/app.properties
@@ -160,3 +160,4 @@ security.oauth2.google.url=https://accounts.google.com/o/oauth2/v2/auth?redirect
# Coma separated list of domains and emails ban
#accounts.exclusion.domain=
+
diff --git a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.properties b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.properties
deleted file mode 100644
index 58885ada..00000000
--- a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# Debug level
-log4j.rootLogger=INFO,stdout
-
-# Stdout logger
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.xml b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.xml
new file mode 100644
index 00000000..27ef8dd7
--- /dev/null
+++ b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j-stdout.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties
deleted file mode 100644
index 75809f93..00000000
--- a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# Log levels
-log4j.rootLogger=INFO, stdout, R
-log4j.logger.com.wisemapping=DEBUG,R
-log4j.logger.org.springframework=DEBUG,R
-log4j.logger.org.hibernate=INFO,R
-log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE,R
-log4j.logger.org.hibernate.SQL=DEBUG,R
-
-# Stdout logger
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
-
-
-# File Writer Logger
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=wisemapping.log
-
-log4j.appender.R.MaxFileSize=100KB
-# Keep one backup file
-log4j.appender.R.MaxBackupIndex=1
-
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d %p %c - %m%n
diff --git a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j2.xml b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j2.xml
new file mode 100644
index 00000000..66b2f29f
--- /dev/null
+++ b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j2.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+ %d %p %c{1.} [%t] %m%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/WEB-INF/defs/definitions.xml b/wise-webapp/src/main/webapp/WEB-INF/defs/definitions.xml
index 0277589b..4c9d2687 100644
--- a/wise-webapp/src/main/webapp/WEB-INF/defs/definitions.xml
+++ b/wise-webapp/src/main/webapp/WEB-INF/defs/definitions.xml
@@ -2,16 +2,6 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/wise-webapp/src/main/webapp/jsp/error.jsp b/wise-webapp/src/main/webapp/WEB-INF/views/error.jsp
similarity index 100%
rename from wise-webapp/src/main/webapp/jsp/error.jsp
rename to wise-webapp/src/main/webapp/WEB-INF/views/error.jsp
diff --git a/wise-webapp/src/main/webapp/jsp/errorTemplate.jsp b/wise-webapp/src/main/webapp/WEB-INF/views/errorTemplate.jsp
similarity index 100%
rename from wise-webapp/src/main/webapp/jsp/errorTemplate.jsp
rename to wise-webapp/src/main/webapp/WEB-INF/views/errorTemplate.jsp
diff --git a/wise-webapp/src/main/webapp/jsp/init.jsp b/wise-webapp/src/main/webapp/WEB-INF/views/init.jsp
similarity index 100%
rename from wise-webapp/src/main/webapp/jsp/init.jsp
rename to wise-webapp/src/main/webapp/WEB-INF/views/init.jsp
diff --git a/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp b/wise-webapp/src/main/webapp/WEB-INF/views/mindmapEditor.jsp
similarity index 96%
rename from wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp
rename to wise-webapp/src/main/webapp/WEB-INF/views/mindmapEditor.jsp
index 4c7434b1..e3478e1d 100644
--- a/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp
+++ b/wise-webapp/src/main/webapp/WEB-INF/views/mindmapEditor.jsp
@@ -1,7 +1,7 @@
<%@ page import="com.wisemapping.security.Utils" %>
<%@ page import="com.wisemapping.model.User" %>
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
-<%@ include file="/jsp/init.jsp" %>
+<%@ include file="init.jsp" %>
<%--@elvariable id="mindmap" type="com.wisemapping.model.Mindmap"--%>
<%--@elvariable id="editorTryMode" type="java.lang.Boolean"--%>
@@ -16,7 +16,7 @@
- <%@ include file="/jsp/pageHeaders.jsf" %>
+ <%@ include file="pageHeaders.jsf" %>
Loading ... | WiseMapping
diff --git a/wise-webapp/src/main/webapp/jsp/mindmapViewonly.jsp b/wise-webapp/src/main/webapp/WEB-INF/views/mindmapViewonly.jsp
similarity index 97%
rename from wise-webapp/src/main/webapp/jsp/mindmapViewonly.jsp
rename to wise-webapp/src/main/webapp/WEB-INF/views/mindmapViewonly.jsp
index 495ec993..b4fdc6ab 100644
--- a/wise-webapp/src/main/webapp/jsp/mindmapViewonly.jsp
+++ b/wise-webapp/src/main/webapp/WEB-INF/views/mindmapViewonly.jsp
@@ -1,5 +1,5 @@
<%@page pageEncoding="UTF-8" %>
-<%@include file="/jsp/init.jsp" %>
+<%@include file="init.jsp" %>
<%--@elvariable id="mindmap" type="com.wisemapping.model.Mindmap"--%>
@@ -15,7 +15,7 @@
${mindmap.title} |
- <%@ include file="/jsp/pageHeaders.jsf" %>
+ <%@ include file="pageHeaders.jsf" %>