RoleInterceptor.java

1
package edu.ucsb.cs156.dining.interceptors;
2
3
import edu.ucsb.cs156.dining.entities.User;
4
import edu.ucsb.cs156.dining.repositories.AdminRepository;
5
import edu.ucsb.cs156.dining.repositories.ModeratorRepository;
6
import edu.ucsb.cs156.dining.repositories.UserRepository;
7
import jakarta.servlet.http.HttpServletRequest;
8
import jakarta.servlet.http.HttpServletResponse;
9
import java.util.Collection;
10
import java.util.Optional;
11
import java.util.Set;
12
import java.util.stream.Collectors;
13
import lombok.extern.slf4j.Slf4j;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.security.core.Authentication;
16
import org.springframework.security.core.GrantedAuthority;
17
import org.springframework.security.core.authority.SimpleGrantedAuthority;
18
import org.springframework.security.core.context.SecurityContextHolder;
19
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
20
import org.springframework.security.oauth2.core.user.OAuth2User;
21
import org.springframework.stereotype.Component;
22
import org.springframework.web.servlet.HandlerInterceptor;
23
24
@Slf4j
25
@Component
26
public class RoleInterceptor implements HandlerInterceptor {
27
28
  @Autowired UserRepository userRepository;
29
  @Autowired AdminRepository adminRepository;
30
  @Autowired ModeratorRepository moderatorRepository;
31
32
  @Override
33
  public boolean preHandle(
34
      HttpServletRequest request, HttpServletResponse response, Object handler) {
35
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
36
37 1 1. preHandle : negated conditional → KILLED
    if (authentication.getClass() == OAuth2AuthenticationToken.class) {
38
      OAuth2User principal = ((OAuth2AuthenticationToken) authentication).getPrincipal();
39
      String email = principal.getAttribute("email");
40
      Optional<User> optionalUser = userRepository.findByEmail(email);
41 1 1. preHandle : negated conditional → KILLED
      if (optionalUser.isPresent()) {
42
        Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
43
        Set<GrantedAuthority> revisedAuthorities =
44
            authorities.stream()
45
                .filter(
46
                    grantedAuth ->
47 2 1. lambda$preHandle$0 : replaced boolean return with true for edu/ucsb/cs156/dining/interceptors/RoleInterceptor::lambda$preHandle$0 → KILLED
2. lambda$preHandle$0 : negated conditional → KILLED
                        !grantedAuth.getAuthority().equals("ROLE_ADMIN")
48 1 1. lambda$preHandle$0 : negated conditional → KILLED
                            && !grantedAuth.getAuthority().equals("ROLE_MODERATOR"))
49
                .collect(Collectors.toSet());
50 1 1. preHandle : negated conditional → KILLED
        if (adminRepository.existsByEmail(email)) {
51
          revisedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
52
        }
53 1 1. preHandle : negated conditional → KILLED
        if (moderatorRepository.existsByEmail(email)) {
54
          revisedAuthorities.add(new SimpleGrantedAuthority("ROLE_MODERATOR"));
55
        }
56
        Authentication newAuth =
57
            new OAuth2AuthenticationToken(
58
                principal,
59
                revisedAuthorities,
60
                (((OAuth2AuthenticationToken) authentication).getAuthorizedClientRegistrationId()));
61
        SecurityContextHolder.getContext().setAuthentication(newAuth);
62
      }
63
    }
64 1 1. preHandle : replaced boolean return with false for edu/ucsb/cs156/dining/interceptors/RoleInterceptor::preHandle → KILLED
    return true;
65
  }
66
}

Mutations

37

1.1
Location : preHandle
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:users__logged_out()]
negated conditional → KILLED

41

1.1
Location : preHandle
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_nothing_when_user_not_present()]
negated conditional → KILLED

47

1.1
Location : lambda$preHandle$0
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_admin_role_when_not_in_admin_table()]
replaced boolean return with true for edu/ucsb/cs156/dining/interceptors/RoleInterceptor::lambda$preHandle$0 → KILLED

2.2
Location : lambda$preHandle$0
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_admin_role_when_not_in_admin_table()]
negated conditional → KILLED

48

1.1
Location : lambda$preHandle$0
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_admin_role_when_not_in_admin_table()]
negated conditional → KILLED

50

1.1
Location : preHandle
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_admin_role_when_not_in_admin_table()]
negated conditional → KILLED

53

1.1
Location : preHandle
Killed by : edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.interceptors.RoleInterceptorTests]/[method:updates_admin_role_when_not_in_admin_table()]
negated conditional → KILLED

64

1.1
Location : preHandle
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:users__logged_out()]
replaced boolean return with false for edu/ucsb/cs156/dining/interceptors/RoleInterceptor::preHandle → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0