Merge remote-tracking branch 'origin/SPM-26'
This commit is contained in:
commit
3e9b38522a
|
@ -1,6 +1,12 @@
|
||||||
package de.hsel.spm.baudas.web;
|
package de.hsel.spm.baudas.web;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.annotation.WebFilter;
|
import javax.servlet.annotation.WebFilter;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
@ -14,22 +20,24 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@WebFilter(urlPatterns = {"/*"})
|
@WebFilter(urlPatterns = {"/*"})
|
||||||
public class AuthenticationFilter implements Filter{
|
public class AuthenticationFilter implements Filter {
|
||||||
private ServletContext context;
|
private ServletContext context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the web container to indicate to a filter that it is being placed into service. This filter manages the authentication.
|
* Called by the web container to indicate to a filter that it is being placed into service. This filter manages the authentication.
|
||||||
* @param fConfig This parameter provides access to everything the code needs to work.
|
*
|
||||||
|
* @param filterConfig This parameter provides access to everything the code needs to work.
|
||||||
* @throws ServletException Defines a general exception a servlet can throw when it encounters difficulty.
|
* @throws ServletException Defines a general exception a servlet can throw when it encounters difficulty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void init(FilterConfig fConfig) throws ServletException {
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
this.context = fConfig.getServletContext();
|
this.context = filterConfig.getServletContext();
|
||||||
this.context.log("AuthenticationFilter initialized");
|
this.context.log("AuthenticationFilter initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain.
|
* The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain.
|
||||||
|
*
|
||||||
* @param request This parameter provides access to everything the code needs to work.
|
* @param request This parameter provides access to everything the code needs to work.
|
||||||
* @param response This parameter provides access to everything the code needs to issue a response.
|
* @param response This parameter provides access to everything the code needs to issue a response.
|
||||||
* @param chain This parameter allows passing request along the chain of potential handlers until one of them handles the request.
|
* @param chain This parameter allows passing request along the chain of potential handlers until one of them handles the request.
|
||||||
|
@ -42,7 +50,7 @@ public class AuthenticationFilter implements Filter{
|
||||||
HttpServletResponse res = (HttpServletResponse) response;
|
HttpServletResponse res = (HttpServletResponse) response;
|
||||||
HttpSession session = req.getSession(false);
|
HttpSession session = req.getSession(false);
|
||||||
String url = req.getRequestURI();
|
String url = req.getRequestURI();
|
||||||
if(url.contains("login") || url.contains("logo") || url.contains("js/")){
|
if (url.contains("login") || url.contains("logo") || url.contains("js/")) {
|
||||||
chain.doFilter(request, response);
|
chain.doFilter(request, response);
|
||||||
} else if (session == null || !((boolean) session.getAttribute("authentication"))) { //checking whether the session exists and if authentication succeed
|
} else if (session == null || !((boolean) session.getAttribute("authentication"))) { //checking whether the session exists and if authentication succeed
|
||||||
this.context.log("Unauthorized access request");
|
this.context.log("Unauthorized access request");
|
||||||
|
|
|
@ -10,8 +10,12 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* manages data about .csv files.
|
* manages data about .csv files.
|
||||||
|
@ -23,7 +27,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
public class Data {
|
public class Data {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private static ConcurrentLinkedQueue<SavedFile> files = new ConcurrentLinkedQueue<>();
|
private static ConcurrentMap<String, List<SavedFile>> files = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,44 +37,57 @@ public class Data {
|
||||||
* @return path to save file to
|
* @return path to save file to
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
static Path add(@NotNull String name) {
|
static Path add(@NotNull String name, @NotNull String session) {
|
||||||
//cleanup old files
|
UUID uuid = UUID.randomUUID();
|
||||||
if (files.isEmpty()) {
|
|
||||||
|
if (!files.containsKey(session))
|
||||||
|
files.put(session, new ArrayList<>());
|
||||||
|
|
||||||
|
if (files.get(session).size() >= 5) {
|
||||||
|
SavedFile file = files.get(session).iterator().next();
|
||||||
|
if (!get(file.getUuid()).delete()) {
|
||||||
|
System.err.println("failed to delete file..." + file);
|
||||||
|
}
|
||||||
|
files.get(session).remove(file);
|
||||||
|
}
|
||||||
|
files.get(session).add(new SavedFile(uuid, name, LocalDateTime.now()));
|
||||||
|
return Paths.get(getFileName(uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete all files for session.
|
||||||
|
*
|
||||||
|
* @param session session id
|
||||||
|
*/
|
||||||
|
static void delete(String session) {
|
||||||
|
for (SavedFile file : files.get(session)) {
|
||||||
|
if (!get(file.getUuid()).delete())
|
||||||
|
System.err.println("failed to delete file..." + file);
|
||||||
|
}
|
||||||
|
files.remove(session);
|
||||||
|
|
||||||
|
//deleting all files older than x days.
|
||||||
|
int days = 30;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Files.list(Paths.get("")).forEach(path -> {
|
Files.list(Paths.get("")).forEach(path -> {
|
||||||
if (path.toFile().getName().endsWith(".csv")) {
|
if (path.toFile().getName().endsWith("*.csv")) {
|
||||||
|
long diff = new Date().getTime() - path.toFile().lastModified();
|
||||||
|
|
||||||
|
if (diff > (long) days * 24 * 60 * 60 * 1000) {
|
||||||
try {
|
try {
|
||||||
Files.delete(path);
|
Files.delete(path);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Path path;
|
|
||||||
UUID uuid = UUID.randomUUID();
|
|
||||||
|
|
||||||
if (files.size() >= 5) {
|
|
||||||
//remove last and add new one
|
|
||||||
SavedFile file = files.poll();
|
|
||||||
if (!get(file.getUuid()).delete()) {
|
|
||||||
System.out.println("failed to delete file...");
|
|
||||||
}
|
|
||||||
path = Paths.get(getFileName(uuid));
|
|
||||||
files.offer(new SavedFile(uuid, name, LocalDateTime.now()));
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
files.add(new SavedFile(uuid, name, LocalDateTime.now()));
|
|
||||||
path = Paths.get(getFileName(uuid));
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generates File from uuid.
|
* generates File from uuid.
|
||||||
*
|
*
|
||||||
|
|
|
@ -31,6 +31,6 @@ public class Files extends HttpServlet {
|
||||||
resp.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
resp.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
||||||
PrintWriter out = resp.getWriter();
|
PrintWriter out = resp.getWriter();
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
out.print(gson.toJson(Data.getFiles()));
|
out.print(gson.toJson(Data.getFiles().get(req.getSession().getId())));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,6 +23,7 @@ public class LoginServlet extends HttpServlet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a Servlet that manages the Login and creates Sessions.
|
* This is a Servlet that manages the Login and creates Sessions.
|
||||||
|
*
|
||||||
* @param request This parameter provides access to everything the code needs to work.
|
* @param request This parameter provides access to everything the code needs to work.
|
||||||
* @param response This parameter provides access to everything the code needs to issue a response.
|
* @param response This parameter provides access to everything the code needs to issue a response.
|
||||||
* @throws ServletException Defines a general exception a servlet can throw when it encounters difficulty.
|
* @throws ServletException Defines a general exception a servlet can throw when it encounters difficulty.
|
||||||
|
@ -34,7 +35,7 @@ public class LoginServlet extends HttpServlet {
|
||||||
if (this.password.equals(password)) {
|
if (this.password.equals(password)) {
|
||||||
HttpSession newSession = request.getSession(true);
|
HttpSession newSession = request.getSession(true);
|
||||||
newSession.setAttribute("authentication", true);
|
newSession.setAttribute("authentication", true);
|
||||||
newSession.setMaxInactiveInterval(5*60*60); //setting session to expiry in 5 hours
|
newSession.setMaxInactiveInterval(5 * 60 * 60); //setting session to expiry in 5 hours
|
||||||
response.sendRedirect("index.jsp");
|
response.sendRedirect("index.jsp");
|
||||||
} else {
|
} else {
|
||||||
RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
|
RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
package de.hsel.spm.baudas.web;
|
package de.hsel.spm.baudas.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.servlet.annotation.WebServlet;
|
import javax.servlet.annotation.WebServlet;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Servlet implementation class LogoutServlet.
|
* Servlet implementation class LogoutServlet.
|
||||||
|
@ -19,14 +18,16 @@ public class LogoutServlet extends HttpServlet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a Servlet that manages the Logout and deletes Sessions.
|
* This is a Servlet that manages the Logout and deletes Sessions.
|
||||||
|
*
|
||||||
* @param request This parameter provides access to everything the code needs to work.
|
* @param request This parameter provides access to everything the code needs to work.
|
||||||
* @param response This parameter provides access to everything the code needs to issue a response.
|
* @param response This parameter provides access to everything the code needs to issue a response.
|
||||||
* @throws IOException Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.
|
* @throws IOException Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||||
HttpSession session = request.getSession(false);
|
HttpSession session = request.getSession();
|
||||||
if(session != null){
|
if (session != null) {
|
||||||
|
Data.delete(session.getId());
|
||||||
session.invalidate();
|
session.invalidate();
|
||||||
}
|
}
|
||||||
response.sendRedirect(request.getContextPath() + "/");
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
|
|
@ -12,9 +12,15 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* top/flop articles list diagram.
|
||||||
|
*
|
||||||
* @author Johannes Theiner
|
* @author Johannes Theiner
|
||||||
* @version 0.1
|
* @version 0.1
|
||||||
* @since 0.1
|
* @since 0.1
|
||||||
|
@ -45,7 +51,7 @@ public class TopFlopArticleDiagram extends HttpServlet {
|
||||||
List<String> labels = new ArrayList<>();
|
List<String> labels = new ArrayList<>();
|
||||||
List<String> data = new ArrayList<>();
|
List<String> data = new ArrayList<>();
|
||||||
|
|
||||||
for(Map.Entry<String, Integer> entry : map.entrySet()) {
|
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||||
labels.add(entry.getKey());
|
labels.add(entry.getKey());
|
||||||
data.add(entry.getValue().toString());
|
data.add(entry.getValue().toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class Upload extends HttpServlet {
|
||||||
inputStream = filePart.getInputStream();
|
inputStream = filePart.getInputStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
Path path = Data.add(fileName);
|
Path path = Data.add(fileName, req.getSession().getId());
|
||||||
if (!Files.exists(path)) {
|
if (!Files.exists(path)) {
|
||||||
Files.createFile(path);
|
Files.createFile(path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,12 +18,12 @@
|
||||||
<ul class="right hide-on-med-and-down">
|
<ul class="right hide-on-med-and-down">
|
||||||
<li><a data-target="slide-out" class="sidenav-trigger show-on-large"><i
|
<li><a data-target="slide-out" class="sidenav-trigger show-on-large"><i
|
||||||
class="material-icons left">menu</i>Menü</a></li><!--Sidenav-->
|
class="material-icons left">menu</i>Menü</a></li><!--Sidenav-->
|
||||||
<li><a href="login.html"><i class="material-icons left">person_outline</i>Logout</a></li><!--Logout-->
|
<li><a href="logout"><i class="material-icons left">person_outline</i>Logout</a></li><!--Logout-->
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="right">
|
<ul class="right">
|
||||||
<li><a href="#" data-target="slide-out" class="sidenav-trigger"><i class="material-icons">menu</i></a>
|
<li><a href="#" data-target="slide-out" class="sidenav-trigger"><i class="material-icons">menu</i></a>
|
||||||
</li><!--Sidenav-->
|
</li><!--Sidenav-->
|
||||||
<li><a href="login.html" class="sidenav-trigger"><i class="material-icons">person_outline</i></a></li>
|
<li><a href="logout" class="sidenav-trigger"><i class="material-icons">person_outline</i></a></li>
|
||||||
<!--Logout-->
|
<!--Logout-->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue