Browse Source

feat: add revoke

pull/31/head
Aldino Kemal 3 years ago
parent
commit
6bd60a5433
  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) SendVideo(ctx context.Context, request VideoRequest) (response VideoResponse, err error)
SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error) SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error)
SendLink(ctx context.Context, request LinkRequest) (response LinkResponse, 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 package rest
import ( import (
"fmt"
domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send" 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/utils"
"github.com/aldinokemal/go-whatsapp-web-multidevice/validations" "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/video", rest.SendVideo)
app.Post("/send/contact", rest.SendContact) app.Post("/send/contact", rest.SendContact)
app.Post("/send/link", rest.SendLink) app.Post("/send/link", rest.SendLink)
app.Post("/message/:message_id/revoke", rest.RevokeMessage)
return rest return rest
} }
@ -183,3 +184,23 @@ func (controller *Send) SendLink(c *fiber.Ctx) error {
Results: response, 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" "github.com/valyala/fasthttp"
"go.mau.fi/whatsmeow" "go.mau.fi/whatsmeow"
waProto "go.mau.fi/whatsmeow/binary/proto" waProto "go.mau.fi/whatsmeow/binary/proto"
"go.mau.fi/whatsmeow/types"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"net/http" "net/http"
"os" "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) response.Status = fmt.Sprintf("Link sent to %s (server timestamp: %s)", request.Phone, ts)
return response, nil 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 { } else {
recipient, err := types.ParseJID(arg) recipient, err := types.ParseJID(arg)
if err != nil { if err != nil {
_ = fmt.Errorf("Invalid JID %s: %v", arg, err)
_ = fmt.Errorf("invalid JID %s: %v", arg, err)
return recipient, false return recipient, false
} else if recipient.User == "" { } 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, false
} }
return recipient, true return recipient, true

15
src/validations/send_validation.go

@ -129,3 +129,18 @@ func ValidateSendLink(request domainSend.LinkRequest) error {
return nil 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