content: package com.nonononoki.alovoa.service;
  
  import com.nonononoki.alovoa.component.ExceptionHandler;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.security.core.Authentication;
  import org.springframework.security.core.context.SecurityContextHolder;
  import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
  import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
  import org.springframework.stereotype.Service;
  
  import com.nonononoki.alovoa.Tools;
  import com.nonononoki.alovoa.entity.User;
  import com.nonononoki.alovoa.model.AlovoaException;
  import com.nonononoki.alovoa.repo.UserRepository;
  
  @Service
  public class AuthService {
  
  	@Autowired
  	private UserRepository userRepo;
  
  	@SuppressWarnings("unused")
  	private static final Logger logger = LoggerFactory.getLogger(AuthService.class);
  
  	public synchronized User getCurrentUser(boolean throwExceptionWhenNull) throws AlovoaException {
  		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  		String email;
  		if (auth instanceof OAuth2AuthenticationToken) {
  			DefaultOAuth2User principal = (DefaultOAuth2User) auth.getPrincipal();
  			email = principal.getAttribute("email");
  		} else {
  			if (auth == null) {
  				return null;
  			} else if (auth.getPrincipal() instanceof User) {
  				email = ((User) auth.getPrincipal()).getEmail();
  			} else {
  				email = (String) auth.getPrincipal();
  			}
  		}
  
  		User user = userRepo.findByEmail(Tools.cleanEmail(email));
  		if (user == null) {
  			throw new AlovoaException(ExceptionHandler.USER_NOT_FOUND);
  		}
  		return user;
  	}
  	
  	public User getCurrentUser() throws AlovoaException {
  		return getCurrentUser(false);
  	}
  
  	public String getOauth2Email() {
  		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  		String email = null;
  		if (auth instanceof OAuth2AuthenticationToken) {
  			DefaultOAuth2User principal = (DefaultOAuth2User) auth.getPrincipal();
  			email = principal.getAttribute("email");
  		}
  		return email;
  	}
  }
  