Subversion Repositories SmartDukaan

Rev

Rev 21282 | Rev 21426 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21277 ashik.ali 1
package com.spice.profitmandi.web.processor;
2
 
3
import java.io.IOException;
4
import java.time.LocalDateTime;
5
import java.util.HashMap;
21278 ashik.ali 6
import java.util.Iterator;
21277 ashik.ali 7
import java.util.Map;
21282 ashik.ali 8
import java.util.Set;
21277 ashik.ali 9
 
21278 ashik.ali 10
import org.springframework.beans.factory.annotation.Autowired;
21282 ashik.ali 11
import org.springframework.stereotype.Component;
21278 ashik.ali 12
 
21277 ashik.ali 13
import com.fasterxml.jackson.core.JsonProcessingException;
14
import com.fasterxml.jackson.databind.JsonNode;
15
import com.fasterxml.jackson.databind.ObjectMapper;
16
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
17
import com.spice.profitmandi.common.model.ProfitMandiConstants;
18
import com.spice.profitmandi.common.util.JWTUtil;
21282 ashik.ali 19
import com.spice.profitmandi.dao.entity.Role;
21277 ashik.ali 20
import com.spice.profitmandi.dao.entity.SocialUser;
21
import com.spice.profitmandi.dao.entity.User;
21278 ashik.ali 22
import com.spice.profitmandi.dao.enumuration.Gender;
21277 ashik.ali 23
import com.spice.profitmandi.dao.enumuration.SocialType;
24
import com.spice.profitmandi.dao.repository.SocialUserRepository;
25
import com.spice.profitmandi.dao.repository.UserRepository;
26
import com.spice.profitmandi.web.client.RestClient;
27
import com.spice.profitmandi.web.enumuration.SchemeType;
28
 
21282 ashik.ali 29
@Component
21277 ashik.ali 30
public class GoogleLoginProcessor {
21282 ashik.ali 31
 
21278 ashik.ali 32
	private static final String HOST_NAME = "content.googleapis.com";
33
	private static final String URI = "/plus/v1/people/me";
21277 ashik.ali 34
	private static final int PORT_NUMBER = 443;
35
	private final ObjectMapper objectMapper = new ObjectMapper();
36
 
21278 ashik.ali 37
	@Autowired
38
	SocialUserRepository socialUserRepository;
21277 ashik.ali 39
 
21278 ashik.ali 40
	@Autowired
41
	UserRepository userRepository;
42
 
21277 ashik.ali 43
	public Map<String, Object> process(Map<String, Object> map) throws ProfitMandiBusinessException{
44
		RestClient restClient = new RestClient(SchemeType.HTTPS, HOST_NAME, PORT_NUMBER);
45
		Map<String, String> params = new HashMap<>();
21278 ashik.ali 46
		params.put(ProfitMandiConstants.ACCESS_TOKEN, map.get(ProfitMandiConstants.TOKEN).toString());
21277 ashik.ali 47
		String responseString = restClient.get(URI, params);
48
		try {
21278 ashik.ali 49
			JsonNode rootNode = objectMapper.readTree(responseString);
21277 ashik.ali 50
			SocialUser socialUser = new SocialUser();
21278 ashik.ali 51
			if(rootNode.has("emails")){
52
				JsonNode emails = rootNode.get("emails");
53
				if(emails.isArray()){
21286 ashik.ali 54
					Iterator<JsonNode> emailsIterator = emails.elements();
21278 ashik.ali 55
					if(emailsIterator.hasNext()){
56
						JsonNode email = emailsIterator.next();
57
						if(email.has("value")){
58
							socialUser.setEmailId(email.get("value").asText());
59
						}
60
					}
61
				}
21286 ashik.ali 62
				//socialUser.setEmailId(rootNode.get("email").asText());
21277 ashik.ali 63
			}
21278 ashik.ali 64
			if(rootNode.has("displayName")){
65
				socialUser.setName(rootNode.get("displayName").asText());
21277 ashik.ali 66
			}
21278 ashik.ali 67
			if(rootNode.has("gender")){
68
				String genderName = rootNode.get("gender").asText();
69
				switch(genderName){
70
					case "male":{
71
						socialUser.setGender(Gender.MALE);
72
						break;
73
					}case "female":{
74
						socialUser.setGender(Gender.FEMALE);
75
						break;
76
					}
77
				}
78
			}
21277 ashik.ali 79
			socialUser.setCreateTimestamp(LocalDateTime.now());
80
			socialUser.setType(SocialType.GOOGLE);
81
			socialUser.setUpdateTimestamp(LocalDateTime.now());
82
			socialUserRepository.persist(socialUser);
83
			Map<String, Object> responseMap = new HashMap<>(2);
84
			try{
85
				User user = userRepository.selectByEmailId(socialUser.getEmailId());
21282 ashik.ali 86
				Set<Role> roles = user.getRoles();
87
				String[] roleTypes = new String[roles.size()];
88
				int index = 0;
89
				for(Role role : roles){
90
					roleTypes[index++] = role.getType().toString();
91
				}
92
				responseMap.put(ProfitMandiConstants.TOKEN, JWTUtil.create(user.getId(), roleTypes));
21277 ashik.ali 93
				responseMap.put(ProfitMandiConstants.REGISTERED, true);
94
			}catch (ProfitMandiBusinessException pmbe) {
21282 ashik.ali 95
				responseMap.put(ProfitMandiConstants.TOKEN, JWTUtil.create());
21277 ashik.ali 96
				responseMap.put(ProfitMandiConstants.REGISTERED, false);
97
			}
98
			return responseMap;
99
		}catch (JsonProcessingException jsonProcessingException) {
100
			//LOGGER.error("Json parse exception of "+json,jsonProcessingException);
101
			throw new ProfitMandiBusinessException("", "", "VE_1001");
102
		}catch (IOException ioException) {
103
			//LOGGER.error("IO Exception occurred while parsing json String");
104
			throw new ProfitMandiBusinessException("", "", "VE_1001");
105
		}
106
	}
107
}