Skip to content

Commit 8a096d5

Browse files
committed
Reinitialize state if error occurs while loading state
Signed-off-by: Ivan Kanakarakis <[email protected]>
1 parent db4c551 commit 8a096d5

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/satosa/state.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from lzma import LZMACompressor
1515
from lzma import LZMADecompressor
16+
from lzma import LZMAError
1617

1718
from Cryptodome import Random
1819
from Cryptodome.Cipher import AES
@@ -186,15 +187,27 @@ def __init__(self, urlstate_data=None, encryption_key=None):
186187
raise ValueError("If an 'urlstate_data' is supplied 'encrypt_key' must be specified.")
187188

188189
if urlstate_data:
189-
urlstate_data = urlstate_data.encode("utf-8")
190-
urlstate_data = base64.urlsafe_b64decode(urlstate_data)
191-
lzma = LZMADecompressor()
192-
urlstate_data = lzma.decompress(urlstate_data)
193-
urlstate_data = _AESCipher(encryption_key).decrypt(urlstate_data)
194-
lzma = LZMADecompressor()
195-
urlstate_data = lzma.decompress(urlstate_data)
196-
urlstate_data = urlstate_data.decode("UTF-8")
197-
urlstate_data = json.loads(urlstate_data)
190+
try:
191+
urlstate_data_bytes = urlstate_data.encode("utf-8")
192+
urlstate_data_b64decoded = base64.urlsafe_b64decode(urlstate_data_bytes)
193+
lzma = LZMADecompressor()
194+
urlstate_data_decompressed = lzma.decompress(urlstate_data_b64decoded)
195+
urlstate_data_decrypted = _AESCipher(encryption_key).decrypt(
196+
urlstate_data_decompressed
197+
)
198+
lzma = LZMADecompressor()
199+
urlstate_data_decrypted_decompressed = lzma.decompress(urlstate_data_decrypted)
200+
urlstate_data_obj = json.loads(urlstate_data_decrypted_decompressed)
201+
except Exception as e:
202+
error_context = {
203+
"message": "Failed to load state data. Reinitializing empty state.",
204+
"reason": str(e),
205+
"urlstate_data": urlstate_data,
206+
}
207+
logger.warning(error_context)
208+
urlstate_data = {}
209+
else:
210+
urlstate_data = urlstate_data_obj
198211

199212
session_id = (
200213
urlstate_data[_SESSION_ID_KEY]

0 commit comments

Comments
 (0)