1
1
mirror of https://github.com/quexten/goldwarden.git synced 2024-12-27 13:23:09 +03:00
goldwarden/agent/actions/ssh.go

63 lines
2.0 KiB
Go
Raw Normal View History

2023-07-17 04:23:26 +03:00
package actions
import (
"context"
"strings"
"github.com/quexten/goldwarden/agent/bitwarden"
"github.com/quexten/goldwarden/agent/config"
"github.com/quexten/goldwarden/agent/sockets"
"github.com/quexten/goldwarden/agent/ssh"
2023-09-12 02:22:48 +03:00
"github.com/quexten/goldwarden/agent/systemauth/biometrics"
2023-07-17 04:23:26 +03:00
"github.com/quexten/goldwarden/agent/vault"
"github.com/quexten/goldwarden/ipc"
2023-08-21 19:37:34 +03:00
"github.com/quexten/goldwarden/logging"
2023-07-17 04:23:26 +03:00
)
2023-08-21 19:37:34 +03:00
var actionsLog = logging.GetLogger("Goldwarden", "Actions")
2023-07-17 04:23:26 +03:00
2023-09-12 19:56:35 +03:00
func handleAddSSH(msg ipc.IPCMessage, cfg *config.Config, vault *vault.Vault, callingContext *sockets.CallingContext) (response ipc.IPCMessage, err error) {
2023-07-17 04:23:26 +03:00
req := msg.ParsedPayload().(ipc.CreateSSHKeyRequest)
cipher, publicKey := ssh.NewSSHKeyCipher(req.Name, vault.Keyring)
response, err = ipc.IPCMessageFromPayload(ipc.ActionResponse{
Success: true,
})
if err != nil {
panic(err)
}
token, err := cfg.GetToken()
ctx := context.WithValue(context.TODO(), bitwarden.AuthToken{}, token.AccessToken)
ciph, err := bitwarden.PostCipher(ctx, cipher, cfg)
if err == nil {
vault.AddOrUpdateSecureNote(ciph)
} else {
actionsLog.Warn("Error posting ssh key cipher: " + err.Error())
}
response, err = ipc.IPCMessageFromPayload(ipc.CreateSSHKeyResponse{
Digest: strings.ReplaceAll(publicKey, "\n", "") + " " + req.Name,
})
return
}
2023-09-12 19:56:35 +03:00
func handleListSSH(msg ipc.IPCMessage, cfg *config.Config, vault *vault.Vault, callingContext *sockets.CallingContext) (response ipc.IPCMessage, err error) {
2023-07-17 04:23:26 +03:00
keys := vault.GetSSHKeys()
keyStrings := make([]string, 0)
for _, key := range keys {
keyStrings = append(keyStrings, strings.ReplaceAll(key.PublicKey+" "+key.Name, "\n", ""))
}
response, err = ipc.IPCMessageFromPayload(ipc.GetSSHKeysResponse{
Keys: keyStrings,
})
return
}
func init() {
2023-09-12 02:22:48 +03:00
AgentActionsRegistry.Register(ipc.IPCMessageTypeCreateSSHKeyRequest, ensureEverything(biometrics.SSHKey, handleAddSSH))
2023-07-17 04:23:26 +03:00
AgentActionsRegistry.Register(ipc.IPCMessageTypeGetSSHKeysRequest, ensureIsNotLocked(ensureIsLoggedIn(handleListSSH)))
}