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
 
4
import java.time.LocalDateTime;
5
import java.util.List;
6
import java.util.Random;
7
 
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.stereotype.Component;
10
import org.springframework.transaction.annotation.Transactional;
11
 
12
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
13
import com.spice.profitmandi.dao.entity.Otp;
14
import com.spice.profitmandi.dao.enumuration.OtpType;
15
import com.spice.profitmandi.dao.repository.OtpRepository;
16
import com.spice.profitmandi.web.res.OTPResponse;
17
 
18
@Component
19
public class OtpProcessor{
20
 
21
	private static final int len = 5;
22
	private static final String numbers ="0123456789";
23
 
24
	@Autowired
25
	OtpRepository otpRepository;
26
 
27
	private String getOtp(){
28
		Random rndm_method = new Random();
29
		char[] otp = new char[len];
30
 
31
		for (int i = 0; i < len; i++)
32
		{
33
			otp[i] = numbers.charAt(rndm_method.nextInt(numbers.length()));
34
		}
35
		return String.valueOf(otp);
36
	}
37
 
38
	public OTPResponse generateOtp(String email, String phone, OtpType otpType) throws Exception, ProfitMandiBusinessException{
39
		OTPResponse otpResponse = new OTPResponse();
40
		List<Otp> otps = otpRepository.getGeneratedOtpForCredentials(email, otpType);
41
		String otp = null;
42
		if (otps.size() >=5){
43
			otpResponse.setReference_id(0);
44
			otpResponse.setResult(false);
45
			otpResponse.setMessage("Maximum limit reached for the day");
46
			return otpResponse;
47
		}
48
		if (!otps.isEmpty()){
49
			if (otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(2))){
50
				otpResponse.setMessage("OTP generated less than 2 minutes ago");
51
				otpResponse.setReference_id(otps.get(0).getId());
52
				otpResponse.setResult(true);
53
				return otpResponse;
54
			}
55
			else if(otps.get(0).getCreatedOn().isAfter(LocalDateTime.now().minusMinutes(10))){
56
				otp = otps.get(0).getOtp();
57
			}
58
			else{
59
				;
60
			}
61
		}
62
		if (otp == null || otp.isEmpty()){
63
			otp = getOtp();
64
		}
65
		Otp otp_d = otpRepository.generateOtp(email, phone, otpType, otp);
66
		otpResponse.setReference_id(otp_d.getId());
67
		otpResponse.setMessage("OTP generated successfully");
68
		otpResponse.setResult(true);
69
		return otpResponse;
70
	}
71
 
72
	public OTPResponse validateOtp(String email, long reference_id, String otp_number) throws Exception, ProfitMandiBusinessException{
73
		OTPResponse otpResponse = new OTPResponse();
74
		Otp otp = otpRepository.getById(reference_id);
75
		otp.setTryCount(otp.getTryCount()+1);
76
		otpResponse.setReference_id(reference_id);
77
		if (!otp.getEmail().equalsIgnoreCase(email) || !otp.getOtp().equalsIgnoreCase(otp_number)){
78
			otpResponse.setMessage("Invalid otp");
79
			otpResponse.setResult(false);
80
			otpRepository.updateById(otp);
81
			return otpResponse;
82
		}
83
		if (otp.isExpired() || otp.isVerified() || otp.getExpiryTimestamp().isBefore(LocalDateTime.now())){
84
			otpResponse.setMessage("OTP expired");
85
			otpResponse.setResult(false);
86
			return otpResponse;
87
		}
88
		if (otp.getTryCount() >5){
89
			otpResponse.setMessage("Maximum try count reached");
90
			otpResponse.setResult(false);
91
			return otpResponse;
92
		}
93
		otp.setExpired(true);
94
		otp.setVerified(true);
95
		otpRepository.updateById(otp);
96
		otpResponse.setMessage("OTP validated successfully");
97
		otpResponse.setResult(true);
98
		return otpResponse;
99
	}
100
 
101
}