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
 
21499 kshitij.so 4
import java.io.IOException;
5
import java.net.URISyntaxException;
21285 kshitij.so 6
import java.time.LocalDateTime;
7
import java.util.List;
8
import java.util.Random;
9
 
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
 
13
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
21499 kshitij.so 14
import com.spice.profitmandi.common.util.Utils;
21285 kshitij.so 15
import com.spice.profitmandi.dao.entity.Otp;
16
import com.spice.profitmandi.dao.enumuration.OtpType;
17
import com.spice.profitmandi.dao.repository.OtpRepository;
18
import com.spice.profitmandi.web.res.OTPResponse;
19
 
20
@Component
21
public class OtpProcessor{
22
 
23
	private static final int len = 5;
24
	private static final String numbers ="0123456789";
21499 kshitij.so 25
	private static final String text = "Dear Customer, {0} is the OTP that you have requested to login into Profitmandi. Don't share your OTP with anyone.";
21285 kshitij.so 26
 
27
	@Autowired
28
	OtpRepository otpRepository;
29
 
30
	private String getOtp(){
31
		Random rndm_method = new Random();
32
		char[] otp = new char[len];
33
 
34
		for (int i = 0; i < len; i++)
35
		{
36
			otp[i] = numbers.charAt(rndm_method.nextInt(numbers.length()));
37
		}
38
		return String.valueOf(otp);
39
	}
40
 
41
	public OTPResponse generateOtp(String email, String phone, OtpType otpType) throws Exception, ProfitMandiBusinessException{
42
		OTPResponse otpResponse = new OTPResponse();
43
		List<Otp> otps = otpRepository.getGeneratedOtpForCredentials(email, otpType);
44
		String otp = null;
45
		if (otps.size() >=5){
46
			otpResponse.setReference_id(0);
47
			otpResponse.setResult(false);
48
			otpResponse.setMessage("Maximum limit reached for the day");
49
			return otpResponse;
50
		}
51
		if (!otps.isEmpty()){
52
			if (otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(2))){
53
				otpResponse.setMessage("OTP generated less than 2 minutes ago");
54
				otpResponse.setReference_id(otps.get(0).getId());
55
				otpResponse.setResult(true);
21299 kshitij.so 56
				otpResponse.setOtp(otps.get(0).getOtp());
21285 kshitij.so 57
				return otpResponse;
58
			}
59
			else if(otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(10))){
60
				otp = otps.get(0).getOtp();
61
			}
62
			else{
63
				;
64
			}
65
		}
66
		if (otp == null || otp.isEmpty()){
67
			otp = getOtp();
68
		}
21499 kshitij.so 69
		sendOtp(otp, phone);
21285 kshitij.so 70
		Otp otp_d = otpRepository.generateOtp(email, phone, otpType, otp);
71
		otpResponse.setReference_id(otp_d.getId());
72
		otpResponse.setMessage("OTP generated successfully");
73
		otpResponse.setResult(true);
21299 kshitij.so 74
		otpResponse.setOtp(otp_d.getOtp());
21285 kshitij.so 75
		return otpResponse;
76
	}
77
 
21472 amit.gupta 78
	public OTPResponse validateOtp(String email, int reference_id, String otp_number) throws Exception, ProfitMandiBusinessException{
21285 kshitij.so 79
		OTPResponse otpResponse = new OTPResponse();
80
		Otp otp = otpRepository.getById(reference_id);
81
		otp.setTryCount(otp.getTryCount()+1);
82
		otpResponse.setReference_id(reference_id);
83
		if (!otp.getEmail().equalsIgnoreCase(email) || !otp.getOtp().equalsIgnoreCase(otp_number)){
84
			otpResponse.setMessage("Invalid otp");
85
			otpResponse.setResult(false);
86
			otpRepository.updateById(otp);
87
			return otpResponse;
88
		}
89
		if (otp.isExpired() || otp.isVerified() || otp.getExpiryTimestamp().isBefore(LocalDateTime.now())){
90
			otpResponse.setMessage("OTP expired");
91
			otpResponse.setResult(false);
92
			return otpResponse;
93
		}
94
		if (otp.getTryCount() >5){
95
			otpResponse.setMessage("Maximum try count reached");
96
			otpResponse.setResult(false);
97
			return otpResponse;
98
		}
99
		otp.setExpired(true);
100
		otp.setVerified(true);
101
		otpRepository.updateById(otp);
102
		otpResponse.setMessage("OTP validated successfully");
103
		otpResponse.setResult(true);
104
		return otpResponse;
105
	}
21499 kshitij.so 106
 
107
	private void sendOtp(String otp_text, String phone){
108
		String msg = java.text.MessageFormat.format(text, otp_text);
109
		try {
110
			Utils.sendSms(msg, phone);
111
		} catch (URISyntaxException e) {
112
			// TODO Auto-generated catch block
113
			e.printStackTrace();
114
		} catch (IOException e) {
115
			// TODO Auto-generated catch block
116
			e.printStackTrace();
117
		}
118
 
119
	}
21285 kshitij.so 120
 
121
}