no message
This commit is contained in:
parent
60b12fe501
commit
f34b39d4c1
|
@ -186,6 +186,13 @@
|
||||||
<version>1.0.0.RELEASE</version>
|
<version>1.0.0.RELEASE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- tweeter login-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.social</groupId>
|
||||||
|
<artifactId>spring-social-twitter</artifactId>
|
||||||
|
<version>1.1.2.RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- Various libs -->
|
<!-- Various libs -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
package eu.eudat.controllers;
|
package eu.eudat.controllers;
|
||||||
|
|
||||||
|
import eu.eudat.exceptions.UnauthorisedException;
|
||||||
import eu.eudat.models.login.Credentials;
|
import eu.eudat.models.login.Credentials;
|
||||||
import eu.eudat.models.helpers.responses.ResponseItem;
|
import eu.eudat.models.helpers.responses.ResponseItem;
|
||||||
import eu.eudat.models.login.LoginInfo;
|
import eu.eudat.models.login.LoginInfo;
|
||||||
import eu.eudat.models.security.Principal;
|
import eu.eudat.models.security.Principal;
|
||||||
import eu.eudat.security.CustomAuthenticationProvider;
|
import eu.eudat.security.CustomAuthenticationProvider;
|
||||||
|
import eu.eudat.security.validators.twitter.TwitterTokenValidator;
|
||||||
import eu.eudat.services.AuthenticationService;
|
import eu.eudat.services.AuthenticationService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.social.oauth1.OAuthToken;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
@ -20,23 +23,43 @@ import javax.transaction.Transactional;
|
||||||
@RequestMapping(value = "/auth")
|
@RequestMapping(value = "/auth")
|
||||||
public class Login {
|
public class Login {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private CustomAuthenticationProvider customAuthenticationProvider;
|
private CustomAuthenticationProvider customAuthenticationProvider;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AuthenticationService authenticationService;
|
private AuthenticationService authenticationService;
|
||||||
|
|
||||||
|
private TwitterTokenValidator twitterTokenValidator;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public Login(CustomAuthenticationProvider customAuthenticationProvider, AuthenticationService authenticationService, TwitterTokenValidator twitterTokenValidator) {
|
||||||
|
this.customAuthenticationProvider = customAuthenticationProvider;
|
||||||
|
this.authenticationService = authenticationService;
|
||||||
|
this.twitterTokenValidator = twitterTokenValidator;
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@RequestMapping(method = RequestMethod.POST, value = { "/externallogin" }, consumes = "application/json", produces="application/json")
|
@RequestMapping(method = RequestMethod.POST, value = { "/externallogin" }, consumes = "application/json", produces="application/json")
|
||||||
public @ResponseBody ResponseItem<Principal> googleLogin(@RequestBody LoginInfo credentials) {
|
public @ResponseBody ResponseItem<Principal> googleLogin(@RequestBody LoginInfo credentials) {
|
||||||
try {
|
try {
|
||||||
return new ResponseItem<Principal>().payload(customAuthenticationProvider.authenticate(credentials)).status(HttpStatus.OK);
|
return new ResponseItem<Principal>().payload(customAuthenticationProvider.authenticate(credentials)).status(HttpStatus.OK);
|
||||||
} catch (Exception ex) {
|
}catch (UnauthorisedException ex){
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
return new ResponseItem<Principal>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage());
|
return new ResponseItem<Principal>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(method = RequestMethod.GET, value = { "/twitterRequestToken" }, produces="application/json")
|
||||||
|
public @ResponseBody ResponseItem<OAuthToken> twitterRequestToken() {
|
||||||
|
try {
|
||||||
|
return new ResponseItem<OAuthToken>().payload(this.twitterTokenValidator.getRequestToken()).status(HttpStatus.OK);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
return new ResponseItem<OAuthToken>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@RequestMapping(method = RequestMethod.POST, value = { "/me" }, consumes = "application/json", produces="application/json")
|
@RequestMapping(method = RequestMethod.POST, value = { "/me" }, consumes = "application/json", produces="application/json")
|
||||||
public @ResponseBody ResponseItem<Principal> authMe(Principal principal) {
|
public @ResponseBody ResponseItem<Principal> authMe(Principal principal) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -8,6 +8,8 @@ import eu.eudat.security.validators.TokenValidatorFactoryImpl;
|
||||||
public class LoginInfo {
|
public class LoginInfo {
|
||||||
private String ticket;
|
private String ticket;
|
||||||
private TokenValidatorFactoryImpl.LoginProvider provider;
|
private TokenValidatorFactoryImpl.LoginProvider provider;
|
||||||
|
private Object data;
|
||||||
|
|
||||||
public String getTicket() {
|
public String getTicket() {
|
||||||
return ticket;
|
return ticket;
|
||||||
}
|
}
|
||||||
|
@ -23,4 +25,12 @@ public class LoginInfo {
|
||||||
public void setProvider(Integer provider) {
|
public void setProvider(Integer provider) {
|
||||||
this.provider = TokenValidatorFactoryImpl.LoginProvider.fromInteger(provider);
|
this.provider = TokenValidatorFactoryImpl.LoginProvider.fromInteger(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(Object data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class CustomAuthenticationProvider {
|
||||||
public Principal authenticate(LoginInfo credentials) throws AuthenticationException, GeneralSecurityException {
|
public Principal authenticate(LoginInfo credentials) throws AuthenticationException, GeneralSecurityException {
|
||||||
String token = credentials.getTicket();
|
String token = credentials.getTicket();
|
||||||
try {
|
try {
|
||||||
Principal principal = this.tokenValidatorFactory.getProvider(credentials.getProvider()).validateToken(token);
|
Principal principal = this.tokenValidatorFactory.getProvider(credentials.getProvider()).validateToken(credentials);
|
||||||
return principal;
|
return principal;
|
||||||
} catch (NonValidTokenException e) {
|
} catch (NonValidTokenException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package eu.eudat.security.validators;
|
||||||
|
|
||||||
import eu.eudat.entities.UserInfo;
|
import eu.eudat.entities.UserInfo;
|
||||||
import eu.eudat.exceptions.NonValidTokenException;
|
import eu.eudat.exceptions.NonValidTokenException;
|
||||||
|
import eu.eudat.models.login.LoginInfo;
|
||||||
import eu.eudat.models.security.Principal;
|
import eu.eudat.models.security.Principal;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -9,6 +10,6 @@ import java.security.GeneralSecurityException;
|
||||||
|
|
||||||
public interface TokenValidator {
|
public interface TokenValidator {
|
||||||
|
|
||||||
Principal validateToken(String token) throws NonValidTokenException, IOException, GeneralSecurityException;
|
Principal validateToken(LoginInfo credentials) throws NonValidTokenException, IOException, GeneralSecurityException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.eudat.security.validators;
|
||||||
import eu.eudat.security.validators.facebook.FacebookTokenValidator;
|
import eu.eudat.security.validators.facebook.FacebookTokenValidator;
|
||||||
import eu.eudat.security.validators.google.GoogleTokenValidator;
|
import eu.eudat.security.validators.google.GoogleTokenValidator;
|
||||||
import eu.eudat.security.validators.linkedin.LinkedInTokenValidator;
|
import eu.eudat.security.validators.linkedin.LinkedInTokenValidator;
|
||||||
|
import eu.eudat.security.validators.twitter.TwitterTokenValidator;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -43,11 +44,13 @@ public class TokenValidatorFactoryImpl implements TokenValidatorFactory{
|
||||||
private GoogleTokenValidator googleTokenValidator;
|
private GoogleTokenValidator googleTokenValidator;
|
||||||
private FacebookTokenValidator facebookTokenValidator;
|
private FacebookTokenValidator facebookTokenValidator;
|
||||||
private LinkedInTokenValidator linkedInTokenValidator;
|
private LinkedInTokenValidator linkedInTokenValidator;
|
||||||
|
private TwitterTokenValidator twitterTokenValidator;
|
||||||
@Autowired
|
@Autowired
|
||||||
public TokenValidatorFactoryImpl(GoogleTokenValidator googleTokenValidator, FacebookTokenValidator facebookTokenValidator,LinkedInTokenValidator linkedInTokenValidator) {
|
public TokenValidatorFactoryImpl(GoogleTokenValidator googleTokenValidator, FacebookTokenValidator facebookTokenValidator,LinkedInTokenValidator linkedInTokenValidator,TwitterTokenValidator twitterTokenValidator) {
|
||||||
this.googleTokenValidator = googleTokenValidator;
|
this.googleTokenValidator = googleTokenValidator;
|
||||||
this.facebookTokenValidator = facebookTokenValidator;
|
this.facebookTokenValidator = facebookTokenValidator;
|
||||||
this.linkedInTokenValidator = linkedInTokenValidator;
|
this.linkedInTokenValidator = linkedInTokenValidator;
|
||||||
|
this.twitterTokenValidator = twitterTokenValidator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TokenValidator getProvider(LoginProvider provider) {
|
public TokenValidator getProvider(LoginProvider provider) {
|
||||||
|
@ -58,6 +61,8 @@ public class TokenValidatorFactoryImpl implements TokenValidatorFactory{
|
||||||
return this.facebookTokenValidator;
|
return this.facebookTokenValidator;
|
||||||
case LINKEDIN:
|
case LINKEDIN:
|
||||||
return this.linkedInTokenValidator;
|
return this.linkedInTokenValidator;
|
||||||
|
case TWITTER:
|
||||||
|
return this.twitterTokenValidator;
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Login Provider Not Implemented");
|
throw new RuntimeException("Login Provider Not Implemented");
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,9 @@ import eu.eudat.entities.Credential;
|
||||||
import eu.eudat.entities.UserInfo;
|
import eu.eudat.entities.UserInfo;
|
||||||
import eu.eudat.entities.UserToken;
|
import eu.eudat.entities.UserToken;
|
||||||
import eu.eudat.exceptions.NonValidTokenException;
|
import eu.eudat.exceptions.NonValidTokenException;
|
||||||
|
import eu.eudat.exceptions.UnauthorisedException;
|
||||||
import eu.eudat.models.criteria.UserInfoCriteria;
|
import eu.eudat.models.criteria.UserInfoCriteria;
|
||||||
|
import eu.eudat.models.login.LoginInfo;
|
||||||
import eu.eudat.models.loginprovider.LoginProviderUser;
|
import eu.eudat.models.loginprovider.LoginProviderUser;
|
||||||
import eu.eudat.models.security.Principal;
|
import eu.eudat.models.security.Principal;
|
||||||
import eu.eudat.security.validators.TokenValidator;
|
import eu.eudat.security.validators.TokenValidator;
|
||||||
|
@ -50,14 +52,15 @@ public class FacebookTokenValidator implements TokenValidator {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Principal validateToken(String token) throws NonValidTokenException, IOException, GeneralSecurityException {
|
public Principal validateToken(LoginInfo credentials) throws NonValidTokenException, IOException, GeneralSecurityException {
|
||||||
User profile = getFacebookUser(token);
|
User profile = getFacebookUser(credentials.getTicket());
|
||||||
LoginProviderUser user = new LoginProviderUser();
|
LoginProviderUser user = new LoginProviderUser();
|
||||||
|
if(profile.getEmail() == null ) throw new UnauthorisedException("Cannot login user.Facebook account did not provide email");
|
||||||
user.setEmail(profile.getEmail());
|
user.setEmail(profile.getEmail());
|
||||||
user.setIsVerified(profile.isVerified());
|
user.setIsVerified(profile.isVerified());
|
||||||
user.setName(profile.getName());
|
user.setName(profile.getName());
|
||||||
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.FACEBOOK);
|
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.FACEBOOK);
|
||||||
user.setSecret(token);
|
user.setSecret(credentials.getTicket());
|
||||||
return this.authenticationService.Touch(user);
|
return this.authenticationService.Touch(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,12 +61,12 @@ public class GoogleTokenValidator implements TokenValidator {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public eu.eudat.models.security.Principal validateToken(String token) throws NonValidTokenException, IOException, GeneralSecurityException {
|
public eu.eudat.models.security.Principal validateToken(LoginInfo credentials) throws NonValidTokenException, IOException, GeneralSecurityException {
|
||||||
|
|
||||||
GoogleIdToken idToken = this.verifyUserAndGetUser(token);
|
GoogleIdToken idToken = this.verifyUserAndGetUser(credentials.getTicket());
|
||||||
Payload payload = idToken.getPayload();
|
Payload payload = idToken.getPayload();
|
||||||
LoginProviderUser user = new LoginProviderUser();
|
LoginProviderUser user = new LoginProviderUser();
|
||||||
user.setSecret(token);
|
user.setSecret(credentials.getTicket());
|
||||||
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.GOOGLE);
|
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.GOOGLE);
|
||||||
user.setName((String)payload.get("name"));
|
user.setName((String)payload.get("name"));
|
||||||
user.setEmail(payload.getEmail());
|
user.setEmail(payload.getEmail());
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package eu.eudat.security.validators.linkedin;
|
package eu.eudat.security.validators.linkedin;
|
||||||
|
|
||||||
import eu.eudat.exceptions.NonValidTokenException;
|
import eu.eudat.exceptions.NonValidTokenException;
|
||||||
|
import eu.eudat.exceptions.UnauthorisedException;
|
||||||
|
import eu.eudat.models.login.LoginInfo;
|
||||||
import eu.eudat.models.loginprovider.LoginProviderUser;
|
import eu.eudat.models.loginprovider.LoginProviderUser;
|
||||||
import eu.eudat.models.security.Principal;
|
import eu.eudat.models.security.Principal;
|
||||||
import eu.eudat.security.validators.TokenValidator;
|
import eu.eudat.security.validators.TokenValidator;
|
||||||
|
@ -31,21 +33,24 @@ public class LinkedInTokenValidator implements TokenValidator {
|
||||||
private LinkedInServiceProvider linkedInServiceProvider;
|
private LinkedInServiceProvider linkedInServiceProvider;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public LinkedInTokenValidator(Environment environment,ApiContext apiContext,AuthenticationService authenticationService) {
|
public LinkedInTokenValidator(Environment environment, ApiContext apiContext, AuthenticationService authenticationService) {
|
||||||
this.environment = environment;
|
this.environment = environment;
|
||||||
this.apiContext= apiContext;
|
this.apiContext = apiContext;
|
||||||
this.authenticationService = authenticationService;
|
this.authenticationService = authenticationService;
|
||||||
this.linkedInServiceProvider = new LinkedInServiceProvider(this.environment.getProperty("linkedin.login.clientId"), this.environment.getProperty("linkedin.login.clientSecret"));
|
this.linkedInServiceProvider = new LinkedInServiceProvider(this.environment.getProperty("linkedin.login.clientId"), this.environment.getProperty("linkedin.login.clientSecret"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Principal validateToken(String token) throws NonValidTokenException, IOException, GeneralSecurityException {
|
public Principal validateToken(LoginInfo credentials) throws NonValidTokenException, IOException, GeneralSecurityException {
|
||||||
AccessGrant accessGrant =this.linkedInServiceProvider.getOAuthOperations().exchangeForAccess(token,"http://localhost:4200/login/linkedin",null);
|
AccessGrant accessGrant = this.linkedInServiceProvider.getOAuthOperations().exchangeForAccess(credentials.getTicket(), this.environment.getProperty("linkedin.login.redirect_uri"), null);
|
||||||
LinkedIn linkedInService = this.linkedInServiceProvider.getApi(accessGrant.getAccessToken());
|
LinkedIn linkedInService = this.linkedInServiceProvider.getApi(accessGrant.getAccessToken());
|
||||||
LinkedInProfile linkedInProfile = linkedInService.profileOperations().getUserProfile();
|
LinkedInProfile linkedInProfile = linkedInService.profileOperations().getUserProfile();
|
||||||
LoginProviderUser user = new LoginProviderUser();
|
LoginProviderUser user = new LoginProviderUser();
|
||||||
|
|
||||||
|
if (user.getEmail() == null) throw new UnauthorisedException("Cannot login user.LinkedIn account did not provide email");
|
||||||
user.setEmail(linkedInProfile.getEmailAddress());
|
user.setEmail(linkedInProfile.getEmailAddress());
|
||||||
user.setIsVerified(true); //TODO
|
user.setIsVerified(true); //TODO
|
||||||
user.setName(linkedInProfile.getFirstName()+" "+linkedInProfile.getLastName());
|
user.setName(linkedInProfile.getFirstName() + " " + linkedInProfile.getLastName());
|
||||||
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.LINKEDIN);
|
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.LINKEDIN);
|
||||||
user.setSecret(accessGrant.getAccessToken());
|
user.setSecret(accessGrant.getAccessToken());
|
||||||
return this.authenticationService.Touch(user);
|
return this.authenticationService.Touch(user);
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
package eu.eudat.security.validators.twitter;
|
||||||
|
|
||||||
|
import eu.eudat.exceptions.NonValidTokenException;
|
||||||
|
import eu.eudat.exceptions.UnauthorisedException;
|
||||||
|
import eu.eudat.models.login.LoginInfo;
|
||||||
|
import eu.eudat.models.loginprovider.LoginProviderUser;
|
||||||
|
import eu.eudat.models.security.Principal;
|
||||||
|
import eu.eudat.security.validators.TokenValidator;
|
||||||
|
import eu.eudat.security.validators.TokenValidatorFactoryImpl;
|
||||||
|
import eu.eudat.services.ApiContext;
|
||||||
|
import eu.eudat.services.AuthenticationService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.social.linkedin.api.LinkedIn;
|
||||||
|
import org.springframework.social.linkedin.api.LinkedInProfile;
|
||||||
|
import org.springframework.social.linkedin.connect.LinkedInServiceProvider;
|
||||||
|
import org.springframework.social.oauth1.AuthorizedRequestToken;
|
||||||
|
import org.springframework.social.oauth1.OAuthToken;
|
||||||
|
import org.springframework.social.oauth2.AccessGrant;
|
||||||
|
import org.springframework.social.twitter.api.TwitterProfile;
|
||||||
|
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||||
|
import org.springframework.social.twitter.connect.TwitterServiceProvider;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ikalyvas on 1/11/2018.
|
||||||
|
*/
|
||||||
|
@Component("twitterTokenValidator")
|
||||||
|
public class TwitterTokenValidator implements TokenValidator {
|
||||||
|
|
||||||
|
private Environment environment;
|
||||||
|
private ApiContext apiContext;
|
||||||
|
private AuthenticationService authenticationService;
|
||||||
|
private TwitterServiceProvider twitterServiceProvider;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public TwitterTokenValidator(Environment environment, ApiContext apiContext, AuthenticationService authenticationService) {
|
||||||
|
this.environment = environment;
|
||||||
|
this.apiContext = apiContext;
|
||||||
|
this.authenticationService = authenticationService;
|
||||||
|
this.twitterServiceProvider = new TwitterServiceProvider(this.environment.getProperty("twitter.login.clientId"), this.environment.getProperty("twitter.login.clientSecret"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Principal validateToken(LoginInfo credentials) throws NonValidTokenException, IOException, GeneralSecurityException {
|
||||||
|
String verifier = (String) credentials.getData();
|
||||||
|
OAuthToken oAuthToken = new OAuthToken(credentials.getTicket(),verifier);
|
||||||
|
AuthorizedRequestToken authorizedRequestToken = new AuthorizedRequestToken(oAuthToken,verifier);
|
||||||
|
OAuthToken finalOauthToken = this.twitterServiceProvider.getOAuthOperations().exchangeForAccessToken(authorizedRequestToken,null);
|
||||||
|
TwitterTemplate twitterTemplate = new TwitterTemplate(this.environment.getProperty("twitter.login.clientId"), this.environment.getProperty("twitter.login.clientSecret"),finalOauthToken.getValue(),finalOauthToken.getSecret());
|
||||||
|
TwitterProfile profile = this.twitterServiceProvider.getApi(finalOauthToken.getValue(),finalOauthToken.getSecret()).userOperations().getUserProfile();
|
||||||
|
LoginProviderUser user = new LoginProviderUser();
|
||||||
|
|
||||||
|
Map values = twitterTemplate.getRestTemplate().getForObject("https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true", Map.class);
|
||||||
|
if(values.get("email") == null) throw new UnauthorisedException("Cannot login user.Twitter account did not provide email");
|
||||||
|
user.setEmail((String) values.get("email"));
|
||||||
|
user.setIsVerified(true); //TODO
|
||||||
|
user.setName(profile.getName());
|
||||||
|
user.setProvider(TokenValidatorFactoryImpl.LoginProvider.TWITTER);
|
||||||
|
user.setSecret(finalOauthToken.getValue());
|
||||||
|
return this.authenticationService.Touch(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OAuthToken getRequestToken() {
|
||||||
|
return this.twitterServiceProvider.getOAuthOperations().fetchRequestToken(this.environment.getProperty("twitter.login.redirect_uri"), null);
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,9 +35,15 @@ facebook.login.clientSecret = 522a847f05c873d0222c85109e24f55a
|
||||||
facebook.login.namespace = eudat
|
facebook.login.namespace = eudat
|
||||||
########################GOOGLE LOGIN Properties#############################
|
########################GOOGLE LOGIN Properties#############################
|
||||||
google.login.clientId = 524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com
|
google.login.clientId = 524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com
|
||||||
########################LINKEDIN LOGIN Properties#############################
|
########################LINKEDIN LOGIN Properties#############################HiR4hQH9HNubKC5iKQy0l4mAZ
|
||||||
linkedin.login.clientId = 86bl8vfk77clh9
|
linkedin.login.clientId = 86bl8vfk77clh9
|
||||||
linkedin.login.clientSecret = 2OCO9e3wKylW05Tt
|
linkedin.login.clientSecret = 2OCO9e3wKylW05Tt
|
||||||
|
linkedin.login.redirect_uri = 2OCO9e3wKylW05Tt
|
||||||
|
|
||||||
|
########################LINKEDIN LOGIN Properties#############################
|
||||||
|
twitter.login.clientId = HiR4hQH9HNubKC5iKQy0l4mAZ
|
||||||
|
twitter.login.clientSecret = 9KZHgkqUO2QFnELSL14jeUvfUacWX23rqD8OW8X0xoRDXOSfKH
|
||||||
|
twitter.login.redirect_uri = http://localhost:4200/login/twitter
|
||||||
########################Persistence/Hibernate/Batch##############################
|
########################Persistence/Hibernate/Batch##############################
|
||||||
#persistence.hibernate.jdbc.batch_size = 30
|
#persistence.hibernate.jdbc.batch_size = 30
|
||||||
#persistence.hibernate.order_inserts = true
|
#persistence.hibernate.order_inserts = true
|
||||||
|
|
|
@ -101,7 +101,8 @@ import { AutocompleteComponent } from './shared/components/autocomplete/autocomp
|
||||||
LoginOptions.facebookOauth,
|
LoginOptions.facebookOauth,
|
||||||
LoginOptions.googleOauth,
|
LoginOptions.googleOauth,
|
||||||
LoginOptions.nativeLogin,
|
LoginOptions.nativeLogin,
|
||||||
LoginOptions.linkedInOauth
|
LoginOptions.linkedInOauth,
|
||||||
|
LoginOptions.twitterOauth
|
||||||
],
|
],
|
||||||
facebookConfiguration: { clientId: "110586756143149" },
|
facebookConfiguration: { clientId: "110586756143149" },
|
||||||
googleConfiguration: { clientId: '524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com' },
|
googleConfiguration: { clientId: '524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com' },
|
||||||
|
@ -111,7 +112,8 @@ import { AutocompleteComponent } from './shared/components/autocomplete/autocomp
|
||||||
redirectUri: HostConfiguration.App + "login/linkedin",
|
redirectUri: HostConfiguration.App + "login/linkedin",
|
||||||
accessTokenUri: "https://www.linkedin.com/oauth/v2/accessToken",
|
accessTokenUri: "https://www.linkedin.com/oauth/v2/accessToken",
|
||||||
clientSecret: "2OCO9e3wKylW05Tt"
|
clientSecret: "2OCO9e3wKylW05Tt"
|
||||||
}
|
},
|
||||||
|
twitterConfiguration: { clientId: "HiR4hQH9HNubKC5iKQy0l4mAZ", oauthUrl: "https://api.twitter.com/oauth/authenticate" }
|
||||||
}),
|
}),
|
||||||
HttpModule,
|
HttpModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
|
|
|
@ -8,4 +8,5 @@ export enum LoginProviders {
|
||||||
export class LoginInfo {
|
export class LoginInfo {
|
||||||
public ticket: string;
|
public ticket: string;
|
||||||
public provider: LoginProviders;
|
public provider: LoginProviders;
|
||||||
|
public data?: any;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { TwitterLoginComponent } from './login/twitter-login/twitter-login.component';
|
||||||
import { SnackBarNotificationComponent } from '../shared/components/notificaiton/snack-bar-notification.component';
|
import { SnackBarNotificationComponent } from '../shared/components/notificaiton/snack-bar-notification.component';
|
||||||
import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component';
|
import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component';
|
||||||
import { LoginRoutes } from './login.routes';
|
import { LoginRoutes } from './login.routes';
|
||||||
|
@ -17,11 +18,13 @@ import { CommonModule } from '@angular/common';
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
LoginComponent,
|
LoginComponent,
|
||||||
LinkedInLoginComponent
|
LinkedInLoginComponent,
|
||||||
|
TwitterLoginComponent
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
LoginComponent,
|
LoginComponent,
|
||||||
LinkedInLoginComponent
|
LinkedInLoginComponent,
|
||||||
|
TwitterLoginComponent
|
||||||
],
|
],
|
||||||
providers: [LoginService]
|
providers: [LoginService]
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
|
import { TwitterLoginComponent } from './login/twitter-login/twitter-login.component';
|
||||||
import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component';
|
import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component';
|
||||||
import { LoginComponent } from './login/login.component';
|
import { LoginComponent } from './login/login.component';
|
||||||
import { RouterModule, Routes } from '@angular/router';
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: '', component: LoginComponent },
|
{ path: 'login', component: LoginComponent },
|
||||||
{ path: 'linkedin', component: LinkedInLoginComponent }
|
{ path: 'login/linkedin', component: LinkedInLoginComponent },
|
||||||
|
{ path: 'login/twitter', component: TwitterLoginComponent }
|
||||||
];
|
];
|
||||||
|
|
||||||
export const LoginRoutes = RouterModule.forChild(routes);
|
export const LoginRoutes = RouterModule.forChild(routes);
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<button *ngIf="hasFacebookOauth()" mat-icon-button (click)="facebookLogin()">
|
<button *ngIf="hasFacebookOauth()" mat-icon-button (click)="facebookLogin()">
|
||||||
<i class="fa fa-facebook-square"></i>
|
<i class="fa fa-facebook-square"></i>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="hasTwitterOauth()" mat-icon-button>
|
<button *ngIf="hasTwitterOauth()" mat-icon-button (click)="twitterLogin()">
|
||||||
<i class="fa fa-twitter"></i>
|
<i class="fa fa-twitter"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -36,6 +36,10 @@ export class LoginComponent implements OnInit {
|
||||||
this.loginService.linkedInInitialiseLogin();
|
this.loginService.linkedInInitialiseLogin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public twitterLogin() {
|
||||||
|
this.loginService.twitterInitialiseLogin();
|
||||||
|
}
|
||||||
|
|
||||||
public hasFacebookOauth(): boolean {
|
public hasFacebookOauth(): boolean {
|
||||||
return this.loginService.hasProvider(LoginOptions.facebookOauth);
|
return this.loginService.hasProvider(LoginOptions.facebookOauth);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
|
import { LoginService } from '../../utilties/login-service';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router'
|
||||||
import { Component } from '@angular/core'
|
import { Component } from '@angular/core'
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'twitter-login',
|
selector: 'twitter-login',
|
||||||
templateUrl: './twitter-login.component.html',
|
templateUrl: './twitter-login.component.html',
|
||||||
styleUrls: ['./login.component.scss']
|
|
||||||
})
|
})
|
||||||
export class TwitterLoginComponent {
|
export class TwitterLoginComponent {
|
||||||
|
constructor(
|
||||||
|
private router: Router,
|
||||||
|
private route: ActivatedRoute,
|
||||||
|
private loginService: LoginService
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.route.queryParams.subscribe((data: any) => {
|
||||||
|
if (!data["oauth_token"] && !data["oauth_verifier"]) this.loginService.twitterAuthorize()
|
||||||
|
else this.loginService.twitterLogin(data["oauth_token"],data["oauth_verifier"])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@ export class GoogleLoginConfiguration extends LoginProviderConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TwitterLoginConfiguration extends LoginProviderConfiguration {
|
export class TwitterLoginConfiguration extends LoginProviderConfiguration {
|
||||||
|
public oauthUrl: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export class LinkedInConfiguration extends LoginProviderConfiguration {
|
export class LinkedInConfiguration extends LoginProviderConfiguration {
|
||||||
|
|
|
@ -28,8 +28,8 @@ export class LoginService {
|
||||||
public snackBar: MatSnackBar,
|
public snackBar: MatSnackBar,
|
||||||
public language: TranslateService,
|
public language: TranslateService,
|
||||||
private zone: NgZone,
|
private zone: NgZone,
|
||||||
private httpClient: HttpClient
|
private httpClient: HttpClient,
|
||||||
@Optional() private config: LoginServiceConfiguration,
|
@Optional() private config: LoginServiceConfiguration
|
||||||
) {
|
) {
|
||||||
if (config) {
|
if (config) {
|
||||||
this.providers = config.loginProviders;
|
this.providers = config.loginProviders;
|
||||||
|
@ -145,6 +145,29 @@ export class LoginService {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TWITTER SIGN IN
|
||||||
|
*/
|
||||||
|
public twitterInitialiseLogin() {
|
||||||
|
this.router.navigate(["/login/twitter"])
|
||||||
|
}
|
||||||
|
|
||||||
|
public twitterAuthorize() {
|
||||||
|
let headers = new HttpHeaders();
|
||||||
|
headers = headers.set('Content-Type', 'application/json');
|
||||||
|
headers = headers.set('Accept', 'application/json');
|
||||||
|
this.httpClient.get(HostConfiguration.Server + 'auth/twitterRequestToken', { headers: headers }).subscribe((data: any) => {
|
||||||
|
window.location.href = this.config.twitterConfiguration.oauthUrl + "?oauth_token=" + data.payload.value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public twitterLogin(token: string, verifier: string) {
|
||||||
|
this.authService.login({ ticket: token, provider: LoginProviders.Twitter, data: verifier }).subscribe(
|
||||||
|
res => this.onLogInSuccess(res),
|
||||||
|
error => this.onLogInError(error)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LOGIN HANDLERS
|
* LOGIN HANDLERS
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue