Fix api token breaking authentication
This commit is contained in:
parent
6631979e2f
commit
7c53863578
5 changed files with 24 additions and 4 deletions
|
|
@ -34,10 +34,13 @@ func handleLogin(msg messages.IPCMessage, cfg *config.Config, vault *vault.Vault
|
||||||
var masterpasswordHash string
|
var masterpasswordHash string
|
||||||
|
|
||||||
if secret, err := cfg.GetClientSecret(); err == nil && secret != "" {
|
if secret, err := cfg.GetClientSecret(); err == nil && secret != "" {
|
||||||
|
actionsLog.Info("Logging in with client secret")
|
||||||
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithApiKey(ctx, req.Email, cfg, vault)
|
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithApiKey(ctx, req.Email, cfg, vault)
|
||||||
} else if req.Passwordless {
|
} else if req.Passwordless {
|
||||||
|
actionsLog.Info("Logging in with passwordless")
|
||||||
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithDevice(ctx, req.Email, cfg, vault)
|
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithDevice(ctx, req.Email, cfg, vault)
|
||||||
} else {
|
} else {
|
||||||
|
actionsLog.Info("Logging in with master password")
|
||||||
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithMasterpassword(ctx, req.Email, cfg, vault)
|
token, masterKey, masterpasswordHash, err = bitwarden.LoginWithMasterpassword(ctx, req.Email, cfg, vault)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,8 @@ func (c *Config) Purge() {
|
||||||
c.ConfigFile.EncryptedMasterPasswordHash = ""
|
c.ConfigFile.EncryptedMasterPasswordHash = ""
|
||||||
c.ConfigFile.EncryptedToken = ""
|
c.ConfigFile.EncryptedToken = ""
|
||||||
c.ConfigFile.EncryptedUserSymmetricKey = ""
|
c.ConfigFile.EncryptedUserSymmetricKey = ""
|
||||||
|
c.ConfigFile.EncryptedClientID = ""
|
||||||
|
c.ConfigFile.EncryptedClientSecret = ""
|
||||||
c.ConfigFile.ConfigKeyHash = ""
|
c.ConfigFile.ConfigKeyHash = ""
|
||||||
c.ConfigFile.EncryptedMasterKey = ""
|
c.ConfigFile.EncryptedMasterKey = ""
|
||||||
key := NewBuffer(32, c.useMemguard)
|
key := NewBuffer(32, c.useMemguard)
|
||||||
|
|
@ -189,6 +191,8 @@ func (c *Config) UpdatePin(password string, write bool) {
|
||||||
plaintextUserSymmetricKey, err3 := c.decryptString(c.ConfigFile.EncryptedUserSymmetricKey)
|
plaintextUserSymmetricKey, err3 := c.decryptString(c.ConfigFile.EncryptedUserSymmetricKey)
|
||||||
plaintextEncryptedMasterPasswordHash, err4 := c.decryptString(c.ConfigFile.EncryptedMasterPasswordHash)
|
plaintextEncryptedMasterPasswordHash, err4 := c.decryptString(c.ConfigFile.EncryptedMasterPasswordHash)
|
||||||
plaintextMasterKey, err5 := c.decryptString(c.ConfigFile.EncryptedMasterKey)
|
plaintextMasterKey, err5 := c.decryptString(c.ConfigFile.EncryptedMasterKey)
|
||||||
|
plaintextClientID, err6 := c.decryptString(c.ConfigFile.EncryptedClientID)
|
||||||
|
plaintextClientSecret, err7 := c.decryptString(c.ConfigFile.EncryptedClientSecret)
|
||||||
|
|
||||||
key := NewBufferFromBytes(newKey, c.useMemguard)
|
key := NewBufferFromBytes(newKey, c.useMemguard)
|
||||||
c.key = &key
|
c.key = &key
|
||||||
|
|
@ -205,6 +209,12 @@ func (c *Config) UpdatePin(password string, write bool) {
|
||||||
if err5 == nil {
|
if err5 == nil {
|
||||||
c.ConfigFile.EncryptedMasterKey, err5 = c.encryptString(plaintextMasterKey)
|
c.ConfigFile.EncryptedMasterKey, err5 = c.encryptString(plaintextMasterKey)
|
||||||
}
|
}
|
||||||
|
if err6 == nil {
|
||||||
|
c.ConfigFile.EncryptedClientID, err6 = c.encryptString(plaintextClientID)
|
||||||
|
}
|
||||||
|
if err7 == nil {
|
||||||
|
c.ConfigFile.EncryptedClientSecret, err7 = c.encryptString(plaintextClientSecret)
|
||||||
|
}
|
||||||
c.mu.Unlock()
|
c.mu.Unlock()
|
||||||
|
|
||||||
if write {
|
if write {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/quexten/goldwarden/ipc/messages"
|
"github.com/quexten/goldwarden/ipc/messages"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
@ -116,6 +117,10 @@ var setApiClientIDCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
id := args[0]
|
id := args[0]
|
||||||
|
if len(id) >= 2 && strings.HasPrefix(id, "\"") && strings.HasSuffix(id, "\"") {
|
||||||
|
id = id[1 : len(id)-1]
|
||||||
|
}
|
||||||
|
id = strings.TrimSpace(id)
|
||||||
request := messages.SetClientIDRequest{}
|
request := messages.SetClientIDRequest{}
|
||||||
request.Value = id
|
request.Value = id
|
||||||
|
|
||||||
|
|
@ -149,6 +154,10 @@ var setApiSecretCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
secret := args[0]
|
secret := args[0]
|
||||||
|
if len(secret) >= 2 && strings.HasPrefix(secret, "\"") && strings.HasSuffix(secret, "\"") {
|
||||||
|
secret = secret[1 : len(secret)-1]
|
||||||
|
}
|
||||||
|
secret = strings.TrimSpace(secret)
|
||||||
request := messages.SetClientSecretRequest{}
|
request := messages.SetClientSecretRequest{}
|
||||||
request.Value = secret
|
request.Value = secret
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@ def set_notification_url(url):
|
||||||
raise Exception("Failed to initialize repository, err", result.stderr)
|
raise Exception("Failed to initialize repository, err", result.stderr)
|
||||||
|
|
||||||
def set_client_id(client_id):
|
def set_client_id(client_id):
|
||||||
restic_cmd = f"{BINARY_PATH} config set-client-id {client_id}"
|
restic_cmd = f"{BINARY_PATH} config set-client-id \"{client_id}\""
|
||||||
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
raise Exception("Failed err", result.stderr)
|
raise Exception("Failed err", result.stderr)
|
||||||
|
|
||||||
def set_client_secret(client_secret):
|
def set_client_secret(client_secret):
|
||||||
restic_cmd = f"{BINARY_PATH} config set-client-secret {client_secret}"
|
restic_cmd = f"{BINARY_PATH} config set-client-secret \"{client_secret}\""
|
||||||
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
raise Exception("Failed err", result.stderr)
|
raise Exception("Failed err", result.stderr)
|
||||||
|
|
|
||||||
|
|
@ -304,10 +304,8 @@ def show_login():
|
||||||
def login():
|
def login():
|
||||||
res = goldwarden.login_with_password(email_entry.get_text(), "password")
|
res = goldwarden.login_with_password(email_entry.get_text(), "password")
|
||||||
def handle_res():
|
def handle_res():
|
||||||
print("handle res", res)
|
|
||||||
if res == "ok":
|
if res == "ok":
|
||||||
dialog.close()
|
dialog.close()
|
||||||
print("ok")
|
|
||||||
elif res == "badpass":
|
elif res == "badpass":
|
||||||
bad_pass_diag = Gtk.MessageDialog(transient_for=dialog, modal=True, message_type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, text="Bad password")
|
bad_pass_diag = Gtk.MessageDialog(transient_for=dialog, modal=True, message_type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, text="Bad password")
|
||||||
bad_pass_diag.connect("response", lambda dialog, response: bad_pass_diag.close())
|
bad_pass_diag.connect("response", lambda dialog, response: bad_pass_diag.close())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue