Skip to content

Commit 65c5475

Browse files
author
Borovski Cergei
committed
encoding password with salt successfully
1 parent 765e1e1 commit 65c5475

File tree

12 files changed

+299
-5
lines changed

12 files changed

+299
-5
lines changed

src/main/java/mate/academy/Main.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@
22

33
import java.time.LocalDate;
44
import java.time.LocalDateTime;
5+
import javax.naming.AuthenticationException;
6+
import mate.academy.exception.RegistrationException;
7+
import mate.academy.lib.Injector;
58
import mate.academy.model.CinemaHall;
69
import mate.academy.model.Movie;
710
import mate.academy.model.MovieSession;
11+
import mate.academy.model.User;
12+
import mate.academy.security.AuthenticationService;
813
import mate.academy.service.CinemaHallService;
914
import mate.academy.service.MovieService;
1015
import mate.academy.service.MovieSessionService;
1116

1217
public class Main {
13-
public static void main(String[] args) {
14-
MovieService movieService = null;
18+
public static final Injector injector = Injector.getInstance("mate.academy");
1519

20+
public static void main(String[] args) throws RegistrationException, AuthenticationException {
21+
22+
MovieService movieService = (MovieService) injector
23+
.getInstance(MovieService.class);
1624
Movie fastAndFurious = new Movie("Fast and Furious");
1725
fastAndFurious.setDescription("An action film about street racing, heists, and spies.");
1826
movieService.add(fastAndFurious);
@@ -27,7 +35,8 @@ public static void main(String[] args) {
2735
secondCinemaHall.setCapacity(200);
2836
secondCinemaHall.setDescription("second hall with capacity 200");
2937

30-
CinemaHallService cinemaHallService = null;
38+
CinemaHallService cinemaHallService = (CinemaHallService) injector
39+
.getInstance(CinemaHallService.class);
3140
cinemaHallService.add(firstCinemaHall);
3241
cinemaHallService.add(secondCinemaHall);
3342

@@ -44,12 +53,22 @@ public static void main(String[] args) {
4453
yesterdayMovieSession.setMovie(fastAndFurious);
4554
yesterdayMovieSession.setShowTime(LocalDateTime.now().minusDays(1L));
4655

47-
MovieSessionService movieSessionService = null;
56+
MovieSessionService movieSessionService = (MovieSessionService) injector
57+
.getInstance(MovieSessionService.class);
4858
movieSessionService.add(tomorrowMovieSession);
4959
movieSessionService.add(yesterdayMovieSession);
5060

5161
System.out.println(movieSessionService.get(yesterdayMovieSession.getId()));
5262
System.out.println(movieSessionService.findAvailableSessions(
53-
fastAndFurious.getId(), LocalDate.now()));
63+
fastAndFurious.getId(), LocalDate.now()));
64+
65+
AuthenticationService authenticationService = (AuthenticationService) injector
66+
.getInstance(AuthenticationService.class);
67+
User registerUser = authenticationService.register("liame@gmail.com", "drowssap");
68+
User loginUser = authenticationService.login("liame@gmail.com", "drowssap");
69+
70+
System.out.println(registerUser);
71+
System.out.println(loginUser);
72+
5473
}
5574
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package mate.academy.dao;
2+
3+
import java.util.Optional;
4+
import mate.academy.model.User;
5+
6+
public interface UserDao {
7+
User add(User user);
8+
9+
Optional<User> findByEmail(String email);
10+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package mate.academy.dao.impl;
2+
3+
import java.util.Optional;
4+
import mate.academy.dao.UserDao;
5+
import mate.academy.exception.DataProcessingException;
6+
import mate.academy.lib.Dao;
7+
import mate.academy.model.User;
8+
import mate.academy.util.HibernateUtil;
9+
import org.hibernate.Session;
10+
import org.hibernate.SessionFactory;
11+
import org.hibernate.Transaction;
12+
13+
@Dao
14+
public class UserDaoImpl implements UserDao {
15+
16+
@Override
17+
public User add(User user) {
18+
Session session = null;
19+
Transaction transaction = null;
20+
try {
21+
session = HibernateUtil.getSessionFactory().openSession();
22+
transaction = session.beginTransaction();
23+
session.persist(user);
24+
transaction.commit();
25+
} catch (Exception e) {
26+
if (transaction != null) {
27+
transaction.rollback();
28+
}
29+
throw new DataProcessingException("Can`t add user to DB ", e);
30+
} finally {
31+
if (session != null) {
32+
session.close();
33+
}
34+
}
35+
return user;
36+
}
37+
38+
@Override
39+
public Optional<User> findByEmail(String email) {
40+
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
41+
try (Session session = sessionFactory.openSession()) {
42+
return session.createQuery("from User u where u.email = :email", User.class)
43+
.setParameter("email", email)
44+
.uniqueResultOptional();
45+
} catch (Exception e) {
46+
throw new DataProcessingException("Can`t find user by email = " + email, e);
47+
}
48+
}
49+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package mate.academy.exception;
2+
3+
public class AuthenticationException extends Exception {
4+
public AuthenticationException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package mate.academy.exception;
2+
3+
public class RegistrationException extends Exception {
4+
public RegistrationException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package mate.academy.model;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.Table;
9+
10+
@Entity
11+
@Table(name = "users")
12+
public class User {
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private long id;
16+
@Column(unique = true)
17+
private String email;
18+
private String password;
19+
private byte[] salt;
20+
21+
public long getId() {
22+
return id;
23+
}
24+
25+
public void setId(long id) {
26+
this.id = id;
27+
}
28+
29+
public String getEmail() {
30+
return email;
31+
}
32+
33+
public void setEmail(String email) {
34+
this.email = email;
35+
}
36+
37+
public String getPassword() {
38+
return password;
39+
}
40+
41+
public void setPassword(String password) {
42+
this.password = password;
43+
}
44+
45+
public byte[] getSalt() {
46+
return salt;
47+
}
48+
49+
public void setSalt(byte[] salt) {
50+
this.salt = salt;
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return "User{"
56+
+ "id=" + id
57+
+ ", email='" + email + '\''
58+
+ '}';
59+
}
60+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package mate.academy.security;
2+
3+
import javax.naming.AuthenticationException;
4+
import mate.academy.exception.RegistrationException;
5+
import mate.academy.model.User;
6+
7+
public interface AuthenticationService {
8+
User login(String email, String password) throws AuthenticationException;
9+
10+
User register(String email, String password) throws RegistrationException;
11+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package mate.academy.security.impl;
2+
3+
import java.util.Optional;
4+
import javax.naming.AuthenticationException;
5+
import mate.academy.exception.RegistrationException;
6+
import mate.academy.lib.Inject;
7+
import mate.academy.lib.Service;
8+
import mate.academy.model.User;
9+
import mate.academy.security.AuthenticationService;
10+
import mate.academy.service.UserService;
11+
import mate.academy.util.HashUtil;
12+
13+
@Service
14+
public class AuthenticationServiceImpl implements AuthenticationService {
15+
@Inject
16+
private UserService userService;
17+
18+
@Override
19+
public User login(String email, String password) throws AuthenticationException {
20+
final Optional<User> userFromDbOptional = userService.findByEmail(email);
21+
if (userFromDbOptional.isEmpty()) {
22+
throw new AuthenticationException("The user with email = "
23+
+ email + "does not exist in the database");
24+
}
25+
final User user = userFromDbOptional.get();
26+
String hashedPassword = HashUtil.hashPassword(password, user.getSalt());
27+
if (user.getPassword().equals(hashedPassword)) {
28+
return user;
29+
}
30+
throw new AuthenticationException("Password " + password + "is not correct");
31+
}
32+
33+
@Override
34+
public User register(String email, String password) throws RegistrationException {
35+
final Optional<User> userFromDbOptional = userService.findByEmail(email);
36+
if (userFromDbOptional.isEmpty()) {
37+
User user = new User();
38+
user.setEmail(email);
39+
user.setPassword(password);
40+
return userService.add(user);
41+
}
42+
throw new RegistrationException("Can`t register user");
43+
}
44+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package mate.academy.service;
2+
3+
import java.util.Optional;
4+
import mate.academy.model.User;
5+
6+
public interface UserService {
7+
User add(User user);
8+
9+
Optional<User> findByEmail(String email);
10+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package mate.academy.service.impl;
2+
3+
import java.util.Optional;
4+
import mate.academy.dao.UserDao;
5+
import mate.academy.lib.Inject;
6+
import mate.academy.lib.Service;
7+
import mate.academy.model.User;
8+
import mate.academy.service.UserService;
9+
import mate.academy.util.HashUtil;
10+
11+
@Service
12+
public class UserServiceImpl implements UserService {
13+
@Inject
14+
private UserDao userDao;
15+
16+
@Override
17+
public User add(User user) {
18+
user.setSalt(HashUtil.getSalt());
19+
user.setPassword(HashUtil.hashPassword(user.getPassword(), user.getSalt()));
20+
return userDao.add(user);
21+
}
22+
23+
@Override
24+
public Optional<User> findByEmail(String email) {
25+
return userDao.findByEmail(email);
26+
}
27+
}

0 commit comments

Comments
 (0)