mirror of
https://github.com/makayabou/asg-server.git
synced 2026-05-02 17:43:36 +02:00
Added: user auth
This commit is contained in:
parent
7b9316f64d
commit
094c7f1181
@ -1,19 +1,40 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/models"
|
||||
"bitbucket.org/capcom6/smsgatewaybackend/internal/smsgateway/services"
|
||||
microbase "bitbucket.org/soft-c/gomicrobase"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/basicauth"
|
||||
)
|
||||
|
||||
type thirdPartyHandler struct {
|
||||
microbase.Handler
|
||||
|
||||
authSvc *services.AuthService
|
||||
messagesSvc *services.MessagesService
|
||||
}
|
||||
|
||||
func (h *thirdPartyHandler) postMessage(c *fiber.Ctx) error {
|
||||
func (h *thirdPartyHandler) postMessage(user models.User, c *fiber.Ctx) error {
|
||||
return fiber.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (h *thirdPartyHandler) authorize(handler func(models.User, *fiber.Ctx) error) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
username := c.Locals("username").(string)
|
||||
password := c.Locals("password").(string)
|
||||
|
||||
user, err := h.authSvc.AuthorizeUser(username, password)
|
||||
if err != nil {
|
||||
errorLog.Println(err)
|
||||
return fiber.ErrUnauthorized
|
||||
}
|
||||
|
||||
return handler(user, c)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *thirdPartyHandler) register(router fiber.Router) {
|
||||
router.Use(basicauth.New(basicauth.Config{
|
||||
Authorizer: func(username string, password string) bool {
|
||||
@ -21,9 +42,15 @@ func (h *thirdPartyHandler) register(router fiber.Router) {
|
||||
},
|
||||
}))
|
||||
|
||||
router.Post("/message", h.postMessage)
|
||||
router.Post("/message", h.authorize(h.postMessage))
|
||||
}
|
||||
|
||||
func newThirdPartyHandler() *thirdPartyHandler {
|
||||
return &thirdPartyHandler{}
|
||||
func newThirdPartyHandler(validator *validator.Validate, authSvc *services.AuthService, messagesSvc *services.MessagesService) *thirdPartyHandler {
|
||||
return &thirdPartyHandler{
|
||||
Handler: microbase.Handler{
|
||||
Validator: validator,
|
||||
},
|
||||
authSvc: authSvc,
|
||||
messagesSvc: messagesSvc,
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ func Register(router fiber.Router, db *gorm.DB) error {
|
||||
messagesSvc := services.NewMessagesService(messages)
|
||||
|
||||
newMobileHandler(validator, authSvc, messagesSvc).register(router.Group("/mobile/v1"))
|
||||
newThirdPartyHandler().register(router.Group("/3rdparty/v1"))
|
||||
newThirdPartyHandler(validator, authSvc, messagesSvc).register(router.Group("/3rdparty/v1"))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -30,6 +30,10 @@ func (r *MessagesRepository) Get(deviceID, ID string) (message models.Message, e
|
||||
return
|
||||
}
|
||||
|
||||
func (r *MessagesRepository) Insert(message *models.Message) error {
|
||||
return r.db.Create(message).Error
|
||||
}
|
||||
|
||||
func (r *MessagesRepository) UpdateState(message *models.Message) error {
|
||||
return r.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(message).Select("State").Updates(message).Error; err != nil {
|
||||
|
||||
@ -49,6 +49,15 @@ func (s *AuthService) AuthorizeDevice(token string) (models.Device, error) {
|
||||
return s.devices.GetByToken(token)
|
||||
}
|
||||
|
||||
func (s *AuthService) AuthorizeUser(username, password string) (models.User, error) {
|
||||
user, err := s.users.GetByLogin(username)
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
|
||||
return user, crypto.CompareBCryptHash(user.PasswordHash, password)
|
||||
}
|
||||
|
||||
func NewAuthService(users *repositories.UsersRepository, devices *repositories.DevicesRepository) *AuthService {
|
||||
idgen, _ := nanoid.Standard(21)
|
||||
|
||||
|
||||
@ -43,6 +43,20 @@ func (s *MessagesService) UpdateState(deviceID string, message smsgateway.Messag
|
||||
return s.messages.UpdateState(&existing)
|
||||
}
|
||||
|
||||
func (s *MessagesService) Enqeue(deviceID string, message smsgateway.Message) error {
|
||||
msg := models.Message{
|
||||
DeviceID: deviceID,
|
||||
ExtID: message.ID,
|
||||
Message: message.Message,
|
||||
Recipients: s.recipientsToModel(message.PhoneNumbers),
|
||||
}
|
||||
if msg.ExtID == "" {
|
||||
msg.ExtID = s.idgen()
|
||||
}
|
||||
|
||||
return s.messages.Insert(&msg)
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsToDomain(input []models.MessageRecipient) []string {
|
||||
output := make([]string, len(input))
|
||||
|
||||
@ -53,6 +67,18 @@ func (s *MessagesService) recipientsToDomain(input []models.MessageRecipient) []
|
||||
return output
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsToModel(input []string) []models.MessageRecipient {
|
||||
output := make([]models.MessageRecipient, len(input))
|
||||
|
||||
for i, v := range input {
|
||||
output[i] = models.MessageRecipient{
|
||||
PhoneNumber: v,
|
||||
}
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
func (s *MessagesService) recipientsStateToModel(input []smsgateway.RecipientState) []models.MessageRecipient {
|
||||
output := make([]models.MessageRecipient, len(input))
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user