Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/main/java/taxi/controller/IndexController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import taxi.lib.Injector;
import taxi.service.DriverService;

public class IndexController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private final DriverService driverService = (DriverService) injector
.getInstance(DriverService.class);

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/taxi/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package taxi.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import taxi.exception.AuthenticationException;
import taxi.lib.Injector;
import taxi.model.Driver;
import taxi.service.AuthenticationService;

@WebServlet("/login")
public class LoginController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private final AuthenticationService authenticationService = (AuthenticationService) injector
.getInstance(AuthenticationService.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String login = req.getParameter("login");
String password = req.getParameter("password");
try {
Driver driver = authenticationService.login(login, password);
HttpSession session = req.getSession();
session.setAttribute("id", driver.getId());
resp.sendRedirect("/index");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add contextPath

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not fixed

} catch (AuthenticationException e) {
req.setAttribute("errorMsg", e.getMessage());
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
}
}
}
17 changes: 17 additions & 0 deletions src/main/java/taxi/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package taxi.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogoutController extends HttpServlet {

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getSession().invalidate();
resp.sendRedirect(req.getContextPath() + "/login");
}
}
6 changes: 4 additions & 2 deletions src/main/java/taxi/controller/driver/AddDriverController.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp)
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String name = req.getParameter("name");
String licenseNumber = req.getParameter("license_number");
Driver driver = new Driver(name, licenseNumber);
String login = req.getParameter("login");
String password = req.getParameter("password");
Driver driver = new Driver(name, licenseNumber, login, password);
driverService.create(driver);
resp.sendRedirect(req.getContextPath() + "/drivers/add");
resp.sendRedirect(req.getContextPath() + "/index");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package taxi.controller.driver;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import taxi.lib.Injector;
import taxi.model.Car;
import taxi.service.CarService;

public class GetMyCurrentCarsController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private final CarService carService = (CarService) injector.getInstance(CarService.class);

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
Long driverId = (Long) session.getAttribute("id");
if (driverId != null) {
List<Car> cars = carService.getAllByDriver(driverId);
req.setAttribute("cars", cars);
req.getRequestDispatcher("/WEB-INF/views/cars/all.jsp").forward(req, resp);
} else {
resp.sendRedirect(req.getContextPath() + "/login");
}
}
}
2 changes: 2 additions & 0 deletions src/main/java/taxi/dao/DriverDao.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package taxi.dao;

import java.util.Optional;
import taxi.model.Driver;

public interface DriverDao extends GenericDao<Driver> {
Optional<Driver> findByLogin(String login);
}
28 changes: 26 additions & 2 deletions src/main/java/taxi/dao/DriverDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,34 @@

@Dao
public class DriverDaoImpl implements DriverDao {
@Override
public Optional<Driver> findByLogin(String login) {
String query = "SELECT * FROM drivers WHERE login = ?";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, login);
ResultSet resultSet = statement.executeQuery();
Driver driver = null;
if (resultSet.next()) {
driver = parseDriverFromResultSet(resultSet);
}
return Optional.ofNullable(driver);
} catch (SQLException e) {
throw new DataProcessingException("Can't get driver by login and password " + login, e);
}
}

@Override
public Driver create(Driver driver) {
String query = "INSERT INTO drivers (name, license_number) "
+ "VALUES (?, ?)";
String query = "INSERT INTO drivers (name, license_number,login, password) "
+ "VALUES (?, ?, ?, ?)";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(query,
Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, driver.getName());
statement.setString(2, driver.getLicenseNumber());
statement.setString(3, driver.getLogin());
statement.setString(4, driver.getPassword());
statement.executeUpdate();
ResultSet resultSet = statement.getGeneratedKeys();
if (resultSet.next()) {
Expand Down Expand Up @@ -102,10 +121,15 @@ private Driver parseDriverFromResultSet(ResultSet resultSet) throws SQLException
Long id = resultSet.getObject("id", Long.class);
String name = resultSet.getString("name");
String licenseNumber = resultSet.getString("license_number");
String login = resultSet.getString("login");
String password = resultSet.getString("password");
Driver driver = new Driver();
driver.setId(id);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
driver.setLogin(login);
driver.setPassword(password);
return driver;
}

}
7 changes: 7 additions & 0 deletions src/main/java/taxi/exception/AuthenticationException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package taxi.exception;

public class AuthenticationException extends RuntimeException {
public AuthenticationException(String message) {
super(message);
}
}
32 changes: 31 additions & 1 deletion src/main/java/taxi/model/Driver.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ public class Driver {
private Long id;
private String name;
private String licenseNumber;
private String login;
private String password;

public Driver() {
}

public Driver(String name, String licenseNumber) {
public Driver(String name, String licenseNumber, String login, String password) {
this.name = name;
this.licenseNumber = licenseNumber;
this.login = login;
this.password = password;
}

public Long getId() {
Expand All @@ -39,6 +43,22 @@ public void setLicenseNumber(String licenseNumber) {
this.licenseNumber = licenseNumber;
}

public String getLogin() {
return login;
}

public void setLogin(String login) {
this.login = login;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -57,4 +77,14 @@ public boolean equals(Object o) {
public int hashCode() {
return Objects.hash(id, name, licenseNumber);
}

@Override
public String toString() {
return "Driver{"
+ "id=" + id
+ ", name='" + name + '\''
+ ", licenseNumber='" + licenseNumber + '\''
+ ", login='" + login + '\''
+ '}';
}
}
7 changes: 7 additions & 0 deletions src/main/java/taxi/service/AuthenticationService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package taxi.service;

import taxi.model.Driver;

public interface AuthenticationService {
public Driver login(String login, String password);
}
22 changes: 22 additions & 0 deletions src/main/java/taxi/service/AuthenticationServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package taxi.service;

import java.util.Optional;
import taxi.exception.AuthenticationException;
import taxi.lib.Inject;
import taxi.lib.Service;
import taxi.model.Driver;

@Service
public class AuthenticationServiceImpl implements AuthenticationService {
@Inject
private DriverService driverService;

@Override
public Driver login(String login, String password) {
Optional<Driver> driver = driverService.findByLogin(login);
if (driver.isPresent() && driver.get().getPassword().equals(password)) {
return driver.get();
}
throw new AuthenticationException("Driver login or password incorrect");
}
}
2 changes: 2 additions & 0 deletions src/main/java/taxi/service/DriverService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package taxi.service;

import java.util.Optional;
import taxi.model.Driver;

public interface DriverService extends GenericService<Driver> {
Optional<Driver> findByLogin(String login);
}
6 changes: 6 additions & 0 deletions src/main/java/taxi/service/DriverServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import taxi.dao.DriverDao;
import taxi.lib.Inject;
import taxi.lib.Service;
Expand Down Expand Up @@ -38,4 +39,9 @@ public Driver update(Driver driver) {
public boolean delete(Long id) {
return driverDao.delete(id);
}

@Override
public Optional<Driver> findByLogin(String login) {
return driverDao.findByLogin(login);
}
}
9 changes: 5 additions & 4 deletions src/main/java/taxi/util/ConnectionUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
import java.util.Properties;

public class ConnectionUtil {
private static final String URL = "YOUR DATABASE URL";
private static final String USERNAME = "YOUR USERNAME";
private static final String PASSWORD = "YOUR PASSWORD";
private static final String JDBC_DRIVER = "YOUR DRIVER";
private static final String URL
= "jdbc:mysql://localhost:3306/taxi?serverTimezone=Europe/Kiev";
private static final String USERNAME = "root";
private static final String PASSWORD = "1984";
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";

static {
try {
Expand Down
39 changes: 39 additions & 0 deletions src/main/java/taxi/web/filter/AuthenticationFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package taxi.web.filter;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthenticationFilter implements Filter {
private Set<String> allowedUrl = new HashSet<>();

@Override
public void init(FilterConfig filterConfig)
throws ServletException {
allowedUrl.add("/login");
allowedUrl.add("/drivers/add");
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession httpSession = req.getSession();
Long id = (Long) httpSession.getAttribute("id");
if (id != null || allowedUrl.contains(req.getServletPath())) {
chain.doFilter(req, resp);
return;
}
resp.sendRedirect(req.getContextPath() + "/login");
}
}
1 change: 1 addition & 0 deletions src/main/webapp/WEB-INF/views/cars/add.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<title>Add car</title>
</head>
<body>
<%@include file="/WEB-INF/views/header.jsp" %>
<form method="post" id="car" action="${pageContext.request.contextPath}/cars/add"></form>
<h1 class="table_dark">Add car:</h1>
<table border="1" class="table_dark">
Expand Down
1 change: 1 addition & 0 deletions src/main/webapp/WEB-INF/views/cars/all.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<title>All cars</title>
</head>
<body>
<%@include file="/WEB-INF/views/header.jsp" %>
<h1 class="table_dark">All cars:</h1>
<table border="1" class="table_dark">
<tr>
Expand Down
1 change: 1 addition & 0 deletions src/main/webapp/WEB-INF/views/cars/drivers/add.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<title>Add driver to car</title>
</head>
<body>
<%@include file="/WEB-INF/views/header.jsp" %>
<form method="post" id="car" action="${pageContext.request.contextPath}/cars/drivers/add"></form>
<h1 class="table_dark">Add driver to car:</h1>
<table border="1" class="table_dark">
Expand Down
Loading