get-hc-secrets 1.5.10__py3-none-any.whl → 1.5.21__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
getSecrets/__init__.py CHANGED
@@ -5,22 +5,24 @@ from os import getenv
5
5
  from os.path import join
6
6
 
7
7
  import requests
8
+ import urllib3
8
9
  import yaml
9
10
 
10
11
  logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s',
11
12
  datefmt='%m/%d/%Y %I:%M:%S %p')
12
13
 
13
- _config_file = "~/.config/.vault/vault.yml"
14
+ _config_file = ".config/.vault/vault.yml"
14
15
  _home = getenv("HOME")
15
16
 
16
17
  try:
17
- _config = yaml.safe_load(open(join(_home, _config_file.replace("~/", ''))))
18
+ _config = yaml.safe_load(open(join(_home, _config_file)))
18
19
  except (FileNotFoundError, TypeError):
19
20
  if not os.path.exists("/etc/vault"):
20
21
  os.makedirs("/etc/vault")
21
22
  _home = "/etc/vault"
23
+ _config_file = "vault.yml"
22
24
  try:
23
- _config = yaml.safe_load(open(join(_home, 'vault.yml')))
25
+ _config = yaml.safe_load(open(join(_home, _config_file)))
24
26
  except FileNotFoundError:
25
27
  logging.error(f"No vault configuration found in {_home}")
26
28
  sys.exit(1)
@@ -38,25 +40,34 @@ def get_secret(id: str, repo: str = 'secret') -> dict:
38
40
  If the request fails, the method logs an HTTP error message and returns a n empty json {}.
39
41
  """
40
42
 
41
- base_url = _config['vault']['vault_addr']
42
- if _home == '/etc/vault':
43
- certs = '/etc/vault/bundle.pem'
43
+ # check if data is available in config file
44
+ if id in _config:
45
+ return _config[id]
44
46
  else:
45
- certs = join(_home, _config['vault']['certs'].replace("~/", ''))
46
-
47
- token = _config['vault']['token']
48
- headers = {"X-Vault-Token": token}
49
- uri = f"/v1/{repo}/data/"
50
- url = f"{base_url}{uri}{id}"
51
- resp = requests.get(url, headers=headers, verify=certs)
52
- if resp.status_code == 200:
53
- secret = resp.json()["data"]["data"]
54
- return secret
47
+ base_url = _config['vault']['vault_addr']
48
+ if _home == '/etc/vault':
49
+ certs = '/etc/vault/bundle.pem'
50
+ else:
51
+ certs = join(_home, _config['vault']['certs'].replace("~/", ''))
52
+ # check if file exist, else make insecure
53
+ if not (os.path.exists(certs)):
54
+ certs = False
55
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
56
+ logging.warning(f"No vault bundle.pem found at {certs} - working insecure !!")
57
+
58
+ token = _config['vault']['token']
59
+ headers = {"X-Vault-Token": token}
60
+ uri = f"/v1/{repo}/data/"
61
+ url = f"{base_url}{uri}{id}"
62
+ resp = requests.get(url, headers=headers, verify=certs)
63
+ if resp.status_code == 200:
64
+ secret = resp.json()["data"]["data"]
65
+ return secret
55
66
 
56
- else:
57
- print(f"http error {resp.status_code}")
58
- logging.error(f"Vault api error {resp}")
59
- return {}
67
+ else:
68
+ print(f"http error {resp.status_code}")
69
+ logging.error(f"Vault api error {resp}")
70
+ return {}
60
71
 
61
72
 
62
73
  def get_user_pwd(id: str, repo: str = 'secret') -> tuple:
@@ -71,26 +82,30 @@ def get_user_pwd(id: str, repo: str = 'secret') -> tuple:
71
82
  If the request fails, the method prints an HTTP error message and returns (None, None).
72
83
  """
73
84
 
