solved issues
This commit is contained in:
1 parent
4131345add
commit
349ebd7562
4 files changed
+26
-9
No files matched your search
+2
-1
@@ -1,11 +1,12 @@
|
|||||||
# Server Configuration
|
# Server Configuration
|
||||||
API_PORT=8080
|
API_PORT=8080
|
||||||
ENVIRONMENT=production # IMPORTANT: Set to 'production' in production!
|
ENVIRONMENT=development # IMPORTANT: Change to 'production' for production deployments!
|
||||||
|
|
||||||
# Security - REQUIRED
|
# Security - REQUIRED
|
||||||
API_KEY=CHANGE-THIS-USE-32-CHARS-MINIMUM!!
|
API_KEY=CHANGE-THIS-USE-32-CHARS-MINIMUM!!
|
||||||
|
|
||||||
# CORS Configuration
|
# CORS Configuration
|
||||||
|
# IMPORTANT: Update this for production deployments
|
||||||
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
||||||
|
|
||||||
# Vaultwarden Configuration - REQUIRED
|
# Vaultwarden Configuration - REQUIRED
|
||||||
|
|||||||
+7
-1
@@ -30,10 +30,16 @@ func main() {
|
|||||||
|
|
||||||
// Initialize Vaultwarden client
|
// Initialize Vaultwarden client
|
||||||
var vaultClient *vaultwarden.Client
|
var vaultClient *vaultwarden.Client
|
||||||
if cfg.VaultwardenClientID != "" && cfg.VaultwardenSecret != "" {
|
if cfg.VaultwardenClientID != "" || cfg.VaultwardenSecret != "" {
|
||||||
|
if cfg.VaultwardenClientID == "" || cfg.VaultwardenSecret == "" {
|
||||||
|
logger.Error.Fatal("Both VaultwardenClientID and VaultwardenSecret must be provided for API key authentication")
|
||||||
|
}
|
||||||
logger.Info.Println("Using API key authentication (recommended)")
|
logger.Info.Println("Using API key authentication (recommended)")
|
||||||
vaultClient = vaultwarden.NewClientWithAuth(cfg.VaultwardenURL, cfg.VaultwardenClientID, cfg.VaultwardenSecret, cfg.CacheTTL)
|
vaultClient = vaultwarden.NewClientWithAuth(cfg.VaultwardenURL, cfg.VaultwardenClientID, cfg.VaultwardenSecret, cfg.CacheTTL)
|
||||||
} else {
|
} else {
|
||||||
|
if cfg.VaultwardenToken == "" {
|
||||||
|
logger.Error.Fatal("VaultwardenToken must be provided for legacy session token authentication")
|
||||||
|
}
|
||||||
logger.Warn.Println("Using session token authentication (legacy - token will expire!)")
|
logger.Warn.Println("Using session token authentication (legacy - token will expire!)")
|
||||||
vaultClient = vaultwarden.NewClient(cfg.VaultwardenURL, cfg.VaultwardenToken, cfg.CacheTTL)
|
vaultClient = vaultwarden.NewClient(cfg.VaultwardenURL, cfg.VaultwardenToken, cfg.CacheTTL)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,10 +120,13 @@ func (am *AuthManager) refreshAccessToken() (string, error) {
|
|||||||
return "", fmt.Errorf("failed to decode token response: %w", err)
|
return "", fmt.Errorf("failed to decode token response: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the token
|
|
||||||
am.accessToken = tokenResp.AccessToken
|
am.accessToken = tokenResp.AccessToken
|
||||||
// Refresh 5 minutes before expiry to avoid edge cases
|
|
||||||
am.tokenExpiry = time.Now().Add(time.Duration(tokenResp.ExpiresIn-300) * time.Second)
|
expiryBuffer := 300
|
||||||
|
if tokenResp.ExpiresIn < expiryBuffer {
|
||||||
|
expiryBuffer = tokenResp.ExpiresIn / 2
|
||||||
|
}
|
||||||
|
am.tokenExpiry = time.Now().Add(time.Duration(tokenResp.ExpiresIn-expiryBuffer) * time.Second)
|
||||||
|
|
||||||
logger.Info.Printf("Successfully obtained access token (expires in %d seconds)", tokenResp.ExpiresIn)
|
logger.Info.Printf("Successfully obtained access token (expires in %d seconds)", tokenResp.ExpiresIn)
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package vaultwarden
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -38,13 +39,15 @@ func (c *Client) FetchSecretViaCLI(name string) (string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command("bw", "get", "item", name, "--session", c.token)
|
cmd := exec.Command("bw", "get", "item", name)
|
||||||
|
cmd.Env = append(os.Environ(), fmt.Sprintf("BW_SESSION=%s", c.token))
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Info.Printf("Exact match failed, searching for: %s", name)
|
logger.Info.Printf("Exact match failed, searching for: %s", name)
|
||||||
|
|
||||||
searchCmd := exec.Command("bw", "list", "items", "--search", name, "--session", c.token)
|
searchCmd := exec.Command("bw", "list", "items", "--search", name)
|
||||||
|
searchCmd.Env = append(os.Environ(), fmt.Sprintf("BW_SESSION=%s", c.token))
|
||||||
searchOutput, searchErr := searchCmd.Output()
|
searchOutput, searchErr := searchCmd.Output()
|
||||||
if searchErr != nil {
|
if searchErr != nil {
|
||||||
return "", fmt.Errorf("failed to search for item: %w", searchErr)
|
return "", fmt.Errorf("failed to search for item: %w", searchErr)
|
||||||
@@ -59,7 +62,10 @@ func (c *Client) FetchSecretViaCLI(name string) (string, error) {
|
|||||||
return "", fmt.Errorf("secret not found: %s", name)
|
return "", fmt.Errorf("secret not found: %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the first matching item
|
if len(items) > 1 {
|
||||||
|
logger.Warn.Printf("Multiple items found for '%s', using first match: '%s' (ID: %s)", name, items[0].Name, items[0].ID)
|
||||||
|
}
|
||||||
|
|
||||||
output, err = json.Marshal(items[0])
|
output, err = json.Marshal(items[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to marshal item: %w", err)
|
return "", fmt.Errorf("failed to marshal item: %w", err)
|
||||||
@@ -98,7 +104,8 @@ func (c *Client) extractValueFromItem(item BitwardenItem) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) SyncVault() error {
|
func (c *Client) SyncVault() error {
|
||||||
cmd := exec.Command("bw", "sync", "--session", c.token)
|
cmd := exec.Command("bw", "sync")
|
||||||
|
cmd.Env = append(os.Environ(), fmt.Sprintf("BW_SESSION=%s", c.token))
|
||||||
output, err := cmd.CombinedOutput()
|
output, err := cmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to sync vault: %w, output: %s", err, output)
|
return fmt.Errorf("failed to sync vault: %w, output: %s", err, output)
|
||||||
|
|||||||
Reference in new issue
Block a user