final pom changes
This commit is contained in:
parent
1ea9e72024
commit
1ee353c179
5 changed files with 159 additions and 28 deletions
22
README.md
22
README.md
|
@ -139,7 +139,7 @@ Before you begin, ensure you have the following installed:
|
|||
* Navigate to the "WAR file to deploy" section.
|
||||
* Choose the `shorten.war` file using the file upload button.
|
||||
* Click the "Deploy" button.
|
||||
3. **Configure environment variables:**
|
||||
3. **Configure Variables on deployed war:**
|
||||
|
||||
Set environment variables for cloud-specific settings.
|
||||
|
||||
|
@ -246,7 +246,27 @@ Wait until the pod is in the "Running" state.
|
|||
Access your application using the provided external IP.
|
||||
|
||||
|
||||
### SMS Service Configuration
|
||||
|
||||
To configure the SMS service, you need to specify parameters related to the SMS provider in the `application.properties` file.
|
||||
|
||||
* #### Managed SMS Provider (Uses HttpSms API from https://httpsms.com/)
|
||||
* Generate API Key : https://httpsms.com/settings/
|
||||
* HttpSms API Docs : https://api.httpsms.com/
|
||||
|
||||
```properties
|
||||
sms.provider=managed
|
||||
managed.sms.api.key=your_managed_sms_api_key
|
||||
managed.sms.phone-number=123456789
|
||||
|
||||
* #### Self-hosted SMS Provider (Host our open source android-based SMS web gateway : https://api.httpsms.com/)
|
||||
|
||||
```properties
|
||||
sms.provider=selfhosted
|
||||
selfhosted.gateway.url=https://your-smsgateway-url/index.php
|
||||
selfhosted.device.id=your_device_id
|
||||
selfhosted.hash=your_device_hash
|
||||
|
||||
### App Health
|
||||
|
||||
* Check application status from the /monitoring page example http://localhost:8080/monitoring
|
||||
|
|
|
@ -5,41 +5,88 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URLEncoder;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
@Service
|
||||
public class SmsService {
|
||||
|
||||
private final SmsServiceConfig smsServiceConfig;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SmsService.class);
|
||||
|
||||
public SmsService(SmsServiceConfig smsServiceConfig) {
|
||||
this.smsServiceConfig = smsServiceConfig;
|
||||
}
|
||||
|
||||
public void sendSms(String toNumber, String message) {
|
||||
try {
|
||||
// Send the SMS to the user (you need to implement this part)
|
||||
var client = HttpClient.newHttpClient();
|
||||
var apiKey = "Vucf1nCa4ed-AMNGv6CnsycfQT28yLUA8NEvY7IZ87-Piv855UBcjfo29Zb8XPZt";
|
||||
|
||||
String payload = "{\n" +
|
||||
" \"content\": \"" + message + "\",\n" + // Use concatenation for variables
|
||||
" \"from\": \"+9038556097\",\n" +
|
||||
" \"to\": \"" + toNumber + "\"\n" +
|
||||
"}";
|
||||
|
||||
var requestBuild = HttpRequest.newBuilder()
|
||||
.uri(URI.create("https://api.httpsms.com/v1/messages/send"))
|
||||
.header("accept", "application/json")
|
||||
.header("Content-Type", "application/json")
|
||||
.header("x-api-key", apiKey)
|
||||
.POST(HttpRequest.BodyPublishers.ofString(payload))
|
||||
.build();
|
||||
|
||||
var response = client.send(requestBuild, HttpResponse.BodyHandlers.ofString());
|
||||
System.out.println(response.body());
|
||||
if ("managed".equals(smsServiceConfig.getSmsProvider())) {
|
||||
sendSmsToManagedProvider(toNumber, message);
|
||||
} else if ("selfhosted".equals(smsServiceConfig.getSmsProvider())) {
|
||||
sendSmsToSelfHostedGateway(toNumber, message);
|
||||
} else {
|
||||
logger.error("Invalid SMS provider configuration");
|
||||
}
|
||||
logger.info("SMS sent successfully to {}", toNumber);
|
||||
logger.debug("SMS API response: {}", response.body());
|
||||
} catch (Exception e) {
|
||||
// Log and handle SMS sending failure
|
||||
logger.error("Failed to send SMS to {}: {}", toNumber, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendSmsToManagedProvider(String toNumber, String message) throws Exception {
|
||||
var client = HttpClient.newHttpClient();
|
||||
|
||||
var apiKey = smsServiceConfig.getManagedSmsApiKey();
|
||||
var phoneNumber = smsServiceConfig.getManagedPhoneNumber();
|
||||
|
||||
String payload = "{\n" +
|
||||
" \"content\": \"" + message + "\",\n" +
|
||||
" \"from\": \"+"+ phoneNumber + "\",\n" +
|
||||
" \"to\": \"" + toNumber + "\"\n" +
|
||||
"}";
|
||||
|
||||
var requestBuild = HttpRequest.newBuilder()
|
||||
.uri(URI.create("https://api.httpsms.com/v1/messages/send"))
|
||||
.header("accept", "application/json")
|
||||
.header("Content-Type", "application/json")
|
||||
.header("x-api-key", apiKey)
|
||||
.POST(HttpRequest.BodyPublishers.ofString(payload))
|
||||
.build();
|
||||
|
||||
var response = client.send(requestBuild, HttpResponse.BodyHandlers.ofString());
|
||||
System.out.println(response.body());
|
||||
logger.info("External SMS API response: {}", response.body());
|
||||
}
|
||||
|
||||
private void sendSmsToSelfHostedGateway(String toNumber, String message) throws Exception {
|
||||
// Replace with your actual SMSGateway server URL, device ID, and hash
|
||||
|
||||
String gatewayUrl = smsServiceConfig.getSelfHostedGatewayUrl();
|
||||
String deviceId = smsServiceConfig.getSelfHostedDeviceId();
|
||||
String hash = smsServiceConfig.getSelfHostedHash();
|
||||
|
||||
// Encode special characters in the message
|
||||
String encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8.toString());
|
||||
|
||||
// Build the final URL
|
||||
var finalUrl = String.format("%s?id=%s&h=%s&to=%s&message=%s", gatewayUrl, deviceId, hash, toNumber, encodedMessage);
|
||||
|
||||
var client = HttpClient.newHttpClient();
|
||||
|
||||
var requestBuild = HttpRequest.newBuilder()
|
||||
.uri(URI.create(finalUrl))
|
||||
.header("accept", "application/json")
|
||||
.header("Content-Type", "application/json")
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
var response = client.send(requestBuild, HttpResponse.BodyHandlers.ofString());
|
||||
System.out.println(response.body());
|
||||
logger.info("SMSGateway API response: {}", response.body());
|
||||
}
|
||||
}
|
50
src/main/java/com/bitmutex/shortener/SmsServiceConfig.java
Normal file
50
src/main/java/com/bitmutex/shortener/SmsServiceConfig.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package com.bitmutex.shortener;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class SmsServiceConfig {
|
||||
|
||||
@Value("${sms.provider}")
|
||||
private String smsProvider;
|
||||
|
||||
@Value("${managed.sms.api.key}")
|
||||
private String managedSmsApiKey;
|
||||
|
||||
@Value("${managed.sms.phone-number}")
|
||||
private String managedPhoneNumber;
|
||||
|
||||
@Value("${selfhosted.gateway.url}")
|
||||
private String selfHostedGatewayUrl;
|
||||
|
||||
@Value("${selfhosted.device.id}")
|
||||
private String selfHostedDeviceId;
|
||||
|
||||
@Value("${selfhosted.hash}")
|
||||
private String selfHostedHash;
|
||||
|
||||
public String getSmsProvider() {
|
||||
return smsProvider;
|
||||
}
|
||||
|
||||
public String getManagedPhoneNumber() {
|
||||
return managedPhoneNumber;
|
||||
}
|
||||
|
||||
public String getManagedSmsApiKey() {
|
||||
return managedSmsApiKey;
|
||||
}
|
||||
|
||||
public String getSelfHostedGatewayUrl() {
|
||||
return selfHostedGatewayUrl;
|
||||
}
|
||||
|
||||
public String getSelfHostedDeviceId() {
|
||||
return selfHostedDeviceId;
|
||||
}
|
||||
|
||||
public String getSelfHostedHash() {
|
||||
return selfHostedHash;
|
||||
}
|
||||
}
|
|
@ -91,9 +91,20 @@ springdoc.api-docs.path=/docs
|
|||
springdoc.swagger-ui.path=/docs-ui
|
||||
springdoc.swagger-ui.operationsSorter=method
|
||||
springdoc.show-actuator=true
|
||||
|
||||
#Springdoc Swagger Config
|
||||
springdoc.swagger-ui.oauthClientId=Iv1.8d3d0ea51b7e7da3
|
||||
springdoc.swagger-ui.oauthClientSecret=2176086761d073b2082afdc4af0207fa7d1d274b
|
||||
springdoc.swagger-ui.oauthAppName=Bitmutex Shortener
|
||||
springdoc.swagger-ui.oauthScopeSeparator=/v
|
||||
springdoc.swagger-ui.showRequestHeaders=true
|
||||
|
||||
|
||||
# SMS Provider Configuration (managed/selfhosted)
|
||||
sms.provider=selfhosted
|
||||
# For Managed SMS Provider (uses httpSms API from https://httpsms.com/settings)
|
||||
managed.sms.api.key=Vucf1nCa4ed-AMNGv6CnsycfQT28yLUA8NEvY7IZ87-Piv855UBcjfo29Zb8XPZt
|
||||
managed.sms.phone-number=9038556097
|
||||
# For Self-Hosted SMSGateway (android app url : https://bitmutexsms.000webhostapp.com/index.php?id=f0edf9a81c2461b5&h=b4132c)
|
||||
selfhosted.gateway.url=https://bitmutexsms.000webhostapp.com/index.php
|
||||
selfhosted.device.id=f0edf9a81c2461b5
|
||||
selfhosted.hash=b4132c
|
||||
|
|
|
@ -17,10 +17,13 @@
|
|||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_ARCHIVE}/shortener.log.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_PATH}/shortener.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
|
||||
<minIndex>1</minIndex>
|
||||
<maxIndex>4</maxIndex>
|
||||
<!-- keep 30 days' worth of history -->
|
||||
<maxHistory>30</maxHistory>
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<maxFileSize>5MB</maxFileSize>
|
||||
<totalSizeCap>1GB</totalSizeCap>
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
</rollingPolicy>
|
||||
|
@ -33,7 +36,7 @@
|
|||
</appender>
|
||||
|
||||
<!-- Root Logger -->
|
||||
<root level="info">
|
||||
<root level="debug">
|
||||
<appender-ref ref="async" />
|
||||
</root>
|
||||
|
||||
|
|
Loading…
Reference in a new issue