From 7b96eafe544f9fc84f405746f4d9002fd6219548 Mon Sep 17 00:00:00 2001 From: emptybottle Date: Sat, 31 Aug 2024 18:53:47 +0200 Subject: [PATCH 1/2] PGPKey.from_blob has to receive a string --- passbolt/__init__.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/passbolt/__init__.py b/passbolt/__init__.py index b8684b6..bb766ac 100644 --- a/passbolt/__init__.py +++ b/passbolt/__init__.py @@ -24,13 +24,14 @@ def __init__( self.load_config( dict_config=dict_config, ) - # Load key if self.config.get("gpg_library", "PGPy") == "gnupg": self.gpg = gnupg.GPG(gpgbinary=self.config.get("gpgbinary", "gpg")) self.fingerprint = self.config.get("fingerprint", "") + else: - self.key, _ = PGPKey.from_blob(self.config.get("private_key")) + #raise Exception(PGPKey.from_blob(self.config.get("private_key"))) + self.key, _ = PGPKey.from_blob(str(self.config.get("private_key"))) self.fingerprint = self.key.fingerprint.replace(" ", "") self.base_url = self.config.get("base_url") self.login_url = f"{self.base_url}/auth/login.json" @@ -71,10 +72,10 @@ def load_config( "fingerprint": os.environ.get("PASSBOLT_FINGERPRINT", "undefined"), "verify": os.environ.get("PASSBOLT_VERIFY", True), } + def stage1(self): post = {"data": {"gpg_auth": {"keyid": self.fingerprint}}} - response = self.session.post(self.login_url, json=post) decoded_response = json.loads(response.text) @@ -90,6 +91,7 @@ def stage1(self): def decrypt(self, message): if self.config.get("gpg_library", "PGPy") == "gnupg": decrypt = self.gpg.decrypt(message) + return decrypt else: # can return str ou bytearray @@ -132,10 +134,9 @@ def stage2(self, nonce): "gpg_auth": {"keyid": self.fingerprint, "user_token_result": nonce} } } - + response = self.session.post(self.login_url, json=post) decoded_response = json.loads(response.text) - if decoded_response["header"]["code"] == 200: return True else: @@ -151,6 +152,7 @@ def get_token(self, cookie): def get_cookie(self): response = self.session.get(self.me_url) + cookie = response.headers.get("set-cookie") user_id = json.loads(response.text) self.user_id = user_id["body"]["id"] @@ -167,6 +169,7 @@ def login(self): self.pgp_message = self.stage1() if self.config.get("gpg_library", "PGPy") == "gnupg": self.nonce = self.decrypt(self.pgp_message) + else: self.nonce = self.decrypt(self.pgp_message).decode() self.authenticated = self.stage2(str(self.nonce)) @@ -329,6 +332,13 @@ def get_resources(self): secrete_data = json.loads(response.text)["body"] return secrete_data + + def get_folders(self): + url = f"{self.base_url}/folders.json" + response = self.session.get(url) + + secrete_data = json.loads(response.text)["body"] + return secrete_data def get_resource_per_uuid(self, uuid): url = f"{self.base_url}/resources/{uuid}.json" @@ -357,4 +367,4 @@ def get_resource_type_ids(self, per="slug"): res = dict() for item in self.get_resource_types(): res[item[per]] = item["id"] - return res \ No newline at end of file + return res From 17da72d1993a2f2ac2f6fc45840d6d095e169d37 Mon Sep 17 00:00:00 2001 From: emptybottle Date: Fri, 6 Sep 2024 09:13:19 +0200 Subject: [PATCH 2/2] Create folder functionality added --- passbolt/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/passbolt/__init__.py b/passbolt/__init__.py index bb766ac..1740fb9 100644 --- a/passbolt/__init__.py +++ b/passbolt/__init__.py @@ -340,6 +340,16 @@ def get_folders(self): secrete_data = json.loads(response.text)["body"] return secrete_data + def create_folder(self, folder_name, folder_parent_id=None): + + post = { + "folder_parent_id": folder_parent_id, + "name": folder_name + } + response = self.session.post(self.base_url+"/folders.json", json=post) + + return response + def get_resource_per_uuid(self, uuid): url = f"{self.base_url}/resources/{uuid}.json" response = self.session.get(url)