Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/dev/resms/ReSMS.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.resms;

import dev.resms.services.otp.Otp;
import dev.resms.services.sms.Sms;
import lombok.RequiredArgsConstructor;

Expand All @@ -17,4 +18,13 @@ public class ReSMS {
public Sms sms() {
return new Sms(apiKey);
}

/**
* Returns an Otp object that can be used to interact with the Otp service.
*
* @return An Otp object.
*/
public Otp otp() {
return new Otp(apiKey);
}
}
1 change: 1 addition & 0 deletions src/main/java/dev/resms/core/net/HttpMethod.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
public enum HttpMethod {
GET,
POST,
DELETE,
}
89 changes: 89 additions & 0 deletions src/main/java/dev/resms/services/otp/Otp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package dev.resms.services.otp;

import dev.resms.core.exception.ReSMSException;
import dev.resms.core.net.AbstractHttpResponse;
import dev.resms.core.net.HttpMethod;
import dev.resms.core.service.BaseService;
import dev.resms.services.otp.model.CreateOtpOptions;
import dev.resms.services.otp.model.CreateOtpResponse;
import dev.resms.services.otp.model.DeleteOtpResponse;
import dev.resms.services.otp.model.VerifyOtpOptions;
import dev.resms.services.otp.model.VerifyOtpResponse;

public class Otp extends BaseService {
private static final String CREATE_OTP_PATH = "/otp";
private static final String VERIFY_OTP_PATH = "/otp/verify";
private static final String DELETE_OTP_PATH = "/otp";

/**
* Constructs an instance of the {@code Otp} class.
*
* @param apiKey The apiKey used for authentication.
*/
public Otp(final String apiKey) {
super(apiKey);
}

/**
* Create an OTP based on the provided OTP request
*
* @param createOtpOptions The request containing OTP details.
* @return The response indicating the status of the OTP creation.
* @throws ReSMSException If an error occurs while creating the OTP.
*/
public CreateOtpResponse create(CreateOtpOptions createOtpOptions) throws ReSMSException {
String payload = super.reSMSMapper.toJson(createOtpOptions);

AbstractHttpResponse<String> response =
super.httpClient.perform(CREATE_OTP_PATH, apiKey, HttpMethod.POST, payload);

if (!response.isSuccessful()) {
throw new ReSMSException(
"Failed to create otp: " + response.getCode() + " " + response.getBody());
}

return reSMSMapper.fromJson(response.getBody(), CreateOtpResponse.class);
}

/**
* Verify an OTP based on the provided OTP verify request
*
* @param verifyOtpOptions The request containing OTP verify details.
* @return The response indicating the status of the OTP verification.
* @throws ReSMSException If an error occurs while verifying the OTP.
*/
public VerifyOtpResponse verify(VerifyOtpOptions verifyOtpOptions) throws ReSMSException {
String payload = super.reSMSMapper.toJson(verifyOtpOptions);

AbstractHttpResponse<String> response =
super.httpClient.perform(VERIFY_OTP_PATH, apiKey, HttpMethod.POST, payload);

if (!response.isSuccessful()) {
throw new ReSMSException(
"Failed to create otp: " + response.getCode() + " " + response.getBody());
}

return reSMSMapper.fromJson(response.getBody(), VerifyOtpResponse.class);
}

/**
* Delete an OTP based on its id
*
* @param otpId The id of the OTP to delete.
* @return The response indicating the status of the OTP deletion.
* @throws ReSMSException If an error occurs while deleting the OTP.
*/
public DeleteOtpResponse delete(String otpId) throws ReSMSException {
String payload = "{\"otpId\": \"" + otpId + "\"}";

AbstractHttpResponse<String> response =
super.httpClient.perform(DELETE_OTP_PATH, apiKey, HttpMethod.DELETE, payload);

if (!response.isSuccessful()) {
throw new ReSMSException(
"Failed to create otp: " + response.getCode() + " " + response.getBody());
}

return reSMSMapper.fromJson(response.getBody(), DeleteOtpResponse.class);
}
}
17 changes: 17 additions & 0 deletions src/main/java/dev/resms/services/otp/model/CreateOtpOptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package dev.resms.services.otp.model;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class CreateOtpOptions {
private String to;
private String message;
private String senderId;
private OtpCode codeType;
private int codeLength;
private int validityMinutes;
}
15 changes: 15 additions & 0 deletions src/main/java/dev/resms/services/otp/model/CreateOtpResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package dev.resms.services.otp.model;

import dev.resms.core.model.Response;
import lombok.Getter;

@Getter
public class CreateOtpResponse extends Response {
private CreateOtpResponseData data;

@Getter
public static class CreateOtpResponseData {
private String phoneNumber;
private String expiresAt;
}
}
11 changes: 11 additions & 0 deletions src/main/java/dev/resms/services/otp/model/DeleteOtpResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package dev.resms.services.otp.model;

import dev.resms.core.model.Response;
import lombok.Getter;

@Getter
public class DeleteOtpResponse extends Response {
private String otpId;
private String phoneNumber;
private String revokedAt;
}
6 changes: 6 additions & 0 deletions src/main/java/dev/resms/services/otp/model/OtpCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package dev.resms.services.otp.model;

public enum OtpCode {
NUMERIC,
ALPHA,
}
13 changes: 13 additions & 0 deletions src/main/java/dev/resms/services/otp/model/VerifyOtpOptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.resms.services.otp.model;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class VerifyOtpOptions {
private String to;
private String code;
}
16 changes: 16 additions & 0 deletions src/main/java/dev/resms/services/otp/model/VerifyOtpResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dev.resms.services.otp.model;

import dev.resms.core.model.Response;
import lombok.Getter;

@Getter
public class VerifyOtpResponse extends Response {
private VerifyOtpResponseData data;

@Getter
public static class VerifyOtpResponseData {
private String otpId;
private String phoneNumber;
private String verifiedAt;
}
}