Improve/simplify error handling.

This commit is contained in:
Jonathan Lestrelin 2021-09-17 20:26:28 +02:00
parent 3e31a8b74f
commit 1d936552ce

View File

@ -149,7 +149,6 @@ class SearchPassService(dbus.service.Object):
return results return results
def send_password_to_gpaste(self, base_args, name, field=None): def send_password_to_gpaste(self, base_args, name, field=None):
try:
gpaste = self.session_bus.get_object( gpaste = self.session_bus.get_object(
"org.gnome.GPaste.Daemon", "/org/gnome/GPaste" "org.gnome.GPaste.Daemon", "/org/gnome/GPaste"
) )
@ -164,9 +163,7 @@ class SearchPassService(dbus.service.Object):
if match: if match:
password = match.group("value") password = match.group("value")
else: else:
raise RuntimeError( raise RuntimeError(f"The field {field} was not found in the pass file.")
f"The field {field} was not found in " + "the pass file."
)
else: else:
password = output.split("\n", 1)[0] password = output.split("\n", 1)[0]
try: try:
@ -174,35 +171,15 @@ class SearchPassService(dbus.service.Object):
except dbus.DBusException: except dbus.DBusException:
gpaste.AddPassword(name, password, dbus_interface="org.gnome.GPaste2") gpaste.AddPassword(name, password, dbus_interface="org.gnome.GPaste2")
if "otp" in base_args:
self.notify("Copied OTP password to clipboard:", body=f"<b>{name}</b>")
elif field is not None:
self.notify(
f"Copied field {field} to clipboard:", body=f"<b>{name}</b>"
)
else:
self.notify("Copied password to clipboard:", body=f"<b>{name}</b>")
except subprocess.CalledProcessError as e:
self.notify("Failed to copy password!", body=e.output, error=True)
except RuntimeError as e:
self.notify("Failed to copy field!", body=e.output, error=True)
def send_password_to_native_clipboard(self, base_args, name, field=None): def send_password_to_native_clipboard(self, base_args, name, field=None):
if field is not None: if field is not None or self.use_bw:
self.notify( raise RuntimeError("This feature requires GPaste.")
"Cannot copy field values.",
body="This feature requires GPaste.",
error=True,
)
return
pass_cmd = subprocess.run(base_args + ["-c", name]) result = subprocess.run(base_args + ["-c", name])
if pass_cmd.returncode: if result.returncode:
self.notify("Failed to copy password!", error=True) raise RuntimeError(
elif "otp" in base_args: f"Error while running pass: got return code {result.returncode}."
self.notify("Copied OTP password to clipboard:", body=f"<b>{name}</b>") )
else:
self.notify("Copied password to clipboard:", body=f"<b>{name}</b>")
def send_password_to_clipboard(self, name): def send_password_to_clipboard(self, name):
field = None field = None
@ -216,13 +193,22 @@ class SearchPassService(dbus.service.Object):
if name.startswith(":"): if name.startswith(":"):
field, name = name.split(" ", 1) field, name = name.split(" ", 1)
field = field[1:] field = field[1:]
try:
try: try:
self.send_password_to_gpaste(base_args, name, field) self.send_password_to_gpaste(base_args, name, field)
except dbus.DBusException: except dbus.DBusException:
# We couldn't join GPaste over D-Bus, # We couldn't join GPaste over D-Bus, use native clipboard
# use pass native clipboard copy
self.send_password_to_native_clipboard(base_args, name, field) self.send_password_to_native_clipboard(base_args, name, field)
if "otp" in base_args:
self.notify("Copied OTP password to clipboard:", body=f"<b>{name}</b>")
elif field is not None:
self.notify(
f"Copied field {field} to clipboard:", body=f"<b>{name}</b>"
)
else:
self.notify("Copied password to clipboard:", body=f"<b>{name}</b>")
except (subprocess.CalledProcessError, FileNotFoundError, RuntimeError) as e:
self.notify("Failed to copy password or field!", body=e.output, error=True)
def notify(self, message, body="", error=False): def notify(self, message, body="", error=False):
try: try: