39 lines
819 B
Go
39 lines
819 B
Go
|
|
package middleware
|
||
|
|
|
||
|
|
import (
|
||
|
|
"accounting-app/internal/config"
|
||
|
|
"accounting-app/pkg/api"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
)
|
||
|
|
|
||
|
|
// AdminMiddleware provides admin authentication middleware
|
||
|
|
type AdminMiddleware struct {
|
||
|
|
cfg *config.Config
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewAdminMiddleware creates a new AdminMiddleware
|
||
|
|
func NewAdminMiddleware(cfg *config.Config) *AdminMiddleware {
|
||
|
|
return &AdminMiddleware{
|
||
|
|
cfg: cfg,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// RequireAdminKey checks for the Admin-Secret-Key header
|
||
|
|
func (m *AdminMiddleware) RequireAdminKey() gin.HandlerFunc {
|
||
|
|
return func(c *gin.Context) {
|
||
|
|
key := c.GetHeader("X-Admin-Secret-Key")
|
||
|
|
if key == "" {
|
||
|
|
// Fallback to query param for easier testing
|
||
|
|
key = c.Query("admin_secret")
|
||
|
|
}
|
||
|
|
|
||
|
|
if key != m.cfg.AdminSecretKey {
|
||
|
|
api.Unauthorized(c, "Invalid or missing admin secret key")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
c.Next()
|
||
|
|
}
|
||
|
|
}
|