hoverpower 1.2.0__tar.gz → 1.4.0__tar.gz
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.
- {hoverpower-1.2.0 → hoverpower-1.4.0}/PKG-INFO +21 -1
- {hoverpower-1.2.0 → hoverpower-1.4.0}/README +20 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/secret.py +7 -3
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/PKG-INFO +21 -1
- {hoverpower-1.2.0 → hoverpower-1.4.0}/pyproject.toml +1 -1
- hoverpower-1.4.0/tests/test_secret.py +45 -0
- hoverpower-1.2.0/tests/test_secret.py +0 -15
- {hoverpower-1.2.0 → hoverpower-1.4.0}/LICENSE +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/__init__.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/__main__.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/cli/__init__.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/cli/give.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/data.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/generator.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/hard.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/info.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/path.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/repo/__init__.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower/title.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/SOURCES.txt +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/dependency_links.txt +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/entry_points.txt +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/requires.txt +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/hoverpower.egg-info/top_level.txt +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/setup.cfg +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_cli.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_generator.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_give.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_hardcore.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_path.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_repository.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_resources.py +0 -0
- {hoverpower-1.2.0 → hoverpower-1.4.0}/tests/test_title.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hoverpower
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Author-email: Helmut Konrad Schewe <helmutus@outlook.com>
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/anaticulae/hoverpower
|
|
@@ -38,3 +38,23 @@ generate test data:
|
|
|
38
38
|
--negative
|
|
39
39
|
--paper
|
|
40
40
|
--small
|
|
41
|
+
|
|
42
|
+
## developer setup
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
cd ~/hoverpower
|
|
46
|
+
python3 -mvenv ~/.tmp/$(basename $PWD)
|
|
47
|
+
source ~/.tmp/$(basename $PWD)/bin/activate
|
|
48
|
+
|
|
49
|
+
pip install baw
|
|
50
|
+
baw sync all
|
|
51
|
+
|
|
52
|
+
pip install .[dev]
|
|
53
|
+
|
|
54
|
+
export HOVERPOWER_STORE=~/hoverpower/hoverpower/repo
|
|
55
|
+
# export HOVERPOWER_SECRET=
|
|
56
|
+
|
|
57
|
+
powerdecrypt
|
|
58
|
+
|
|
59
|
+
baw test all
|
|
60
|
+
```
|
|
@@ -16,3 +16,23 @@ generate test data:
|
|
|
16
16
|
--negative
|
|
17
17
|
--paper
|
|
18
18
|
--small
|
|
19
|
+
|
|
20
|
+
## developer setup
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
cd ~/hoverpower
|
|
24
|
+
python3 -mvenv ~/.tmp/$(basename $PWD)
|
|
25
|
+
source ~/.tmp/$(basename $PWD)/bin/activate
|
|
26
|
+
|
|
27
|
+
pip install baw
|
|
28
|
+
baw sync all
|
|
29
|
+
|
|
30
|
+
pip install .[dev]
|
|
31
|
+
|
|
32
|
+
export HOVERPOWER_STORE=~/hoverpower/hoverpower/repo
|
|
33
|
+
# export HOVERPOWER_SECRET=
|
|
34
|
+
|
|
35
|
+
powerdecrypt
|
|
36
|
+
|
|
37
|
+
baw test all
|
|
38
|
+
```
|
|
@@ -19,7 +19,11 @@ DEFAULT_SECRET = b'ohrfFMW4YeHu96rkblrD-i4PEIsV_5jFCfZWfgkUgLk='
|
|
|
19
19
|
|
|
20
20
|
HOVERPOWER_SECRET = os.environ.get('HOVERPOWER_SECRET', DEFAULT_SECRET)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
try:
|
|
23
|
+
CIPHER = cryptography.fernet.Fernet(key=HOVERPOWER_SECRET)
|
|
24
|
+
except ValueError:
|
|
25
|
+
utilo.exitx(f'Invalid HOVERPOWER_SECRET format: {HOVERPOWER_SECRET}\n'
|
|
26
|
+
f'Example : {DEFAULT_SECRET}')
|
|
23
27
|
|
|
24
28
|
|
|
25
29
|
def decrypt(path: str) -> bytes | None:
|
|
@@ -28,7 +32,7 @@ def decrypt(path: str) -> bytes | None:
|
|
|
28
32
|
try:
|
|
29
33
|
data = CIPHER.decrypt(encrypted)
|
|
30
34
|
except cryptography.fernet.InvalidToken:
|
|
31
|
-
utilo.error(f'invalid HOVERPOWER_SECRET for {path}')
|
|
35
|
+
utilo.error(f'invalid HOVERPOWER_SECRET for: {path}')
|
|
32
36
|
return None
|
|
33
37
|
return data
|
|
34
38
|
|
|
@@ -73,7 +77,7 @@ def make_public():
|
|
|
73
77
|
utilo.log(source)
|
|
74
78
|
public = decrypt(source)
|
|
75
79
|
if not public:
|
|
76
|
-
|
|
80
|
+
utilo.exitx()
|
|
77
81
|
base, fname = ensure_parant(source)
|
|
78
82
|
outpath = utilo.join(base, fname.replace('.pdfs', '.pdf'))
|
|
79
83
|
utilo.log(f'=> {outpath}')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hoverpower
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Author-email: Helmut Konrad Schewe <helmutus@outlook.com>
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/anaticulae/hoverpower
|
|
@@ -38,3 +38,23 @@ generate test data:
|
|
|
38
38
|
--negative
|
|
39
39
|
--paper
|
|
40
40
|
--small
|
|
41
|
+
|
|
42
|
+
## developer setup
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
cd ~/hoverpower
|
|
46
|
+
python3 -mvenv ~/.tmp/$(basename $PWD)
|
|
47
|
+
source ~/.tmp/$(basename $PWD)/bin/activate
|
|
48
|
+
|
|
49
|
+
pip install baw
|
|
50
|
+
baw sync all
|
|
51
|
+
|
|
52
|
+
pip install .[dev]
|
|
53
|
+
|
|
54
|
+
export HOVERPOWER_STORE=~/hoverpower/hoverpower/repo
|
|
55
|
+
# export HOVERPOWER_SECRET=
|
|
56
|
+
|
|
57
|
+
powerdecrypt
|
|
58
|
+
|
|
59
|
+
baw test all
|
|
60
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import unittest.mock
|
|
2
|
+
|
|
3
|
+
import utilo
|
|
4
|
+
|
|
5
|
+
import hoverpower.secret
|
|
6
|
+
|
|
7
|
+
SOURCE = 'secret.txt'
|
|
8
|
+
DEST = 'encrypted.bin'
|
|
9
|
+
DATA = b'line1'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_encode_decode(testdir):
|
|
13
|
+
utilo.file_create_binary(SOURCE, DATA)
|
|
14
|
+
encrypted = hoverpower.secret.encrypt(SOURCE)
|
|
15
|
+
utilo.file_create_binary(DEST, encrypted)
|
|
16
|
+
decrypted = hoverpower.secret.decrypt(DEST)
|
|
17
|
+
assert decrypted == DATA
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@unittest.mock.patch.dict(
|
|
21
|
+
'os.environ',
|
|
22
|
+
{'HOVERPOWER_SECRET': 'newvalue'}, # nosec
|
|
23
|
+
)
|
|
24
|
+
def test_decode_invalid_format():
|
|
25
|
+
"""Fail if secret is not 32 bytes long."""
|
|
26
|
+
completed = utilo.run(
|
|
27
|
+
'powerdecrypt',
|
|
28
|
+
expect=False,
|
|
29
|
+
)
|
|
30
|
+
assert '[ERROR] Invalid HOVERPOWER_SECRET format: newvalue' in completed.stderr
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@unittest.mock.patch.dict(
|
|
34
|
+
'os.environ',
|
|
35
|
+
{'HOVERPOWER_SECRET': hoverpower.secret.DEFAULT_SECRET.decode()}, # nosec
|
|
36
|
+
)
|
|
37
|
+
def test_decode_invalid_secret():
|
|
38
|
+
"""Stop extracting resources after first invalid secret."""
|
|
39
|
+
completed = utilo.run(
|
|
40
|
+
'powerdecrypt',
|
|
41
|
+
expect=False,
|
|
42
|
+
)
|
|
43
|
+
error = completed.stderr
|
|
44
|
+
count = error.count('[ERROR] invalid HOVERPOWER_SECRET for')
|
|
45
|
+
assert count == 1
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import utilo
|
|
2
|
-
|
|
3
|
-
import hoverpower.secret
|
|
4
|
-
|
|
5
|
-
SOURCE = 'secret.txt'
|
|
6
|
-
DEST = 'encrypted.bin'
|
|
7
|
-
DATA = b'line1'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def test_encode_decode(testdir):
|
|
11
|
-
utilo.file_create_binary(SOURCE, DATA)
|
|
12
|
-
encrypted = hoverpower.secret.encrypt(SOURCE)
|
|
13
|
-
utilo.file_create_binary(DEST, encrypted)
|
|
14
|
-
decrypted = hoverpower.secret.decrypt(DEST)
|
|
15
|
-
assert decrypted == DATA
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|