Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • VIPS/VIPSLogic
1 result
Select Git revision
Show changes
Commits on Source (233)
Showing
with 582 additions and 1176 deletions
...@@ -11,3 +11,4 @@ classes/ ...@@ -11,3 +11,4 @@ classes/
selenium/.pytest_cache selenium/.pytest_cache
selenium/.venv selenium/.venv
selenium/tests/__pycache__ selenium/tests/__pycache__
selenium/.env
...@@ -65,8 +65,8 @@ RUN echo '<?xml version="1.0" encoding="UTF-8"?>\ ...@@ -65,8 +65,8 @@ RUN echo '<?xml version="1.0" encoding="UTF-8"?>\
<resource-root path="postgis-jdbc-${POSTGIS_VERSION}.jar"/>\ <resource-root path="postgis-jdbc-${POSTGIS_VERSION}.jar"/>\
</resources>\ </resources>\
<dependencies>\ <dependencies>\
<module name="javax.api"/>\ <module name="jakarta.api"/>\
<module name="javax.transaction.api"/>\ <module name="jakarta.transaction.api"/>\
</dependencies>\ </dependencies>\
</module>' > ${JBOSS_HOME}/modules/org/postgresql/main/module.xml </module>' > ${JBOSS_HOME}/modules/org/postgresql/main/module.xml
RUN cp /root/.m2/repository/org/postgresql/postgresql/${POSTGRES_VERSION}/postgresql-${POSTGRES_VERSION}.jar ${JBOSS_HOME}/modules/org/postgresql/main RUN cp /root/.m2/repository/org/postgresql/postgresql/${POSTGRES_VERSION}/postgresql-${POSTGRES_VERSION}.jar ${JBOSS_HOME}/modules/org/postgresql/main
......
This diff is collapsed.
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<exclude pattern="uk.**"/> <exclude pattern="uk.**"/>
<exclude pattern="it.**"/> <exclude pattern="it.**"/>
<exclude pattern="antlr.**"/> <exclude pattern="antlr.**"/>
<exclude pattern="javax.**"/> <exclude pattern="jakarta.**"/>
</api-classes> </api-classes>
<facets> <facets>
<exclude name="restricted"/> <exclude name="restricted"/>
......
...@@ -27,6 +27,6 @@ Any value defined here will override the pom.xml file value but is only applicab ...@@ -27,6 +27,6 @@ Any value defined here will override the pom.xml file value but is only applicab
<org-netbeans-modules-projectapi.jsf_2e_language>Facelets</org-netbeans-modules-projectapi.jsf_2e_language> <org-netbeans-modules-projectapi.jsf_2e_language>Facelets</org-netbeans-modules-projectapi.jsf_2e_language>
<netbeans.compile.on.save>none</netbeans.compile.on.save> <netbeans.compile.on.save>none</netbeans.compile.on.save>
<org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>WildFly</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server> <org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>WildFly</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>
<netbeans.hint.jdkPlatform>JDK_11</netbeans.hint.jdkPlatform> <netbeans.hint.jdkPlatform>JDK_18</netbeans.hint.jdkPlatform>
</properties> </properties>
</project-shared-configuration> </project-shared-configuration>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent>
<groupId>no.nibio.vips</groupId>
<artifactId>vips-parent-pom</artifactId>
<version>1.1.0</version>
</parent>
<groupId>no.nibio.vips.</groupId> <groupId>no.nibio.vips.</groupId>
<artifactId>VIPSLogic</artifactId> <artifactId>VIPSLogic</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>2024.1</version> <version>2025.1</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
...@@ -50,9 +55,13 @@ ...@@ -50,9 +55,13 @@
<name>Unidata Releases</name> <name>Unidata Releases</name>
<url>https://artifacts.unidata.ucar.edu/content/repositories/unidata-releases/</url> <url>https://artifacts.unidata.ucar.edu/content/repositories/unidata-releases/</url>
</repository> </repository>
<repository>
<id>gitlab-maven</id>
<url>https://gitlab.nibio.no/api/v4/projects/401/packages/maven</url>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>javax.xml.bind</groupId> <groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId> <artifactId>jaxb-api</artifactId>
...@@ -62,35 +71,53 @@ ...@@ -62,35 +71,53 @@
<dependency> <dependency>
<groupId>org.flywaydb</groupId> <groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId> <artifactId>flyway-core</artifactId>
<version>10.5.0</version> <version>11.1.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.flywaydb</groupId> <groupId>org.flywaydb</groupId>
<artifactId>flyway-database-postgresql</artifactId> <artifactId>flyway-database-postgresql</artifactId>
<version>10.4.1</version> <version>11.1.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>jakarta.platform</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>jakarta.jakartaee-api</artifactId>
<version>4.0.1</version> <version>10.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>2.0.1</version>
</dependency>
<dependency> <dependency>
<groupId>org.jboss.resteasy</groupId> <groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId> <artifactId>resteasy-client</artifactId>
<version>4.7.9.Final</version> <version>6.2.11.Final</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jboss.resteasy</groupId> <groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-core</artifactId> <artifactId>resteasy-core</artifactId>
<version>4.7.9.Final</version> <version>6.2.11.Final</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jboss.resteasy</groupId> <groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId> <artifactId>resteasy-jackson2-provider</artifactId>
<version>4.7.9.Final</version> <version>6.2.11.Final</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
...@@ -105,9 +132,9 @@ ...@@ -105,9 +132,9 @@
<type>jar</type> <type>jar</type>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient5</artifactId>
<version>4.5.14</version> <version>5.4.1</version>
<type>jar</type> <type>jar</type>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
...@@ -153,7 +180,7 @@ ...@@ -153,7 +180,7 @@
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>hibernate-core</artifactId>
<version>5.6.15.Final</version> <version>6.6.1.Final</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.dom4j</groupId> <groupId>org.dom4j</groupId>
...@@ -162,14 +189,10 @@ ...@@ -162,14 +189,10 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-spatial</artifactId> <artifactId>hibernate-spatial</artifactId>
<version>5.6.15.Final</version> <version>6.6.1.Final</version>
<exclusions> <exclusions>
<exclusion>
<artifactId>postgresql</artifactId>
<groupId>postgresql</groupId>
</exclusion>
<exclusion> <exclusion>
<groupId>org.dom4j</groupId> <groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId> <artifactId>dom4j</artifactId>
...@@ -180,8 +203,23 @@ ...@@ -180,8 +203,23 @@
<dependency> <dependency>
<groupId>org.postgresql</groupId> <groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>42.7.1</version> <version>42.7.4</version>
<scope>provided</scope> </dependency>
<dependency>
<groupId>net.postgis</groupId>
<artifactId>postgis-jdbc</artifactId>
<version>2024.1.0</version>
</dependency>
<dependency>
<groupId>net.postgis</groupId>
<artifactId>postgis-geometry</artifactId>
<version>2024.1.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-63</artifactId>
<version>3.9.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.datatype</groupId> <groupId>com.fasterxml.jackson.datatype</groupId>
...@@ -209,26 +247,12 @@ ...@@ -209,26 +247,12 @@
<dependency> <dependency>
<groupId>no.nibio.vips</groupId> <groupId>no.nibio.vips</groupId>
<artifactId>VIPSCommon</artifactId> <artifactId>VIPSCommon</artifactId>
<version>2.0.3-SNAPSHOT</version> <version>3.0.0</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>8.0.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.freemarker</groupId> <groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId> <artifactId>freemarker</artifactId>
<version>2.3.32</version> <version>2.3.34</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.sauronsoftware.cron4j</groupId> <groupId>it.sauronsoftware.cron4j</groupId>
...@@ -236,9 +260,9 @@ ...@@ -236,9 +260,9 @@
<version>2.2.5</version> <version>2.2.5</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-fileupload</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-fileupload</artifactId> <artifactId>commons-fileupload2-jakarta-servlet6</artifactId>
<version>1.5</version> <version>2.0.0-M2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.ibm.icu</groupId> <groupId>com.ibm.icu</groupId>
...@@ -253,7 +277,7 @@ ...@@ -253,7 +277,7 @@
<dependency> <dependency>
<groupId>com.webcohesion.enunciate</groupId> <groupId>com.webcohesion.enunciate</groupId>
<artifactId>enunciate-core-annotations</artifactId> <artifactId>enunciate-core-annotations</artifactId>
<version>2.17.1</version> <version>2.18.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.bedatadriven</groupId> <groupId>com.bedatadriven</groupId>
...@@ -266,6 +290,21 @@ ...@@ -266,6 +290,21 @@
<version>2.0.11</version> <version>2.0.11</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.17.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
...@@ -327,13 +366,14 @@ ...@@ -327,13 +366,14 @@
<goal>docs</goal> <goal>docs</goal>
</goals> </goals>
<configuration> <configuration>
<docsDir>${project.build.directory}/${project.build.finalName}/public/RESTdocs</docsDir> <docsDir>
${project.build.directory}/${project.build.finalName}/public/RESTdocs</docsDir>
</configuration> </configuration>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
\ No newline at end of file
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
package no.nibio.vips.logic; package no.nibio.vips.logic;
import java.util.Set; import java.util.Set;
import javax.ws.rs.ApplicationPath; import jakarta.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application; import jakarta.ws.rs.core.Application;
/** /**
* Responsible for adding REST resources * Responsible for adding REST resources
...@@ -55,9 +55,10 @@ public class VIPSLogicApplication extends Application ...@@ -55,9 +55,10 @@ public class VIPSLogicApplication extends Application
resources.add(no.nibio.vips.logic.messaging.sms.SMSHandlingService.class); resources.add(no.nibio.vips.logic.messaging.sms.SMSHandlingService.class);
resources.add(no.nibio.vips.logic.modules.applefruitmoth.AppleFruitMothService.class); resources.add(no.nibio.vips.logic.modules.applefruitmoth.AppleFruitMothService.class);
resources.add(no.nibio.vips.logic.service.ObservationService.class); resources.add(no.nibio.vips.logic.service.ObservationService.class);
resources.add(no.nibio.vips.logic.service.ObservationTimeSeriesService.class);
resources.add(no.nibio.vips.logic.service.ModelFormService.class); resources.add(no.nibio.vips.logic.service.ModelFormService.class);
resources.add(no.nibio.vips.logic.service.JacksonConfig.class); resources.add(no.nibio.vips.logic.service.JacksonConfig.class);
resources.add(no.nibio.vips.logic.entity.helpers.KmlMessageBodyWriter.class);
//resources.add(no.nibio.vips.logic.service.JSONBConfig.class); //resources.add(no.nibio.vips.logic.service.JSONBConfig.class);
//resources.add(no.nibio.vips.coremanager.service.ManagerResourceImpl.class); //resources.add(no.nibio.vips.coremanager.service.ManagerResourceImpl.class);
} }
......
/* /*
* Copyright (c) 2022 NIBIO <http://www.nibio.no/>. * Copyright (c) 2022 NIBIO <http://www.nibio.no/>.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
* it under the terms of the GNU Affero General Public License as published by * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
* the Free Software Foundation, either version 3 of the License, or * later version.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* but WITHOUT ANY WARRANTY; without even the implied warranty of * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * details.
* GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License along with this program. If not, see
* along with this program. If not, see <https://www.gnu.org/licenses/>. * <https://www.gnu.org/licenses/>.
* *
*/ */
...@@ -22,11 +20,16 @@ package no.nibio.vips.logic.authenticate; ...@@ -22,11 +20,16 @@ package no.nibio.vips.logic.authenticate;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.UUID; import java.util.UUID;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.servlet.*; import jakarta.servlet.Filter;
import javax.servlet.http.Cookie; import jakarta.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.FilterConfig;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.VipsLogicUser;
import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.Globals;
...@@ -34,79 +37,69 @@ import no.nibio.vips.util.ServletUtil; ...@@ -34,79 +37,69 @@ import no.nibio.vips.util.ServletUtil;
/** /**
* Ensures that user accessing a restricted resource is actually logged in. Redirects to login page if not * Ensures that user accessing a restricted resource is actually logged in. Redirects to login page if not
*
* @copyright 2013-2022 <a href="http://www.nibio.no">NIBIO</a> * @copyright 2013-2022 <a href="http://www.nibio.no">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no> * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/ */
public class AuthenticationFilter implements Filter{ public class AuthenticationFilter implements Filter {
@EJB @EJB
UserBean userBean; UserBean userBean;
// The URLs that do not require login // The URLs that do not require login
private String[] unprivilegedURLs; private String[] unprivilegedURLs;
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) throws ServletException {
this.setUnprivilegedURLs(Globals.UNPRIVILEGED_URLS); this.setUnprivilegedURLs(Globals.UNPRIVILEGED_URLS);
} }
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletRequest httpRequest = (HttpServletRequest) request;
/* /*
// For debugging * // For debugging BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); * String line; while((line = reader.readLine()) != null) { System.out.println(line); }
String line; */
while((line = reader.readLine()) != null) if (isUnprivilegedURL(httpRequest)) {
{
System.out.println(line);
}*/
if(isUnprivilegedURL(httpRequest))
{
chain.doFilter(request, response); chain.doFilter(request, response);
//return; // return;
} } else {
else
{
// First: Check for session variable // First: Check for session variable
boolean clientAuthenticated = (httpRequest.getSession().getAttribute("user") != null && httpRequest.getSession().getAttribute("user") instanceof VipsLogicUser); boolean clientAuthenticated = (httpRequest.getSession().getAttribute("user") != null
&& httpRequest.getSession().getAttribute("user") instanceof VipsLogicUser);
// Then for UUID cookie that has not expired // Then for UUID cookie that has not expired
boolean clientRemembered = false; boolean clientRemembered = false;
Cookie remembered = ServletUtil.getCookie(httpRequest, "rememberedUser"); Cookie remembered = ServletUtil.getCookie(httpRequest, "rememberedUser");
if(remembered != null) if (remembered != null) {
{
VipsLogicUser user = userBean.findVipsLogicUser(UUID.fromString(remembered.getValue())); VipsLogicUser user = userBean.findVipsLogicUser(UUID.fromString(remembered.getValue()));
if(user != null) if (user != null) {
{
httpRequest.getSession().setAttribute("user", user); httpRequest.getSession().setAttribute("user", user);
clientRemembered = true; clientRemembered = true;
} }
} }
if(! clientAuthenticated && ! clientRemembered) if (!clientAuthenticated && !clientRemembered) {
{
String nextPageDirective = ""; String nextPageDirective = "";
if(!httpRequest.getServletPath().equals("/login")) if (!httpRequest.getServletPath().equals("/login")) {
{
String nextPage = ServletUtil.getFullRequestURI(httpRequest); String nextPage = ServletUtil.getFullRequestURI(httpRequest);
nextPageDirective= "?nextPage=" + URLEncoder.encode(nextPage, "UTF-8"); nextPageDirective = "?nextPage=" + URLEncoder.encode(nextPage, "UTF-8");
} }
((HttpServletResponse)response).sendRedirect(Globals.PROTOCOL + "://" + ServletUtil.getServerName(httpRequest) + "/login" + nextPageDirective); ((HttpServletResponse) response).sendRedirect(Globals.PROTOCOL + "://"
} + ServletUtil.getServerName(httpRequest) + "/login" + nextPageDirective);
else } else {
{
chain.doFilter(request, response); chain.doFilter(request, response);
} }
//return; // return;
} }
} }
private boolean isUnprivilegedURL(HttpServletRequest request) { private boolean isUnprivilegedURL(HttpServletRequest request) {
String path = request.getServletPath(); String path = request.getServletPath();
for (String unprivilegedURL : this.getUnprivilegedURLs()) for (String unprivilegedURL : this.getUnprivilegedURLs()) {
{ if (path.contains(unprivilegedURL)) {
if (path.contains(unprivilegedURL))
{
return true; return true;
} }
} }
...@@ -115,12 +108,10 @@ public class AuthenticationFilter implements Filter{ ...@@ -115,12 +108,10 @@ public class AuthenticationFilter implements Filter{
@Override @Override
public void destroy() { public void destroy() {
} }
/** /**
* @return the upriviligerteURLer * @return the upriviligerteURLer
...@@ -136,6 +127,6 @@ public class AuthenticationFilter implements Filter{ ...@@ -136,6 +127,6 @@ public class AuthenticationFilter implements Filter{
this.unprivilegedURLs = unprivilegedURLs; this.unprivilegedURLs = unprivilegedURLs;
} }
} }
...@@ -22,11 +22,11 @@ import java.io.IOException; ...@@ -22,11 +22,11 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.OrganismBean;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.CropCategory; import no.nibio.vips.logic.entity.CropCategory;
...@@ -101,7 +101,7 @@ public class CropCategoryController extends HttpServlet { ...@@ -101,7 +101,7 @@ public class CropCategoryController extends HttpServlet {
Integer cropCategoryId = formValidation.getFormField("cropCategoryId").getValueAsInteger(); Integer cropCategoryId = formValidation.getFormField("cropCategoryId").getValueAsInteger();
List<Integer> cropCategoryCropOrganismIds = FormUtil.getIdsFromMultipleSelect(formValidation.getFormField("cropCategoryCropOrganismIds").getWebValues()); List<Integer> cropCategoryCropOrganismIds = FormUtil.getIdsFromMultipleSelect(formValidation.getFormField("cropCategoryCropOrganismIds").getWebValues());
CropCategory cropCategory = organismBean.getCropCategory(cropCategoryId); CropCategory cropCategory = organismBean.getCropCategory(cropCategoryId);
cropCategory.setCropOrganismIds(cropCategoryCropOrganismIds.toArray(new Integer[cropCategoryCropOrganismIds.size()])); cropCategory.setCropOrganismIds(cropCategoryCropOrganismIds);
organismBean.storeCropCategory(cropCategory); organismBean.storeCropCategory(cropCategory);
response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://").append(ServletUtil.getServerName(request)).append("/organism/cropcategory?messageKey=cropCategoryUpdated").toString()); response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://").append(ServletUtil.getServerName(request)).append("/organism/cropcategory?messageKey=cropCategoryUpdated").toString());
......
...@@ -19,10 +19,10 @@ ...@@ -19,10 +19,10 @@
package no.nibio.vips.logic.controller.servlet; package no.nibio.vips.logic.controller.servlet;
import java.io.IOException; import java.io.IOException;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
/** /**
* @copyright 2013 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2013 <a href="http://www.nibio.no/">NIBIO</a>
......
...@@ -20,10 +20,10 @@ package no.nibio.vips.logic.controller.servlet; ...@@ -20,10 +20,10 @@ package no.nibio.vips.logic.controller.servlet;
import java.io.IOException; import java.io.IOException;
import java.util.Enumeration; import java.util.Enumeration;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
/** /**
* *
...@@ -44,8 +44,8 @@ public class HttpErrorServlet extends HttpServlet { ...@@ -44,8 +44,8 @@ public class HttpErrorServlet extends HttpServlet {
throws ServletException, IOException { throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8");
request.setAttribute("message", request.getAttribute("javax.servlet.error.message")); request.setAttribute("message", request.getAttribute("jakarta.servlet.error.message"));
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); Integer statusCode = (Integer) request.getAttribute("jakarta.servlet.error.status_code");
/** /**
// Explore the attributes sent to error template // Explore the attributes sent to error template
for(Enumeration<String> e = request.getAttributeNames();e.hasMoreElements();) for(Enumeration<String> e = request.getAttributeNames();e.hasMoreElements();)
......
...@@ -18,25 +18,24 @@ ...@@ -18,25 +18,24 @@
package no.nibio.vips.logic.controller.servlet; package no.nibio.vips.logic.controller.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import javax.ejb.EJB;
import javax.servlet.ServletException; import jakarta.ejb.EJB;
import javax.servlet.http.Cookie; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Response; import jakarta.servlet.http.HttpServletResponse;
import jakarta.ws.rs.core.Response;
import com.fasterxml.jackson.databind.ObjectMapper;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.UserAuthenticationType; import no.nibio.vips.logic.entity.UserAuthenticationType;
import no.nibio.vips.logic.entity.UserUuid; import no.nibio.vips.logic.entity.UserUuid;
...@@ -47,26 +46,27 @@ import no.nibio.vips.util.ServletUtil; ...@@ -47,26 +46,27 @@ import no.nibio.vips.util.ServletUtil;
/** /**
* Logs a user in or out * Logs a user in or out
*
* @copyright 2013-2022 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2013-2022 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no> * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/ */
public class LoginController extends HttpServlet { public class LoginController extends HttpServlet {
//private static final String CLOSE_AND_RELOAD_PARENT = "close_and_reload_parent"; // private static final String CLOSE_AND_RELOAD_PARENT = "close_and_reload_parent";
private static final String RETURN_UUID_PARAMETER_NAME = "returnUUID"; private static final String RETURN_UUID_PARAMETER_NAME = "returnUUID";
@EJB @EJB
UserBean userBean; UserBean userBean;
/** /**
* Processes requests for both HTTP * Processes requests for both HTTP
* <code>GET</code> and * <code>GET</code> and
* <code>POST</code> methods. * <code>POST</code> methods.
* *
* @param request servlet request * @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
protected void processRequest(HttpServletRequest request, HttpServletResponse response) protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
...@@ -75,146 +75,124 @@ public class LoginController extends HttpServlet { ...@@ -75,146 +75,124 @@ public class LoginController extends HttpServlet {
request.setAttribute("nextPage", nextPage); request.setAttribute("nextPage", nextPage);
// We remove the session attribute, so it doesn't stick // We remove the session attribute, so it doesn't stick
request.getSession().removeAttribute("nextPage"); request.getSession().removeAttribute("nextPage");
Boolean returnUUID = getReturnUUID(request); Boolean returnUUID = getReturnUUID(request);
request.setAttribute(LoginController.RETURN_UUID_PARAMETER_NAME, returnUUID); request.setAttribute(LoginController.RETURN_UUID_PARAMETER_NAME, returnUUID);
// We remove the session attribute, so it doesn't stick // We remove the session attribute, so it doesn't stick
request.getSession().removeAttribute(LoginController.RETURN_UUID_PARAMETER_NAME); request.getSession().removeAttribute(LoginController.RETURN_UUID_PARAMETER_NAME);
// A log out request // A log out request
if(request.getServletPath().contains("logout")) if (request.getServletPath().contains("logout")) {
{ VipsLogicUser user = request.getSession().getAttribute("user") != null ? (VipsLogicUser) request.getSession().getAttribute("user") : null;
// Make sure we delete the current user and their UUID
userBean.deleteUserUuid(user.getUserUuid());
request.getSession().removeAttribute("user"); request.getSession().removeAttribute("user");
// Check if we have a cookie to delete as well
Cookie rememberedUser = ServletUtil.getCookie(request, "rememberedUser"); Cookie rememberedUser = ServletUtil.getCookie(request, "rememberedUser");
if(rememberedUser != null) if (rememberedUser != null) {
{
rememberedUser.setMaxAge(0); rememberedUser.setMaxAge(0);
response.addCookie(rememberedUser); response.addCookie(rememberedUser);
// This is likely duplication(?) - or are there cases where this makes sense?
userBean.deleteUserUuid(UUID.fromString(rememberedUser.getValue())); userBean.deleteUserUuid(UUID.fromString(rememberedUser.getValue()));
} }
request.setAttribute("messageKey","logoutsuccess"); request.setAttribute("messageKey", "logoutsuccess");
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} }
// A login attempt // A login attempt
else if(request.getServletPath().contains("loginsubmit")) else if (request.getServletPath().contains("loginsubmit")) {
{
// Which login method? // Which login method?
Integer userAuthenticationTypeId = -1; Integer userAuthenticationTypeId = -1;
try try {
{
userAuthenticationTypeId = Integer.valueOf(request.getParameter("userAuthenticationTypeId")); userAuthenticationTypeId = Integer.valueOf(request.getParameter("userAuthenticationTypeId"));
} }
// No method found, redirect to form again // No method found, redirect to form again
catch(NumberFormatException | NullPointerException ex) catch (NumberFormatException | NullPointerException ex) {
{
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
return; return;
} }
// Standard username/password login // Standard username/password login
if(userAuthenticationTypeId.equals(UserAuthenticationType.TYPE_PASSWORD)) if (userAuthenticationTypeId.equals(UserAuthenticationType.TYPE_PASSWORD)) {
{
String username = request.getParameter("username"); String username = request.getParameter("username");
String password = request.getParameter("password"); String password = request.getParameter("password");
try (PrintWriter out = response.getWriter()) { try (PrintWriter out = response.getWriter()) {
Map<String,String> creds = new HashMap(); Map<String, String> creds = new HashMap<>();
creds.put("username", username); creds.put("username", username);
creds.put("password", password); creds.put("password", password);
// Check user credentials
VipsLogicUser user = userBean.authenticateUser(creds); VipsLogicUser user = userBean.authenticateUser(creds);
if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_APPROVED)) if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_APPROVED)) {
{ UserUuid uUUID = userBean.createAndPersistUserUuid(user);
user.setUserUuid(uUUID.getUserUuidPK().getUserUuid());
request.getSession().setAttribute("user", user); request.getSession().setAttribute("user", user);
UUID uUUID = this.handleRememberUser(request, response, user, returnUUID); this.handleRememberUser(request, response, user, returnUUID);
if(returnUUID) if (returnUUID) {
{ nextPage += (nextPage.contains("?") ? "&" : "?") + "returnUUID=" + uUUID.getUserUuidPK().getUserUuid().toString();
nextPage += (nextPage.contains("?") ? "&": "?") + "returnUUID=" + uUUID.toString();
} }
if(nextPage.indexOf(Globals.PROTOCOL) == 0) if (nextPage.indexOf(Globals.PROTOCOL) == 0) {
{ // System.out.println("nextPage=" + nextPage);
//System.out.println("nextPage=" + nextPage);
response.sendRedirect(nextPage); response.sendRedirect(nextPage);
} } else {
else
{
response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://").append(ServletUtil.getServerName(request)).append(nextPage).toString()); response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://").append(ServletUtil.getServerName(request)).append(nextPage).toString());
} }
} } else if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_EMAIL_VERIFICATION)) {
else if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_EMAIL_VERIFICATION))
{
request.setAttribute("errorMessageKey", "emailNotVerified"); request.setAttribute("errorMessageKey", "emailNotVerified");
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} } else if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_APPROVAL)) {
else if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_APPROVAL))
{
request.setAttribute("errorMessageKey", "pleaseAwaitApproval"); request.setAttribute("errorMessageKey", "pleaseAwaitApproval");
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} } else {
else
{
request.setAttribute("errorMessageKey", "invalidcredentials"); request.setAttribute("errorMessageKey", "invalidcredentials");
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} }
} }
} }
// Authentication method not recognized, redirect to standard form // Authentication method not recognized, redirect to standard form
else else {
{
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} }
} }
// Login from a remote resource. Return UUID // Login from a remote resource, e.g. an app. Return UUID
else if(request.getServletPath().contains("remotelogin")) else if (request.getServletPath().contains("remotelogin")) {
{
String username = request.getParameter("username"); String username = request.getParameter("username");
String password = request.getParameter("password"); String password = request.getParameter("password");
Map<String,String> creds = new HashMap(); Map<String, String> creds = new HashMap<>();
creds.put("username", username); creds.put("username", username);
creds.put("password", password); creds.put("password", password);
VipsLogicUser user = userBean.authenticateUser(creds); VipsLogicUser user = userBean.authenticateUser(creds);
PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter();
if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_APPROVED)) if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_APPROVED)) {
{
request.getSession().setAttribute("user", user); request.getSession().setAttribute("user", user);
UUID uUUID = this.handleRememberUser(request, response, user, returnUUID); UserUuid uUUID = userBean.createAndPersistUserUuid(user);
user.setUserUuid(uUUID.getUserUuidPK().getUserUuid());
this.handleRememberUser(request, response, user, returnUUID);
// All is well, return object // All is well, return object
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
user.setUserUuid(uUUID); mapper.writeValue(out, user);
mapper.writeValue(out,user);
out.close(); out.close();
} } else {
else
{
response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode());
if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_EMAIL_VERIFICATION)) if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_EMAIL_VERIFICATION)) {
{
out.print(SessionLocaleUtil.getI18nText(request, "emailNotVerified")); out.print(SessionLocaleUtil.getI18nText(request, "emailNotVerified"));
} } else if (user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_APPROVAL)) {
else if(user != null && user.getUserStatusId().equals(Globals.USER_STATUS_AWAITING_APPROVAL))
{
out.print(SessionLocaleUtil.getI18nText(request, "pleaseAwaitApproval")); out.print(SessionLocaleUtil.getI18nText(request, "pleaseAwaitApproval"));
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} } else {
else
{
out.print(SessionLocaleUtil.getI18nText(request, "invalidcredentials")); out.print(SessionLocaleUtil.getI18nText(request, "invalidcredentials"));
} }
} }
} }
// No login attempt. Show form // No login attempt. Show form
else else {
{ if (request.getParameter("nextPage") != null) {
if(request.getParameter("nextPage") != null)
{
request.setAttribute("checkRemember", request.getParameter("nextPage").indexOf(Globals.PROTOCOL) == 0); request.setAttribute("checkRemember", request.getParameter("nextPage").indexOf(Globals.PROTOCOL) == 0);
} }
request.setAttribute("messageKey", request.getParameter("messageKey")); request.setAttribute("messageKey", request.getParameter("messageKey"));
...@@ -222,91 +200,81 @@ public class LoginController extends HttpServlet { ...@@ -222,91 +200,81 @@ public class LoginController extends HttpServlet {
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
} }
} }
/** /**
* Utility method (hiding noisy code) * Utility method (hiding noisy code)
*
* @param request * @param request
* @return * @return
* @throws UnsupportedEncodingException * @throws UnsupportedEncodingException
*/ */
private String getNextPage(HttpServletRequest request) throws UnsupportedEncodingException private String getNextPage(HttpServletRequest request) throws UnsupportedEncodingException {
{ String nextPage = request.getParameter("nextPage") != null ? request.getParameter("nextPage")
String nextPage = request.getParameter("nextPage") != null ? : request.getSession().getAttribute("nextPage") != null ? URLDecoder.decode((String) request.getSession().getAttribute("nextPage"), "UTF-8")
request.getParameter("nextPage") : null;
: request.getSession().getAttribute("nextPage") != null ? if (nextPage == null) {
URLDecoder.decode((String)request.getSession().getAttribute("nextPage"),"UTF-8") nextPage = "/";
:null;
if(nextPage == null)
{
nextPage="/";
} }
return nextPage; return nextPage;
} }
/** /**
* Should the generated UUID be returned to login client? * Should the generated UUID be returned to login client?
*
* @param request * @param request
* @return * @return
*/ */
private Boolean getReturnUUID(HttpServletRequest request) private Boolean getReturnUUID(HttpServletRequest request) {
{ return request.getParameter(LoginController.RETURN_UUID_PARAMETER_NAME) != null ? request.getParameter(LoginController.RETURN_UUID_PARAMETER_NAME).equals("true")
return request.getParameter(LoginController.RETURN_UUID_PARAMETER_NAME) != null ? : request.getSession().getAttribute(LoginController.RETURN_UUID_PARAMETER_NAME) != null ? (Boolean) request.getSession().getAttribute(LoginController.RETURN_UUID_PARAMETER_NAME)
request.getParameter(LoginController.RETURN_UUID_PARAMETER_NAME).equals("true") : false;
: request.getSession().getAttribute(LoginController.RETURN_UUID_PARAMETER_NAME) != null ?
(Boolean) request.getSession().getAttribute(LoginController.RETURN_UUID_PARAMETER_NAME)
: false;
} }
/** /**
* *
* @param request * @param request
* @param response * @param response
* @param user * @param user the VIPS user
* @param returnUUID has a UUID been requested to be returned to the client?
* @return
*/ */
private UUID handleRememberUser(HttpServletRequest request, HttpServletResponse response, VipsLogicUser user, Boolean returnUUID) private void handleRememberUser(HttpServletRequest request, HttpServletResponse response, VipsLogicUser user, Boolean returnUUID) {
{ // This is from the login form, the checkbox that you tick off to save your login
String rememberUser = request.getParameter("rememberUser") != null ? request.getParameter("rememberUser")
String rememberUser = request.getParameter("rememberUser") != null ?
request.getParameter("rememberUser")
: (String) request.getSession().getAttribute("rememberUser"); : (String) request.getSession().getAttribute("rememberUser");
request.getSession().removeAttribute("rememberUser"); request.getSession().removeAttribute("rememberUser");
if(returnUUID || (rememberUser != null && rememberUser.equals("on"))) if (returnUUID || (rememberUser != null && rememberUser.equals("on"))) {
{
UserUuid uUUID = userBean.createAndPersistUserUuid(user); if (rememberUser != null && rememberUser.equals("on")) {
if(rememberUser != null && rememberUser.equals("on")) Cookie rememberedUser = new Cookie("rememberedUser", user.getUserUuid().toString());
{
Cookie rememberedUser = new Cookie("rememberedUser", uUUID.getUserUuidPK().getUserUuid().toString());
rememberedUser.setPath("/"); rememberedUser.setPath("/");
rememberedUser.setMaxAge(Globals.DEFAULT_UUID_VALIDITY_DURATION_DAYS * 24 * 60 * 60); rememberedUser.setMaxAge(Globals.DEFAULT_UUID_VALIDITY_DURATION_DAYS * 24 * 60 * 60);
response.addCookie(rememberedUser); response.addCookie(rememberedUser);
} }
return uUUID.getUserUuidPK().getUserUuid(); // return uUUID.getUserUuidPK().getUserUuid();
} }
else // Unremember the user both server side and browser side
{ else {
Cookie rememberedUser = ServletUtil.getCookie(request, "rememberedUser"); Cookie rememberedUser = ServletUtil.getCookie(request, "rememberedUser");
if(rememberedUser != null) if (rememberedUser != null) {
{
rememberedUser.setMaxAge(0); rememberedUser.setMaxAge(0);
response.addCookie(rememberedUser); response.addCookie(rememberedUser);
userBean.deleteUserUuid(UUID.fromString(rememberedUser.getValue())); userBean.deleteUserUuid(UUID.fromString(rememberedUser.getValue()));
} }
return null; // return null;
} }
} }
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** /**
* Handles the HTTP * Handles the HTTP
* <code>GET</code> method. * <code>GET</code> method.
* *
* @param request servlet request * @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
@Override @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doGet(HttpServletRequest request, HttpServletResponse response)
...@@ -318,10 +286,10 @@ public class LoginController extends HttpServlet { ...@@ -318,10 +286,10 @@ public class LoginController extends HttpServlet {
* Handles the HTTP * Handles the HTTP
* <code>POST</code> method. * <code>POST</code> method.
* *
* @param request servlet request * @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
@Override @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response)
......
...@@ -26,15 +26,15 @@ import java.util.Calendar; ...@@ -26,15 +26,15 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.persistence.EntityManager; import jakarta.persistence.EntityManager;
import javax.persistence.NoResultException; import jakarta.persistence.NoResultException;
import javax.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
import javax.servlet.ServletContext; import jakarta.servlet.ServletContext;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.MessageBean; import no.nibio.vips.logic.controller.session.MessageBean;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.Message; import no.nibio.vips.logic.entity.Message;
...@@ -51,10 +51,10 @@ import no.nibio.web.forms.FormUtil; ...@@ -51,10 +51,10 @@ import no.nibio.web.forms.FormUtil;
import no.nibio.web.forms.FormValidation; import no.nibio.web.forms.FormValidation;
import no.nibio.web.forms.FormValidationException; import no.nibio.web.forms.FormValidationException;
import no.nibio.web.forms.FormValidator; import no.nibio.web.forms.FormValidator;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload2.core.FileItem;
import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload2.core.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload2.core.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
/** /**
* @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a>
...@@ -226,7 +226,11 @@ public class MessageController extends HttpServlet { ...@@ -226,7 +226,11 @@ public class MessageController extends HttpServlet {
request.setAttribute("allCropCategoryIds", em.createNamedQuery("CropCategory.findByOrganizationId").setParameter("organizationId",user.getOrganizationId().getOrganizationId()).getResultList()); request.setAttribute("allCropCategoryIds", em.createNamedQuery("CropCategory.findByOrganizationId").setParameter("organizationId",user.getOrganizationId().getOrganizationId()).getResultList());
request.getRequestDispatcher("/messageForm.ftl").forward(request, response); request.getRequestDispatcher("/messageForm.ftl").forward(request, response);
} }
catch(NullPointerException | NumberFormatException | NoResultException ex) catch(NoResultException ex)
{
response.sendError(404, "Message not found");
}
catch(NullPointerException | NumberFormatException ex)
{ {
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} }
...@@ -269,18 +273,10 @@ public class MessageController extends HttpServlet { ...@@ -269,18 +273,10 @@ public class MessageController extends HttpServlet {
{ {
Map<String,String[]> parameterMap; Map<String,String[]> parameterMap;
List<FileItem> items = null; List<FileItem> items = null;
if(ServletFileUpload.isMultipartContent(request)) if(JakartaServletFileUpload.isMultipartContent(request))
{ {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler // Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory); JakartaServletFileUpload upload = new JakartaServletFileUpload();
// Parse the request // Parse the request
items = upload.parseRequest(request); items = upload.parseRequest(request);
......
...@@ -22,13 +22,13 @@ import java.io.IOException; ...@@ -22,13 +22,13 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.persistence.EntityManager; import jakarta.persistence.EntityManager;
import javax.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.OrganismBean;
import no.nibio.vips.logic.controller.session.PointOfInterestBean; import no.nibio.vips.logic.controller.session.PointOfInterestBean;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
......
...@@ -32,14 +32,14 @@ import java.util.Map; ...@@ -32,14 +32,14 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.persistence.EntityManager; import jakarta.persistence.EntityManager;
import javax.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
import javax.servlet.ServletContext; import jakarta.servlet.ServletContext;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.ObservationBean; import no.nibio.vips.logic.controller.session.ObservationBean;
import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.OrganismBean;
import no.nibio.vips.logic.controller.session.PointOfInterestBean; import no.nibio.vips.logic.controller.session.PointOfInterestBean;
...@@ -65,10 +65,10 @@ import no.nibio.web.forms.FormUtil; ...@@ -65,10 +65,10 @@ import no.nibio.web.forms.FormUtil;
import no.nibio.web.forms.FormValidation; import no.nibio.web.forms.FormValidation;
import no.nibio.web.forms.FormValidationException; import no.nibio.web.forms.FormValidationException;
import no.nibio.web.forms.FormValidator; import no.nibio.web.forms.FormValidator;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload2.core.FileItem;
import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload2.core.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload2.core.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
/** /**
* @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a>
...@@ -410,18 +410,11 @@ public class ObservationController extends HttpServlet { ...@@ -410,18 +410,11 @@ public class ObservationController extends HttpServlet {
{ {
Map<String,String[]> parameterMap; Map<String,String[]> parameterMap;
List<FileItem> items = null; List<FileItem> items = null;
if(ServletFileUpload.isMultipartContent(request)) if(JakartaServletFileUpload.isMultipartContent(request))
{ {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler // Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory); JakartaServletFileUpload upload = new JakartaServletFileUpload();
// Parse the request // Parse the request
items = upload.parseRequest(request); items = upload.parseRequest(request);
......
...@@ -23,13 +23,13 @@ import java.util.HashSet; ...@@ -23,13 +23,13 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.persistence.EntityManager; import jakarta.persistence.EntityManager;
import javax.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.OrganismBean;
import no.nibio.vips.logic.entity.CropPest; import no.nibio.vips.logic.entity.CropPest;
import no.nibio.vips.logic.entity.Organism; import no.nibio.vips.logic.entity.Organism;
...@@ -377,8 +377,7 @@ public class OrganismController extends HttpServlet { ...@@ -377,8 +377,7 @@ public class OrganismController extends HttpServlet {
{ {
Integer cropOrganismId = formValidation.getFormField("cropOrganismId").getValueAsInteger(); Integer cropOrganismId = formValidation.getFormField("cropOrganismId").getValueAsInteger();
boolean includeAllChildCrops = formValidation.getFormField("includeAllChildCrops").getWebValue() != null; boolean includeAllChildCrops = formValidation.getFormField("includeAllChildCrops").getWebValue() != null;
List<Integer> poTemp = FormUtil.getIdsFromMultipleSelect(formValidation.getFormField("pestOrganismIds").getWebValues()); List<Integer> pestOrganismIds = FormUtil.getIdsFromMultipleSelect(formValidation.getFormField("pestOrganismIds").getWebValues());
Integer[] pestOrganismIds = poTemp.toArray(new Integer[poTemp.size()]);
CropPest cropPest = em.find(CropPest.class, cropOrganismId); CropPest cropPest = em.find(CropPest.class, cropOrganismId);
if(cropPest == null) if(cropPest == null)
{ {
......
...@@ -22,13 +22,14 @@ import java.io.IOException; ...@@ -22,13 +22,14 @@ import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.gis.GISUtil; import no.nibio.vips.gis.GISUtil;
import no.nibio.vips.gis.LonLatStringFormatException; import no.nibio.vips.gis.LonLatStringFormatException;
import no.nibio.vips.logic.controller.session.PointOfInterestBean;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.Organization;
import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.VipsLogicUser;
...@@ -46,6 +47,9 @@ public class OrganizationController extends HttpServlet { ...@@ -46,6 +47,9 @@ public class OrganizationController extends HttpServlet {
@EJB @EJB
UserBean userBean; UserBean userBean;
@EJB
PointOfInterestBean poiBean;
/** /**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
...@@ -101,6 +105,7 @@ public class OrganizationController extends HttpServlet { ...@@ -101,6 +105,7 @@ public class OrganizationController extends HttpServlet {
request.setAttribute("countries", userBean.getCountries()); request.setAttribute("countries", userBean.getCountries());
request.setAttribute("timeZones", TimeZone.getAvailableIDs()); request.setAttribute("timeZones", TimeZone.getAvailableIDs());
request.setAttribute("organization", organization); request.setAttribute("organization", organization);
request.setAttribute("gridWeatherDataSources", poiBean.getGridWeatherStationDataSources());
request.getRequestDispatcher("/organizationForm.ftl").forward(request, response); request.getRequestDispatcher("/organizationForm.ftl").forward(request, response);
} }
else if(action.equals("organizationFormSubmit")) else if(action.equals("organizationFormSubmit"))
...@@ -142,6 +147,11 @@ public class OrganizationController extends HttpServlet { ...@@ -142,6 +147,11 @@ public class OrganizationController extends HttpServlet {
: new GISUtil().getJtsPointFromString(formValidation.getFormField("defaultMapCenter").getWebValue()) : new GISUtil().getJtsPointFromString(formValidation.getFormField("defaultMapCenter").getWebValue())
); );
organization.setDefaultGridWeatherStationDataSource(
formValidation.getFormField("defaultGridWeatherStationDataSourceId").getValueAsInteger() < 0 ?
null
: poiBean.getWeatherStationDataSource(formValidation.getFormField("defaultGridWeatherStationDataSourceId").getValueAsInteger())
);
organization = userBean.storeOrganization(organization); organization = userBean.storeOrganization(organization);
response.sendRedirect( response.sendRedirect(
......
...@@ -19,11 +19,11 @@ package no.nibio.vips.logic.controller.servlet; ...@@ -19,11 +19,11 @@ package no.nibio.vips.logic.controller.servlet;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.Organization;
import no.nibio.vips.logic.entity.OrganizationGroup; import no.nibio.vips.logic.entity.OrganizationGroup;
......
...@@ -27,13 +27,13 @@ import java.util.Collections; ...@@ -27,13 +27,13 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import javax.ejb.EJB; import jakarta.ejb.EJB;
import javax.persistence.EntityManager; import jakarta.persistence.EntityManager;
import javax.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import no.nibio.vips.logic.entity.Country; import no.nibio.vips.logic.entity.Country;
import no.nibio.vips.logic.entity.ForecastConfiguration; import no.nibio.vips.logic.entity.ForecastConfiguration;
import no.nibio.vips.logic.entity.ModelInformation; import no.nibio.vips.logic.entity.ModelInformation;
...@@ -298,6 +298,8 @@ public class PointOfInterestController extends HttpServlet { ...@@ -298,6 +298,8 @@ public class PointOfInterestController extends HttpServlet {
{ {
weatherStation.setIsForecastLocation(Boolean.TRUE); weatherStation.setIsForecastLocation(Boolean.TRUE);
} }
weatherStation.setIsPrivate(formValidation.getFormField("isPrivate").getWebValue() != null);
Double altitude = 0.0; Double altitude = 0.0;
Point p2d = formValidation.getFormField("location").getValueAsPointWGS84(); Point p2d = formValidation.getFormField("location").getValueAsPointWGS84();
...@@ -657,6 +659,8 @@ public class PointOfInterestController extends HttpServlet { ...@@ -657,6 +659,8 @@ public class PointOfInterestController extends HttpServlet {
{ {
poi.setIsForecastLocation(Boolean.FALSE); poi.setIsForecastLocation(Boolean.FALSE);
} }
poi.setIsPrivate(formValidation.getFormField("isPrivate").getWebValue() != null);
Double altitude = 0.0; Double altitude = 0.0;
Point p2d = formValidation.getFormField("location").getValueAsPointWGS84(); Point p2d = formValidation.getFormField("location").getValueAsPointWGS84();
......