dexter has submitted this change. (
https://gerrit.osmocom.org/c/pysim/+/37643?usp=email
)
(
3 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
)Change subject: ara_m: add export support for the ARA-M application
......................................................................
ara_m: add export support for the ARA-M application
This patch adds an export method to the CardApplicationARAM class.
This method reads the ARA-M configuration and transforms it into
executeable command lines, which can be executed as a script later
to restore an ARA-M configuration.
Related: OS#6092
Change-Id: I811cb9d25cb8ee194b4ead5fb2cabf1fdc0c1c43
---
M pySim/ara_m.py
1 file changed, 75 insertions(+), 0 deletions(-)
Approvals:
fixeria: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/pySim/ara_m.py b/pySim/ara_m.py
index 71aa6d8..cdc934d 100644
--- a/pySim/ara_m.py
+++ b/pySim/ara_m.py
@@ -415,3 +415,78 @@
class CardApplicationARAM(CardApplication):
def __init__(self):
super().__init__('ARA-M', adf=ADF_ARAM(), sw=sw_aram)
+
+ @staticmethod
+ def __export_get_from_dictlist(key, dictlist):
+ # Data objects are organized in lists that contain dictionaries, usually there is
only one dictionary per
+ # list item. This function goes through that list and gets the value of the first
dictionary that has the
+ # matching key.
+ if dictlist is None:
+ return None
+ obj = None
+ for d in dictlist:
+ obj = d.get(key, obj)
+ return obj
+
+ @staticmethod
+ def __export_ref_ar_do_list(ref_ar_do_list):
+ export_str = ""
+ ref_do_list = CardApplicationARAM.__export_get_from_dictlist('ref_do',
ref_ar_do_list.get('ref_ar_do'))
+ ar_do_list = CardApplicationARAM.__export_get_from_dictlist('ar_do',
ref_ar_do_list.get('ref_ar_do'))
+
+ if ref_do_list and ar_do_list:
+ # Get ref_do parameters
+ aid_ref_do =
CardApplicationARAM.__export_get_from_dictlist('aid_ref_do', ref_do_list)
+ dev_app_id_ref_do =
CardApplicationARAM.__export_get_from_dictlist('dev_app_id_ref_do', ref_do_list)
+ pkg_ref_do =
CardApplicationARAM.__export_get_from_dictlist('pkg_ref_do', ref_do_list)
+
+ # Get ar_do parameters
+ apdu_ar_do =
CardApplicationARAM.__export_get_from_dictlist('apdu_ar_do', ar_do_list)
+ nfc_ar_do =
CardApplicationARAM.__export_get_from_dictlist('nfc_ar_do', ar_do_list)
+ perm_ar_do =
CardApplicationARAM.__export_get_from_dictlist('perm_ar_do', ar_do_list)
+
+ # Write command-line
+ export_str += "aram_store_ref_ar_do"
+ if aid_ref_do:
+ export_str += (" --aid %s" % aid_ref_do)
+ else:
+ export_str += " --aid-empty"
+ if dev_app_id_ref_do:
+ export_str += (" --device-app-id %s" % dev_app_id_ref_do)
+ if apdu_ar_do and 'generic_access_rule' in apdu_ar_do:
+ export_str += (" --apdu-%s" %
apdu_ar_do['generic_access_rule'])
+ elif apdu_ar_do and 'apdu_filter' in apdu_ar_do:
+ export_str += (" --apdu-filter ")
+ for apdu_filter in apdu_ar_do['apdu_filter']:
+ export_str += apdu_filter['header']
+ export_str += apdu_filter['mask']
+ if nfc_ar_do and 'nfc_event_access_rule' in nfc_ar_do:
+ export_str += (" --nfc-%s" %
nfc_ar_do['nfc_event_access_rule'])
+ if perm_ar_do:
+ export_str += (" --android-permissions %s" %
perm_ar_do['permissions'])
+ if pkg_ref_do:
+ export_str += (" --pkg-ref %s" %
pkg_ref_do['package_name_string'])
+ export_str += "\n"
+ return export_str
+
+ @staticmethod
+ def export(as_json: bool, lchan):
+
+ # TODO: Add JSON output as soon as aram_store_ref_ar_do is able to process input
in JSON format.
+ if as_json:
+ raise NotImplementedError("res_do encoder not yet implemented. Patches
welcome.")
+
+ export_str = ""
+ export_str += "aram_delete_all\n"
+
+ res_do = ADF_ARAM.get_all(lchan.scc._tp)
+ if not res_do:
+ return export_str.strip()
+
+ for res_do_dict in res_do.to_dict():
+ if not res_do_dict.get('response_all_ref_ar_do', False):
+ continue
+ for ref_ar_do_list in res_do_dict['response_all_ref_ar_do']:
+ export_str +=
CardApplicationARAM.__export_ref_ar_do_list(ref_ar_do_list)
+
+ return export_str.strip()
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/37643?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I811cb9d25cb8ee194b4ead5fb2cabf1fdc0c1c43
Gerrit-Change-Number: 37643
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>