Browse Source

feat: optimize code (#125)

* feat: optimize code

* fix: change auth token name

* feat: add error clear log
pull/126/head v4.12.0
Aldino Kemal 2 years ago
committed by GitHub
parent
commit
7b3e7c3aa9
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 12
      src/cmd/root.go
  2. 5
      src/config/settings.go
  3. 4
      src/internal/rest/middleware/basicauth.go
  4. 8
      src/pkg/error/app_error.go
  5. 8
      src/pkg/whatsapp/whatsapp.go
  6. 6
      src/services/message.go
  7. 17
      src/services/send.go
  8. 6
      src/services/user.go

12
src/cmd/root.go

@ -85,7 +85,7 @@ func runRest(_ *cobra.Command, _ []string) {
}))
if config.AppBasicAuthCredential != "" {
account := make(map[string]string, 0)
account := make(map[string]string)
multipleBA := strings.Split(config.AppBasicAuthCredential, ",")
for _, basicAuth := range multipleBA {
ba := strings.Split(basicAuth, ":")
@ -95,11 +95,9 @@ func runRest(_ *cobra.Command, _ []string) {
account[ba[0]] = ba[1]
}
if account != nil {
app.Use(basicauth.New(basicauth.Config{
Users: account,
}))
}
app.Use(basicauth.New(basicauth.Config{
Users: account,
}))
}
db := whatsapp.InitWaDB()
@ -123,7 +121,7 @@ func runRest(_ *cobra.Command, _ []string) {
return c.Render("views/index", fiber.Map{
"AppHost": fmt.Sprintf("%s://%s", c.Protocol(), c.Hostname()),
"AppVersion": config.AppVersion,
"BasicAuthToken": c.UserContext().Value("token"),
"BasicAuthToken": c.UserContext().Value(middleware.AuthorizationValue("BASIC_AUTH")),
"MaxFileSize": humanize.Bytes(uint64(config.WhatsappSettingMaxFileSize)),
"MaxVideoSize": humanize.Bytes(uint64(config.WhatsappSettingMaxVideoSize)),
})

5
src/config/settings.go

@ -1,7 +1,6 @@
package config
import (
"fmt"
waProto "go.mau.fi/whatsmeow/binary/proto"
)
@ -9,7 +8,7 @@ var (
AppVersion = "v4.12.0"
AppPort = "3000"
AppDebug = false
AppOs = fmt.Sprintf("AldinoKemal")
AppOs = "AldinoKemal"
AppPlatform = waProto.DeviceProps_PlatformType(1)
AppBasicAuthCredential string
@ -20,9 +19,9 @@ var (
DBName = "whatsapp.db"
WhatsappLogLevel = "ERROR"
WhatsappAutoReplyMessage string
WhatsappWebhook string
WhatsappLogLevel = "ERROR"
WhatsappSettingMaxFileSize int64 = 50000000 // 50MB
WhatsappSettingMaxVideoSize int64 = 100000000 // 100MB
WhatsappTypeUser = "@s.whatsapp.net"

4
src/internal/rest/middleware/basicauth.go

@ -5,11 +5,13 @@ import (
"github.com/gofiber/fiber/v2"
)
type AuthorizationValue string
func BasicAuth() fiber.Handler {
return func(c *fiber.Ctx) error {
token := string(c.Request().Header.Peek("Authorization"))
if token != "" {
ctx := context.WithValue(c.Context(), "token", token)
ctx := context.WithValue(c.Context(), AuthorizationValue("BASIC_AUTH"), token)
c.SetUserContext(ctx)
}

8
src/pkg/error/app_error.go

@ -101,8 +101,10 @@ func (err sessionSavedError) StatusCode() int {
}
var (
ErrAlreadyLoggedIn = LoginError("You already logged in :)")
ErrReconnect = throwReconnectError("Reconnect error")
ErrAlreadyLoggedIn = LoginError("you already logged in :)")
ErrNotConnected = throwAuthError("you are not connect to services server, please reconnect")
ErrNotLoggedIn = throwAuthError("you are not logged in")
ErrReconnect = throwReconnectError("reconnect error")
ErrQrChannel = throwQrChannelError("QR channel error")
ErrSessionSaved = throwSessionSavedError("Your session have been saved, please wait to connect 2 second and refresh again")
ErrSessionSaved = throwSessionSavedError("your session have been saved, please wait to connect 2 second and refresh again")
)

8
src/pkg/whatsapp/whatsapp.go

@ -180,9 +180,9 @@ func MustLogin(waCli *whatsmeow.Client) {
panic(pkgError.InternalServerError("Whatsapp client is not initialized"))
}
if !waCli.IsConnected() {
panic(pkgError.AuthError("you are not connect to services server, please reconnect"))
panic(pkgError.ErrNotConnected)
} else if !waCli.IsLoggedIn() {
panic(pkgError.AuthError("you are not login to services server, please login"))
panic(pkgError.ErrNotLoggedIn)
}
}
@ -263,9 +263,9 @@ func handler(rawEvt interface{}) {
}
}
case *events.Receipt:
if evt.Type == events.ReceiptTypeRead || evt.Type == events.ReceiptTypeReadSelf {
if evt.Type == types.ReceiptTypeRead || evt.Type == types.ReceiptTypeReadSelf {
log.Infof("%v was read by %s at %s", evt.MessageIDs, evt.SourceString(), evt.Timestamp)
} else if evt.Type == events.ReceiptTypeDelivered {
} else if evt.Type == types.ReceiptTypeDelivered {
log.Infof("%s was delivered to %s at %s", evt.MessageIDs[0], evt.SourceString(), evt.Timestamp)
}
case *events.Presence:

6
src/services/message.go

@ -50,7 +50,7 @@ func (service serviceMessage) ReactMessage(ctx context.Context, request message.
}
response.MessageID = ts.ID
response.Status = fmt.Sprintf("Reaction sent to %s (server timestamp: %s)", request.Phone, ts)
response.Status = fmt.Sprintf("Reaction sent to %s (server timestamp: %s)", request.Phone, ts.Timestamp)
return response, nil
}
@ -69,7 +69,7 @@ func (service serviceMessage) RevokeMessage(ctx context.Context, request domainM
}
response.MessageID = ts.ID
response.Status = fmt.Sprintf("Revoke success %s (server timestamp: %s)", request.Phone, ts)
response.Status = fmt.Sprintf("Revoke success %s (server timestamp: %s)", request.Phone, ts.Timestamp)
return response, nil
}
@ -90,6 +90,6 @@ func (service serviceMessage) UpdateMessage(ctx context.Context, request domainM
}
response.MessageID = ts.ID
response.Status = fmt.Sprintf("Update message success %s (server timestamp: %s)", request.Phone, ts)
response.Status = fmt.Sprintf("Update message success %s (server timestamp: %s)", request.Phone, ts.Timestamp)
return response, nil
}

17
src/services/send.go

@ -13,6 +13,7 @@ import (
"github.com/aldinokemal/go-whatsapp-web-multidevice/validations"
fiberUtils "github.com/gofiber/fiber/v2/utils"
"github.com/h2non/bimg"
"github.com/sirupsen/logrus"
"github.com/valyala/fasthttp"
"go.mau.fi/whatsmeow"
waProto "go.mau.fi/whatsmeow/binary/proto"
@ -108,6 +109,9 @@ func (service serviceSend) SendImage(ctx context.Context, request domainSend.Ima
// Generate thumbnail with smalled image
openThumbnailBuffer, err := bimg.Read(oriImagePath)
if err != nil {
return response, pkgError.InternalServerError(fmt.Sprintf("failed to read image %v", err))
}
imageThumbnail = fmt.Sprintf("%s/thumbnails-%s", config.PathSendItems, request.Image.Filename)
thumbnailImage, err := bimg.NewImage(openThumbnailBuffer).Process(bimg.Options{Quality: 90, Width: 100, Embed: true})
if err != nil {
@ -122,6 +126,9 @@ func (service serviceSend) SendImage(ctx context.Context, request domainSend.Ima
if request.Compress {
// Resize image
openImageBuffer, err := bimg.Read(oriImagePath)
if err != nil {
return response, pkgError.InternalServerError(fmt.Sprintf("failed to read image %v", err))
}
newImage, err := bimg.NewImage(openImageBuffer).Process(bimg.Options{Quality: 90, Width: 600, Embed: true})
if err != nil {
return response, err
@ -146,10 +153,13 @@ func (service serviceSend) SendImage(ctx context.Context, request domainSend.Ima
}
uploadedImage, err := service.WaCli.Upload(context.Background(), dataWaImage, whatsmeow.MediaImage)
if err != nil {
fmt.Printf("Failed to upload file: %v", err)
fmt.Printf("failed to upload file: %v", err)
return response, err
}
dataWaThumbnail, err := os.ReadFile(imageThumbnail)
if err != nil {
return response, pkgError.InternalServerError(fmt.Sprintf("failed to read thumbnail %v", err))
}
msg := &waProto.Message{ImageMessage: &waProto.ImageMessage{
JpegThumbnail: dataWaThumbnail,
@ -258,6 +268,9 @@ func (service serviceSend) SendVideo(ctx context.Context, request domainSend.Vid
// Resize Thumbnail
openImageBuffer, err := bimg.Read(thumbnailVideoPath)
if err != nil {
return response, pkgError.InternalServerError(fmt.Sprintf("failed to read thumbnail %v", err))
}
resize, err := bimg.NewImage(openImageBuffer).Process(bimg.Options{Quality: 90, Width: 600, Embed: true})
if err != nil {
return response, pkgError.InternalServerError(fmt.Sprintf("failed to resize thumbnail %v", err))
@ -321,7 +334,7 @@ func (service serviceSend) SendVideo(ctx context.Context, request domainSend.Vid
go func() {
errDelete := utils.RemoveFile(1, deletedItems...)
if errDelete != nil {
fmt.Println(errDelete)
logrus.Infof("error when deleting picture: %v", errDelete)
}
}()
if err != nil {

6
src/services/user.go

@ -121,10 +121,8 @@ func (service userService) MyListGroups(_ context.Context) (response domainUser.
return
}
fmt.Printf("%+v\n", groups)
if groups != nil {
for _, group := range groups {
response.Data = append(response.Data, *group)
}
for _, group := range groups {
response.Data = append(response.Data, *group)
}
return response, nil
}

Loading…
Cancel
Save