package com.pollex.pam.service; import com.pollex.pam.config.ApplicationProperties; import com.pollex.pam.service.dto.OtpResponseDTO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import tw.com.softleader.otp.ws.OtpWebServiceLocator; import tw.com.softleader.otp.ws.OtpWebServicePortBindingStub; import javax.xml.rpc.ServiceException; import java.rmi.RemoteException; @Service public class OtpWebService { private static final Logger log = LoggerFactory.getLogger(OtpWebService.class); @Autowired ApplicationProperties applicationProperty; public OtpResponseDTO sendByPhone(String phone) throws ServiceException, RemoteException { OtpWebServicePortBindingStub stub = getOtpWebServicePortBindingStub(); log.info("call OtpService snedOtpBySMS, "); String[] result = stub.sendOtpBySMS(applicationProperty.getOtpWebServicePassword(), applicationProperty.getOtpWebServiceSystemType(), phone); return new OtpResponseDTO(result); } public OtpResponseDTO sendByEmail(String email) throws ServiceException, RemoteException { OtpWebServicePortBindingStub stub = getOtpWebServicePortBindingStub(); String[] result = stub.sendOtpByEmail(applicationProperty.getOtpWebServicePassword(), applicationProperty.getOtpWebServiceSystemType(), email); final OtpResponseDTO otpResponseDTO = new OtpResponseDTO(result); if(otpResponseDTO.isSuccess()) { return otpResponseDTO; } else { throw new RuntimeException("error code = " + otpResponseDTO.getFailCode() + ", error reason = " + otpResponseDTO.getFailReason()); } } public OtpResponseDTO verifyOTP(String indexKey, String otpCode) throws ServiceException, RemoteException { OtpWebServicePortBindingStub stub = getOtpWebServicePortBindingStub(); String[] result = stub.verifyOtp(applicationProperty.getOtpWebServicePassword(), applicationProperty.getOtpWebServiceSystemType(), indexKey, otpCode); return new OtpResponseDTO(result); } private OtpWebServicePortBindingStub getOtpWebServicePortBindingStub() throws ServiceException { OtpWebServiceLocator locator = new OtpWebServiceLocator(); locator.setOtpWebServicePortEndpointAddress(applicationProperty.getOtpWebServiceUrl()); return (OtpWebServicePortBindingStub) locator.getOtpWebServicePort(); } }