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 <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>

Reply via email to