Filtering of synchronized secrets on collection, organization, and/or folder (#12)
* Filtering feature, minor logic changes +: Add IP validation (to properly log IP even when trusted proxy is missing) +: Added synchronization of decrypted organization, collection, and folder names (for filtering purposes) +: Changed sync behavior to prevent collapsing multiple logins with the same name +: Added possibility to filter logins based on organization, collection, and folder name/id in GetSecret +: Added support for space character in secret name validation (it is also properly URL-decoded) * Update README * Fixes related to issues reported by CodeRabbit: +: Changed british use of organisations in README +: Reduced line count in parseSecretFilters by including helper function for filter dimensions resolution +: Added comment clarifying absence of existence checking on dimension IDs as opposed to names +: Removed efensive comma split logic on IPs (redundant due to IPValidation setting on Fiber) +: Changed Query validator to align with name validator (mainly removing hard-coded values) +: Added comments to decryptVaultLabel for clarity +: Change empty SyncNameMaps instance with emptySyncNameMaps helper for consistency +: Add lexical sort for lookupIDByName for deterministic result in case of multiple matches * Bumped logging to warn and added entity metadata in log * Unit tests: +: Added unit tests for every newly introduced or changed function +: Rewrote NewClient constructor to accept optional preloaded data (so it can be used in test scenarios) * Changes requested by CodeRabbit
This commit is contained in:
1 parent
cac042a5c4
commit
76b82d4dba
11 files changed
+1174
-88
No files matched your search
+16
-14
@@ -9,18 +9,18 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/compress"
|
||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||
"github.com/gofiber/fiber/v2/middleware/helmet"
|
||||
"github.com/gofiber/fiber/v2/middleware/limiter"
|
||||
"github.com/gofiber/fiber/v2/middleware/recover"
|
||||
"github.com/Turbootzz/vaultwarden-api/internal/auth"
|
||||
"github.com/Turbootzz/vaultwarden-api/internal/config"
|
||||
"github.com/Turbootzz/vaultwarden-api/internal/handlers"
|
||||
"github.com/Turbootzz/vaultwarden-api/internal/ipwhitelist"
|
||||
"github.com/Turbootzz/vaultwarden-api/internal/vaultwarden"
|
||||
"github.com/Turbootzz/vaultwarden-api/pkg/logger"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/compress"
|
||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||
"github.com/gofiber/fiber/v2/middleware/helmet"
|
||||
"github.com/gofiber/fiber/v2/middleware/limiter"
|
||||
"github.com/gofiber/fiber/v2/middleware/recover"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -74,15 +74,17 @@ func main() {
|
||||
|
||||
// Create Fiber app with security configurations.
|
||||
app := fiber.New(fiber.Config{
|
||||
AppName: "Vaultwarden API v2.0",
|
||||
DisableStartupMessage: false,
|
||||
ReadTimeout: cfg.ReadTimeout,
|
||||
WriteTimeout: cfg.WriteTimeout,
|
||||
ServerHeader: "",
|
||||
ErrorHandler: customErrorHandler(cfg.IsProd()),
|
||||
AppName: "Vaultwarden API v2.0",
|
||||
DisableStartupMessage: false,
|
||||
ReadTimeout: cfg.ReadTimeout,
|
||||
WriteTimeout: cfg.WriteTimeout,
|
||||
ServerHeader: "",
|
||||
ErrorHandler: customErrorHandler(cfg.IsProd()),
|
||||
EnableTrustedProxyCheck: true,
|
||||
TrustedProxies: getTrustedProxies(),
|
||||
ProxyHeader: fiber.HeaderXForwardedFor,
|
||||
TrustedProxies: getTrustedProxies(),
|
||||
ProxyHeader: fiber.HeaderXForwardedFor,
|
||||
// Avoid empty c.IP() when header is missing (e.g. behind a trusted proxy)
|
||||
EnableIPValidation: true,
|
||||
})
|
||||
|
||||
app.Use(helmet.New())
|
||||
|
||||
Reference in new issue
Block a user