From 94694741a76180f943e6e68723511e752b3d8b1d Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Tue, 23 Sep 2025 09:13:29 +0330 Subject: [PATCH] modernize the codebase Run the modernize linter across the codebase. Change generated by running: ``` go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./... ``` Ref: https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize --- cmd/CatsOfMastodonBotGo/main.go | 32 +++++++++++++++--------------- internal/auth/jwt.go | 11 +++++----- internal/services/postService.go | 10 +++------- internal/web/handlers/adminDash.go | 10 +++++----- internal/web/handlers/oauth.go | 8 ++++---- 5 files changed, 33 insertions(+), 38 deletions(-) diff --git a/cmd/CatsOfMastodonBotGo/main.go b/cmd/CatsOfMastodonBotGo/main.go index 0d29de6..1e104e9 100644 --- a/cmd/CatsOfMastodonBotGo/main.go +++ b/cmd/CatsOfMastodonBotGo/main.go @@ -23,18 +23,18 @@ func main() { // Configuration config.Load, - + // Database database.Connect, - + // Services services.NewPostService, services.NewImgKitHelper, - + // Auth auth.NewJwtTokenGenerator, auth.NewGiteaOauth2Token, - + // Handlers handlers.NewAdminDashboardHandler, handlers.NewApiEndpointHandler, @@ -44,7 +44,7 @@ func main() { fx.Invoke( // Start background tasks startBackgroundTasks, - + // Setup and start server server.SetupRouter, ), @@ -62,49 +62,49 @@ func startBackgroundTasks( lc.Append(fx.Hook{ OnStart: func(context.Context) error { ticker := time.NewTicker(10 * time.Minute) - + runFetchPosts := func() { ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() - + posts, err := postService.GetPostsFromApi(ctx, cfg.Tag, cfg.Instance) if err != nil { logger.Error("Failed to fetch posts", zap.Error(err)) return } - + existingPostIds := postService.GetExistingPostIds() existingAccountIds := postService.GetExistingAccountIds() newPosts := postService.GetNewPosts(existingPostIds, posts) newAccounts := postService.GetNewAccounts(existingAccountIds, newPosts) - + logger.Info("Fetched posts", zap.Int("total", len(posts)), zap.Int("existing", len(existingPostIds)), zap.Int("new", len(newPosts)), zap.Int("new_accounts", len(newAccounts))) - + if len(newAccounts) > 0 { count := postService.InsertNewAccounts(newAccounts) logger.Info("Inserted accounts", zap.Int("count", count)) } - + if len(newPosts) > 0 { count := postService.InsertNewPosts(newPosts) logger.Info("Inserted posts", zap.Int("count", count)) } } - + // Run initial fetch go runFetchPosts() - + // Start ticker go func() { for range ticker.C { runFetchPosts() } }() - + return nil }, OnStop: func(context.Context) error { @@ -129,6 +129,6 @@ func NewFXLogger() *FXLogger { return &FXLogger{logger: logger} } -func (l *FXLogger) Printf(str string, args ...interface{}) { +func (l *FXLogger) Printf(str string, args ...any) { l.logger.Sugar().Infof(str, args...) -} \ No newline at end of file +} diff --git a/internal/auth/jwt.go b/internal/auth/jwt.go index bf4e562..7583c11 100644 --- a/internal/auth/jwt.go +++ b/internal/auth/jwt.go @@ -2,6 +2,7 @@ package auth import ( "CatsOfMastodonBotGo/internal/config" + "maps" "strings" "time" @@ -17,16 +18,14 @@ func NewJwtTokenGenerator(cfg *config.Config) *JwtTokenGenerator { return &JwtTokenGenerator{cfg: cfg} } -func (j *JwtTokenGenerator) GenerateToken(claims map[string]interface{}) (string, error) { +func (j *JwtTokenGenerator) GenerateToken(claims map[string]any) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "exp": time.Now().AddDate(0, 0, 1).Unix(), "iat": time.Now().Unix(), "iss": j.cfg.JwtIssuer, "aud": j.cfg.JwtAudience, }) - for k, v := range claims { - token.Claims.(jwt.MapClaims)[k] = v - } + maps.Copy(token.Claims.(jwt.MapClaims), claims) return token.SignedString([]byte(j.cfg.JwtSecret)) } @@ -41,7 +40,7 @@ func (j *JwtTokenGenerator) GinMiddleware() gin.HandlerFunc { } tokenString := strings.TrimPrefix(authHeader, "Bearer ") - t, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) { + t, err := jwt.Parse(tokenString, func(t *jwt.Token) (any, error) { if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok { return nil, jwt.ErrSignatureInvalid } @@ -61,4 +60,4 @@ func (j *JwtTokenGenerator) GinMiddleware() gin.HandlerFunc { c.Next() } -} \ No newline at end of file +} diff --git a/internal/services/postService.go b/internal/services/postService.go index 8519a72..922d1ce 100644 --- a/internal/services/postService.go +++ b/internal/services/postService.go @@ -8,6 +8,7 @@ import ( "fmt" "math/rand" "net/http" + "slices" "strings" "gorm.io/gorm" @@ -163,10 +164,5 @@ func (ps *PostService) GetMedia() domain.MediaAttachment { } func arrayContains(arr []string, str string) bool { - for _, a := range arr { - if a == str { - return true - } - } - return false -} \ No newline at end of file + return slices.Contains(arr, str) +} diff --git a/internal/web/handlers/adminDash.go b/internal/web/handlers/adminDash.go index c60807f..91af58a 100644 --- a/internal/web/handlers/adminDash.go +++ b/internal/web/handlers/adminDash.go @@ -28,7 +28,7 @@ func NewAdminDashboardHandler( postService: postService, jwt: jwt, cfg: cfg, - imgKit: imgKit, + imgKit: imgKit, } } @@ -61,8 +61,8 @@ func (adh *AdminDashboardHandler) RejectMedia(c *gin.Context) { func (adh *AdminDashboardHandler) GetMedia(c *gin.Context) { media := adh.postService.GetMedia() // TODO: Fix this - we need to inject ImgKitHelper - media.PreviewUrl = adh.imgKit.GetPreviewUrl(media.RemoteUrl) - media.RemoteUrl = adh.imgKit.GetRemoteUrl(media.RemoteUrl) + media.PreviewUrl = adh.imgKit.GetPreviewUrl(media.RemoteUrl) + media.RemoteUrl = adh.imgKit.GetRemoteUrl(media.RemoteUrl) c.JSON(http.StatusOK, media) } @@ -77,7 +77,7 @@ func (adh *AdminDashboardHandler) Login(c *gin.Context) { } if input.Password == adh.cfg.AdminPassword { // Its more than enough for this project - token, err := adh.jwt.GenerateToken(map[string]interface{}{"role": "admin"}) + token, err := adh.jwt.GenerateToken(map[string]any{"role": "admin"}) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Token generation failed"}) return @@ -97,4 +97,4 @@ func (adh *AdminDashboardHandler) Login(c *gin.Context) { // Expose the JWT middleware for use in routes func (adh *AdminDashboardHandler) JWTMiddleware() gin.HandlerFunc { return adh.jwt.GinMiddleware() -} \ No newline at end of file +} diff --git a/internal/web/handlers/oauth.go b/internal/web/handlers/oauth.go index 01100dc..0a8bc9f 100644 --- a/internal/web/handlers/oauth.go +++ b/internal/web/handlers/oauth.go @@ -10,9 +10,9 @@ import ( ) type OauthLoginHandler struct { - jwt *auth.JwtTokenGenerator + jwt *auth.JwtTokenGenerator oauthHandler *auth.GiteaOAuth2Handler - cfg *config.Config + cfg *config.Config } func NewOauthLoginHandler( @@ -55,7 +55,7 @@ func (olh *OauthLoginHandler) LoginWithGitea(c *gin.Context) { // Check if the user's email is in the allowed list for _, email := range olh.cfg.GiteaOauthAllowedEmails { if email == userEmail { - token, err := olh.jwt.GenerateToken(map[string]interface{}{"role": "admin"}) + token, err := olh.jwt.GenerateToken(map[string]any{"role": "admin"}) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Token generation failed"}) return @@ -70,4 +70,4 @@ func (olh *OauthLoginHandler) LoginWithGitea(c *gin.Context) { c.JSON(401, gin.H{ "error": "oauth login failed or your email does not have access", }) -} \ No newline at end of file +}