diff --git a/com.angoosh.RDPConnect/com.angoosh.RDPConnect.metainfo.xml b/com.angoosh.RDPConnect/com.angoosh.RDPConnect.metainfo.xml
index 0012b6b..21d718f 100644
--- a/com.angoosh.RDPConnect/com.angoosh.RDPConnect.metainfo.xml
+++ b/com.angoosh.RDPConnect/com.angoosh.RDPConnect.metainfo.xml
@@ -67,6 +67,12 @@
Updated to newest FreeRDP which seems to fix issues with hanging / freezing
+
+ https://gitea.farmdash.org/angoosh/Flatpaks/src/tag/1.3.0
+
+ Changed pasword storage from file to system keyring. Still using file for compatibility. Also added menu for credential selection.
+
+
diff --git a/com.angoosh.RDPConnect/com.angoosh.RDPConnect.yml b/com.angoosh.RDPConnect/com.angoosh.RDPConnect.yml
index 48fe765..979a4b3 100644
--- a/com.angoosh.RDPConnect/com.angoosh.RDPConnect.yml
+++ b/com.angoosh.RDPConnect/com.angoosh.RDPConnect.yml
@@ -31,6 +31,7 @@ finish-args:
- --filesystem=xdg-download
- --socket=pcsc
# - --socket=system-bus
+ - --socket=session-bus
# - --talk-name=org.freedesktop.Flatpak
add-build-extensions:
@@ -68,7 +69,7 @@ modules:
build-args:
- --share=network
build-commands:
- - pip3 install PyGObject cryptography
+ - pip3 install PyGObject cryptography keyring
- name: rdpconnect
buildsystem: simple
diff --git a/com.angoosh.RDPConnect/main.py b/com.angoosh.RDPConnect/main.py
index 708191c..e8765a4 100755
--- a/com.angoosh.RDPConnect/main.py
+++ b/com.angoosh.RDPConnect/main.py
@@ -18,13 +18,15 @@ from cryptography.fernet import Fernet
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw, Gdk, Gio
+import keyring
APPID = "com.angoosh.RDPConnect"
HOMEDIR = os.path.expanduser('~')
-VERSION = "1.2.0"
+VERSION = "1.3.0"
conn_info = {}
+hist_info = {}
settings = {}
settings["extra_params"] = {}
fernet = ""
@@ -32,7 +34,7 @@ fernet = ""
def load_keys():
global fernet
cryptoKey = ""
- try:
+ try:
with open(HOMEDIR+"/.config/rdpconnect/.key", "r") as keyfile:
cryptoKey = str.encode(keyfile.readline())
print("Encription key loaded")
@@ -48,15 +50,27 @@ def load_config():
global conn_info, settings
loaded_json = ""
try:
- with open(HOMEDIR+"/.config/rdpconnect/connection.json", "r") as connection_file:
+ with open(HOMEDIR+"/.config/rdpconnect/history.json", "r") as history_file:
for line in connection_file:
loaded_json += line
- conn_info = json.loads(loaded_json)
+ hist_info = json.loads(loaded_json)
+ last_conn = conn_info[max(hist_info)]
+ conn_info["user"] = last_conn.split('@')[0]
+ conn_info["ip"] = last_conn.split('@')[1]
+ conn_info["passwd"] = keyring.get_password("rdpconnect", last_conn)
- conn_info["passwd"] = fernet.decrypt(str.encode(conn_info["passwd"])).decode()
except:
- print("[WARN] FILE: "+HOMEDIR+"/.config/rdpconnect/connection.json doesn't exist")
+ try:
+ with open(HOMEDIR+"/.config/rdpconnect/connection.json", "r") as connection_file:
+ for line in connection_file:
+ loaded_json += line
+
+ conn_info = json.loads(loaded_json)
+
+ conn_info["passwd"] = fernet.decrypt(str.encode(conn_info["passwd"])).decode()
+ except:
+ print("[WARN] FILE: "+HOMEDIR+"/.config/rdpconnect/connection.json doesn't exist")
loaded_json = ""
try:
@@ -72,10 +86,10 @@ class PreferencesWindow(Gtk.Window):
global settings
def __init__(self, **kwargs):
super().__init__(**kwargs)
-
+
self.builder = Gtk.Builder(self)
self.builder.add_from_file("/app/preferences.ui")
-
+
self.resx = self.builder.get_object("resx")
self.resy = self.builder.get_object("resy")
self.monitors = self.builder.get_object("monitors")
@@ -85,7 +99,7 @@ class PreferencesWindow(Gtk.Window):
self.mic = self.builder.get_object("mic")
self.dynres = self.builder.get_object("dynres")
self.clipboard = self.builder.get_object("clipboard")
-
+
try:
self.clipboard.set_state(settings["extra_params"]["clipboard"])
self.clipboard.set_active(settings["extra_params"]["clipboard"])
@@ -129,62 +143,62 @@ class PreferencesWindow(Gtk.Window):
self.resy.get_buffer().set_text(str(settings["extra_params"]["h"]), len(settings["extra_params"]["h"]))
except:
pass
-
+
pref_window = self.builder.get_object("pref_window")
pref_window.show()
-
+
def f_resx(self, app):
settings["extra_params"]["w"] = self.resx.get_buffer().get_text()
-
+
def f_resy(self, app):
settings["extra_params"]["h"] = self.resy.get_buffer().get_text()
-
+
def monconf(self, app):
settings["extra_params"]["monitors"] = self.monitors.get_buffer().get_text()
-
+
def clipboard(self, app, state):
if state:
settings["extra_params"]["clipboard"] = True
else:
settings["extra_params"]["clipboard"] = False
-
+
def dynres(self, app, state):
if state:
settings["extra_params"]["dynamic-resolution"] = True
else:
settings["extra_params"]["dynamic-resolution"] = False
-
+
def microphone(self, app, state):
if state:
settings["extra_params"]["microphone"] = True
else:
settings["extra_params"]["microphone"] = False
-
+
def sound(self, app, state):
if state:
settings["extra_params"]["sound"] = True
else:
settings["extra_params"]["sound"] = False
-
+
def xfree(self, app, state):
if state:
settings["rdp_bin"] = "xfreerdp"
else:
settings["rdp_bin"] = "sdl-freerdp"
-
+
def fscr(self, app, state):
if state:
settings["extra_params"]["f"] = True
else:
settings["extra_params"]["f"] = False
-
+
def on_destroy(self, app):
print("Saving settings config to "+HOMEDIR+"/.config/rdpconnect/settings.json")
with open(HOMEDIR+"/.config/rdpconnect/settings.json", "w") as settings_file:
js = json.dumps(settings, sort_keys=True, indent=4, separators=(',', ': '))
settings_file.write(js)
-
+
class MyApp(Adw.Application):
def __init__(self, **kwargs):
super().__init__(**kwargs)
@@ -261,14 +275,23 @@ class MyApp(Adw.Application):
def saveConnConf(self):
if settings["save_conn"]:
password = conn_info["passwd"]
- conn_info["passwd"] = fernet.encrypt(password.encode()).decode("utf-8")
+ useratip = conn_info["user"] + "@" + conn_info["ip"]
+ with open(HOMEDIR+"/.config/rdpconnect/history.json", "a") as hist_file:
+ hist_id = str(int(max(hist_info)) + 1)
+ hist_info[hist_id] = useratip
+ js = json.dumps(hist_info, sort_keys=True, indent=4, separators=(',', ': '))
+ hist_file.write(js)
+ try:
+ keyring.set_password("rdpconnect", useratip, password)
+ except:
+ conn_info["passwd"] = fernet.encrypt(password.encode()).decode("utf-8")
- print("Saving connection config to "+HOMEDIR+"/.config/rdpconnect/connection.json")
- with open(HOMEDIR+"/.config/rdpconnect/connection.json", "w") as connection_file:
- js = json.dumps(conn_info, sort_keys=True, indent=4, separators=(',', ': '))
- connection_file.write(js)
+ print("Saving connection config to "+HOMEDIR+"/.config/rdpconnect/connection.json")
+ with open(HOMEDIR+"/.config/rdpconnect/connection.json", "w") as connection_file:
+ js = json.dumps(conn_info, sort_keys=True, indent=4, separators=(',', ': '))
+ connection_file.write(js)
- conn_info["passwd"] = password
+ conn_info["passwd"] = password
else:
with open(HOMEDIR+"/.config/rdpconnect/connection.json", "w") as connection_file:
connection_file.write("")
@@ -291,7 +314,7 @@ class MyApp(Adw.Application):
settings["rdp_bin"] = "sdl-freerdp"
self.saveConnConf()
-
+
extra_params = []
for item in settings["extra_params"]:
#check if is boolean
@@ -302,7 +325,7 @@ class MyApp(Adw.Application):
if str(settings["extra_params"][item]) != "":
print(str(settings["extra_params"][item]))
extra_params.append("/"+str(item)+":"+str(settings["extra_params"][item]))
-
+
print(extra_params)
try: