Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/taxi/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
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;
import javax.servlet.http.HttpSession;
import taxi.exception.AuthenticationException;
import taxi.lib.Injector;
import taxi.model.Driver;
import taxi.service.AuthenticationService;

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 username = req.getParameter("login");
String password = req.getParameter("password");

try {
Driver driver = authenticationService.login(username, password);
HttpSession session = req.getSession();
session.setAttribute("driver_id", driver.getId());
resp.sendRedirect(req.getContextPath() + "/index");
} catch (AuthenticationException e) {
req.setAttribute("errorMsg", e.getMessage());
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
}
}
}
16 changes: 16 additions & 0 deletions src/main/java/taxi/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getSession().invalidate();
resp.sendRedirect(req.getContextPath() + "/index");
}
}
25 changes: 25 additions & 0 deletions src/main/java/taxi/controller/car/GetMyCurrentCarsController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package taxi.controller.car;

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 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
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Long driverId = (Long) req.getSession().getAttribute("driver_id");
List<Car> carList = carService.getAllByDriver(driverId);
req.setAttribute("cars", carList);
req.getRequestDispatcher("/WEB-INF/views/cars/all.jsp").forward(req, resp);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ 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");
}
Expand Down
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);
}
34 changes: 29 additions & 5 deletions src/main/java/taxi/dao/DriverDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
public class DriverDaoImpl implements DriverDao {
@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 @@ -71,14 +73,16 @@ public List<Driver> getAll() {
@Override
public Driver update(Driver driver) {
String query = "UPDATE drivers "
+ "SET name = ?, license_number = ? "
+ "SET name = ?, license_number = ?,login = ?,password = ?"
+ "WHERE id = ? AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement
PreparedStatement statement
= connection.prepareStatement(query)) {
statement.setString(1, driver.getName());
statement.setString(2, driver.getLicenseNumber());
statement.setLong(3, driver.getId());
statement.setString(3,driver.getLogin());
statement.setString(4,driver.getPassword());
statement.setLong(5, driver.getId());
statement.executeUpdate();
return driver;
} catch (SQLException e) {
Expand All @@ -98,14 +102,34 @@ public boolean delete(Long id) {
}
}

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 find user by login = " + login, e);
}
}

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.setPassword(password);
driver.setLogin(login);
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 Exception {
public AuthenticationException(String message) {
super(message);
}
}
25 changes: 25 additions & 0 deletions src/main/java/taxi/model/Driver.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

public class Driver {
private Long id;
private String login;
private String password;
private String name;
private String licenseNumber;

Expand All @@ -15,6 +17,13 @@ public Driver(String name, String licenseNumber) {
this.licenseNumber = 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() {
return id;
}
Expand All @@ -23,6 +32,22 @@ public void setId(Long id) {
this.id = id;
}

public String getPassword() {
return password;
}

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

public String getLogin() {
return login;
}

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

public String getName() {
return name;
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/taxi/service/AuthenticationService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package taxi.service;

import taxi.exception.AuthenticationException;
import taxi.model.Driver;

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

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

@Service
public class AuthenticationServiceImpl implements AuthenticationService {
@Inject
private DriverDao driverDao;

@Override
public Driver login(String login, String password) throws AuthenticationException {
Optional<Driver> driver = driverDao.findByLogin(login);
if (driver.isPresent() && driver.get().getPassword().equals(password)) {
return driver.get();
}
throw new AuthenticationException("username or password was incorrect");
}
}
7 changes: 6 additions & 1 deletion 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 All @@ -20,7 +21,7 @@ public Driver create(Driver driver) {
@Override
public Driver get(Long id) {
return driverDao.get(id).orElseThrow(() ->
new NoSuchElementException("Can't get driver by id: " + id)
new NoSuchElementException("Can't get driver by id: " + id)
);
}

Expand All @@ -38,4 +39,8 @@ public Driver update(Driver driver) {
public boolean delete(Long id) {
return driverDao.delete(id);
}

private Optional<Driver> findByLogin(String login) {
return driverDao.findByLogin(login);
}
}
8 changes: 4 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,10 @@
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=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "glorytobeServer";
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";

static {
try {
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/taxi/web/filter/AuthenticationFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
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 final Set<String> allowedUrls = new HashSet<>();

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

@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();

Long driverId = (Long) session.getAttribute("driver_id");
boolean allowedUrl = allowedUrls.contains(request.getServletPath());

if (driverId == null && !allowedUrl) {
response.sendRedirect(request.getContextPath() + "/login");
return;
}
filterChain.doFilter(request, response);
}

}
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/views/cars/all.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
</td>
<td>
<c:forEach var="driver" items="${car.drivers}">
${driver.id} ${driver.name} ${driver.licenseNumber} <br>
${driver.name} <br>
</c:forEach>
</td>
<td>
Expand Down
5 changes: 5 additions & 0 deletions src/main/webapp/WEB-INF/views/css/table_dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,30 @@
background: #FEF4AB;
margin: auto;
}

.table_dark th {
color: #7C5FAB;
border-bottom: 1px solid #98E2CA;
padding: 12px 17px;
font-size: 14px;
}

.table_dark td {
color: #7C5FAB;
border-bottom: 1px solid #98E2CA;
border-right: 1px solid #98E2CA;
padding: 7px 17px;
font-size: 14px;
}

.table_dark tr:last-child td {
border-bottom: none;
}

.table_dark td:last-child {
border-right: none;
}

.table_dark tr:hover td {
text-decoration: underline;
}
Loading