dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/42735?usp=email )
Change subject: card_key_provider: pass CardKeyFieldCryptor to constructor ......................................................................
card_key_provider: pass CardKeyFieldCryptor to constructor
We currently create the CardKeyFieldCryptor object inside the constructor of the concrete CardKeyProvider classes. There is currently no problem with that, but when we create the CardKeyFieldCryptor object first and then pass it as parameter to the constructor, we gain more flexibility in case we want to support other CardKeyFieldCryptor variants in the future.
Related: SYS#6959 Change-Id: If43552740aadacab9126f8a002749a9582eef8f4 --- M pySim/card_key_provider.py M tests/unittests/test_card_key_provider.py 2 files changed, 11 insertions(+), 9 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/35/42735/1
diff --git a/pySim/card_key_provider.py b/pySim/card_key_provider.py index f4aec0f..ecf8c40 100644 --- a/pySim/card_key_provider.py +++ b/pySim/card_key_provider.py @@ -173,18 +173,18 @@ class CardKeyProviderCsv(CardKeyProvider): """Card key provider implementation that allows to query against a specified CSV file."""
- def __init__(self, csv_filename: str, transport_keys: dict): + def __init__(self, csv_filename: str, field_cryptor: CardKeyFieldCryptor): """ Args: csv_filename : file name (path) of CSV file containing card-individual key/data - transport_keys : (see class CardKeyFieldCryptor) + field_cryptor : (see class CardKeyFieldCryptor) """ log.info("Using CSV file as card key data source: %s" % csv_filename) self.csv_file = open(csv_filename, 'r') if not self.csv_file: raise RuntimeError("Could not open CSV file '%s'" % csv_filename) self.csv_filename = csv_filename - self.crypt = CardKeyFieldCryptor(transport_keys) + self.crypt = field_cryptor
def get(self, fields: List[str], key: str, value: str) -> Dict[str, str]: self.csv_file.seek(0) @@ -216,11 +216,11 @@ class CardKeyProviderPgsql(CardKeyProvider): """Card key provider implementation that allows to query against a specified PostgreSQL database table."""
- def __init__(self, config_filename: str, transport_keys: dict): + def __init__(self, config_filename: str, field_cryptor: CardKeyFieldCryptor): """ Args: config_filename : file name (path) of CSV file containing card-individual key/data - transport_keys : (see class CardKeyFieldCryptor) + field_cryptor : (see class CardKeyFieldCryptor) """ import psycopg2 log.info("Using SQL database as card key data source: %s" % config_filename) @@ -237,7 +237,7 @@ host=config.get('host')) self.tables = config.get('table_names') log.info("Card key database tables: %s" % str(self.tables)) - self.crypt = CardKeyFieldCryptor(transport_keys) + self.crypt = field_cryptor
def get(self, fields: List[str], key: str, value: str) -> Dict[str, str]: import psycopg2 @@ -347,7 +347,8 @@ for par in opts.column_key: name, key = par.split(':') column_keys[name] = key + card_key_field_cryptor = CardKeyFieldCryptor(transport_keys) if os.path.isfile(os.path.expanduser(opts.csv)): - card_key_provider_register(CardKeyProviderCsv(os.path.expanduser(opts.csv), column_keys)) + card_key_provider_register(CardKeyProviderCsv(os.path.expanduser(opts.csv), card_key_field_cryptor)) if os.path.isfile(os.path.expanduser(opts.pgsql)): - card_key_provider_register(CardKeyProviderPgsql(os.path.expanduser(opts.pgsql), column_keys)) + card_key_provider_register(CardKeyProviderPgsql(os.path.expanduser(opts.pgsql), card_key_field_cryptor)) diff --git a/tests/unittests/test_card_key_provider.py b/tests/unittests/test_card_key_provider.py index 121998c..a70394a 100644 --- a/tests/unittests/test_card_key_provider.py +++ b/tests/unittests/test_card_key_provider.py @@ -20,7 +20,8 @@ "KIK3" : "00010204040506070809488B0C0D0E0F"}
csv_file_path = os.path.dirname(os.path.abspath(__file__)) + "/test_card_key_provider.csv" - card_key_provider_register(CardKeyProviderCsv(csv_file_path, column_keys)) + card_key_field_cryptor = CardKeyFieldCryptor(column_keys) + card_key_provider_register(CardKeyProviderCsv(csv_file_path, card_key_field_cryptor)) super().__init__(*args, **kwargs)
def test_card_key_provider_get(self):