aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2022-07-23 14:07:00 +0200
committerHarald Welte <laforge@osmocom.org>2022-07-23 14:07:00 +0200
commit04897d5f255d092a36d414a189dc2eb92145aef5 (patch)
tree11ce64abcf01007b9666cf187b8cdaf7a7554fa3
parent3f3b45a27b5b2f4b8913ab5308da33c41bc3531e (diff)
sim-rest-server: Report meaningful error message if PIN is blocked
Instead of a cryptic backtrace, we now return a meaningful error like this: {"error": {"message": "Security Status not satisfied - Card PIN enabled?", "status_word": "6982"} Change-Id: I6dafd37dfd9fa3d52ca2c2e5ec37a6d274ba651b Closes: OS#5606
-rwxr-xr-xcontrib/sim-rest-server.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/contrib/sim-rest-server.py b/contrib/sim-rest-server.py
index 62498b4..f2ed63e 100755
--- a/contrib/sim-rest-server.py
+++ b/contrib/sim-rest-server.py
@@ -2,7 +2,7 @@
# RESTful HTTP service for performing authentication against USIM cards
#
-# (C) 2021 by Harald Welte <laforge@osmocom.org>
+# (C) 2021-2022 by Harald Welte <laforge@osmocom.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -51,11 +51,15 @@ def connect_to_card(slot_nr:int):
return tp, scc, card
class ApiError:
- def __init__(self, msg:str):
+ def __init__(self, msg:str, sw=None):
self.msg = msg
+ self.sw = sw
def __str__(self):
- return json.dumps({'error': {'message':self.msg}})
+ d = {'error': {'message':self.msg}}
+ if self.sw:
+ d['error']['status_word'] = self.sw
+ return json.dumps(d)
def set_headers(request):
@@ -80,13 +84,19 @@ class SimRestServer:
def protocol_error(self, request, failure):
set_headers(request)
request.setResponseCode(500)
- return str(ApiError("Protocol Error"))
+ return str(ApiError("Protocol Error: %s" % failure.value))
@app.handle_errors(SwMatchError)
def sw_match_error(self, request, failure):
set_headers(request)
request.setResponseCode(500)
- return str(ApiError("Card Communication Error %s" % failure))
+ sw = failure.value.sw_actual
+ if sw == '9862':
+ return str(ApiError("Card Authentication Error - Incorrect MAC", sw))
+ elif sw == '6982':
+ return str(ApiError("Security Status not satisfied - Card PIN enabled?", sw))
+ else:
+ return str(ApiError("Card Communication Error %s" % failure.value), sw)
@app.route('/sim-auth-api/v1/slot/<int:slot>')