diff --git a/pom.xml b/pom.xml
index a043c369c..5f6650c51 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,6 @@
https://raw.githubusercontent.com/mate-academy/style-guides/master/java/checkstyle.xml
-
mysql
@@ -37,7 +36,6 @@
1.2
-
diff --git a/src/main/java/taxi/controller/LoginController.java b/src/main/java/taxi/controller/LoginController.java
new file mode 100644
index 000000000..674edfaad
--- /dev/null
+++ b/src/main/java/taxi/controller/LoginController.java
@@ -0,0 +1,40 @@
+package taxi.controller;
+
+import java.io.IOException;
+import javax.naming.AuthenticationException;
+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.Driver;
+import taxi.service.AuthenticationService;
+
+public class LoginController extends HttpServlet {
+ private static final Injector injector = Injector.getInstance("taxi");
+ private 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("user_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);
+ }
+ }
+}
diff --git a/src/main/java/taxi/controller/LogoutController.java b/src/main/java/taxi/controller/LogoutController.java
new file mode 100644
index 000000000..ad7cd43d4
--- /dev/null
+++ b/src/main/java/taxi/controller/LogoutController.java
@@ -0,0 +1,21 @@
+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.lib.Injector;
+
+public class LogoutController extends HttpServlet {
+ private static final Injector injector = Injector.getInstance("taxi");
+
+ @Override
+ protected void doGet(HttpServletRequest req,
+ HttpServletResponse resp) throws ServletException, IOException {
+ HttpSession session = req.getSession();
+ session.invalidate();
+ resp.sendRedirect(req.getContextPath() + "/index");
+ }
+}
diff --git a/src/main/java/taxi/controller/car/GetMyCurrentCarsController.java b/src/main/java/taxi/controller/car/GetMyCurrentCarsController.java
new file mode 100644
index 000000000..e052886ba
--- /dev/null
+++ b/src/main/java/taxi/controller/car/GetMyCurrentCarsController.java
@@ -0,0 +1,27 @@
+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 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
+ protected void doGet(HttpServletRequest req,
+ HttpServletResponse resp) throws ServletException, IOException {
+ HttpSession session = req.getSession();
+ Long userId = (Long) session.getAttribute("user_id");
+ List cars = carService.getAllByDriver(userId);
+ req.setAttribute("cars", cars);
+ req.getRequestDispatcher("/WEB-INF/views/cars/all.jsp").forward(req, resp);
+ }
+}
diff --git a/src/main/java/taxi/controller/driver/AddDriverController.java b/src/main/java/taxi/controller/driver/AddDriverController.java
index 1db67730b..0d15758c0 100644
--- a/src/main/java/taxi/controller/driver/AddDriverController.java
+++ b/src/main/java/taxi/controller/driver/AddDriverController.java
@@ -11,8 +11,8 @@
public class AddDriverController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
- private final DriverService driverService = (DriverService) injector
- .getInstance(DriverService.class);
+ private final DriverService driverService =
+ (DriverService) injector.getInstance(DriverService.class);
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
@@ -24,8 +24,12 @@ 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");
+ String login = req.getParameter("login");
+ String password = req.getParameter("password");
Driver driver = new Driver(name, licenseNumber);
+ driver.setLogin(login);
+ driver.setPassword(password);
driverService.create(driver);
- resp.sendRedirect(req.getContextPath() + "/drivers/add");
+ resp.sendRedirect(req.getContextPath() + "/index");
}
}
diff --git a/src/main/java/taxi/dao/CarDaoImpl.java b/src/main/java/taxi/dao/CarDaoImpl.java
index 586ccb595..5372a4d2f 100644
--- a/src/main/java/taxi/dao/CarDaoImpl.java
+++ b/src/main/java/taxi/dao/CarDaoImpl.java
@@ -20,11 +20,11 @@ public class CarDaoImpl implements CarDao {
@Override
public Car create(Car car) {
String query = "INSERT INTO cars (model, manufacturer_id)"
- + "VALUES (?, ?)";
+ + "VALUES (?, ?)";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(
- query, Statement.RETURN_GENERATED_KEYS)) {
+ query, Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, car.getModel());
statement.setLong(2, car.getManufacturer().getId());
statement.executeUpdate();
@@ -42,13 +42,13 @@ public Car create(Car car) {
@Override
public Optional get(Long id) {
String query = "SELECT c.id AS id, "
- + "model, "
- + "manufacturer_id, "
- + "m.name AS manufacturer_name, "
- + "m.country AS manufacturer_country "
- + "FROM cars c "
- + "JOIN manufacturers m ON c.manufacturer_id = m.id "
- + "WHERE c.id = ? AND c.is_deleted = FALSE";
+ + "model, "
+ + "manufacturer_id, "
+ + "m.name AS manufacturer_name, "
+ + "m.country AS manufacturer_country "
+ + "FROM cars c "
+ + "JOIN manufacturers m ON c.manufacturer_id = m.id "
+ + "WHERE c.id = ? AND c.is_deleted = FALSE";
Car car = null;
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
@@ -70,13 +70,13 @@ public Optional get(Long id) {
@Override
public List getAll() {
String query = "SELECT c.id AS id, "
- + "model, "
- + "manufacturer_id, "
- + "m.name AS manufacturer_name, "
- + "m.country AS manufacturer_country "
- + "FROM cars c"
- + " JOIN manufacturers m ON c.manufacturer_id = m.id"
- + " WHERE c.is_deleted = FALSE";
+ + "model, "
+ + "manufacturer_id, "
+ + "m.name AS manufacturer_name, "
+ + "m.country AS manufacturer_country "
+ + "FROM cars c"
+ + " JOIN manufacturers m ON c.manufacturer_id = m.id"
+ + " WHERE c.is_deleted = FALSE";
List cars = new ArrayList<>();
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
@@ -95,7 +95,7 @@ public List getAll() {
@Override
public Car update(Car car) {
String query = "UPDATE cars SET model = ?, manufacturer_id = ? WHERE id = ?"
- + " AND is_deleted = FALSE";
+ + " AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
@@ -114,10 +114,10 @@ public Car update(Car car) {
@Override
public boolean delete(Long id) {
String query = "UPDATE cars SET is_deleted = TRUE WHERE id = ?"
- + " AND is_deleted = FALSE";
+ + " AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
- PreparedStatement statement =
- connection.prepareStatement(query)) {
+ PreparedStatement statement =
+ connection.prepareStatement(query)) {
statement.setLong(1, id);
return statement.executeUpdate() > 0;
} catch (SQLException e) {
@@ -128,16 +128,16 @@ public boolean delete(Long id) {
@Override
public List getAllByDriver(Long driverId) {
String query = "SELECT c.id AS id, "
- + "model, "
- + "manufacturer_id, "
- + "m.name AS manufacturer_name, "
- + "m.country AS manufacturer_country "
- + "FROM cars c"
- + " JOIN manufacturers m ON c.manufacturer_id = m.id"
- + " JOIN cars_drivers cd ON c.id = cd.car_id"
- + " JOIN drivers d ON cd.driver_id = d.id"
- + " WHERE c.is_deleted = FALSE AND driver_id = ?"
- + " AND d.is_deleted = FALSE";
+ + "model, "
+ + "manufacturer_id, "
+ + "m.name AS manufacturer_name, "
+ + "m.country AS manufacturer_country "
+ + "FROM cars c"
+ + " JOIN manufacturers m ON c.manufacturer_id = m.id"
+ + " JOIN cars_drivers cd ON c.id = cd.car_id"
+ + " JOIN drivers d ON cd.driver_id = d.id"
+ + " WHERE c.is_deleted = FALSE AND driver_id = ?"
+ + " AND d.is_deleted = FALSE";
List cars = new ArrayList<>();
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
@@ -149,7 +149,7 @@ public List getAllByDriver(Long driverId) {
}
} catch (SQLException e) {
throw new DataProcessingException("Can't get all cars for driver with id: "
- + driverId, e);
+ + driverId, e);
}
cars.forEach(car -> car.setDrivers(getAllDriversByCarId(car.getId())));
return cars;
@@ -183,15 +183,15 @@ private void deleteAllDrivers(Car car) {
statement.executeUpdate();
} catch (SQLException e) {
throw new DataProcessingException("Can't delete drivers " + car.getDrivers()
- + " of car with id: " + car.getId(), e);
+ + " of car with id: " + car.getId(), e);
}
}
private List getAllDriversByCarId(Long carId) {
- String query = "SELECT id, name, license_number "
- + "FROM cars_drivers cd "
- + "JOIN drivers d ON cd.driver_id = d.id "
- + "WHERE car_id = ? AND is_deleted = false";
+ String query = "SELECT id, name, license_number, login, password "
+ + "FROM cars_drivers cd "
+ + "JOIN drivers d ON cd.driver_id = d.id "
+ + "WHERE car_id = ? AND is_deleted = false";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
@@ -211,10 +211,14 @@ private Driver parseDriverFromResultSet(ResultSet resultSet) throws SQLException
Long driverId = 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(driverId);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
+ driver.setLogin(login);
+ driver.setPassword(password);
return driver;
}
diff --git a/src/main/java/taxi/dao/DriverDao.java b/src/main/java/taxi/dao/DriverDao.java
index 83440d530..e9c38d2a5 100644
--- a/src/main/java/taxi/dao/DriverDao.java
+++ b/src/main/java/taxi/dao/DriverDao.java
@@ -1,6 +1,8 @@
package taxi.dao;
+import java.util.Optional;
import taxi.model.Driver;
public interface DriverDao extends GenericDao {
+ Optional findByLogin(String login);
}
diff --git a/src/main/java/taxi/dao/DriverDaoImpl.java b/src/main/java/taxi/dao/DriverDaoImpl.java
index f5e18f2a2..cd7600159 100644
--- a/src/main/java/taxi/dao/DriverDaoImpl.java
+++ b/src/main/java/taxi/dao/DriverDaoImpl.java
@@ -17,13 +17,16 @@
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)) {
+ 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()) {
@@ -71,8 +74,8 @@ public List getAll() {
@Override
public Driver update(Driver driver) {
String query = "UPDATE drivers "
- + "SET name = ?, license_number = ? "
- + "WHERE id = ? AND is_deleted = FALSE";
+ + "SET name = ?, license_number = ?, login = ?, password = ? "
+ + "WHERE id = ? AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement
= connection.prepareStatement(query)) {
@@ -98,14 +101,38 @@ public boolean delete(Long id) {
}
}
+ @Override
+ public Optional findByLogin(String login) {
+ String query = "SELECT * "
+ + "FROM drivers "
+ + "WHERE login = ? AND is_deleted = FALSE";
+ try (Connection connection = ConnectionUtil.getConnection();
+ PreparedStatement statement
+ = connection.prepareStatement(query)) {
+ statement.setString(1, login);
+ Driver driver = null;
+ ResultSet resultSet = statement.executeQuery();
+ if (resultSet.next()) {
+ driver = parseDriverFromResultSet(resultSet);
+ }
+ return Optional.ofNullable(driver);
+ } catch (SQLException ex) {
+ throw new DataProcessingException("Can't not find driver with login " + login, ex);
+ }
+ }
+
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;
}
}
diff --git a/src/main/java/taxi/filter/AuthenticationFilter.java b/src/main/java/taxi/filter/AuthenticationFilter.java
new file mode 100644
index 000000000..1a6dd09ad
--- /dev/null
+++ b/src/main/java/taxi/filter/AuthenticationFilter.java
@@ -0,0 +1,44 @@
+package taxi.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.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+@WebFilter(filterName = "authenticationFilter", urlPatterns = {"/*"})
+public class AuthenticationFilter implements Filter {
+ private Set allowedUrls = new HashSet();
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+ allowedUrls.add("/login");
+ allowedUrls.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 session = req.getSession();
+ Long userId = (Long) session.getAttribute("user_id");
+ if (userId == null && allowedUrls.contains(req.getServletPath())) {
+ chain.doFilter(req, resp);
+ return;
+ }
+ if (userId == null) {
+ resp.sendRedirect(req.getContextPath() + "/login");
+ return;
+ }
+ chain.doFilter(req, resp);
+ }
+}
diff --git a/src/main/java/taxi/model/Driver.java b/src/main/java/taxi/model/Driver.java
index 9c375f94c..740743dbf 100644
--- a/src/main/java/taxi/model/Driver.java
+++ b/src/main/java/taxi/model/Driver.java
@@ -6,6 +6,8 @@ public class Driver {
private Long id;
private String name;
private String licenseNumber;
+ private String login;
+ private String password;
public Driver() {
}
@@ -57,4 +59,20 @@ public boolean equals(Object o) {
public int hashCode() {
return Objects.hash(id, name, 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;
+ }
}
diff --git a/src/main/java/taxi/service/AuthenticationService.java b/src/main/java/taxi/service/AuthenticationService.java
new file mode 100644
index 000000000..b76d77a81
--- /dev/null
+++ b/src/main/java/taxi/service/AuthenticationService.java
@@ -0,0 +1,8 @@
+package taxi.service;
+
+import javax.naming.AuthenticationException;
+import taxi.model.Driver;
+
+public interface AuthenticationService {
+ Driver login(String login, String password) throws AuthenticationException;
+}
diff --git a/src/main/java/taxi/service/AuthenticationServiceImpl.java b/src/main/java/taxi/service/AuthenticationServiceImpl.java
new file mode 100644
index 000000000..9d13eced9
--- /dev/null
+++ b/src/main/java/taxi/service/AuthenticationServiceImpl.java
@@ -0,0 +1,24 @@
+package taxi.service;
+
+import javax.naming.AuthenticationException;
+import taxi.dao.DriverDao;
+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 {
+ Driver driver = driverDao.findByLogin(login)
+ .orElseThrow(() -> new AuthenticationException(
+ "Username or password was incorrect"));
+ if (driver.getPassword().equals(password)) {
+ return driver;
+ }
+ throw new AuthenticationException("Username or password was incorrect");
+ }
+}
diff --git a/src/main/java/taxi/util/ConnectionUtil.java b/src/main/java/taxi/util/ConnectionUtil.java
index 9a94e69a2..8b033f65a 100644
--- a/src/main/java/taxi/util/ConnectionUtil.java
+++ b/src/main/java/taxi/util/ConnectionUtil.java
@@ -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=Europe/Kiev";
+ private static final String USERNAME = "root";
+ private static final String PASSWORD = "matebest";
+ private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static {
try {
diff --git a/src/main/resources/init_db.sql b/src/main/resources/init_db.sql
index 2acabb883..b01f5ea7a 100644
--- a/src/main/resources/init_db.sql
+++ b/src/main/resources/init_db.sql
@@ -11,6 +11,8 @@ CREATE TABLE `drivers` (
`id` BIGINT(0) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`license_number` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `login` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+ `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`is_deleted` BIT(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
diff --git a/src/main/webapp/WEB-INF/views/cars/add.jsp b/src/main/webapp/WEB-INF/views/cars/add.jsp
index c23ba0b4f..b2650b441 100644
--- a/src/main/webapp/WEB-INF/views/cars/add.jsp
+++ b/src/main/webapp/WEB-INF/views/cars/add.jsp
@@ -8,6 +8,7 @@
Add car
+<%@include file="/WEB-INF/views/logout.jsp" %>
Add car:
diff --git a/src/main/webapp/WEB-INF/views/cars/all.jsp b/src/main/webapp/WEB-INF/views/cars/all.jsp
index 84f046299..5b08ea854 100644
--- a/src/main/webapp/WEB-INF/views/cars/all.jsp
+++ b/src/main/webapp/WEB-INF/views/cars/all.jsp
@@ -8,6 +8,7 @@
All cars
+<%@include file="/WEB-INF/views/logout.jsp" %>
All cars:
diff --git a/src/main/webapp/WEB-INF/views/cars/drivers/add.jsp b/src/main/webapp/WEB-INF/views/cars/drivers/add.jsp
index d281d5d72..c782851aa 100644
--- a/src/main/webapp/WEB-INF/views/cars/drivers/add.jsp
+++ b/src/main/webapp/WEB-INF/views/cars/drivers/add.jsp
@@ -8,6 +8,7 @@
Add driver to car
+<%@include file="/WEB-INF/views/logout.jsp" %>
Add driver to car:
diff --git a/src/main/webapp/WEB-INF/views/css/table_dark.css b/src/main/webapp/WEB-INF/views/css/table_dark.css
index 11a147b92..e490691f5 100644
--- a/src/main/webapp/WEB-INF/views/css/table_dark.css
+++ b/src/main/webapp/WEB-INF/views/css/table_dark.css
@@ -8,12 +8,14 @@
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;
@@ -21,12 +23,23 @@
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;
}
+
+.button-container button {
+ font-size: large;
+ width: auto;
+ height: auto;
+ position: relative;
+ align-items: center;
+}
diff --git a/src/main/webapp/WEB-INF/views/drivers/add.jsp b/src/main/webapp/WEB-INF/views/drivers/add.jsp
index 4ad7cee44..2ad0d4c30 100644
--- a/src/main/webapp/WEB-INF/views/drivers/add.jsp
+++ b/src/main/webapp/WEB-INF/views/drivers/add.jsp
@@ -8,13 +8,15 @@
All drivers
-
+<%@include file="/WEB-INF/views/logout.jsp" %>
+