Skip to content

Commit 39fa87f

Browse files
committed
[jwt] update DTO, clarify response codes
1 parent d32510b commit 39fa87f

File tree

8 files changed

+153
-92
lines changed

8 files changed

+153
-92
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.3
44

55
require (
66
firebase.google.com/go/v4 v4.12.1
7-
github.com/android-sms-gateway/client-go v1.9.5
7+
github.com/android-sms-gateway/client-go v1.9.6-0.20251123133512-f7816d96f90a
88
github.com/ansrivas/fiberprometheus/v2 v2.6.1
99
github.com/capcom6/go-helpers v0.3.0
1010
github.com/capcom6/go-infra-fx v0.5.2

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV
3434
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
3535
github.com/android-sms-gateway/client-go v1.9.5 h1:fHrE1Pi3rKUdPVMmI9evKW0iyjB5bMIhFRxyq1wVQ+o=
3636
github.com/android-sms-gateway/client-go v1.9.5/go.mod h1:DQsReciU1xcaVW3T5Z2bqslNdsAwCFCtghawmA6g6L4=
37+
github.com/android-sms-gateway/client-go v1.9.6-0.20251123133512-f7816d96f90a h1:Tm1FDTqFRs1ZftaEmQqDdIXtMRZf2aGCp8t2BgXY/rs=
38+
github.com/android-sms-gateway/client-go v1.9.6-0.20251123133512-f7816d96f90a/go.mod h1:DQsReciU1xcaVW3T5Z2bqslNdsAwCFCtghawmA6g6L4=
3739
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
3840
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
3941
github.com/ansrivas/fiberprometheus/v2 v2.6.1 h1:wac3pXaE6BYYTF04AC6K0ktk6vCD+MnDOJZ3SK66kXM=

internal/sms-gateway/handlers/messages/3rdparty.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type ThirdPartyController struct {
5656
// @Success 202 {object} smsgateway.GetMessageResponse "Message enqueued"
5757
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
5858
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
59+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
5960
// @Failure 409 {object} smsgateway.ErrorResponse "Message with such ID already exists"
6061
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
6162
// @Header 202 {string} Location "Get message state URL"
@@ -189,6 +190,7 @@ func (h *ThirdPartyController) post(user users.User, c *fiber.Ctx) error {
189190
// @Success 200 {object} smsgateway.GetMessagesResponse "A list of messages"
190191
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
191192
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
193+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
192194
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
193195
// @Router /3rdparty/v1/messages [get]
194196
//
@@ -221,6 +223,7 @@ func (h *ThirdPartyController) list(user users.User, c *fiber.Ctx) error {
221223
// @Success 200 {object} smsgateway.GetMessageResponse "Message state"
222224
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
223225
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
226+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
224227
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
225228
// @Router /3rdparty/v1/messages/{id} [get]
226229
//
@@ -251,6 +254,7 @@ func (h *ThirdPartyController) get(user users.User, c *fiber.Ctx) error {
251254
// @Success 202 {object} object "Inbox export request accepted"
252255
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
253256
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
257+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
254258
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
255259
// @Router /3rdparty/v1/messages/inbox/export [post]
256260
//
@@ -282,7 +286,7 @@ func (h *ThirdPartyController) Register(router fiber.Router) {
282286
router.Post("", permissions.RequireScope(ScopeSend), userauth.WithUser(h.post))
283287
router.Get(":id", permissions.RequireScope(ScopeRead), userauth.WithUser(h.get)).Name(route3rdPartyGetMessage)
284288

285-
router.Post("inbox/export", userauth.WithUser(h.postInboxExport))
289+
router.Post("inbox/export", permissions.RequireScope(ScopeExport), userauth.WithUser(h.postInboxExport))
286290
}
287291

288292
func NewThirdPartyController(params thirdPartyControllerParams) *ThirdPartyController {

internal/sms-gateway/handlers/messages/permissions.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ const (
88
ScopeRead = "messages:read"
99
// ScopeList is the permission scope required for listing messages.
1010
ScopeList = "messages:list"
11+
// ScopeExport is the permission scope required for exporting messages.
12+
ScopeExport = "messages:export"
1113
)

internal/sms-gateway/handlers/middlewares/jwtauth/jwtauth.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jwtauth
22

33
import (
4+
"errors"
45
"strings"
56

67
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/middlewares/permissions"
@@ -27,6 +28,9 @@ func NewJWT(jwtSvc jwt.Service, usersSvc *users.Service) fiber.Handler {
2728

2829
user, err := usersSvc.GetByUsername(claims.UserID)
2930
if err != nil {
31+
if !errors.Is(err, users.ErrNotFound) {
32+
return fiber.ErrInternalServerError
33+
}
3034
return fiber.ErrUnauthorized
3135
}
3236

internal/sms-gateway/handlers/thirdparty/auth.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"time"
66

7+
"github.com/android-sms-gateway/client-go/smsgateway"
78
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/base"
89
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/middlewares/permissions"
910
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/middlewares/userauth"
@@ -39,27 +40,15 @@ func (h *AuthHandler) Register(router fiber.Router) {
3940
router.Delete("/token/:jti", permissions.RequireScope(ScopeTokensManage), userauth.WithUser(h.deleteToken))
4041
}
4142

42-
type tokenRequest struct {
43-
TTL uint64 `json:"ttl,omitempty"`
44-
Scopes []string `json:"scopes" validate:"required,min=1,dive,required"`
45-
}
46-
47-
type tokenResponse struct {
48-
ID string `json:"id"`
49-
TokenType string `json:"token_type"`
50-
AccessToken string `json:"access_token"`
51-
ExpiresAt time.Time `json:"expires_at"`
52-
}
53-
5443
// @Summary Generate token
5544
// @Description Generate new access token with specified scopes and ttl
5645
// @Security ApiAuth
5746
// @Security JWTAuth
5847
// @Tags User, Auth
5948
// @Accept json
6049
// @Produce json
61-
// @Param request body tokenRequest true "Request"
62-
// @Success 201 {object} tokenResponse "Token"
50+
// @Param request body smsgateway.TokenRequest true "Request"
51+
// @Success 201 {object} smsgateway.TokenResponse "Token"
6352
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
6453
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
6554
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
@@ -68,7 +57,7 @@ type tokenResponse struct {
6857
//
6958
// Generate token.
7059
func (h *AuthHandler) postToken(user users.User, c *fiber.Ctx) error {
71-
req := new(tokenRequest)
60+
req := new(smsgateway.TokenRequest)
7261
if err := h.BodyParserValidator(c, req); err != nil {
7362
return err
7463
}
@@ -78,7 +67,7 @@ func (h *AuthHandler) postToken(user users.User, c *fiber.Ctx) error {
7867
return err
7968
}
8069

81-
return c.Status(fiber.StatusCreated).JSON(tokenResponse{
70+
return c.Status(fiber.StatusCreated).JSON(smsgateway.TokenResponse{
8271
ID: token.ID,
8372
TokenType: "Bearer",
8473
AccessToken: token.AccessToken,

internal/sms-gateway/handlers/webhooks/3rdparty.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type ThirdPartyController struct {
3838
// @Produce json
3939
// @Success 200 {object} []smsgateway.Webhook "Webhook list"
4040
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
41+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
4142
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
4243
// @Router /3rdparty/v1/webhooks [get]
4344
//
@@ -62,6 +63,7 @@ func (h *ThirdPartyController) get(user users.User, c *fiber.Ctx) error {
6263
// @Success 201 {object} smsgateway.Webhook "Created"
6364
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
6465
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
66+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
6567
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
6668
// @Router /3rdparty/v1/webhooks [post]
6769
//
@@ -93,6 +95,7 @@ func (h *ThirdPartyController) post(user users.User, c *fiber.Ctx) error {
9395
// @Param id path string true "Webhook ID"
9496
// @Success 204 {object} object "Webhook deleted"
9597
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
98+
// @Failure 403 {object} smsgateway.ErrorResponse "Forbidden"
9699
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
97100
// @Router /3rdparty/v1/webhooks/{id} [delete]
98101
//

0 commit comments

Comments
 (0)