Aldino Kemal
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
72 additions and
3 deletions
-
src/domains/send/message.go
-
src/domains/send/send.go
-
src/internal/rest/send_controller.go
-
src/services/send_service.go
-
src/utils/whatsapp.go
-
src/validations/send_validation.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"` |
|
|
|
} |
|
|
|
@ -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) |
|
|
|
} |
|
|
|
@ -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, |
|
|
|
}) |
|
|
|
} |
|
|
|
@ -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 |
|
|
|
} |
|
|
|
@ -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 |
|
|
|
|
|
|
|
@ -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 |
|
|
|
} |