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

5
src/config/settings.go

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

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

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

8
src/pkg/error/app_error.go

@ -101,8 +101,10 @@ func (err sessionSavedError) StatusCode() int {
} }
var ( 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") 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")) panic(pkgError.InternalServerError("Whatsapp client is not initialized"))
} }
if !waCli.IsConnected() { if !waCli.IsConnected() {
panic(pkgError.AuthError("you are not connect to services server, please reconnect"))
panic(pkgError.ErrNotConnected)
} else if !waCli.IsLoggedIn() { } 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: 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) 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) log.Infof("%s was delivered to %s at %s", evt.MessageIDs[0], evt.SourceString(), evt.Timestamp)
} }
case *events.Presence: 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.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 return response, nil
} }
@ -69,7 +69,7 @@ func (service serviceMessage) RevokeMessage(ctx context.Context, request domainM
} }
response.MessageID = ts.ID 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 return response, nil
} }
@ -90,6 +90,6 @@ func (service serviceMessage) UpdateMessage(ctx context.Context, request domainM
} }
response.MessageID = ts.ID 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 return response, nil
} }

17
src/services/send.go

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

6
src/services/user.go

@ -121,10 +121,8 @@ func (service userService) MyListGroups(_ context.Context) (response domainUser.
return return
} }
fmt.Printf("%+v\n", groups) 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 return response, nil
} }

Loading…
Cancel
Save