package eu.eudat.logic.security.validators; import eu.eudat.logic.security.customproviders.B2AccessCustomProvider; import eu.eudat.logic.security.validators.b2access.B2AccessTokenValidator; import eu.eudat.logic.security.validators.facebook.FacebookTokenValidator; import eu.eudat.logic.security.validators.google.GoogleTokenValidator; import eu.eudat.logic.security.validators.linkedin.LinkedInTokenValidator; import eu.eudat.logic.security.validators.twitter.TwitterTokenValidator; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.AuthenticationService; import eu.eudat.logic.services.operations.AuthenticationServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; @Service("tokenValidatorFactory") public class TokenValidatorFactoryImpl implements TokenValidatorFactory { public enum LoginProvider { GOOGLE(1), FACEBOOK(2), TWITTER(3), LINKEDIN(4), NATIVELOGIN(5), B2_ACCESS(6); private int value; private LoginProvider(int value) { this.value = value; } public int getValue() { return value; } public static LoginProvider fromInteger(int value) { switch (value) { case 1: return GOOGLE; case 2: return FACEBOOK; case 3: return TWITTER; case 4: return LINKEDIN; case 5: return NATIVELOGIN; case 6: return B2_ACCESS; default: throw new RuntimeException("Unsupported LoginProvider"); } } } private ApiContext apiContext; private Environment environment; private AuthenticationServiceImpl authenticationService; private B2AccessCustomProvider b2AccessCustomProvider; @Autowired public TokenValidatorFactoryImpl(ApiContext apiContext, Environment environment, AuthenticationServiceImpl authenticationService, B2AccessCustomProvider b2AccessCustomProvider) { this.apiContext = apiContext; this.environment = environment; this.authenticationService = authenticationService; this.b2AccessCustomProvider = b2AccessCustomProvider; } public TokenValidator getProvider(LoginProvider provider) { switch (provider) { case GOOGLE: return new GoogleTokenValidator(this.apiContext, this.environment, this.authenticationService); case FACEBOOK: return new FacebookTokenValidator(this.apiContext, this.environment, this.authenticationService); case LINKEDIN: return new LinkedInTokenValidator(this.apiContext, this.environment, this.authenticationService); case TWITTER: return new TwitterTokenValidator(this.apiContext, this.environment, this.authenticationService); case B2_ACCESS: return new B2AccessTokenValidator(this.environment, this.authenticationService, this.b2AccessCustomProvider); default: throw new RuntimeException("Login Provider Not Implemented"); } } }