Fix vault pin not settable without biometrics
This commit is contained in:
parent
f3954e196c
commit
d2cd2da7e2
|
@ -7,7 +7,7 @@ import (
|
||||||
"github.com/quexten/goldwarden/agent/bitwarden/crypto"
|
"github.com/quexten/goldwarden/agent/bitwarden/crypto"
|
||||||
"github.com/quexten/goldwarden/agent/config"
|
"github.com/quexten/goldwarden/agent/config"
|
||||||
"github.com/quexten/goldwarden/agent/sockets"
|
"github.com/quexten/goldwarden/agent/sockets"
|
||||||
"github.com/quexten/goldwarden/agent/systemauth"
|
"github.com/quexten/goldwarden/agent/systemauth/biometrics"
|
||||||
"github.com/quexten/goldwarden/agent/systemauth/pinentry"
|
"github.com/quexten/goldwarden/agent/systemauth/pinentry"
|
||||||
"github.com/quexten/goldwarden/agent/vault"
|
"github.com/quexten/goldwarden/agent/vault"
|
||||||
|
|
||||||
|
@ -160,6 +160,56 @@ func handleWipeVault(request messages.IPCMessage, cfg *config.Config, vault *vau
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleUpdateVaultPin(request messages.IPCMessage, cfg *config.Config, vault *vault.Vault, callingContext *sockets.CallingContext) (response messages.IPCMessage, err error) {
|
func handleUpdateVaultPin(request messages.IPCMessage, cfg *config.Config, vault *vault.Vault, callingContext *sockets.CallingContext) (response messages.IPCMessage, err error) {
|
||||||
|
//todo refactor
|
||||||
|
if cfg.HasPin() {
|
||||||
|
authenticated := false
|
||||||
|
if cfg.IsLocked() {
|
||||||
|
actionsLog.Info("Browser Biometrics: Vault is locked, asking for pin...")
|
||||||
|
err := cfg.TryUnlock(vault)
|
||||||
|
if err != nil {
|
||||||
|
actionsLog.Info("Browser Biometrics: Vault not unlocked")
|
||||||
|
return messages.IPCMessage{}, err
|
||||||
|
}
|
||||||
|
ctx1 := context.Background()
|
||||||
|
success := sync(ctx1, vault, cfg)
|
||||||
|
if !success {
|
||||||
|
actionsLog.Info("Browser Biometrics: Vault not synced")
|
||||||
|
return messages.IPCMessage{}, err
|
||||||
|
}
|
||||||
|
actionsLog.Info("Browser Biometrics: Vault unlocked")
|
||||||
|
authenticated = true
|
||||||
|
} else {
|
||||||
|
authenticated = biometrics.CheckBiometrics(biometrics.BrowserBiometrics)
|
||||||
|
if !authenticated {
|
||||||
|
// todo, skip when explicitly denied instead of error
|
||||||
|
actionsLog.Info("Browser Biometrics: Biometrics not approved, asking for pin...")
|
||||||
|
pin, err := pinentry.GetPassword("Goldwarden", "Enter your pin to unlock your vault")
|
||||||
|
if err == nil {
|
||||||
|
authenticated = cfg.VerifyPin(pin)
|
||||||
|
if !authenticated {
|
||||||
|
actionsLog.Info("Browser Biometrics: Pin not approved")
|
||||||
|
} else {
|
||||||
|
actionsLog.Info("Browser Biometrics: Pin approved")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
actionsLog.Info("Browser Biometrics: Biometrics approved")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !authenticated {
|
||||||
|
response, err = messages.IPCMessageFromPayload(messages.ActionResponse{
|
||||||
|
Success: false,
|
||||||
|
Message: "Not authenticated",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return messages.IPCMessage{}, err
|
||||||
|
} else {
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pin, err := pinentry.GetPassword("Pin Change", "Enter your desired pin")
|
pin, err := pinentry.GetPassword("Pin Change", "Enter your desired pin")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response, err = messages.IPCMessageFromPayload(messages.ActionResponse{
|
response, err = messages.IPCMessageFromPayload(messages.ActionResponse{
|
||||||
|
@ -214,7 +264,7 @@ func init() {
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.UnlockVaultRequest{}), handleUnlockVault)
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.UnlockVaultRequest{}), handleUnlockVault)
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.LockVaultRequest{}), handleLockVault)
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.LockVaultRequest{}), handleLockVault)
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.WipeVaultRequest{}), handleWipeVault)
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.WipeVaultRequest{}), handleWipeVault)
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.UpdateVaultPINRequest{}), ensureBiometricsAuthorized(systemauth.AccessVault, handleUpdateVaultPin))
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.UpdateVaultPINRequest{}), handleUpdateVaultPin)
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.GetVaultPINRequest{}), handlePinStatus)
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.GetVaultPINRequest{}), handlePinStatus)
|
||||||
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.VaultStatusRequest{}), handleVaultStatus)
|
AgentActionsRegistry.Register(messages.MessageTypeForEmptyPayload(messages.VaultStatusRequest{}), handleVaultStatus)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue