final pom changes

This commit is contained in:
Amit Kumar Nandi 2024-02-20 02:06:39 +05:30
parent 1ea9e72024
commit 1ee353c179
5 changed files with 159 additions and 28 deletions

View file

@ -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

View file

@ -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());
}
}

View 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;
}
}

View file

@ -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

View file

@ -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>