Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
21285 kshitij.so 1
package com.spice.profitmandi.web.processor;
2
 
3
import java.time.LocalDateTime;
26706 amit.gupta 4
import java.util.ArrayList;
26656 amit.gupta 5
import java.util.HashMap;
21285 kshitij.so 6
import java.util.List;
26656 amit.gupta 7
import java.util.Map;
21285 kshitij.so 8
import java.util.Random;
9
 
10
import org.springframework.beans.factory.annotation.Autowired;
26649 amit.gupta 11
import org.springframework.beans.factory.annotation.Value;
26657 amit.gupta 12
import org.springframework.mail.javamail.JavaMailSender;
21285 kshitij.so 13
import org.springframework.stereotype.Component;
14
 
26709 amit.gupta 15
import com.fasterxml.jackson.annotation.JsonProperty;
21285 kshitij.so 16
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21499 kshitij.so 17
import com.spice.profitmandi.common.util.Utils;
26656 amit.gupta 18
import com.spice.profitmandi.common.web.client.RestClient;
21735 ashik.ali 19
import com.spice.profitmandi.dao.entity.dtr.Otp;
20
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
21
import com.spice.profitmandi.dao.repository.dtr.OtpRepository;
21285 kshitij.so 22
import com.spice.profitmandi.web.res.OTPResponse;
23
 
24
@Component
26087 tejbeer 25
public class OtpProcessor {
21285 kshitij.so 26
 
26710 amit.gupta 27
	private static final String SMS_GATEWAY = "http://sms.smartdukaan.com/index.php/sms/templatesms";
21285 kshitij.so 28
	private static final int len = 5;
26087 tejbeer 29
	private static final String numbers = "0123456789";
23309 amit.gupta 30
	private static final String text = "Dear Customer, {0} is the OTP that you have requested to login into SmartDukaan. Don't share your OTP with anyone.";
21285 kshitij.so 31
 
32
	@Autowired
33
	OtpRepository otpRepository;
26649 amit.gupta 34
 
26657 amit.gupta 35
	@Autowired JavaMailSender mailSender;
36
 
26649 amit.gupta 37
	@Value("${prod}")
38
	private boolean prodEnv;
26656 amit.gupta 39
 
40
	@Autowired RestClient restClient;
21285 kshitij.so 41
 
26649 amit.gupta 42
 
26087 tejbeer 43
	private String getOtp() {
21285 kshitij.so 44
		Random rndm_method = new Random();
45
		char[] otp = new char[len];
46
 
26087 tejbeer 47
		for (int i = 0; i < len; i++) {
21285 kshitij.so 48
			otp[i] = numbers.charAt(rndm_method.nextInt(numbers.length()));
49
		}
50
		return String.valueOf(otp);
51
	}
52
 
26087 tejbeer 53
	public OTPResponse generateOtp(String email, String phone, OtpType otpType)
54
			throws Exception, ProfitMandiBusinessException {
21285 kshitij.so 55
		OTPResponse otpResponse = new OTPResponse();
23273 ashik.ali 56
		List<Otp> otps = otpRepository.selectAllByEmailWithTime(email);
21285 kshitij.so 57
		String otp = null;
26087 tejbeer 58
		if (otps.size() >= 5) {
21285 kshitij.so 59
			otpResponse.setReference_id(0);
60
			otpResponse.setResult(false);
61
			otpResponse.setMessage("Maximum limit reached for the day");
62
			return otpResponse;
63
		}
26087 tejbeer 64
		if (!otps.isEmpty()) {
65
			if (otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(2))) {
21285 kshitij.so 66
				otpResponse.setMessage("OTP generated less than 2 minutes ago");
67
				otpResponse.setReference_id(otps.get(0).getId());
68
				otpResponse.setResult(true);
21299 kshitij.so 69
				otpResponse.setOtp(otps.get(0).getOtp());
21285 kshitij.so 70
				return otpResponse;
26087 tejbeer 71
			} else if (otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(10))) {
21285 kshitij.so 72
				otp = otps.get(0).getOtp();
26087 tejbeer 73
			} else {
21285 kshitij.so 74
				;
75
			}
76
		}
26087 tejbeer 77
		if (otp == null || otp.isEmpty()) {
21285 kshitij.so 78
			otp = getOtp();
79
		}
26087 tejbeer 80
 
23273 ashik.ali 81
		Otp otp_bean = new Otp();
82
		otp_bean.setEmail(email);
83
		otp_bean.setMobile(phone);
84
		otp_bean.setOtp(otp);
85
		otp_bean.setOtpType(otpType);
86
		otp_bean.setCreatedOn(LocalDateTime.now());
87
		otp_bean.setExpiryTimestamp(LocalDateTime.now().plusMinutes(10));
88
		otpRepository.persist(otp_bean);
26657 amit.gupta 89
		if(prodEnv) {
90
			sendOtp(otp_bean);
91
		}
26087 tejbeer 92
 
23273 ashik.ali 93
		otpResponse.setReference_id(otp_bean.getId());
21285 kshitij.so 94
		otpResponse.setMessage("OTP generated successfully");
95
		otpResponse.setResult(true);
23273 ashik.ali 96
		otpResponse.setOtp(otp_bean.getOtp());
21285 kshitij.so 97
		return otpResponse;
98
	}
99
 