74
- base_url = _config['vault']['vault_addr']
75
- certs = join(_home, _config['vault']['certs'].replace("~/", ''))
76
- token = _config['vault']['token']
85
+ # check if data is available in config file
86
+ if id in _config:
87
+ return _config[id]['username'], _config[id]['password']
88
+ else:
89
+ base_url = _config['vault']['vault_addr']
90
+ certs = join(_home, _config['vault']['certs'].replace("~/", ''))
91
+ token = _config['vault']['token']
92
+
93
+ headers = {"X-Vault-Token": token}
94
+ uri = f"/v1/{repo}/data/"
95
+ url = f"{base_url}{uri}{id}"
96
+ resp = requests.get(url, headers=headers, verify=certs)
97
+ if resp.status_code == 200:
98
+ secret = resp.json()["data"]["data"]
99
+ if 'username' in secret and 'password' in secret:
100
+ return secret['username'], secret['password']
101
+ else:
102
+ return None, None
77
103
 
78
- headers = {"X-Vault-Token": token}
79
- uri = f"/v1/{repo}/data/"
80
- url = f"{base_url}{uri}{id}"
81
- resp = requests.get(url, headers=headers, verify=certs)
82
- if resp.status_code == 200:
83
- secret = resp.json()["data"]["data"]
84
- if 'username' in secret and 'password' in secret:
85
- return secret['username'], secret['password']
86
104
  else:
105
+ print(f"http error {resp.status_code}")
106
+ logging.error(f"Vault api error {resp}")
87
107
  return None, None
88
108
 
89
- else:
90
- print(f"http error {resp.status_code}")
91
- logging.error(f"Vault api error {resp}")
92
- return None, None
93
-
94
109
 
95
110
  def list_secret(repo: str = 'secret'):
96
111
  """
@@ -125,29 +140,41 @@ def upd_secret(id: str, data, repo: str = 'secret'):
125
140
 
126
141
  """
127
142
 
128
- base_url = _config['vault']['vault_addr']
129
- certs = join(_home, _config['vault']['certs'].replace("~/", ''))
130
- token = _config['vault']['token']
131
-
132
- headers = {"X-Vault-Token": token}
133
- uri = f"/v1/{repo}/data/"
134
- url = f"{base_url}{uri}{id}"
135
- resp = requests.request('GET', url, headers=headers, verify=certs)
136
- if resp.status_code == 200:
137
- version = resp.json()["data"]['metadata']['version']
138
- obj = {
139
- "options": {
140
- "cas": version
141
- },
142
- "data": data
143
- }
144
-
145
- resp2 = requests.request('POST', url, headers=headers, json=obj, verify=certs)
146
- if resp2.status_code != 200:
147
- logging.warning(f"Vault update error for {id} with new {data}")
148
- return resp2.status_code
143
+ # check if data is available in config file
144
+ if id in _config:
145
+ _config[id] = data
146
+ with open(join(_home, _config_file), 'w') as fd:
147
+ yaml.safe_dump(_config, fd)
148
+ return 200
149
149
 
150
150
  else:
151
- print(f"http error {resp.status_code}")
152
- logging.error(f"Vault api error {resp}")
153
- return None, None
151
+ base_url = _config['vault']['vault_addr']
152
+ certs = join(_home, _config['vault']['certs'].replace("~/", ''))
153
+ token = _config['vault']['token']
154
+
155
+ headers = {"X-Vault-Token": token}
156
+ uri = f"/v1/{repo}/data/"
157
+ url = f"{base_url}{uri}{id}"
158
+ resp = requests.request('GET', url, headers=headers, verify=certs)
159
+ if resp.status_code == 200:
160
+ version = resp.json()["data"]['metadata']['version']
161
+ obj = {
162
+ "options": {
163
+ "cas": version
164
+ },
165
+ "data": data
166
+ }
167
+
168
+ resp2 = requests.request('POST', url, headers=headers, json=obj, verify=certs)
169
+ if resp2.status_code != 200:
170
+ logging.warning(f"Vault update error for {id} with new {data}")
171
+ return resp2.status_code
172
+
173
+ else:
174
+ print(f"http error {resp.status_code}")
175
+ logging.error(f"Vault api error {resp}")
176
+ return None, None
177
+
178
+
179
+ if __name__ == "__main__":
180
+ secret = get_secret('test')
@@ -1,7 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: get_hc_secrets
3
- Version: 1.5.10
4
- Summary: A package to read secrets from Hashicorp vault
3
+ Version: 1.5.21
4
+ Summary: A package to read secrets from Hashicorp vault or from a local file
5
5
  Author-email: Xavier Mayeur <xavier@mayeur.be>
