diff --git a/src/cmd/root.go b/src/cmd/root.go index 7dca168..a19d2c3 100644 --- a/src/cmd/root.go +++ b/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)), }) diff --git a/src/config/settings.go b/src/config/settings.go index 7581678..0538c16 100644 --- a/src/config/settings.go +++ b/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" diff --git a/src/internal/rest/middleware/basicauth.go b/src/internal/rest/middleware/basicauth.go index 3eae912..33e0023 100644 --- a/src/internal/rest/middleware/basicauth.go +++ b/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) } diff --git a/src/pkg/error/app_error.go b/src/pkg/error/app_error.go index 9520b43..79b9f93 100644 --- a/src/pkg/error/app_error.go +++ b/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") ) diff --git a/src/pkg/whatsapp/whatsapp.go b/src/pkg/whatsapp/whatsapp.go index 333dcd7..139dc0b 100644 --- a/src/pkg/whatsapp/whatsapp.go +++ b/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: diff --git a/src/services/message.go b/src/services/message.go index a796b80..9ba678a 100644 --- a/src/services/message.go +++ b/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 } diff --git a/src/services/send.go b/src/services/send.go index 6ad4006..62edb46 100644 --- a/src/services/send.go +++ b/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 { diff --git a/src/services/user.go b/src/services/user.go index 1d584a5..a6e7b8a 100644 --- a/src/services/user.go +++ b/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 }