Browse Source

feat: add revoke (#31)

pull/32/head
Aldino Kemal 3 years ago
committed by GitHub
parent
commit
b14aae0366
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      src/domains/send/message.go
  2. 1
      src/domains/send/send.go
  3. 23
      src/internal/rest/send_controller.go
  4. 20
      src/services/send_service.go
  5. 4
      src/utils/whatsapp.go
  6. 15
      src/validations/send_validation.go

12
src/domains/send/message.go

@ -0,0 +1,12 @@
package send
type RevokeRequest struct {
MessageID string `json:"message_id" uri:"message_id"`
Phone string `json:"phone" form:"phone"`
Type Type `json:"type" form:"type"`
}
type RevokeResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}

1
src/domains/send/send.go

@ -16,4 +16,5 @@ type ISendService interface {
SendVideo(ctx context.Context, request VideoRequest) (response VideoResponse, err error)
SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error)
SendLink(ctx context.Context, request LinkRequest) (response LinkResponse, err error)
Revoke(ctx context.Context, request RevokeRequest) (response RevokeResponse, err error)
}

23
src/internal/rest/send_controller.go

@ -1,6 +1,7 @@
package rest
import (
"fmt"
domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send"
"github.com/aldinokemal/go-whatsapp-web-multidevice/utils"
"github.com/aldinokemal/go-whatsapp-web-multidevice/validations"
@ -19,7 +20,7 @@ func InitRestSend(app *fiber.App, service domainSend.ISendService) Send {
app.Post("/send/video", rest.SendVideo)
app.Post("/send/contact", rest.SendContact)
app.Post("/send/link", rest.SendLink)
app.Post("/message/:message_id/revoke", rest.RevokeMessage)
return rest
}
@ -183,3 +184,23 @@ func (controller *Send) SendLink(c *fiber.Ctx) error {
Results: response,
})
}
func (controller *Send) RevokeMessage(c *fiber.Ctx) error {
var request domainSend.RevokeRequest
err := c.BodyParser(&request)
utils.PanicIfNeeded(err)
request.MessageID = c.Params("message_id")
err = validations.ValidateRevokeMessage(request)
utils.PanicIfNeeded(err)
fmt.Println(request)
response, err := controller.Service.Revoke(c.UserContext(), request)
utils.PanicIfNeeded(err)
return c.JSON(utils.ResponseData{
Code: 200,
Message: response.Status,
Results: response,
})
}

20
src/services/send_service.go

@ -12,6 +12,7 @@ import (
"github.com/valyala/fasthttp"
"go.mau.fi/whatsmeow"
waProto "go.mau.fi/whatsmeow/binary/proto"
"go.mau.fi/whatsmeow/types"
"google.golang.org/protobuf/proto"
"net/http"
"os"
@ -349,3 +350,22 @@ func (service serviceSend) SendLink(ctx context.Context, request domainSend.Link
response.Status = fmt.Sprintf("Link sent to %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}
func (service serviceSend) Revoke(_ context.Context, request domainSend.RevokeRequest) (response domainSend.RevokeResponse, err error) {
utils.MustLogin(service.WaCli)
recipient, ok := utils.ParseJID(request.Phone)
if !ok {
return response, errors.New("invalid JID " + request.Phone)
}
msgId := whatsmeow.GenerateMessageID()
ts, err := service.WaCli.SendMessage(context.Background(), recipient, msgId, service.WaCli.BuildRevoke(recipient, types.EmptyJID, request.MessageID))
if err != nil {
return response, err
}
response.MessageID = msgId
response.Status = fmt.Sprintf("Revoke success %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}

4
src/utils/whatsapp.go

@ -74,10 +74,10 @@ func ParseJID(arg string) (types.JID, bool) {
} else {
recipient, err := types.ParseJID(arg)
if err != nil {
_ = fmt.Errorf("Invalid JID %s: %v", arg, err)
_ = fmt.Errorf("invalid JID %s: %v", arg, err)
return recipient, false
} else if recipient.User == "" {
_ = fmt.Errorf("Invalid JID %s: no server specified", arg)
_ = fmt.Errorf("invalid JID %s: no server specified", arg)
return recipient, false
}
return recipient, true

15
src/validations/send_validation.go

@ -129,3 +129,18 @@ func ValidateSendLink(request domainSend.LinkRequest) error {
return nil
}
func ValidateRevokeMessage(request domainSend.RevokeRequest) error {
err := validation.ValidateStruct(&request,
validation.Field(&request.Phone, validation.Required, validation.Length(10, 25)),
validation.Field(&request.MessageID, validation.Required, validation.Length(20, 25)),
)
if err != nil {
return utils.ValidationError{
Message: err.Error(),
}
}
return nil
}
Loading…
Cancel
Save