Skip to content

Commit bbe0d1e

Browse files
committed
Whatever dump() produces MUST be valid input to json.dumps().
1 parent 1bf46d6 commit bbe0d1e

File tree

6 files changed

+72
-61
lines changed

6 files changed

+72
-61
lines changed

src/cryptojwt/key_bundle.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -794,28 +794,6 @@ def dump(self, exclude_attributes: Optional[List[str]] = None):
794794
val = getattr(self, attr)
795795
res[attr] = val
796796

797-
# res = {
798-
# "cache_time": self.cache_time,
799-
# "etag": self.etag,
800-
# "fileformat": self.fileformat,
801-
# "httpc_params": self.httpc_params,
802-
# "ignore_errors_period": self.ignore_errors_period,
803-
# "ignore_errors_until": self.ignore_errors_until,
804-
# "ignore_invalid_keys": self.ignore_invalid_keys,
805-
# "imp_jwks": self.imp_jwks,
806-
# "keytype": self.keytype,
807-
# "keyusage": self.keyusage,
808-
# "last_local": self.last_local,
809-
# "last_remote": self.last_remote,
810-
# "last_updated": self.last_updated,
811-
# "local": self.local,
812-
# "remote": self.remote,
813-
# "time_out": self.time_out,
814-
# }
815-
816-
# if self.source:
817-
# res["source"] = self.source
818-
819797
return res
820798

821799
def load(self, spec):

src/cryptojwt/key_issuer.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,10 @@ class KeyIssuer(object):
2525

2626
params = {
2727
"ca_certs": None,
28-
"keybundle_cls": KeyBundle,
29-
"remove_after": 3600,
30-
"httpc": None,
3128
"httpc_params": None,
29+
"keybundle_cls": KeyBundle,
3230
"name": "",
31+
"remove_after": 3600,
3332
"spec2key": None,
3433
}
3534

