diff --git a/docs/source/backends.rst b/docs/source/backends.rst index c69afb06..e7aad838 100644 --- a/docs/source/backends.rst +++ b/docs/source/backends.rst @@ -15,7 +15,6 @@ Backends platypush/backend/music.spotify.rst platypush/backend/nodered.rst platypush/backend/redis.rst - platypush/backend/scard.rst platypush/backend/sensor.ir.zeroborg.rst platypush/backend/sensor.leap.rst platypush/backend/stt.deepspeech.rst diff --git a/docs/source/platypush/backend/scard.rst b/docs/source/platypush/backend/scard.rst deleted file mode 100644 index 59c23f7c..00000000 --- a/docs/source/platypush/backend/scard.rst +++ /dev/null @@ -1,6 +0,0 @@ -``scard`` -=========================== - -.. automodule:: platypush.backend.scard - :members: - diff --git a/platypush/backend/scard/__init__.py b/platypush/backend/scard/__init__.py deleted file mode 100644 index 210467bb..00000000 --- a/platypush/backend/scard/__init__.py +++ /dev/null @@ -1,87 +0,0 @@ -from platypush.backend import Backend -from platypush.message.event.scard import SmartCardDetectedEvent, SmartCardRemovedEvent - - -class ScardBackend(Backend): - """ - Generic backend to read smart cards and NFC tags and trigger an event - whenever a device is detected. - - Extend this backend to implement more advanced communication with custom - smart cards. - """ - - def __init__(self, atr=None, *args, **kwargs): - """ - :param atr: If set, the backend will trigger events only for card(s) - with the specified ATR(s). It can be either an ATR string - (space-separated hex octects) or a list of ATR strings. Default: - none (any card will be detected). - """ - - from smartcard.CardType import AnyCardType, ATRCardType - - super().__init__(*args, **kwargs) - self.ATRs = [] - - if atr: - if isinstance(atr, str): - self.ATRs = [atr] - elif isinstance(atr, list): - self.ATRs = atr - else: - raise RuntimeError( - f"Unsupported ATR: \"{atr}\" - type: {type(atr)}, " - + "supported types: string, list" - ) - - self.cardtype = ATRCardType(*[self._to_bytes(atr) for atr in self.ATRs]) - else: - self.cardtype = AnyCardType() - - @staticmethod - def _to_bytes(data) -> bytes: - if isinstance(data, str): - data = data.encode() - return data - - def run(self): - from smartcard.CardRequest import CardRequest - from smartcard.Exceptions import NoCardException, CardConnectionException - from smartcard.util import toHexString - - super().run() - - self.logger.info( - 'Initialized smart card reader backend - ATR filter: {}'.format(self.ATRs) - ) - - prev_atr = None - reader = None - - while not self.should_stop(): - try: - cardrequest = CardRequest(timeout=None, cardType=self.cardtype) - cardservice = cardrequest.waitforcard() - cardservice.connection.connect() - - reader = cardservice.connection.getReader() - atr = toHexString(cardservice.connection.getATR()) - - if atr != prev_atr: - self.logger.info( - 'Smart card detected on reader {}, ATR: {}'.format(reader, atr) - ) - - self.bus.post(SmartCardDetectedEvent(atr=atr, reader=reader)) - prev_atr = atr - except Exception as e: - if isinstance(e, (NoCardException, CardConnectionException)): - self.bus.post(SmartCardRemovedEvent(atr=prev_atr, reader=reader)) - else: - self.logger.exception(e) - - prev_atr = None - - -# vim:sw=4:ts=4:et: diff --git a/platypush/backend/scard/manifest.yaml b/platypush/backend/scard/manifest.yaml deleted file mode 100644 index 97164d68..00000000 --- a/platypush/backend/scard/manifest.yaml +++ /dev/null @@ -1,17 +0,0 @@ -manifest: - events: - platypush.message.event.scard.SmartCardDetectedEvent: when a smart card is detected - platypush.message.event.scard.SmartCardRemovedEvent: when a smart card is removed - install: - apk: - - py3-pyscard - apt: - - python3-pyscard - dnf: - - python-pyscard - pacman: - - python-pyscard - pip: - - pyscard - package: platypush.backend.scard - type: backend