Projekt

Obecné

Profil

Stáhnout (3.27 KB) Statistiky
| Větev: | Revize:
1
package vldc.aswi.service;
2

    
3
import lombok.extern.slf4j.Slf4j;
4
import org.springframework.beans.factory.annotation.Autowired;
5
import org.springframework.context.event.ContextRefreshedEvent;
6
import org.springframework.context.event.EventListener;
7
import org.springframework.core.annotation.Order;
8
import org.springframework.security.core.userdetails.UserDetails;
9
import org.springframework.security.core.userdetails.UserDetailsService;
10
import org.springframework.security.core.userdetails.UsernameNotFoundException;
11
import org.springframework.security.crypto.password.PasswordEncoder;
12
import org.springframework.stereotype.Service;
13
import vldc.aswi.dao.RoleRepository;
14
import vldc.aswi.dao.UserRepository;
15
import vldc.aswi.domain.User;
16
import vldc.aswi.model.login.WebCredentials;
17

    
18
import javax.transaction.Transactional;
19
import java.util.LinkedList;
20
import java.util.List;
21

    
22
/**
23
 * Manager for User.
24
 */
25
@Service
26
@Slf4j
27
public class UserManagerImpl implements UserManager, UserDetailsService {
28

    
29
    @Autowired
30
    private PasswordEncoder encoder;
31

    
32
    /** Autowired user repository. */
33
    @Autowired
34
    private UserRepository userRepository;
35

    
36
    /** Autowired role repository. */
37
    @Autowired
38
    private RoleRepository roleRepository;
39

    
40
    /**
41
     * Initialization setup for user manager. Check if user repository contains records and if not, initialize default values.
42
     */
43
    @EventListener(classes = {
44
            ContextRefreshedEvent.class
45
    })
46
    @Order(1)
47
    @Transactional
48
    public void setup() {
49
        if (this.userRepository.count() == 0) {
50
            log.info("No user present");
51
            /*
52
            this.addUser("administrator", "demo", (long) 1);
53
            this.addUser("fakulta", "demo", (long) 2);
54
            this.addUser("referentka", "demo", (long) 3);
55
            this.addUser("prorektor", "demo", (long) 4);
56
             */
57
        }
58
    }
59

    
60
    /**
61
     * Load user details by his username.
62
     * @param username Username of user.
63
     * @return UserDetails of user.
64
     * @throws UsernameNotFoundException Exception.
65
     */
66
    @Override
67
    @Transactional
68
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
69
        User user = this.userRepository.findByUsername(username);
70
        if (user == null) {
71
            throw new UsernameNotFoundException("Invalid username!");
72
        }
73

    
74
        WebCredentials credentials = new WebCredentials(user.getUsername(), user.getPassword());
75
        credentials.addRole(user.getRole().getName());
76

    
77
        return credentials;
78
    }
79

    
80
    /**
81
     * Get all users from database.
82
     * @return List of users.
83
     */
84
    @Override
85
    public List<User> getUsers() {
86
        List<User> retVal = new LinkedList<>();
87
        this.userRepository.findAll().forEach(retVal::add);
88
        return retVal;
89
    }
90

    
91
    /**
92
     * Add new user into database.
93
     * @param username - login username for user.
94
     * @param password - password for user.
95
     * @return ID of newly created user.
96
     */
97
    @Override
98
    public Long addUser(String username, String password, Long roleId) {
99
        String hashed = this.encoder.encode(password);
100
        User user = new User(username, hashed);
101
        user.setRole(this.roleRepository.getById(roleId));
102
        this.userRepository.save(user);
103
        return user.getId();
104
    }
105
}
(16-16/16)