@@ -56,14 +55,13 @@ def __init__(
5655

5756
self._bundles = []
5857

59-
self.keybundle_cls = keybundle_cls
60-
self.name = name
61-
62-
self.spec2key = {}
6358
self.ca_certs = ca_certs
64-
self.remove_after = remove_after
6559
self.httpc = httpc or request
6660
self.httpc_params = httpc_params or {}
61+
self.keybundle_cls = keybundle_cls
62+
self.name = name
63+
self.remove_after = remove_after
64+
self.spec2key = {}
6765

6866
def __repr__(self) -> str:
6967
return '<KeyIssuer "{}" {}>'.format(self.name, self.key_summary())

src/cryptojwt/serialize/item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class KeyIssuer:
77
@staticmethod
88
def serialize(item: key_issuer.KeyIssuer) -> str:
99
""" Convert from KeyIssuer to JSON """
10-
return json.dumps(item.dump(exclude_attributes=["keybundle_cls", "httpc"]))
10+
return json.dumps(item.dump(exclude_attributes=["keybundle_cls"]))
1111

1212
def deserialize(self, spec: str) -> key_issuer.KeyIssuer:
1313
""" Convert from JSON to KeyIssuer """

tests/test_03_key_bundle.py

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# pylint: disable=missing-docstring,no-self-use
22
import json
33
import os
4+
from pathlib import Path
45
import shutil
56
import time
6-
from pathlib import Path
77

8+
from cryptography.hazmat.primitives.asymmetric import rsa
89
import pytest
910
import requests
1011
import responses
11-
from cryptography.hazmat.primitives.asymmetric import rsa
1212

1313
from cryptojwt.exception import UnknownKeyType
1414
from cryptojwt.jwk.ec import ECKey
@@ -53,8 +53,8 @@ def full_path(local_file):
5353
"e": "AQAB",
5454
"kid": "abc",
5555
"n": "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY"
56-
"2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfK"
57-
"qoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
56+
"2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfK"
57+
"qoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
5858
}
5959
]
6060
}
@@ -63,11 +63,11 @@ def full_path(local_file):
6363
"keys": [
6464
{
6565
"n": "zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S"
66-
"_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFY"
67-
"Inq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVb"
68-
"CGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znan"
69-
"LwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MX"
70-
"sGxBHf3AKT5w",
66+
"_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFY"
67+
"Inq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVb"
68+
"CGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znan"
69+
"LwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MX"
70+
"sGxBHf3AKT5w",
7171
"e": "AQAB",
7272
"kty": "RSA",
7373
"kid": "rsa1",
@@ -87,11 +87,11 @@ def full_path(local_file):
8787
"kid": "kriMPdmBvx68skT8-mPAB3BseeA",
8888
"kty": "RSA",
8989
"n": "kSCWg6q9iYxvJE2NIhSyOiKvqoWCO2GFipgH0sTSAs5FalHQosk9ZNTztX0ywS"
90-
"_AHsBeQPqYygfYVJL6_EgzVuwRk5txr9e3n1uml94fLyq_AXbwo9yAduf4dCHT"
91-
"P8CWR1dnDR-Qnz_4PYlWVEuuHHONOw_blbfdMjhY-C_BYM2E3pRxbohBb3x__C"
92-
"fueV7ddz2LYiH3wjz0QS_7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd_"
93-
"GTgWN8A-6SN1r4hzpjFKFLbZnBt77ACSiYx-IHK4Mp-NaVEi5wQtSsjQtI--Xs"
94-
"okxRDqYLwus1I1SihgbV_STTg5enufuw",
90+
"_AHsBeQPqYygfYVJL6_EgzVuwRk5txr9e3n1uml94fLyq_AXbwo9yAduf4dCHT"
91+
"P8CWR1dnDR-Qnz_4PYlWVEuuHHONOw_blbfdMjhY-C_BYM2E3pRxbohBb3x__C"
92+
"fueV7ddz2LYiH3wjz0QS_7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd_"
93+
"GTgWN8A-6SN1r4hzpjFKFLbZnBt77ACSiYx-IHK4Mp-NaVEi5wQtSsjQtI--Xs"
94+
"okxRDqYLwus1I1SihgbV_STTg5enufuw",
9595
"use": "sig",
9696
"x5c": [
9797
"MIIDPjCCAiqgAwIBAgIQsRiM0jheFZhKk49YD0SK1TAJBgUrDgMCHQUAMC0xKz"
@@ -121,11 +121,11 @@ def full_path(local_file):
121121
"kid": "MnC_VZcATfM5pOYiJHMba9goEKY",
122122
"kty": "RSA",
123123
"n": "vIqz-4-ER_vNWLON9yv8hIYV737JQ6rCl6XfzOC628seYUPf0TaGk91CFxefhz"
124-
"h23V9Tkq-RtwN1Vs_z57hO82kkzL-cQHZX3bMJD-GEGOKXCEXURN7VMyZWMAuz"
125-
"QoW9vFb1k3cR1RW_EW_P-C8bb2dCGXhBYqPfHyimvz2WarXhntPSbM5XyS5v5y"
126-
"Cw5T_Vuwqqsio3V8wooWGMpp61y12NhN8bNVDQAkDPNu2DT9DXB1g0CeFINp_K"
127-
"AS_qQ2Kq6TSvRHJqxRR68RezYtje9KAqwqx4jxlmVAQy0T3-T-IAbsk1wRtWDn"
128-
"dhO6s1Os-dck5TzyZ_dNOhfXgelixLUQ",
124+
"h23V9Tkq-RtwN1Vs_z57hO82kkzL-cQHZX3bMJD-GEGOKXCEXURN7VMyZWMAuz"
125+
"QoW9vFb1k3cR1RW_EW_P-C8bb2dCGXhBYqPfHyimvz2WarXhntPSbM5XyS5v5y"
126+
"Cw5T_Vuwqqsio3V8wooWGMpp61y12NhN8bNVDQAkDPNu2DT9DXB1g0CeFINp_K"
127+
"AS_qQ2Kq6TSvRHJqxRR68RezYtje9KAqwqx4jxlmVAQy0T3-T-IAbsk1wRtWDn"
128+
"dhO6s1Os-dck5TzyZ_dNOhfXgelixLUQ",
129129
"use": "sig",
130130
"x5c": [
131131
"MIIC4jCCAcqgAwIBAgIQQNXrmzhLN4VGlUXDYCRT3zANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb"
@@ -152,12 +152,12 @@ def full_path(local_file):
152152
{
153153
"e": "AQAB",
154154
"issuer": "https://login.microsoftonline.com/9188040d-6c67-4c5b"
155-
"-b112-36a304b66dad/v2.0/",
155+
"-b112-36a304b66dad/v2.0/",
156156
"kid": "GvnPApfWMdLRi8PDmisFn7bprKg",
157157
"kty": "RSA",
158158
"n": "5ymq_xwmst1nstPr8YFOTyD1J5N4idYmrph7AyAv95RbWXfDRqy8CMRG7sJq"
159-
"-UWOKVOA4MVrd_NdV-ejj1DE5MPSiG"
160-
"-mZK_5iqRCDFvPYqOyRj539xaTlARNY4jeXZ0N6irZYKqSfYACjkkKxbLKcijSu1pJ48thXOTED0oNa6U",
159+
"-UWOKVOA4MVrd_NdV-ejj1DE5MPSiG"
160+
"-mZK_5iqRCDFvPYqOyRj539xaTlARNY4jeXZ0N6irZYKqSfYACjkkKxbLKcijSu1pJ48thXOTED0oNa6U",
161161
"use": "sig",
162162
"x5c": [
163163
"MIICWzCCAcSgAwIBAgIJAKVzMH2FfC12MA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVib"
@@ -181,12 +181,13 @@ def full_path(local_file):
181181
{
182182
"e": "AQAB",
183183
"issuer": "https://login.microsoftonline.com/9188040d-6c67-4c5b"
184-
"-b112-36a304b66dad/v2.0/",
184+
"-b112-36a304b66dad/v2.0/",
185185
"kid": "dEtpjbEvbhfgwUI-bdK5xAU_9UQ",
186186
"kty": "RSA",
187-
"n": "x7HNcD9ZxTFRaAgZ7-gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQeSML7qZPlowb5BUakdLI70ayM4vN36--0ht8-oCHhl8Yj"
188-
"GFQkU-Iv2yahWHEP-1EK6eOEYu6INQP9Lk0HMk3QViLwshwb"
189-
"-KXVD02jdmX2HNdYJdPyc0c",
187+
"n":
188+
"x7HNcD9ZxTFRaAgZ7-gdYLkgQua3zvQseqBJIt8Uq3MimInMZoE9QGQeSML7qZPlowb5BUakdLI70ayM4vN36--0ht8-oCHhl8Yj"
189+
"GFQkU-Iv2yahWHEP-1EK6eOEYu6INQP9Lk0HMk3QViLwshwb"
190+
"-KXVD02jdmX2HNdYJdPyc0c",
190191
"use": "sig",
191192
"x5c": [
192193
"MIICWzCCAcSgAwIBAgIJAL3MzqqEFMYjMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVib"
@@ -278,7 +279,7 @@ def test_ignore_unknown_types():
278279
kb = KeyBundle(
279280
{
280281
"kid": "q-H9y8iuh3BIKZBbK6S0mH_isBlJsk"
281-
"-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw",
282+
"-u6VtZ5rAdBo5fCjjy3LnkrsoK_QWrlKB08j_PcvwpAMfTEDHw5spepw",
282283
"use": "sig",
283284
"alg": "EdDSA",
284285
"kty": "OKP",
@@ -618,14 +619,16 @@ def test_loads_1():
618619
"kty": "RSA",
619620
"use": "sig",
620621
"e": "AQAB",
621-
"n": "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
622+
"n":
623+
"wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
622624
"kid": "1",
623625
},
624626
{
625627
"kty": "RSA",
626628
"use": "enc",
627629
"e": "AQAB",
628-
"n": "wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
630+
"n":
631+
"wf-wiusGhA-gleZYQAOPQlNUIucPiqXdPVyieDqQbXXOPBe3nuggtVzeq7pVFH1dZz4dY2Q2LA5DaegvP8kRvoSB_87ds3dy3Rfym_GUSc5B0l1TgEobcyaep8jguRoHto6GWHfCfKqoUYZq4N8vh4LLMQwLR6zi6Jtu82nB5k8",
629632
"kid": "2",
630633
},
631634
]
@@ -658,7 +661,8 @@ def test_dump_jwk():
658661
JWKS_DICT = {
659662
"keys": [
660663
{
661-
"n": u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w",
664+
"n":
665+
u"zkpUgEgXICI54blf6iWiD2RbMDCOO1jV0VSff1MFFnujM4othfMsad7H1kRo50YM5S_X9TdvrpdOfpz5aBaKFhT6Ziv0nhtcekq1eRl8mjBlvGKCE5XGk-0LFSDwvqgkJoFYInq7bu0a4JEzKs5AyJY75YlGh879k1Uu2Sv3ZZOunfV1O1Orta-NvS-aG_jN5cstVbCGWE20H0vFVrJKNx0Zf-u-aA-syM4uX7wdWgQ-owoEMHge0GmGgzso2lwOYf_4znanLwEuO3p5aabEaFoKNR4K6GjQcjBcYmDEE4CtfRU9AEmhcD1kleiTB9TjPWkgDmT9MXsGxBHf3AKT5w",
662666
"e": u"AQAB",
663667
"kty": "RSA",
664668
"kid": "5-VBFv40P8D4I-7SFz7hMugTbPs",
@@ -1101,3 +1105,16 @@ def test_exclude_attributes():
11011105
kb2 = KeyBundle(cache_time=600, ignore_invalid_keys=False).load(exp)
11021106
assert kb2.cache_time == 600
11031107
assert kb2.ignore_invalid_keys is False
1108+
1109+
1110+
def test_remote_dump_json():
1111+
source = "https://example.com/keys.json"
1112+
# Mock response
1113+
with responses.RequestsMock() as rsps:
1114+
rsps.add(method="GET", url=source, json=JWKS_DICT, status=200)
1115+
httpc_params = {"timeout": (2, 2)} # connect, read timeouts in seconds
1116+
kb = KeyBundle(source=source, httpc=requests.request, httpc_params=httpc_params)
1117+
kb.do_remote()
1118+
1119+
exp = kb.dump()
1120+
assert json.dumps(exp)

tests/test_04_key_issuer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import os
23
import shutil
34
import time
@@ -743,6 +744,13 @@ def test_dump():
743744
assert nkj.get("sig", "rsa", kid="MnC_VZcATfM5pOYiJHMba9goEKY")
744745

745746

747+
def test_dump_json():
748+
issuer = KeyIssuer()
749+
issuer.add_kb(KeyBundle(JWK2["keys"]))
750+
751+
res = issuer.dump()
752+
assert json.dumps(res)
753+
746754
def test_contains():
747755
issuer = KeyIssuer()
748756
issuer.add_kb(KeyBundle(JWK1["keys"]))

tests/test_04_key_jar.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,16 @@ def test_dump():
10331033
assert nkj.get_signing_key("rsa", "C", kid="MnC_VZcATfM5pOYiJHMba9goEKY")
10341034

10351035

1036+
def test_dump_json():
1037+
kj = KeyJar()
1038+
kj.add_kb("Alice", KeyBundle(JWK0["keys"]))
1039+
kj.add_kb("Bob", KeyBundle(JWK1["keys"]))
1040+
kj.add_kb("C", KeyBundle(JWK2["keys"]))
1041+
1042+
res = kj.dump()
1043+
assert json.dumps(res)
1044+
1045+
10361046
def test_contains():
10371047
kj = KeyJar()
10381048
kj.add_kb("Alice", KeyBundle(JWK0["keys"]))

0 commit comments

Comments
 (0)