Skip to content

Commit a3f9f98

Browse files
committed
add issue utility
1 parent 6a644ed commit a3f9f98

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

jwt_rsa/issue.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,30 @@
11
import argparse
2+
import json
23

34
from .token import JWT
45
from .rsa import load_private_key
56

67

78
parser = argparse.ArgumentParser()
8-
parser.add_argument()
9+
parser.add_argument("-K", "--private-key", required=True,
10+
help="Private JWT key", type=load_private_key)
11+
parser.add_argument("--expired", help="Token expiration",
12+
type=float, default=...)
13+
parser.add_argument("--nbf", help="Token nbf claim",
14+
type=float, default=...)
915

1016

1117
def main():
1218
arguments = parser.parse_args()
13-
jwt = JWT(private_key=load_private_key(arguments.private_key))
19+
jwt = JWT(private_key=arguments.private_key)
20+
print(
21+
jwt.encode(
22+
expired=arguments.expired,
23+
nbf=arguments.nbf,
24+
**json.loads(input("Paste JSON content here: "))
25+
)
26+
)
27+
28+
29+
if __name__ == '__main__':
30+
main()

jwt_rsa/keygen.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
def main():
1010
parser = argparse.ArgumentParser()
11-
parser.add_argument('-b', '--bits', type=int, default=2048)
12-
parser.add_argument('-P', '--pem', action='store_true')
11+
parser.add_argument('-b', '--bits', dest="bits", type=int, default=2048)
12+
parser.add_argument('-P', '--pem', dest="pem", action='store_true')
1313

1414
arguments = parser.parse_args()
1515

jwt_rsa/token.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import time
22
from datetime import timedelta, datetime
33
from operator import sub, add
4+
from typing import Union
45

56
from jwt import PyJWT
67
from jwt_rsa.rsa import RSAPrivateKey, RSAPublicKey
78

89

10+
DateType = Union[timedelta, datetime, float, int, type(Ellipsis)]
11+
12+
913
class JWT:
1014
__slots__ = ('__private_key', '__public_key', '__jwt',
1115
'__expires', '__nbf_delta')
1216

13-
_nil = object()
1417
DEFAULT_EXPIRATION = 86400 * 30 # one month
1518
NBF_DELTA = 20
1619

@@ -31,12 +34,12 @@ def _date_to_timestamp(self, value, default, timedelta_func=add):
3134
return value.timestamp()
3235
elif isinstance(value, (int, float)):
3336
return value
34-
elif value is self._nil:
37+
elif value is Ellipsis:
3538
return default()
3639

3740
raise ValueError(type(value))
3841

39-
def encode(self, expired=_nil, nbf=_nil, **claims) -> str:
42+
def encode(self, expired: DateType=..., nbf: DateType=..., **claims) -> str:
4043
if not self.__private_key:
4144
raise RuntimeError("Can't encode without private key")
4245

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def load_requirements(fname):
4545
'console_scripts': [
4646
'jwt-rsa-keygen = {}.keygen:main'.format(module_name),
4747
'jwt-rsa-verify = {}.verify:main'.format(module_name),
48+
'jwt-rsa-issue= {}.issue:main'.format(module_name),
4849
]
4950
},
5051
python_requires=">=3.4.*, <4",

0 commit comments

Comments
 (0)