26087 tejbeer 100
	public OTPResponse validateOtp(String email, int reference_id, String otp_number)
101
			throws Exception, ProfitMandiBusinessException {
21285 kshitij.so 102
		OTPResponse otpResponse = new OTPResponse();
23420 ashik.ali 103
		Otp otp = otpRepository.selectById(reference_id);
26087 tejbeer 104
		otp.setTryCount(otp.getTryCount() + 1);
21285 kshitij.so 105
		otpResponse.setReference_id(reference_id);
26087 tejbeer 106
		if (!otp.getEmail().equalsIgnoreCase(email) || !otp.getOtp().equalsIgnoreCase(otp_number)) {
21285 kshitij.so 107
			otpResponse.setMessage("Invalid otp");
108
			otpResponse.setResult(false);
23273 ashik.ali 109
			otpRepository.persist(otp);
21285 kshitij.so 110
			return otpResponse;
111
		}
26087 tejbeer 112
		if (otp.isExpired() || otp.isVerified() || otp.getExpiryTimestamp().isBefore(LocalDateTime.now())) {
21285 kshitij.so 113
			otpResponse.setMessage("OTP expired");
114
			otpResponse.setResult(false);
115
			return otpResponse;
116
		}
26087 tejbeer 117
		if (otp.getTryCount() > 5) {
21285 kshitij.so 118
			otpResponse.setMessage("Maximum try count reached");
119
			otpResponse.setResult(false);
120
			return otpResponse;
121
		}
122
		otp.setExpired(true);
123
		otp.setVerified(true);
23273 ashik.ali 124
		otpRepository.persist(otp);
21285 kshitij.so 125
		otpResponse.setMessage("OTP validated successfully");
126
		otpResponse.setResult(true);
127
		return otpResponse;
128
	}
26087 tejbeer 129
 
26657 amit.gupta 130
	private void sendOtp(Otp otp) throws Exception {
131
		String msg = java.text.MessageFormat.format(text, otp.getOtp());
26706 amit.gupta 132
		String otpString = otp.getOtp();
26657 amit.gupta 133
		Utils.sendMailWithAttachments(mailSender, otp.getEmail(), null, "One Time Password - Smartdukaan", msg, null);
26706 amit.gupta 134
		try {
135
			this.sendSms(otpString, otp.getMobile());
26087 tejbeer 136
		} catch (Exception e) {
21499 kshitij.so 137
			e.printStackTrace();
26706 amit.gupta 138
		}
26657 amit.gupta 139
 
26087 tejbeer 140
 
21499 kshitij.so 141
	}
26656 amit.gupta 142
 
143
	public void sendSms(String text, String mobileNumber) throws Exception {
26706 amit.gupta 144
		Map<String, String> headersMap = new HashMap<>();
145
		headersMap.put("Content-Type", "application/json");
146
		headersMap.put("apikey", "b866f7-c6c483-682ff5-054420-ad9e2c");
147
		SmsMessage smsMessage = new SmsMessage();
148
 
149
		Message message = new Message();
150
		message.setNumber(mobileNumber);
151
 
152
		Map<String, String> map = new HashMap<>();
26709 amit.gupta 153
		map.put("F1", text);
26706 amit.gupta 154
		message.setText(map);
155
 
156
		List<Message> messages = new ArrayList<>();
157
		messages.add(message);
158
 
159
		smsMessage.setMessage(messages);
160
 
161
 
162
 
163
		restClient.postJson(SMS_GATEWAY, smsMessage, headersMap);
26656 amit.gupta 164
	}
26706 amit.gupta 165
 
166
	class SmsMessage {
26707 amit.gupta 167
		private String sender = "SMTDKN";
26709 amit.gupta 168
		@JsonProperty(value="templateid")
26706 amit.gupta 169
		private String templateId = "54";
170
		private List<Message> message;
171
		@Override
172
		public String toString() {
173
			return "SmsMessage [sender=" + sender + ", templateId=" + templateId + ", message=" + message + "]";
174
		}
175
		public String getSender() {
176
			return sender;
177
		}
178
		public void setSender(String sender) {
179
			this.sender = sender;
180
		}
181
		public String getTemplateId() {
182
			return templateId;
183
		}
184
		public void setTemplateId(String templateId) {
185
			this.templateId = templateId;
186
		}
187
		public List<Message> getMessage() {
188
			return message;
189
		}
190
		public void setMessage(List<Message> message) {
191
			this.message = message;
192
		}
193
 
194
 
195
 
196
	}
197
 
198
	class Message {
199
		private String number;
200
		public String getNumber() {
201
			return number;
202
		}
203
		public void setNumber(String number) {
204
			this.number = number;
205
		}
206
		private Map<String, String> text;
26709 amit.gupta 207
		@JsonProperty(value="messagetype")
26706 amit.gupta 208
		private String messageType = "TXT";
209
		@Override
210
		public String toString() {
211
			return "Message [number=" + number + ", text=" + text + ", messageType=" + messageType + "]";
212
		}
213
		public Map<String, String> getText() {
214
			return text;
215
		}
216
		public void setText(Map<String, String> text) {
217
			this.text = text;
218
		}
219
		public String getMessageType() {
220
			return messageType;
221
		}
222
		public void setMessageType(String messageType) {
223
			this.messageType = messageType;
224
		}
225
 
226
 
227
	}
21285 kshitij.so 228
 
229
}