Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 26 additions & 6 deletions passbolt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)

Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -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"]
Expand All @@ -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))
Expand Down Expand Up @@ -329,6 +332,23 @@ 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 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"
Expand Down Expand Up @@ -357,4 +377,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
return res