diff --git a/Makefile b/Makefile index 7a840aec..c391d051 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ db-upgrade: goose up db-upgrade-raw: - go run ./cmd/$(project_name)/main.go db-upgrade + go run ./cmd/$(project_name)/main.go db:migrate run: go run cmd/$(project_name)/main.go diff --git a/api/requests.http b/api/requests.http index b6523692..61e2f6a3 100644 --- a/api/requests.http +++ b/api/requests.http @@ -1,6 +1,7 @@ @baseUrl=http://localhost:3000 @cloudUrl=https://sms.capcom.me @credentials={{$dotenv CLOUD__CREDENTIALS}} +@mobileToken={{$dotenv MOBILE__TOKEN}} @phone={{$dotenv PHONE}} ### @@ -13,7 +14,7 @@ Content-Type: application/json } ### -POST {{cloudUrl}}/api/3rdparty/v1/message HTTP/1.1 +POST {{baseUrl}}/api/3rdparty/v1/message HTTP/1.1 Content-Type: application/json Authorization: Basic {{credentials}} @@ -32,11 +33,11 @@ Authorization: Basic {{credentials}} ### GET {{baseUrl}}/api/mobile/v1/message HTTP/1.1 -Authorization: Bearer KuvE4LBXzvy8QO2ZXDDMP +Authorization: Bearer {{mobileToken}} ### PATCH {{baseUrl}}/api/mobile/v1/message HTTP/1.1 -Authorization: Bearer KuvE4LBXzvy8QO2ZXDDMP +Authorization: Bearer {{mobileToken}} Content-Type: application/json [ diff --git a/api/swagger.json b/api/swagger.json index 092e2dbe..d5e1bfc4 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -358,6 +358,12 @@ "79990001234" ] }, + "simNumber": { + "description": "Номер сим-карты", + "type": "integer", + "maximum": 3, + "example": 1 + }, "ttl": { "description": "Время жизни сообщения в секундах", "type": "integer", diff --git a/api/swagger.yaml b/api/swagger.yaml index 5d585311..23b35a4e 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -33,6 +33,11 @@ definitions: maxItems: 100 minItems: 1 type: array + simNumber: + description: Номер сим-карты + example: 1 + maximum: 3 + type: integer ttl: description: Время жизни сообщения в секундах example: 86400 diff --git a/db/migrations/20231116233831_sim_number.sql b/db/migrations/20231116233831_sim_number.sql new file mode 100644 index 00000000..6e1809c8 --- /dev/null +++ b/db/migrations/20231116233831_sim_number.sql @@ -0,0 +1,10 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE `messages` +ADD `sim_number` tinyint(1) unsigned; +-- +goose StatementEnd +--- +-- +goose Down +-- +goose StatementBegin +ALTER TABLE `messages` DROP `sim_number`; +-- +goose StatementEnd \ No newline at end of file diff --git a/internal/sms-gateway/models/models.go b/internal/sms-gateway/models/models.go index cd833e6e..eef8a2f5 100644 --- a/internal/sms-gateway/models/models.go +++ b/internal/sms-gateway/models/models.go @@ -48,6 +48,7 @@ type Message struct { Message string `gorm:"not null;type:tinytext"` State MessageState `gorm:"not null;type:enum('Pending','Sent','Processed','Delivered','Failed');default:Pending;index:idx_messages_device_state"` ValidUntil *time.Time `gorm:"type:datetime"` + SimNumber *uint8 `gorm:"type:tinyint(1) unsigned"` Device Device `gorm:"foreignKey:DeviceID;constraint:OnDelete:CASCADE"` Recipients []MessageRecipient `gorm:"foreignKey:MessageID;constraint:OnDelete:CASCADE"` diff --git a/internal/sms-gateway/services/messages.go b/internal/sms-gateway/services/messages.go index fb0752f2..b33c15f2 100644 --- a/internal/sms-gateway/services/messages.go +++ b/internal/sms-gateway/services/messages.go @@ -62,6 +62,7 @@ func (s *MessagesService) SelectPending(deviceID string) ([]smsgateway.Message, Message: v.Message, TTL: ttl, PhoneNumbers: s.recipientsToDomain(v.Recipients), + SimNumber: v.SimNumber, } } @@ -128,6 +129,7 @@ func (s *MessagesService) Enqeue(device models.Device, message smsgateway.Messag ExtID: message.ID, Message: message.Message, ValidUntil: validUntil, + SimNumber: message.SimNumber, Recipients: s.recipientsToModel(message.PhoneNumbers), } if msg.ExtID == "" { diff --git a/pkg/smsgateway/domain.go b/pkg/smsgateway/domain.go index abb62ca7..00551c3b 100644 --- a/pkg/smsgateway/domain.go +++ b/pkg/smsgateway/domain.go @@ -15,6 +15,7 @@ type Message struct { ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор Message string `json:"message" validate:"required,max=256" example:"Hello World!"` // Текст сообщения TTL *uint64 `json:"ttl,omitempty" validate:"omitempty,min=5" example:"86400"` // Время жизни сообщения в секундах + SimNumber *uint8 `json:"simNumber,omitempty" validate:"omitempty,max=3" example:"1"` // Номер сим-карты PhoneNumbers []string `json:"phoneNumbers" validate:"required,min=1,max=100,dive,required,min=10" example:"79990001234"` // Получатели } diff --git a/web/mkdocs/docs/index.md b/web/mkdocs/docs/index.md index 594a9f0a..0843f588 100644 --- a/web/mkdocs/docs/index.md +++ b/web/mkdocs/docs/index.md @@ -8,11 +8,13 @@ Android SMS Gateway turns your Android smartphone into an SMS gateway. It's a li ## Features +- **No registration required:** No registration or email is required to create an account. - **Send SMS programmatically:** Use our API to send messages directly from your own applications or services. - **Supports Android 5.0 and above:** The application is compatible with Android 5.0 and later versions. - **Message status tracking:** Monitor the status of your sent messages in real-time. - **Starts at boot:** The application starts running as soon as your device boots up. - **Prevents sleep mode:** Your device won't go to sleep while the application is running, ensuring continuous service. +- **Supports multiple SIM cards:** The application supports multiple SIM cards. ## Ideal For diff --git a/web/mkdocs/docs/installation.md b/web/mkdocs/docs/installation.md index c97a13e8..cec37cf2 100644 --- a/web/mkdocs/docs/installation.md +++ b/web/mkdocs/docs/installation.md @@ -6,6 +6,13 @@ You can install app to your device from prebuilt APK or by building from sources You need an Android device with Android 5.0 (Lollipop) or above for using the application. +### Permissions + +To use the application, you need to grant the following permissions: + +- **SEND_SMS**: This permission is required to send SMS messages. +- **READ_PHONE_STATE**: This permission is required to select the SIM card. Optional, if you don't want to select the SIM card. + ## Installation from APK 1. Navigate to the [Releases](https://github.com/capcom6/android-sms-gateway/releases) page. diff --git a/web/mkdocs/requirements.txt b/web/mkdocs/requirements.txt new file mode 100644 index 00000000..3fa206eb --- /dev/null +++ b/web/mkdocs/requirements.txt @@ -0,0 +1,5 @@ +mkdocs==1.5.3 +mkdocs-material==9.4.8 +mkdocs-material-extensions==1.3 +mkdocs-minify-plugin==0.7.1 +mkdocs-render-swagger-plugin==0.1.1