package eu.eudat.security; import java.io.IOException; import java.util.ArrayList; import javax.naming.NameAlreadyBoundException; import eu.eudat.models.login.Credentials; import eu.eudat.models.login.LoginInfo; import eu.eudat.models.security.Principal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.stereotype.Component; import eu.eudat.dao.entities.UserInfoDao; import eu.eudat.entities.UserInfo; import eu.eudat.exceptions.NonValidTokenException; import eu.eudat.security.validators.GoogleTokenValidator; import eu.eudat.security.validators.NativeTokenValidator; import eu.eudat.security.validators.TokenValidator; @Component public class CustomAuthenticationProvider { @Autowired private UserInfoDao userInfoDao; @Autowired private GoogleTokenValidator googleTokenValidator; @Autowired private NativeTokenValidator nativeTokenValidator; public Principal authenticate(LoginInfo credentials) throws AuthenticationException { String token = credentials.getTicket(); try { Principal principal = googleTokenValidator.validateToken(token); return principal; } catch (NonValidTokenException e) { e.printStackTrace(); System.out.println("Could not validate a user by his token! Reason: " + e.getMessage()); throw new AuthenticationServiceException("Token validation failed - Not a valid token"); } catch (IOException e) { e.printStackTrace(); throw new AuthenticationServiceException("IO Exeption"); } } }