6
6
  Project-URL: Homepage, https://github.com/xmayeur/getSecrets
7
7
  Project-URL: Bug Tracker, https://github.com/xmayeur/getSecrets/issues
@@ -13,19 +13,23 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: pyyaml
15
15
  Requires-Dist: requests
16
+ Dynamic: license-file
16
17
 
17
18
  # getSecrets package
18
19
 
19
20
  getSecrets is a simple package that reads from the given engine ('secret' by default) of a Hashicorp vault
21
+ It can also read data from the local vault.yml file
20
22
 
21
23
  usage:
22
24
 
23
25
  ```
24
26
  from getSecrets import *
25
27
 
26
- data = get_secret(<id>, [<secret>])
28
+ data = get_secret(<id>, [repo:<secret>])
27
29
 
28
- usr_pwd = get_user_pwd(<id>, <new k_v_dict> , [<secret>])
30
+ usr, pwd = get_user_pwd(<id> , [repo:<secret>])
31
+
32
+ updater = update_secret(<id>, <new_object>, [repo:<secret>])
29
33
 
30
34
  list = list_secret([<secret>]
31
35
 
@@ -38,4 +42,17 @@ vault:
38
42
  token: "<access token>"
39
43
  vault_addr: "https://vault:8200"
40
44
  certs: "<path>/bundle.pem"
45
+
46
+ id:
47
+ item1: 1
48
+ item2: 2
49
+ username: user
50
+ password: !@•?
41
51
  ```
52
+
53
+ for reminder:
54
+ bundle.pem, for own certificates, is made of, in this order:
55
+
56
+ - vault certificate
57
+ - intermediate certificate
58
+ - root certificate
@@ -0,0 +1,6 @@
1
+ getSecrets/__init__.py,sha256=nw77NNCuIzKJWdVlJb4QNqEtCRg7H2b7I-3SfT7X2CI,6382
2
+ get_hc_secrets-1.5.21.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
3
+ get_hc_secrets-1.5.21.dist-info/METADATA,sha256=W05DxI_EGK3Ss9GsjY0_4Gs8Di-3A4X3rMV0CzvY314,1410
4
+ get_hc_secrets-1.5.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
5
+ get_hc_secrets-1.5.21.dist-info/top_level.txt,sha256=X_v6_cB4900TWZoDSDtFDhZrxKcH4dJiPCIAcyL5Z7k,11
6
+ get_hc_secrets-1.5.21.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,6 +0,0 @@
1
- getSecrets/__init__.py,sha256=U2J8nInxyA5jv5JMjc3yAt7WUTWSHC0ZI0ODoFlJ8-8,5304
2
- get_hc_secrets-1.5.10.dist-info/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
3
- get_hc_secrets-1.5.10.dist-info/METADATA,sha256=DwFHqkDHQvfKAtgtFBLLwB6tDW0i5m-4--zLNMlMek4,1051
4
- get_hc_secrets-1.5.10.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
5
- get_hc_secrets-1.5.10.dist-info/top_level.txt,sha256=X_v6_cB4900TWZoDSDtFDhZrxKcH4dJiPCIAcyL5Z7k,11
6
- get_hc_secrets-1.5.10.dist-info/RECORD,,