commit b43282e1a7e97878a1efde299a194a391f82d1fe Author: Daniele Maglie Date: Fri Jan 19 15:32:27 2024 +0100 Initial commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3041614 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +build/ +eggs/ +.eggs/ +*.egg +*.egg-info/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..f68b004 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +### Service + +Main logic of the application. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..07fac8b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[build-system] +requires = [ + "setuptools>=54", + "setuptools-rust" +] +build-backend = "setuptools.build_meta" + +[[tool.setuptools-rust.ext-modules]] +target = "rs_cidr_verifier" +path = "src/piracyshield_service/whitelist/cidr/Cargo.toml" +binding = "PyO3" +py-limited-api = "auto" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..609dbe4 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,16 @@ +[metadata] +name = piracyshield_service +version = 1.0.0 +description = Flow Management + +[options] +package_dir= + =src +packages = find: +python_requires = >= 3.10 +install_requires = + redis + rq + +[options.packages.find] +where = src diff --git a/src/piracyshield_service/__init__.py b/src/piracyshield_service/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/account/__init__.py b/src/piracyshield_service/account/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/account/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/account/change_password.py b/src/piracyshield_service/account/change_password.py new file mode 100644 index 0000000..fb5ad69 --- /dev/null +++ b/src/piracyshield_service/account/change_password.py @@ -0,0 +1,167 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.security.hasher import Hasher, HasherNonValidException +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.account.model import ( + AccountModel, + AccountModelPasswordException, + AccountModelConfirmPasswordException, + AccountModelConfirmPasswordMismatchException +) + +from piracyshield_service.account.set_flag import AccountSetFlagService + +from piracyshield_data_storage.account.storage import AccountStorageUpdateException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountChangePasswordService(BaseService): + + """ + Changes account password. + """ + + hasher = None + + hasher_config = None + + data_model = None + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + self.account_set_flag_service = AccountSetFlagService(data_storage) + + self._prepare_configs() + + self._prepare_modules() + + super().__init__() + + def execute(self, account_id: str, current_password: str, new_password: str, confirm_password: str) -> bool | Exception: + account_data = self._get_account_data(account_id) + + self._verify_current_password(current_password, account_data.get('password')) + + self._validate_parameters(account_data, new_password, confirm_password) + + if current_password == new_password: + raise ApplicationException(AccountErrorCode.PASSWORD_DIFF, AccountErrorMessage.PASSWORD_DIFF) + + hashed_new_password = self.hasher.encode_string(new_password) + + try: + affected_rows = self.data_storage.change_password( + account_id = account_id, + password = hashed_new_password + ) + + if not len(affected_rows): + self.logger.debug(f'Could not change password for account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC) + + except AccountStorageUpdateException as e: + self.logger.error(f'Could not update the account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + self.account_set_flag_service.execute( + account_id = account_id, + flag = 'change_password', + value = False + ) + + return True + + def _get_account_data(self, account_id: str) -> dict | Exception: + try: + response = self.data_storage.get_complete(account_id) + + if response.empty(): + self.logger.debug(f'Could not find any account for `{account_id}`') + + raise ApplicationException(AccountErrorCode.ACCOUNT_NOT_FOUND, AccountErrorMessage.ACCOUNT_NOT_FOUND) + + document = next(response, None) + + return document + + except AccountStorageGetException as e: + self.logger.error(f'Could not retrieve account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _verify_current_password(self, password: str, hashed_password: str) -> bool | Exception: + """ + Checks the hashed password against the plain text password. + + :param hashed_password: Argon2 hash string. + :param password: plain text password to verify. + """ + + try: + return self.hasher.verify_hash(password, hashed_password) + + except HasherNonValidException: + raise ApplicationException(AccountErrorCode.PASSWORD_CHANGE_MISMATCH, AccountErrorMessage.PASSWORD_CHANGE_MISMATCH) + + def _schedule_task(self): + pass + + def _validate_parameters(self, account_data: dict, new_password: str, confirm_password: str) -> bool | Exception: + try: + # we currently need to re-validate everything to have a password validation + self.data_model( + account_id = account_data.get('account_id'), + name = account_data.get('name'), + email = account_data.get('email'), + password = new_password, + confirm_password = confirm_password, + role = account_data.get('role'), + is_active = account_data.get('is_active') + ) + + return True + + except AccountModelPasswordException: + raise ApplicationException(AccountErrorCode.PASSWORD_ERROR, AccountErrorMessage.PASSWORD_ERROR) + + except AccountModelConfirmPasswordException: + raise ApplicationException(AccountErrorCode.PASSWORD_ERROR, AccountErrorMessage.PASSWORD_ERROR) + + except AccountModelConfirmPasswordMismatchException: + raise ApplicationException(AccountErrorCode.PASSWORD_MISMATCH_ERROR, AccountErrorMessage.PASSWORD_MISMATCH_ERROR) + + def _prepare_configs(self): + """ + Loads the configs. + """ + + self.hasher_config = Config('security/token').get('hasher') + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.data_model = AccountModel + + self.hasher = Hasher( + time_cost = self.hasher_config.get('time_cost'), + memory_cost = self.hasher_config.get('memory_cost'), + parallelism = self.hasher_config.get('parallelism'), + hash_length = self.hasher_config.get('hash_length'), + salt_length = self.hasher_config.get('salt_length') + ) diff --git a/src/piracyshield_service/account/create.py b/src/piracyshield_service/account/create.py new file mode 100644 index 0000000..62d9286 --- /dev/null +++ b/src/piracyshield_service/account/create.py @@ -0,0 +1,246 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.utils.time import Time +from piracyshield_component.security.hasher import Hasher, HasherGenericException +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.account.model import ( + AccountModel, + AccountModelNameException, + AccountModelEmailException, + AccountModelPasswordException, + AccountModelConfirmPasswordException, + AccountModelConfirmPasswordMismatchException, + AccountModelRoleException +) + +from piracyshield_data_model.account.flags.model import ( + AccountFlagsModel, + AccountFlagsModelUnknownFlagException, + AccountFlagsModelValueException +) + +from piracyshield_data_storage.authentication.storage import AuthenticationStorage, AuthenticationStorageGetException +from piracyshield_data_storage.account.storage import AccountStorage, AccountStorageCreateException + +from piracyshield_service.authentication.exists_by_email import AuthenticationExistsByEmailService + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +from collections import deque + +class AccountCreateService(BaseService): + + """ + Account creation class. + """ + + authentication_exists_by_email_service = None + + authentication_storage = None + + flags_data_model = None + + data_model = None + + data_storage = None + + hasher = None + + hasher_config = None + + identifier = None + + def __init__(self, data_model: AccountModel, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + self.data_model = data_model + + self.data_storage = data_storage() + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, name: str, email: str, password: str, confirm_password: str, flags: dict, created_by: str) -> str | Exception: + """ + :param name: a string that identificates the real name (and, eventually, sourname) of the user. + :param email: e-mail address, used in conjunction with a password to authenticate the user. + :param password: a string. + :param confirm_password: must be the same as `password`. + :param flags: flags of the account. + :param created_by: account id of the creator. + :return account id of the created user. + """ + + model = self._validate_parameters( + account_id = self._generate_account_id(), + name = name, + email = email, + password = password, + confirm_password = confirm_password, + is_active = True + ) + + # check for duplicates + if self.authentication_exists_by_email_service.execute( + email = model.get('email') + ) == True: + raise ApplicationException(AccountErrorCode.EMAIL_EXISTS, AccountErrorMessage.EMAIL_EXISTS) + + flags_model = self._validate_flags( + flags = flags + ) + + document = self._build_document( + model = model, + encoded_password = self.hasher.encode_string(model.get('password')), + created_by = created_by, + flags = flags_model, + now = Time.now_iso8601() + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except AccountStorageCreateException as e: + self.logger.error(f'Could not create the account') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + self.logger.info(f'Account `{document.get("email")}` created with id `{document.get("account_id")}`') + + # return the pre-generated user_id + return document.get('account_id') + + def _generate_account_id(self) -> str: + """ + Generates a UUIDv4 to use as a main account identifier without exposing the true ID in the database. + """ + + return self.identifier.generate() + + def _encode_password(self, password: str) -> str | Exception: + """ + Attempts to encode the plain test password. + + :param password: plain text password. + :return: a string containing the encoded password. + """ + + try: + return self.hasher.encode_string(password) + + except HasherGenericException as e: + self.logger.error(f'Could not encode password `{password}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _build_document(self, model: dict, encoded_password: str, created_by: str, flags: dict, now: str) -> dict: + return { + 'account_id': model.get('account_id'), + 'name': model.get('name'), + 'email': model.get('email'), + 'password': encoded_password, + 'role': model.get('role'), + 'is_active': model.get('is_active'), + 'flags': flags.get('flags'), + 'metadata': { + # creation date + 'created_at': now, + + # same as creation date + 'updated_at': now, + + # who created this item + 'created_by': created_by + } + } + + def _schedule_task(self): + pass + + def _validate_flags(self, flags: dict) -> dict: + try: + # validate flags + model = self.flags_data_model( + flags = flags + ) + + return model.to_dict() + + except AccountFlagsModelUnknownFlagException: + raise ApplicationException(AccountErrorCode.FLAG_UNKNOWN, AccountErrorMessage.FLAG_UNKNOWN) + + except AccountFlagsModelValueException: + raise ApplicationException(AccountErrorCode.FLAG_NON_VALID_VALUE, AccountErrorMessage.FLAG_NON_VALID_VALUE) + + def _validate_parameters(self, account_id: str, name: str, email: str, password: str, confirm_password: str, is_active: bool) -> dict: + try: + # validate given parameters + model = self.data_model( + account_id = account_id, + name = name, + email = email, + password = password, + confirm_password = confirm_password, + is_active = True + ) + + return model.to_dict() + + except AccountModelNameException: + raise ApplicationException(AccountErrorCode.NAME_ERROR, AccountErrorMessage.NAME_ERROR) + + except AccountModelEmailException: + raise ApplicationException(AccountErrorCode.EMAIL_ERROR, AccountErrorMessage.EMAIL_ERROR) + + except AccountModelPasswordException: + raise ApplicationException(AccountErrorCode.PASSWORD_ERROR, AccountErrorMessage.PASSWORD_ERROR) + + except AccountModelConfirmPasswordException: + raise ApplicationException(AccountErrorCode.PASSWORD_ERROR, AccountErrorMessage.PASSWORD_ERROR) + + except AccountModelConfirmPasswordMismatchException: + raise ApplicationException(AccountErrorCode.PASSWORD_MISMATCH_ERROR, AccountErrorMessage.PASSWORD_MISMATCH_ERROR) + + # this is implicitly passed by the child model + except AccountModelRoleException: + raise ApplicationException(AccountErrorCode.ROLE_ERROR, AccountErrorMessage.ROLE_ERROR) + + def _prepare_configs(self): + """ + Loads the configs. + """ + + self.hasher_config = Config('security/token').get('hasher') + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.flags_data_model = AccountFlagsModel + + self.hasher = Hasher( + time_cost = self.hasher_config.get('time_cost'), + memory_cost = self.hasher_config.get('memory_cost'), + parallelism = self.hasher_config.get('parallelism'), + hash_length = self.hasher_config.get('hash_length'), + salt_length = self.hasher_config.get('salt_length') + ) + + self.identifier = Identifier() + + self.authentication_storage = AuthenticationStorage() + + self.authentication_exists_by_email_service = AuthenticationExistsByEmailService() diff --git a/src/piracyshield_service/account/errors.py b/src/piracyshield_service/account/errors.py new file mode 100644 index 0000000..a90b072 --- /dev/null +++ b/src/piracyshield_service/account/errors.py @@ -0,0 +1,60 @@ + +class AccountErrorCode: + + GENERIC = '3001' + + EMAIL_EXISTS = '3002' + + NAME_ERROR = '3003' + + EMAIL_ERROR = '3004' + + PASSWORD_ERROR = '3005' + + PASSWORD_MISMATCH_ERROR = '3006' + + ROLE_ERROR = '3007' + + FLAG_UNKNOWN = '3008' + + FLAG_NON_VALID_VALUE = '3009' + + FLAG_NOT_FOUND = '3010' + + ACCOUNT_NOT_FOUND = '3011' + + PASSWORD_CHANGE_NON_VALID = '3012' + + PASSWORD_CHANGE_MISMATCH = '3013' + + PASSWORD_DIFF = '3014' + +class AccountErrorMessage: + + GENERIC = 'Error during the creation of the account.' + + EMAIL_EXISTS = 'The e-mail address already exists.' + + NAME_ERROR = 'The name should be a string between 3 and 32 characters.' + + EMAIL_ERROR = 'Non valid e-mail address.' + + PASSWORD_ERROR = 'The password should be a string between 8 and 32 characters.' + + PASSWORD_MISMATCH_ERROR = 'The password confirmation should be equal as the password field.' + + ROLE_ERROR = 'The role should be a valid role type.' + + FLAG_UNKNOWN = 'Unknown flag.' + + FLAG_NON_VALID_VALUE = 'Flag value non valid.' + + FLAG_NOT_FOUND = 'Flag not found.' + + ACCOUNT_NOT_FOUND = 'No account found.' + + PASSWORD_CHANGE_NON_VALID = 'Current or new password non valid.' + + PASSWORD_CHANGE_MISMATCH = 'Current password is wrong.' + + PASSWORD_DIFF = 'The new password should be different from the current password.' diff --git a/src/piracyshield_service/account/exists_by_identifier.py b/src/piracyshield_service/account/exists_by_identifier.py new file mode 100644 index 0000000..d3e7917 --- /dev/null +++ b/src/piracyshield_service/account/exists_by_identifier.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountExistsByIdentifierService(BaseService): + + """ + Checks if an account with this identifier exists. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self, account_id: str) -> bool | Exception: + try: + response = self.data_storage.exists_by_identifier( + account_id = account_id + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except AccountStorageGetException as e: + self.logger.error(f'Could not verify if an account exists with the identifier `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/account/general/__init__.py b/src/piracyshield_service/account/general/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/account/general/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/account/general/get.py b/src/piracyshield_service/account/general/get.py new file mode 100644 index 0000000..3800e6f --- /dev/null +++ b/src/piracyshield_service/account/general/get.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_data_storage.account.general.storage import GeneralAccountStorage, GeneralAccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class GeneralAccountGetService(BaseService): + + """ + Fetches any type of account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> dict: + try: + response = self.data_storage.get(account_id) + + if response.empty(): + self.logger.debug(f'Could not find any account for `{account_id}`') + + raise ApplicationException(AccountErrorCode.ACCOUNT_NOT_FOUND, AccountErrorMessage.ACCOUNT_NOT_FOUND) + + document = next(response, None) + + return document + + except GeneralAccountStorageGetException: + self.logger.error(f'Could not get the account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = GeneralAccountStorage() diff --git a/src/piracyshield_service/account/general/get_all.py b/src/piracyshield_service/account/general/get_all.py new file mode 100644 index 0000000..38331be --- /dev/null +++ b/src/piracyshield_service/account/general/get_all.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_data_storage.account.general.storage import GeneralAccountStorage, GeneralAccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class GeneralAccountGetAllService(BaseService): + + """ + Fetches all the accounts. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> list: + try: + response = self.data_storage.get_all() + + if response.empty(): + self.logger.debug(f'No account found') + + raise ApplicationException(AccountErrorCode.ACCOUNT_NOT_FOUND, AccountErrorMessage.ACCOUNT_NOT_FOUND) + + batch = response.batch() + + return list(batch) + + except GeneralAccountStorageGetException: + self.logger.error(f'Could not get the account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = GeneralAccountStorage() diff --git a/src/piracyshield_service/account/get.py b/src/piracyshield_service/account/get.py new file mode 100644 index 0000000..cdd20a1 --- /dev/null +++ b/src/piracyshield_service/account/get.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountGetService(BaseService): + + """ + Fetches account data. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self, account_id: str) -> dict | Exception: + try: + response = self.data_storage.get(account_id) + + if response.empty(): + self.logger.debug(f'Could not find any account for `{account_id}`') + + raise ApplicationException(AccountErrorCode.ACCOUNT_NOT_FOUND, AccountErrorMessage.ACCOUNT_NOT_FOUND) + + document = next(response, None) + + return document + + except AccountStorageGetException as e: + self.logger.error(f'Could not retrieve account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/account/get_all.py b/src/piracyshield_service/account/get_all.py new file mode 100644 index 0000000..8f5e7ea --- /dev/null +++ b/src/piracyshield_service/account/get_all.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountGetAllService(BaseService): + + """ + Fetches all accounts. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self) -> list | Exception: + try: + response = self.data_storage.get_all() + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No account found') + + raise ApplicationException(AccountErrorCode.ACCOUNT_NOT_FOUND, AccountErrorMessage.ACCOUNT_NOT_FOUND) + + return list(batch) + + except AccountStorageGetException as e: + self.logger.error(f'Could not retrieve any account') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/account/get_total.py b/src/piracyshield_service/account/get_total.py new file mode 100644 index 0000000..2e8248d --- /dev/null +++ b/src/piracyshield_service/account/get_total.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageGetException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountGetTotalService(BaseService): + + """ + Retrieves the total number of accounts. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self) -> list | Exception: + try: + response = self.data_storage.get_total() + + batch = response.batch() + + return len(batch) + + except AccountStorageGetException as e: + self.logger.error(f'Could not retrieve the total count of the accounts') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = AccountStorage() diff --git a/src/piracyshield_service/account/remove.py b/src/piracyshield_service/account/remove.py new file mode 100644 index 0000000..109acf6 --- /dev/null +++ b/src/piracyshield_service/account/remove.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageRemoveException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountRemoveService(BaseService): + + """ + Removes an account. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self, account_id: str) -> bool | Exception: + try: + self.data_storage.remove(account_id) + + return True + + except AccountStorageRemoveException as e: + self.logger.error(f'Could not remove the account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/account/set_flag.py b/src/piracyshield_service/account/set_flag.py new file mode 100644 index 0000000..dd5a282 --- /dev/null +++ b/src/piracyshield_service/account/set_flag.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageUpdateException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountSetFlagService(BaseService): + + """ + Sets the flag of an account. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self, account_id: str, flag: str, value: any) -> bool | Exception: + try: + affected_rows = self.data_storage.set_flag( + account_id = account_id, + flag = flag, + value = value + ) + + if not len(affected_rows): + self.logger.debug(f'Could not update the flag for account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC) + + return True + + except AccountStorageUpdateException as e: + self.logger.error(f'Could not update the flag for account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/account/set_status.py b/src/piracyshield_service/account/set_status.py new file mode 100644 index 0000000..b569dd0 --- /dev/null +++ b/src/piracyshield_service/account/set_status.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.account.storage import AccountStorageUpdateException + +from piracyshield_service.account.errors import AccountErrorCode, AccountErrorMessage + +class AccountSetStatusService(BaseService): + + """ + Sets the status of an account. + """ + + data_storage = None + + def __init__(self, data_storage: AccountStorage): + """ + Inizialize logger and required modules. + """ + + # child data storage class + self.data_storage = data_storage() + + super().__init__() + + def execute(self, account_id: str, value: bool) -> bool | Exception: + try: + affected_rows = self.data_storage.update_status( + account_id = account_id, + value = value + ) + + if not len(affected_rows): + self.logger.debug(f'Could not update the status of account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC) + + return True + + except AccountStorageUpdateException as e: + self.logger.error(f'Could not update the account `{account_id}`') + + raise ApplicationException(AccountErrorCode.GENERIC, AccountErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/authentication/__init__.py b/src/piracyshield_service/authentication/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/authentication/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/authentication/authenticate.py b/src/piracyshield_service/authentication/authenticate.py new file mode 100644 index 0000000..c9efdbc --- /dev/null +++ b/src/piracyshield_service/authentication/authenticate.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException +from piracyshield_component.security.hasher import Hasher, HasherNonValidException + +from piracyshield_data_model.authentication.model import AuthenticationModel, AuthenticationModelEmailException, AuthenticationModelPasswordException + +from piracyshield_data_storage.authentication.storage import AuthenticationStorage, AuthenticationStorageGetException + +from piracyshield_service.authentication.get import AuthenticationGetService + +from piracyshield_service.security.anti_brute_force import SecurityAntiBruteForceService + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationAuthenticateService(BaseService): + + """ + Credentials based authentication. + """ + + security_anti_brute_force_service = None + + authentication_get_service = None + + data_storage = None + + data_model = None + + hasher = None + + hasher_config = None + + login_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, email: str, password: str, ip_address: str) -> dict | Exception: + # ensure the correctness of the data before proceeding + model = self._validate_parameters(email, password) + + self.logger.debug(f'Account `{email}` requested an authentication') + + # perform anti brute force controls if active + if self.security_anti_brute_force_config.get('active') == True: + self.security_anti_brute_force_service.execute( + email = email, + ip_address = ip_address + ) + + account = self.authentication_get_service.execute( + email = model.get('email') + ) + + # is the account active? + if account.get('is_active') == False: + raise ApplicationException(AuthenticationErrorCode.USER_NON_ACTIVE, AuthenticationErrorMessage.USER_NON_ACTIVE) + + # verify password + self._verify_password(password, account.get('password')) + + self.logger.debug(f"Account `{account.get('email')}` correctly authenticated.") + + return self._build_payload(account) + + def _verify_password(self, password: str, hashed_password: str) -> bool: + """ + Checks the hashed password against the plain text password. + + :param hashed_password: Argon2 hash string. + :param password: plain text password to verify. + """ + + try: + return self.hasher.verify_hash(password, hashed_password) + + except HasherNonValidException: + raise ApplicationException(AuthenticationErrorCode.PASSWORD_MISMATCH, AuthenticationErrorMessage.PASSWORD_MISMATCH) + + def _build_payload(self, account: dict) -> dict: + # TODO: we should pass this via the account service. + + return { + 'account_id': account.get('account_id'), + 'email': account.get('email'), + 'name': account.get('name'), + 'role': account.get('role'), + 'flags': account.get('flags') + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, email: str, password: str) -> dict | Exception: + """ + Verify passed parameters using the authentication data model. + + :param email: valid string. + :param password: valid string. + """ + + try: + model = self.data_model(email, password) + + return model.to_dict() + + except AuthenticationModelEmailException: + raise ApplicationException(AuthenticationErrorCode.EMAIL_NON_VALID, AuthenticationErrorMessage.EMAIL_NON_VALID) + + except AuthenticationModelPasswordException: + raise ApplicationException(AuthenticationErrorCode.PASSWORD_NON_VALID, AuthenticationErrorMessage.PASSWORD_NON_VALID) + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.security_anti_brute_force_config = Config('security/anti_brute_force').get('general') + + self.hasher_config = Config('security/token').get('hasher') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_model = AuthenticationModel + + self.hasher = Hasher( + time_cost = self.hasher_config.get('time_cost'), + memory_cost = self.hasher_config.get('memory_cost'), + parallelism = self.hasher_config.get('parallelism'), + hash_length = self.hasher_config.get('hash_length'), + salt_length = self.hasher_config.get('salt_length') + ) + + self.data_storage = AuthenticationStorage() + + self.authentication_get_service = AuthenticationGetService() + + self.security_anti_brute_force_service = SecurityAntiBruteForceService() diff --git a/src/piracyshield_service/authentication/errors.py b/src/piracyshield_service/authentication/errors.py new file mode 100644 index 0000000..1d547bc --- /dev/null +++ b/src/piracyshield_service/authentication/errors.py @@ -0,0 +1,48 @@ + +class AuthenticationErrorCode: + + # NOTE: using duplicate codes to mimic the same issue for the user while keeping track of the exception type internally. + + GENERIC = '2000' + + EMAIL_NON_VALID = '2001' + + EMAIL_NOT_FOUND = '2001' + + USER_NON_ACTIVE = '2001' + + PASSWORD_NON_VALID = '2002' + + PASSWORD_MISMATCH = '2002' + + TOKEN_REFRESH_USER_NON_ACTIVE = '2003' + + TOKEN_MISMATCH = '2003' + + TOKEN_EXPIRED = '2003' + + MAX_LOGIN_ATTEMPTS = '2004' + +class AuthenticationErrorMessage: + + GENERIC = 'Generic authentication error.' + + EMAIL_NON_VALID = 'Unable to authenticate, e-mail address format non valid.' + + EMAIL_NOT_FOUND = 'Unable to authenticate.' + + USER_NON_ACTIVE = 'Unable to authenticate.' + + PASSWORD_NON_VALID = 'Unable to authenticate.' + + PASSWORD_MISMATCH = 'Unable to authenticate.' + + TOKEN_REFRESH_EMAIL_NOT_FOUND = 'Unable to refresh the token.' + + TOKEN_REFRESH_USER_NON_ACTIVE = 'Unable to refresh the token.' + + TOKEN_MISMATCH = 'Unable to authenticate, token non valid.' + + TOKEN_EXPIRED = 'Unable to verify the token, expired.' + + MAX_LOGIN_ATTEMPTS = 'Max login attempts reached. Your IP address is temporary banned for {} seconds' diff --git a/src/piracyshield_service/authentication/exists_by_email.py b/src/piracyshield_service/authentication/exists_by_email.py new file mode 100644 index 0000000..7b2f7c5 --- /dev/null +++ b/src/piracyshield_service/authentication/exists_by_email.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.authentication.storage import AuthenticationStorage, AuthenticationStorageGetException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationExistsByEmailService(BaseService): + + """ + Checks wether an e-mail address exists. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, email: str) -> bool | Exception: + try: + response = self.data_storage.get( + email = email + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except AuthenticationStorageGetException as e: + self.logger.error(f'Could not verify if e-mail exists') + + raise ApplicationException(AuthenticationErrorCode.GENERIC, AuthenticationErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = AuthenticationStorage() diff --git a/src/piracyshield_service/authentication/generate_access_token.py b/src/piracyshield_service/authentication/generate_access_token.py new file mode 100644 index 0000000..e18633c --- /dev/null +++ b/src/piracyshield_service/authentication/generate_access_token.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException +from piracyshield_component.security.token import JWTToken, JWTTokenGenericException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationGenerateAccessTokenService(BaseService): + + """ + Generates an access token. + """ + + token = None + + jwt_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, payload: dict) -> str | Exception: + try: + return self.token.generate_access_token(payload) + + except JWTTokenGenericException as e: + self.logger.error(f'Cannot generate an access token for payload `{payload}`') + + raise ApplicationException(AuthenticationErrorCode.GENERIC, AuthenticationErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self, email: str, password: str) -> dict | Exception: + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.jwt_config = Config('security/token').get('jwt_token') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.token = JWTToken( + access_secret_key = self.jwt_config.get('access_secret_key'), + refresh_secret_key = self.jwt_config.get('refresh_secret_key'), + access_expiration_time = self.jwt_config.get('access_expiration_time'), + refresh_expiration_time = self.jwt_config.get('refresh_expiration_time'), + algorithm = self.jwt_config.get('algorithm') + ) diff --git a/src/piracyshield_service/authentication/generate_refresh_token.py b/src/piracyshield_service/authentication/generate_refresh_token.py new file mode 100644 index 0000000..e9142c9 --- /dev/null +++ b/src/piracyshield_service/authentication/generate_refresh_token.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException +from piracyshield_component.security.token import JWTToken, JWTTokenGenericException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationGenerateRefreshTokenService(BaseService): + + """ + Generates a refresh token. + """ + + token = None + + jwt_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, payload: dict) -> str | Exception: + try: + return self.token.generate_refresh_token(payload) + + except JWTTokenGenericException as e: + self.logger.error(f'Cannot generate a refresh token for payload `{payload}`') + + raise ApplicationException(AuthenticationErrorCode.GENERIC, AuthenticationErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self, email: str, password: str) -> dict | Exception: + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.jwt_config = Config('security/token').get('jwt_token') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.token = JWTToken( + access_secret_key = self.jwt_config.get('access_secret_key'), + refresh_secret_key = self.jwt_config.get('refresh_secret_key'), + access_expiration_time = self.jwt_config.get('access_expiration_time'), + refresh_expiration_time = self.jwt_config.get('refresh_expiration_time'), + algorithm = self.jwt_config.get('algorithm') + ) diff --git a/src/piracyshield_service/authentication/get.py b/src/piracyshield_service/authentication/get.py new file mode 100644 index 0000000..438000f --- /dev/null +++ b/src/piracyshield_service/authentication/get.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.authentication.storage import AuthenticationStorage, AuthenticationStorageGetException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationGetService(BaseService): + + """ + Retrieves an account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, email: str) -> dict | Exception: + try: + response = self.data_storage.get( + email = email + ) + + if response.empty(): + self.logger.debug(f'Could not find any account for `{email}`') + + raise ApplicationException(AuthenticationErrorCode.EMAIL_NOT_FOUND, AuthenticationErrorMessage.EMAIL_NOT_FOUND) + + document = next(response, None) + + return document + + except AuthenticationStorageGetException as e: + self.logger.error(f'Could not verify if e-mail exists') + + raise ApplicationException(AuthenticationErrorCode.GENERIC, AuthenticationErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = AuthenticationStorage() diff --git a/src/piracyshield_service/authentication/verify_access_token.py b/src/piracyshield_service/authentication/verify_access_token.py new file mode 100644 index 0000000..a75dac8 --- /dev/null +++ b/src/piracyshield_service/authentication/verify_access_token.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException +from piracyshield_component.security.token import JWTToken, JWTTokenExpiredException, JWTTokenNonValidException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationVerifyAccessTokenService(BaseService): + + """ + Verifies an access token. + """ + + token = None + + jwt_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, token: bytes) -> dict | Exception: + """ + Verifies the validity of the JWT token and unrolls the payload. + + :param token: a valid JWT token string. + """ + + try: + return self.token.verify_access_token(token) + + except JWTTokenExpiredException: + raise ApplicationException(AuthenticationErrorCode.TOKEN_EXPIRED, AuthenticationErrorMessage.TOKEN_EXPIRED) + + except JWTTokenNonValidException: + raise ApplicationException(AuthenticationErrorCode.TOKEN_MISMATCH, AuthenticationErrorMessage.TOKEN_MISMATCH) + + def _schedule_task(self): + pass + + def _validate_parameters(self, email: str, password: str) -> dict | Exception: + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.jwt_config = Config('security/token').get('jwt_token') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.token = JWTToken( + access_secret_key = self.jwt_config.get('access_secret_key'), + refresh_secret_key = self.jwt_config.get('refresh_secret_key'), + access_expiration_time = self.jwt_config.get('access_expiration_time'), + refresh_expiration_time = self.jwt_config.get('refresh_expiration_time'), + algorithm = self.jwt_config.get('algorithm') + ) diff --git a/src/piracyshield_service/authentication/verify_refresh_token.py b/src/piracyshield_service/authentication/verify_refresh_token.py new file mode 100644 index 0000000..9fa25e9 --- /dev/null +++ b/src/piracyshield_service/authentication/verify_refresh_token.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException +from piracyshield_component.security.token import JWTToken, JWTTokenExpiredException, JWTTokenNonValidException + +from piracyshield_service.authentication.errors import AuthenticationErrorCode, AuthenticationErrorMessage + +class AuthenticationVerifyRefreshTokenService(BaseService): + + """ + Verifies a refresh token. + """ + + token = None + + jwt_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, token: bytes) -> dict | Exception: + """ + Verifies the validity of the JWT token and unrolls the payload. + + :param token: a valid JWT token string. + """ + + try: + return self.token.verify_refresh_token(token) + + except JWTTokenExpiredException: + raise ApplicationException(AuthenticationErrorCode.TOKEN_EXPIRED, AuthenticationErrorMessage.TOKEN_EXPIRED) + + except JWTTokenNonValidException: + raise ApplicationException(AuthenticationErrorCode.TOKEN_MISMATCH, AuthenticationErrorMessage.TOKEN_MISMATCH) + + def _schedule_task(self): + pass + + def _validate_parameters(self, email: str, password: str) -> dict | Exception: + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.jwt_config = Config('security/token').get('jwt_token') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.token = JWTToken( + access_secret_key = self.jwt_config.get('access_secret_key'), + refresh_secret_key = self.jwt_config.get('refresh_secret_key'), + access_expiration_time = self.jwt_config.get('access_expiration_time'), + refresh_expiration_time = self.jwt_config.get('refresh_expiration_time'), + algorithm = self.jwt_config.get('algorithm') + ) diff --git a/src/piracyshield_service/base.py b/src/piracyshield_service/base.py new file mode 100644 index 0000000..203dd2b --- /dev/null +++ b/src/piracyshield_service/base.py @@ -0,0 +1,55 @@ +from piracyshield_component.log.logger import Logger + +from piracyshield_service.task.service import TaskService + +from abc import ABC, abstractmethod + +class BaseService(ABC): + + task_service = None + + logger = None + + def __init__(self): + self.logger = Logger('service') + + self.task_service = TaskService() + + @abstractmethod + def execute(self, *args, **kwargs): + """ + Executes the service main task. + """ + + pass + + def _schedule_task(self, *args, **kwargs): + """ + Schedule a specific task. + """ + + pass + + @abstractmethod + def _validate_parameters(self, *args, **kwargs): + """ + Validates parameters in input. + """ + + pass + + @abstractmethod + def _prepare_configs(self): + """ + Prepares the config files. + """ + + pass + + @abstractmethod + def _prepare_modules(self): + """ + Prepare additional components. + """ + + pass diff --git a/src/piracyshield_service/dda/__init__.py b/src/piracyshield_service/dda/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/dda/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/dda/create.py b/src/piracyshield_service/dda/create.py new file mode 100644 index 0000000..d5be068 --- /dev/null +++ b/src/piracyshield_service/dda/create.py @@ -0,0 +1,174 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.dda.model import ( + DDAModel, + DDAModelDDAIdException, + DDAModelDescriptionMissingException, + DDAModelDescriptionNonValidException, + DDAModelInstanceMissingException, + DDAModelInstanceNonValidException, + DDAModelAccountIdMissingException, + DDAModelAccountIdNonValidException +) + +from piracyshield_data_model.account.role.model import AccountRoleModel + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageCreateException + +from piracyshield_service.account.general.get import GeneralAccountGetService + +from piracyshield_service.dda.exists_by_instance import DDAExistsByInstanceService + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDACreateService(BaseService): + + """ + DDA creation class. + """ + + general_account_get_service = None + + dda_exists_by_instance_service = None + + identifier = None + + data_storage = None + + data_model = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, description: str, instance: str, account_id: str, created_by: str) -> bool | Exception: + model = self._validate_parameters( + dda_id = self._generate_dda_id(), + description = description, + instance = instance, + account_id = account_id, + is_active = True + ) + + # check for duplicates + if self.dda_exists_by_instance_service.execute( + instance = model.get('instance') + ): + raise ApplicationException(DDAErrorCode.INSTANCE_EXISTS, DDAErrorMessage.INSTANCE_EXISTS) + + # ensure that the account exists as this will trigger an exception if not + account_data = self.general_account_get_service.execute( + account_id = account_id + ) + + # verify it's a reporter account + if AccountRoleModel.REPORTER.value != account_data.get('role'): + raise ApplicationException(DDAErrorCode.NON_VALID_ACCOUNT_ROLE, DDAErrorMessage.NON_VALID_ACCOUNT_ROLE) + + document = self._build_document( + model = model, + created_by = created_by, + now = Time.now_iso8601() + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except DDAStorageCreateException as e: + self.logger.error(f'Error while creating the DDA instance') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + self.logger.info(f'DDA instance `{document.get("instance")}` created by `{document.get("metadata").get("created_by")}`') + + return True + + def _generate_dda_id(self) -> str: + """ + Generates a UUIDv4. + + :return: a randomly generated 32 characters string. + """ + + return self.identifier.generate() + + def _build_document(self, model: dict, created_by: str, now: str) -> dict: + return { + 'dda_id': model.get('dda_id'), + 'description': model.get('description'), + 'instance': model.get('instance'), + 'account_id': model.get('account_id'), + 'is_active': model.get('is_active'), + 'metadata': { + # creation date + 'created_at': now, + + # same as creation date + 'updated_at': now, + + # who created this item + 'created_by': created_by + } + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, dda_id: str, description: str, instance: str, account_id: str, is_active: bool) -> dict | Exception: + try: + model = self.data_model( + dda_id = dda_id, + description = description, + instance = instance, + account_id = account_id, + is_active = is_active + ) + + return model.to_dict() + + except DDAModelDDAIdException: + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC) + + except DDAModelDescriptionMissingException: + raise ApplicationException(DDAErrorCode.MISSING_DESCRIPTION, DDAErrorMessage.MISSING_DESCRIPTION) + + except DDAModelDescriptionNonValidException: + raise ApplicationException(DDAErrorCode.NON_VALID_DESCRIPTION, DDAErrorMessage.NON_VALID_DESCRIPTION) + + except DDAModelInstanceMissingException: + raise ApplicationException(DDAErrorCode.MISSING_INSTANCE, DDAErrorMessage.MISSING_INSTANCE) + + except DDAModelInstanceNonValidException: + raise ApplicationException(DDAErrorCode.NON_VALID_INSTANCE, DDAErrorMessage.NON_VALID_INSTANCE) + + except DDAModelAccountIdMissingException: + raise ApplicationException(DDAErrorCode.MISSING_ACCOUNT_ID, DDAErrorMessage.MISSING_ACCOUNT_ID) + + except DDAModelAccountIdNonValidException: + raise ApplicationException(DDAErrorCode.NON_VALID_ACCOUNT_ID, DDAErrorMessage.NON_VALID_ACCOUNT_ID) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = DDAModel + + self.data_storage = DDAStorage() + + self.identifier = Identifier() + + self.dda_exists_by_instance_service = DDAExistsByInstanceService() + + self.general_account_get_service = GeneralAccountGetService() diff --git a/src/piracyshield_service/dda/errors.py b/src/piracyshield_service/dda/errors.py new file mode 100644 index 0000000..f017551 --- /dev/null +++ b/src/piracyshield_service/dda/errors.py @@ -0,0 +1,52 @@ + +class DDAErrorCode: + + GENERIC = '7000' + + MISSING_DESCRIPTION = '7001' + + NON_VALID_DESCRIPTION = '7002' + + MISSING_INSTANCE = '7003' + + NON_VALID_INSTANCE = '7004' + + MISSING_ACCOUNT_ID = '7005' + + NON_VALID_ACCOUNT_ID = '7006' + + NON_VALID_ACCOUNT_ROLE = '7007' + + INSTANCE_EXISTS = '7008' + + CANNOT_REMOVE = '7009' + + INSTANCE_USED = '7010' + + CANNOT_SET_STATUS = '7011' + +class DDAErrorMessage: + + GENERIC = 'Error during the creation of the DDA instance.' + + MISSING_DESCRIPTION = 'Missing description.' + + NON_VALID_DESCRIPTION = 'Non valid description.' + + MISSING_INSTANCE = 'Missing instance.' + + NON_VALID_INSTANCE = 'Non valid instance.' + + MISSING_ACCOUNT_ID = 'Missing account identifier.' + + NON_VALID_ACCOUNT_ID = 'Non valid account identifier.' + + NON_VALID_ACCOUNT_ROLE = 'Account with wrong role. Only Reporter accounts are allowed to obtain and use a DDA instance.' + + INSTANCE_EXISTS = 'This item has been already created.' + + CANNOT_REMOVE = 'The item could not be removed. Ensure you have proper permissions or to specify a valid item.' + + INSTANCE_USED = 'A ticket is using this instance, therefore it cannot be removed.' + + CANNOT_SET_STATUS = 'Cannot update the status of the DDA instance.' diff --git a/src/piracyshield_service/dda/exists_by_instance.py b/src/piracyshield_service/dda/exists_by_instance.py new file mode 100644 index 0000000..604a242 --- /dev/null +++ b/src/piracyshield_service/dda/exists_by_instance.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageGetException + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDAExistsByInstanceService(BaseService): + + """ + Check if a DDA instance exists. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, instance: str) -> bool | Exception: + try: + response = self.data_storage.exists_by_instance( + instance = instance + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except DDAStorageGetException as e: + self.logger.error(f'Cannot find DDA instance `{instance}`') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() diff --git a/src/piracyshield_service/dda/get_all_by_account.py b/src/piracyshield_service/dda/get_all_by_account.py new file mode 100644 index 0000000..ac9ddde --- /dev/null +++ b/src/piracyshield_service/dda/get_all_by_account.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageGetException + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDAGetAllByAccountService(BaseService): + + """ + Get all the DDA identifiers assigned to an account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_by_account( + account_id = account_id + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No DDA identifier found') + + return list(batch) + + except DDAStorageGetException as e: + self.logger.error(f'Cannot get all the DDA identifiers') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() diff --git a/src/piracyshield_service/dda/get_global.py b/src/piracyshield_service/dda/get_global.py new file mode 100644 index 0000000..4372234 --- /dev/null +++ b/src/piracyshield_service/dda/get_global.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageGetException + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDAGetGlobalService(BaseService): + + """ + Get all the DDA identifiers. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> list | Exception: + try: + response = self.data_storage.get_global() + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No DDA identifier found') + + return list(batch) + + except DDAStorageGetException as e: + self.logger.error(f'Cannot get all the DDA identifiers') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() diff --git a/src/piracyshield_service/dda/is_assigned_to_account.py b/src/piracyshield_service/dda/is_assigned_to_account.py new file mode 100644 index 0000000..3fd2eef --- /dev/null +++ b/src/piracyshield_service/dda/is_assigned_to_account.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageGetException + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDAIsAssignedToAccountService(BaseService): + + """ + Check if a DDA instance is assigned to a specified account identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, dda_id: str, account_id: str) -> bool | Exception: + try: + response = self.data_storage.is_assigned_to_account( + dda_id = dda_id, + account_id = account_id + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except DDAStorageGetException as e: + self.logger.error(f'Cannot find DDA instance `{instance}`') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() diff --git a/src/piracyshield_service/dda/remove.py b/src/piracyshield_service/dda/remove.py new file mode 100644 index 0000000..b643eb0 --- /dev/null +++ b/src/piracyshield_service/dda/remove.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageRemoveException + +from piracyshield_service.ticket.has_dda_id import TicketHasDDAIdService + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDARemoveService(BaseService): + + """ + Removes a DDA identifier. + """ + + ticket_has_dda_id_service = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, dda_id: str) -> None | Exception: + try: + # check if no tickets uses this DDA instance + if self.ticket_has_dda_id_service.execute( + dda_id = dda_id + ): + raise ApplicationException(DDAErrorCode.INSTANCE_USED, DDAErrorMessage.INSTANCE_USED) + + affected_rows = self.data_storage.remove( + dda_id = dda_id + ) + + if not affected_rows: + raise ApplicationException(DDAErrorCode.CANNOT_REMOVE, DDAErrorMessage.CANNOT_REMOVE) + + except DDAStorageRemoveException as e: + self.logger.error(f'Cannot remove DDA `{value}`') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() + + self.ticket_has_dda_id_service = TicketHasDDAIdService() diff --git a/src/piracyshield_service/dda/set_status.py b/src/piracyshield_service/dda/set_status.py new file mode 100644 index 0000000..929c095 --- /dev/null +++ b/src/piracyshield_service/dda/set_status.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.dda.storage import DDAStorage, DDAStorageUpdateException + +from piracyshield_service.dda.errors import DDAErrorCode, DDAErrorMessage + +class DDASetStatusService(BaseService): + + """ + Sets the status of a DDA identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, dda_id: str, status: bool) -> bool | Exception: + try: + affected_rows = self.data_storage.update_status( + dda_id = dda_id, + status = status + ) + + if not len(affected_rows): + self.logger.debug(f'Could not set the status for the DDA identifier') + + raise ApplicationException(DDAErrorCode.CANNOT_SET_STATUS, DDAErrorMessage.CANNOT_SET_STATUS) + + except DDAStorageUpdateException as e: + self.logger.error(f'Could not update the status of the DDA identifier `{dda_id}`') + + raise ApplicationException(DDAErrorCode.GENERIC, DDAErrorMessage.GENERIC, e) + + return True + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = DDAStorage() diff --git a/src/piracyshield_service/forensic/__init__.py b/src/piracyshield_service/forensic/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/forensic/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/forensic/create_archive.py b/src/piracyshield_service/forensic/create_archive.py new file mode 100644 index 0000000..48f0db3 --- /dev/null +++ b/src/piracyshield_service/forensic/create_archive.py @@ -0,0 +1,174 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.forensic.archive.model import ForensicArchiveModel, ForensicArchiveModelNameException + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageCreateException, ForensicStorageGetException, ForensicStorageUpdateException + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +from piracyshield_service.importer.save_file import ImporterSaveFileService + +from piracyshield_service.forensic.tasks.analyze_forensic_archive import analyze_forensic_archive_task_caller + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicCreateArchiveService(BaseService): + + """ + Manages the upload and schedules the analysis for the evidence archive. + """ + + importer_save_file_service = None + + log_ticket_create_service = None + + data_storage = None + + data_model = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, archive_name: str, archive_content: bytes) -> bool | Exception: + """ + :param ticket_id: the ticket identifier related to the archive. + :param archive_name: the name of the archive. + :param archive_content: the data content of the file. + :return: true if everything is successful. + """ + + model = self._validate_parameters(ticket_id, archive_name) + + # before getting to the expensive operations, let's check if the ticket exists + if not self._ticket_id_exists(ticket_id): + raise ApplicationException(ForensicErrorCode.NO_HASH_FOR_TICKET, ForensicErrorMessage.NO_HASH_FOR_TICKET) + + # put the file in cache + cache_filename = self.importer_save_file_service.execute( + filename = model.get('name'), + content = archive_content + ) + + self.logger.debug(f'Forensic evidence `{cache_filename}` moved to cache for ticket `{ticket_id}`') + + try: + # update ticket with the archive name + self.data_storage.update_archive_name( + ticket_id = ticket_id, + archive_name = cache_filename, + status = model.get('status'), + updated_at = Time.now_iso8601() + ) + + except ForensicStorageUpdateException as e: + self.logger.error(f"Could not update the ticket's forensic archive name") + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + self._schedule_task( + ticket_id = ticket_id + ) + + self.logger.info(f'Scheduled analysis for forensic evidence `{archive_name}` for ticket `{ticket_id}`') + + self.log_ticket_create_service.execute( + ticket_id = ticket_id, + message = f'Scheduled analysis for new forensic evidence package `{archive_name}`.' + ) + + return True + + def _ticket_id_exists(self, ticket_id: str) -> bool | Exception: + """ + Check if the ticket exists. + + :param ticket_id: a ticket identifier. + :return: true if everything is successful. + """ + + try: + response = self.data_storage.exists_ticket_id( + ticket_id = ticket_id + ) + + if response.next(): + self.logger.debug(f'Ticket found for `{ticket_id}`') + + return True + + return False + + except ForensicStorageGetException as e: + self.logger.error(f'Could not verify `{ticket_id}` existence') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + def _schedule_task(self, ticket_id: str) -> bool | Exception: + """ + Schedules the archive analysis. + + :param ticket_id: a ticket identifier. + :return: true if everything is successful. + """ + + try: + # schedule package analysis and upload to storage. + analysis_task_id = self.task_service.create( + task_caller = analyze_forensic_archive_task_caller, + delay = 1, + ticket_id = ticket_id + ) + + return True + + except Exception as e: + self.logger.error(f'Could not create the task for `{ticket_id}`') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + def _validate_parameters(self, ticket_id: str, archive_name: str) -> bool | Exception: + """ + Validates the inputs. + + :param ticket_id: a ticket identifier. + :param archive_name: the name of the archive. + :return: true if everything is successful. + """ + + try: + model = self.data_model( + ticket_id = ticket_id, + name = archive_name + ) + + return model.to_dict() + + except ForensicArchiveModelNameException: + raise ApplicationException(ForensicErrorCode.ARCHIVE_NAME, TicketErrorMessage.ARCHIVE_NAME) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.data_model = ForensicArchiveModel + + self.data_storage = ForensicStorage() + + self.importer_save_file_service = ImporterSaveFileService() + + self.log_ticket_create_service = LogTicketCreateService() diff --git a/src/piracyshield_service/forensic/create_hash.py b/src/piracyshield_service/forensic/create_hash.py new file mode 100644 index 0000000..14da987 --- /dev/null +++ b/src/piracyshield_service/forensic/create_hash.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.forensic.archive.model import ForensicArchiveModel, ForensicArchiveModelNameException +from piracyshield_data_model.forensic.hash.model import ForensicHashModel, ForensicHashModelNotSupportedException, ForensicHashModelStringMissingException, ForensicHashModelNonValidException +from piracyshield_data_model.forensic.hash.rule import ForensicHashRule + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageCreateException, ForensicStorageGetException + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicCreateHashService(BaseService): + + """ + Stores the evidence's hash during the ticket creation. + """ + + data_storage = None + + data_model = None + + identifier = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, hash_list: list, reporter_id: str) -> bool | Exception: + for hash_type, hash_string in hash_list.items(): + model = self._validate_parameters( + hash_type = hash_type, + hash_string = hash_string + ) + + # check for already inserted hashes strings + if self._hash_string_exists(hash_string): + raise ApplicationException(ForensicErrorCode.HASH_STRING_EXISTS, ForensicErrorMessage.HASH_STRING_EXISTS) + + self.logger.info(f'Created new hash `{hash_string}` for ticket `{ticket_id}`') + + document = self._build_document( + model = model, + forensic_id = self._generate_forensic_id(), + ticket_id = ticket_id, + created_by = reporter_id, + now = Time.now_iso8601() + ) + + try: + self.data_storage.insert(document) + + except ForensicStorageCreateException as e: + self.logger.error(f"Could not update the ticket's forensic archive hash") + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + return True + + def _hash_string_exists(self, hash_string: str) -> bool | Exception: + try: + response = self.data_storage.exists_hash_string( + hash_string = hash_string + ) + + if response.next(): + self.logger.debug(f'Hash string found for `{hash_string}`') + + return True + + return False + + except ForensicStorageGetException as e: + self.logger.error(f'Could not verify `{hash_string}` existence') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + def _build_document(self, model: dict, forensic_id: str, ticket_id: str, created_by: str, now: str): + return { + 'forensic_id': forensic_id, + 'ticket_id': ticket_id, + 'hash_type': model.get('hash_type'), + 'hash_string': model.get('hash_string'), + 'metadata': { + 'created_at': now, + 'updated_at': now, + 'created_by': created_by + } + } + + def _generate_forensic_id(self) -> str: + """ + Generates a UUIDv4. + + :return: a randomly generated 32 characters string. + """ + + return self.identifier.generate() + + def _validate_parameters(self, hash_type: str, hash_string: str) -> dict | Exception: + """ + Validates the inputs. + + :param hash_type: a supported hash algorithm. + :param hash_string: a valid hash string. + :return: the data converted into a usable dictionary. + """ + + try: + model = self.data_model( + hash_type = hash_type, + hash_string = hash_string + ) + + return model.to_dict() + + except ForensicHashModelNotSupportedException: + raise ApplicationException(ForensicErrorCode.HASH_TYPE_NOT_SUPPORTED, ForensicErrorMessage.HASH_TYPE_NOT_SUPPORTED) + + except ForensicHashModelStringMissingException: + raise ApplicationException(ForensicErrorCode.HASH_STRING_EMPTY, ForensicErrorMessage.HASH_STRING_EMPTY) + + except ForensicHashModelNonValidException: + raise ApplicationException(ForensicErrorCode.HASH_STRING_NON_VALID, ForensicErrorMessage.HASH_STRING_NON_VALID) + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.data_model = ForensicHashModel + + self.data_storage = ForensicStorage() + + self.identifier = Identifier() diff --git a/src/piracyshield_service/forensic/errors.py b/src/piracyshield_service/forensic/errors.py new file mode 100644 index 0000000..eca073e --- /dev/null +++ b/src/piracyshield_service/forensic/errors.py @@ -0,0 +1,32 @@ + +class ForensicErrorCode: + + GENERIC = '9001' + + ARCHIVE_NAME = '9002' + + HASH_TYPE_NOT_SUPPORTED = '9003' + + HASH_STRING_EMPTY = '9004' + + HASH_STRING_NON_VALID = '9005' + + HASH_STRING_EXISTS = '9006' + + NO_HASH_FOR_TICKET = '9007' + +class ForensicErrorMessage: + + GENERIC = 'Error during the handling of the forensic evidence.' + + ARCHIVE_NAME = 'The archive name contains non valid characters.' + + HASH_TYPE_NOT_SUPPORTED = 'Forensic hash type not supported.' + + HASH_STRING_EMPTY = 'Forensic evidence hash not found.' + + HASH_STRING_NON_VALID = 'Forensic evidence hash non valid.' + + HASH_STRING_EXISTS = 'The hash string value is already present, meaning that this forensic evidence archive has already been submitted.' + + NO_HASH_FOR_TICKET = 'This ticket does not have any forensic evidence hash.' diff --git a/src/piracyshield_service/forensic/get_by_ticket.py b/src/piracyshield_service/forensic/get_by_ticket.py new file mode 100644 index 0000000..392efb5 --- /dev/null +++ b/src/piracyshield_service/forensic/get_by_ticket.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageGetException + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicGetByTicketService(BaseService): + + """ + Returns the forensic data of a ticket by its identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + try: + response = self.data_storage.get_by_ticket( + ticket_id = ticket_id + ) + + if response.empty(): + self.logger.debug(f'Could not find any forensic data associated to ticket `{ticket_id}`') + + raise ApplicationException(ForensicErrorCode.NO_HASH_FOR_TICKET, ForensicErrorMessage.NO_HASH_FOR_TICKET) + + document = next(response, None) + + return document + + except ForensicStorageGetException as e: + self.logger.error(f'Could not get any forensic data for ticket `{ticket_id}`') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = ForensicStorage() diff --git a/src/piracyshield_service/forensic/get_by_ticket_for_reporter.py b/src/piracyshield_service/forensic/get_by_ticket_for_reporter.py new file mode 100644 index 0000000..bad58c7 --- /dev/null +++ b/src/piracyshield_service/forensic/get_by_ticket_for_reporter.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageGetException + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicGetByTicketForReporterService(BaseService): + + """ + Returns the forensic data of a ticket by its identifier and creator account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, reporter_id: str) -> bool | Exception: + try: + response = self.data_storage.get_by_ticket_for_reporter( + ticket_id = ticket_id, + reporter_id = reporter_id + ) + + if response.empty(): + self.logger.debug(f'Could not find any forensic data associated to ticket `{ticket_id}` for account `{reporter_id}`') + + raise ApplicationException(ForensicErrorCode.NO_HASH_FOR_TICKET, ForensicErrorMessage.NO_HASH_FOR_TICKET) + + document = next(response, None) + + return document + + except ForensicStorageGetException as e: + self.logger.error(f'Could not get any forensic data for ticket `{ticket_id}`') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = ForensicStorage() diff --git a/src/piracyshield_service/forensic/get_supported_formats.py b/src/piracyshield_service/forensic/get_supported_formats.py new file mode 100644 index 0000000..c261786 --- /dev/null +++ b/src/piracyshield_service/forensic/get_supported_formats.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_data_model.forensic.format.model import ForensicFormatsModel + +class ForensicGetSupportedFormatsService(BaseService): + + """ + Supported formats for the forensic evidence archive. + """ + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + def execute(self) -> list | Exception: + """ + :return: a list of strings representing the supported archives. + """ + + return ForensicFormatsModel().get_formats() + + def _validate_parameters(self): + pass + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/forensic/get_supported_hashes.py b/src/piracyshield_service/forensic/get_supported_hashes.py new file mode 100644 index 0000000..fc70c7d --- /dev/null +++ b/src/piracyshield_service/forensic/get_supported_hashes.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_data_model.forensic.hash.rule import ForensicHashRule + +class ForensicGetSupportedHashesService(BaseService): + + """ + Supported hashes algorithms for the forensic evidence archive. + """ + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + def execute(self) -> list | Exception: + """ + :return: a list of strings representing the supported hashes. + """ + + return ForensicHashRule().get_hash_types() + + def _validate_parameters(self): + pass + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + pass diff --git a/src/piracyshield_service/forensic/remove_by_ticket.py b/src/piracyshield_service/forensic/remove_by_ticket.py new file mode 100644 index 0000000..6745824 --- /dev/null +++ b/src/piracyshield_service/forensic/remove_by_ticket.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageRemoveException + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicRemoveByTicketService(BaseService): + + """ + Removes the forensic data for a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + """ + :param ticket_id: a ticket identifier. + :return: true if everything is successful. + """ + + try: + self.data_storage.remove_by_ticket( + ticket_id = ticket_id + ) + + self.logger.debug(f'Removed forensic hashes for ticket `{ticket_id}`') + + except ForensicStorageRemoveException as e: + self.logger.error(f'Could not remove the forensic evidence for ticket `{ticket_id}`') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + return True + + def _validate_parameters(self): + pass + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.data_storage = ForensicStorage() diff --git a/src/piracyshield_service/forensic/tasks/__init__.py b/src/piracyshield_service/forensic/tasks/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/forensic/tasks/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/forensic/tasks/analyze_forensic_archive.py b/src/piracyshield_service/forensic/tasks/analyze_forensic_archive.py new file mode 100644 index 0000000..c2dd890 --- /dev/null +++ b/src/piracyshield_service/forensic/tasks/analyze_forensic_archive.py @@ -0,0 +1,102 @@ +from piracyshield_service.task.base import BaseTask + +from piracyshield_data_model.forensic.archive.status.model import ForensicArchiveStatusModel + +from piracyshield_forensic.analyze import ForensicAnalysis + +from piracyshield_service.forensic.update_archive_status import ForensicUpdateArchiveStatusService + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +from piracyshield_component.exception import ApplicationException + +class AnalyzeForensicArchiveTask(BaseTask): + + """ + Forensic evidence archive integrity analysis procedure. + """ + + data_storage_cache = None + + log_ticket_create_service = None + + update_archive_status_service = None + + ticket_id = None + + def __init__(self, ticket_id: str): + super().__init__() + + self.ticket_id = ticket_id + + def run(self) -> bool: + """ + Performs the analysis and updates the ticket. + """ + + self.update_archive_status_service.execute( + ticket_id = self.ticket_id, + status = ForensicArchiveStatusModel.IN_PROGRESS.value + ) + + self.log_ticket_create_service.execute( + ticket_id = self.ticket_id, + message = f'Started a new forensic archive analysis.' + ) + + try: + # perform analysis. + self.forensic_analysis.process(self.ticket_id) + + except ApplicationException as e: + self.logger.error(f'Could not process the forensic evidence for ticket `{self.ticket_id}`: {e.message}') + + self.update_archive_status_service.execute( + ticket_id = self.ticket_id, + status = ForensicArchiveStatusModel.REJECTED.value, + reason = e.message + ) + + self.log_ticket_create_service.execute( + ticket_id = self.ticket_id, + message = f'The forensic evidence has been rejected: {e.message}' + ) + + return False + + # NOTE: we won't clean the package from the cache here as we might want to schedule a cleaning process separately. + + self.update_archive_status_service.execute( + ticket_id = self.ticket_id, + status = ForensicArchiveStatusModel.APPROVED.value + ) + + # log success operation + self.log_ticket_create_service.execute( + ticket_id = self.ticket_id, + message = f'The forensic evidence has been successfully approved.' + ) + + return True + + def before_run(self): + """ + Initialize required modules. + """ + + self.log_ticket_create_service = LogTicketCreateService() + + self.forensic_analysis = ForensicAnalysis() + + self.update_archive_status_service = ForensicUpdateArchiveStatusService() + + def after_run(self): + pass + + def on_failure(self): + pass + +def analyze_forensic_archive_task_caller(**kwargs): + t = AnalyzeForensicArchiveTask(**kwargs) + + return t.execute() diff --git a/src/piracyshield_service/forensic/update_archive_status.py b/src/piracyshield_service/forensic/update_archive_status.py new file mode 100644 index 0000000..5b25aa4 --- /dev/null +++ b/src/piracyshield_service/forensic/update_archive_status.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.forensic.storage import ForensicStorage, ForensicStorageUpdateException + +from piracyshield_service.forensic.errors import ForensicErrorCode, ForensicErrorMessage + +class ForensicUpdateArchiveStatusService(BaseService): + + """ + Updates the status of a previously uploaded archive. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, status: str, reason: str = None) -> bool | Exception: + """ + :param ticket_id: a ticket identifier. + :param status: status of the analysis. + :param reason: optional reason for non successful statuses. + :return: true if everything is successful. + """ + + try: + self.data_storage.update_archive_status( + ticket_id = ticket_id, + status = status, + updated_at = Time.now_iso8601(), + reason = reason + ) + + self.logger.debug(f'Updated forensic evidence status for ticket `{ticket_id}` with status `{status}`') + + except ForensicStorageUpdateException as e: + self.logger.error(f'Could not update the status of the forensic evidence for ticket `{ticket_id}` with status `{status}`') + + raise ApplicationException(ForensicErrorCode.GENERIC, ForensicErrorMessage.GENERIC, e) + + return True + + def _validate_parameters(self): + pass + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + """ + Initialize and set the instances. + """ + + self.data_storage = ForensicStorage() diff --git a/src/piracyshield_service/guest/__init__.py b/src/piracyshield_service/guest/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/guest/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/guest/create.py b/src/piracyshield_service/guest/create.py new file mode 100644 index 0000000..6e89fa9 --- /dev/null +++ b/src/piracyshield_service/guest/create.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from piracyshield_service.account.create import AccountCreateService + +from piracyshield_data_model.guest.model import GuestModel + +from piracyshield_data_storage.guest.storage import GuestStorage + +class GuestCreateService(AccountCreateService): + + """ + Creates a guest account. + """ + + def __init__(self): + """ + Pass the data model and data storage to the parent class. + """ + + super().__init__(GuestModel, GuestStorage) + + def execute(self, name: str, email: str, password: str, confirm_password: str, flags: dict, created_by: str) -> str | Exception: + """ + Account creation. + + :param name: a string that identificates the real name (and, eventually, sourname) of the account. + :param email: e-mail address, used in conjunction with a password to authenticate the account. + :param password: a string. + :param confirm_password: must be the same as `password`. + :param flags: flags of the account. + :param created_by: account id of the creator. + :return account id of the created account. + """ + + return super().execute(name, email, password, confirm_password, flags, created_by) diff --git a/src/piracyshield_service/guest/get.py b/src/piracyshield_service/guest/get.py new file mode 100644 index 0000000..67cf2ef --- /dev/null +++ b/src/piracyshield_service/guest/get.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get import AccountGetService + +from piracyshield_data_storage.guest.storage import GuestStorage + +class GuestGetService(AccountGetService): + + """ + Retrieves a guest account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(GuestStorage) diff --git a/src/piracyshield_service/guest/get_all.py b/src/piracyshield_service/guest/get_all.py new file mode 100644 index 0000000..76362e7 --- /dev/null +++ b/src/piracyshield_service/guest/get_all.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get_all import AccountGetAllService + +from piracyshield_data_storage.guest.storage import GuestStorage + +class GuestGetAllService(AccountGetAllService): + + """ + Retrieves all the guest accounts. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(GuestStorage) diff --git a/src/piracyshield_service/guest/remove.py b/src/piracyshield_service/guest/remove.py new file mode 100644 index 0000000..fb69066 --- /dev/null +++ b/src/piracyshield_service/guest/remove.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.remove import AccountRemoveService + +from piracyshield_data_storage.guest.storage import GuestStorage + +class GuestRemoveService(AccountRemoveService): + + """ + Removes a guest account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(GuestStorage) diff --git a/src/piracyshield_service/importer/__init__.py b/src/piracyshield_service/importer/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/importer/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/importer/errors.py b/src/piracyshield_service/importer/errors.py new file mode 100644 index 0000000..f87dc84 --- /dev/null +++ b/src/piracyshield_service/importer/errors.py @@ -0,0 +1,12 @@ + +class ImporterErrorCode: + + GENERIC = '9000' + + EXTENSION_NOT_SUPPORTED = '9001' + +class ImporterErrorMessage: + + GENERIC = 'Error during the saving of the file.' + + EXTENSION_NOT_SUPPORTED = 'The file extension is not supported.' diff --git a/src/piracyshield_service/importer/save_file.py b/src/piracyshield_service/importer/save_file.py new file mode 100644 index 0000000..53cb745 --- /dev/null +++ b/src/piracyshield_service/importer/save_file.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.environment import Environment +from piracyshield_component.config import Config +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.cache.storage import CacheStorage + +from piracyshield_service.importer.errors import ImporterErrorCode, ImporterErrorMessage + +import os + +class ImporterSaveFileService(BaseService): + + """ + Reads and writes the content into the cache. + """ + + identifier = None + + data_storage_cache = None + + application_archive_config = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, filename: str, content: bytes) -> str | Exception: + """ + :param filename: the name of the file. + :param content: the file's content. + :return: the name of the file with a unique identifier. + """ + + extension = self._get_extension(filename) + + if self._has_supported_extension(extension) == False: + raise ApplicationException(ImporterErrorCode.EXTENSION_NOT_SUPPORTED, ImporterErrorMessage.EXTENSION_NOT_SUPPORTED) + + # generate a unique name for the file + unique_filename = self._generate_unique_name(filename) + + try: + self.data_storage_cache.write(unique_filename, content) + + return unique_filename + + except OSError as e: + self.logger.error(f'Could not save the file: {e}') + + raise ApplicationException(ImporterErrorCode.GENERIC, ImporterErrorMessage.GENERIC) + + def _generate_identifier(self, filename: str) -> str: + identifier = self.identifier.generate_short_unsafe() + + return f'{identifier}-{filename}' + + def _get_extension(self, filename: str) -> str: + """ + Extracts the extension from the filename. + + :param filename: the name of the file. + :return: the extension of the file. + """ + + _, extension = os.path.splitext(filename) + + return extension + + def _has_supported_extension(self, extension: str) -> bool: + """ + Checks wether the extension is supported. + + :param extension: the extension of the file. + :return: true if supported. + """ + + return extension.lower() in self.application_archive_config.get('supported_extensions') + + def _generate_unique_name(self, filename: str) -> str: + """ + Attempts to generate a unique name string for the file that will be put in the cache. + + :param filename: the name of the file. + :return: the newly generated name of the file. + """ + + # TODO: just use a timestamp. + + retries = 5 + current_tries = 0 + + while (True): + # exceeded maximum retries + if current_tries >= retries: + raise ApplicationException(ImporterErrorCode.GENERIC, ImporterErrorMessage.GENERIC) + + filename = self._generate_identifier(filename) + + # check if the file already exists + if not self.data_storage_cache.exists(filename): + break + + current_tries += 1 + + return filename + + def _schedule_task(self): + pass + + def _validate_parameters(self): + # TODO: should at least validate the name. + + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.application_archive_config = Config('application').get('archive') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_storage_cache = CacheStorage() + + self.identifier = Identifier() diff --git a/src/piracyshield_service/internal/__init__.py b/src/piracyshield_service/internal/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/internal/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/internal/change_password.py b/src/piracyshield_service/internal/change_password.py new file mode 100644 index 0000000..a240230 --- /dev/null +++ b/src/piracyshield_service/internal/change_password.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.change_password import AccountChangePasswordService + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalChangePasswordService(AccountChangePasswordService): + + """ + Changes password of an internal account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(InternalStorage) diff --git a/src/piracyshield_service/internal/create.py b/src/piracyshield_service/internal/create.py new file mode 100644 index 0000000..32e44bd --- /dev/null +++ b/src/piracyshield_service/internal/create.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from piracyshield_service.account.create import AccountCreateService + +from piracyshield_data_model.internal.model import InternalModel + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalCreateService(AccountCreateService): + + """ + Creates an internal account. + """ + + def __init__(self): + """ + Pass the data model and data storage to the parent class. + """ + + super().__init__(InternalModel, InternalStorage) + + def execute(self, name: str, email: str, password: str, confirm_password: str, flags: dict, created_by: str) -> str | Exception: + """ + :param name: a string that identificates the real name (and, eventually, sourname) of the account. + :param email: e-mail address, used in conjunction with a password to authenticate the account. + :param password: a string. + :param confirm_password: must be the same as `password`. + :param flags: flags of the account. + :param created_by: account id of the creator. + :return account id of the created account. + """ + + return super().execute(name, email, password, confirm_password, flags, created_by) diff --git a/src/piracyshield_service/internal/get.py b/src/piracyshield_service/internal/get.py new file mode 100644 index 0000000..38886db --- /dev/null +++ b/src/piracyshield_service/internal/get.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get import AccountGetService + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalGetService(AccountGetService): + + """ + Retrieves an internal account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(InternalStorage) diff --git a/src/piracyshield_service/internal/get_all.py b/src/piracyshield_service/internal/get_all.py new file mode 100644 index 0000000..7abca98 --- /dev/null +++ b/src/piracyshield_service/internal/get_all.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get_all import AccountGetAllService + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalGetAllService(AccountGetAllService): + + """ + Retrieves all the internal accounts. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(InternalStorage) diff --git a/src/piracyshield_service/internal/remove.py b/src/piracyshield_service/internal/remove.py new file mode 100644 index 0000000..9eb5011 --- /dev/null +++ b/src/piracyshield_service/internal/remove.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.remove import AccountRemoveService + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalRemoveService(AccountRemoveService): + + """ + Removes an internal account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(InternalStorage) diff --git a/src/piracyshield_service/internal/set_status.py b/src/piracyshield_service/internal/set_status.py new file mode 100644 index 0000000..61d9248 --- /dev/null +++ b/src/piracyshield_service/internal/set_status.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.set_status import AccountSetStatusService + +from piracyshield_data_storage.internal.storage import InternalStorage + +class InternalSetStatusService(AccountSetStatusService): + + """ + Sets the status of an internal account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(InternalStorage) diff --git a/src/piracyshield_service/log/__init__.py b/src/piracyshield_service/log/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/log/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/log/errors.py b/src/piracyshield_service/log/errors.py new file mode 100644 index 0000000..edf3916 --- /dev/null +++ b/src/piracyshield_service/log/errors.py @@ -0,0 +1,8 @@ + +class LogErrorCode: + + GENERIC = '8000' + +class LogErrorMessage: + + GENERIC = 'Generic error.' diff --git a/src/piracyshield_service/log/ticket/__init__.py b/src/piracyshield_service/log/ticket/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/log/ticket/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/log/ticket/create.py b/src/piracyshield_service/log/ticket/create.py new file mode 100644 index 0000000..6fcd120 --- /dev/null +++ b/src/piracyshield_service/log/ticket/create.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.storage import LogTicketStorage, LogTicketStorageCreateException + +from piracyshield_data_model.log.ticket.model import ( + LogTicketModel, + LogTicketModelTicketIdentifierMissingException, + LogTicketModelTicketIdentifierNonValidException, + LogTicketModelMessageNonValidException, + LogTicketModelMessageMissingException +) + +from piracyshield_service.log.ticket.errors import LogTicketErrorCode, LogTicketErrorMessage + +class LogTicketCreateService(BaseService): + + """ + Creates a new ticket log record. + """ + + data_storage = None + + data_model = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, message: str) -> bool | Exception: + model = self._validate_parameters( + ticket_id = ticket_id, + message = message + ) + + document = self._build_document( + model = model, + now = Time.now_iso8601() + ) + + try: + self.data_storage.insert(document) + + return True + + except LogTicketStorageCreateException as e: + self.logger.error(f'Could not create the log entry') + + raise ApplicationException(LogTicketErrorCode.GENERIC, LogTicketErrorMessage.GENERIC, e) + + def _build_document(self, model: dict, now: str) -> dict: + return { + 'ticket_id': model.get('ticket_id'), + 'message': model.get('message'), + 'metadata': { + # creation date + 'created_at': now + } + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, ticket_id: str, message: str): + try: + model = self.data_model( + ticket_id = ticket_id, + message = message + ) + + return model.to_dict() + + except LogTicketModelTicketIdentifierMissingException: + raise ApplicationException(LogTicketErrorCode.MISSING_TICKET_ID, LogTicketErrorMessage.MISSING_TICKET_ID) + + except LogTicketModelTicketIdentifierNonValidException: + raise ApplicationException(LogTicketErrorCode.NON_VALID_TICKET_ID, LogTicketErrorMessage.NON_VALID_TICKET_ID) + + except LogTicketModelMessageMissingException: + raise ApplicationException(LogTicketErrorCode.MISSING_MESSAGE, LogTicketErrorMessage.MISSING_MESSAGE) + + except LogTicketModelMessageNonValidException: + raise ApplicationException(LogTicketErrorCode.NON_VALID_MESSAGE, LogTicketErrorMessage.NON_VALID_MESSAGE) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = LogTicketModel + + self.data_storage = LogTicketStorage() diff --git a/src/piracyshield_service/log/ticket/errors.py b/src/piracyshield_service/log/ticket/errors.py new file mode 100644 index 0000000..6a59d5a --- /dev/null +++ b/src/piracyshield_service/log/ticket/errors.py @@ -0,0 +1,28 @@ + +class LogTicketErrorCode: + + GENERIC = '5101' + + MISSING_TICKET_ID = '5102' + + NON_VALID_TICKET_ID = '5103' + + MISSING_MESSAGE = '5104' + + NON_VALID_MESSAGE = '5105' + + CANNOT_REMOVE = '5106' + +class LogTicketErrorMessage: + + GENERIC = 'Generic error.' + + MISSING_TICKET_ID = 'Missing ticket identifier.' + + NON_VALID_TICKET_ID = 'Non valid ticket identifier.' + + MISSING_MESSAGE = 'Missing message.' + + NON_VALID_MESSAGE = 'Non valid message.' + + CANNOT_REMOVE = 'The items could not be removed. Ensure you have proper permissions to perform this operation.' diff --git a/src/piracyshield_service/log/ticket/get_all.py b/src/piracyshield_service/log/ticket/get_all.py new file mode 100644 index 0000000..44e6a7b --- /dev/null +++ b/src/piracyshield_service/log/ticket/get_all.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.storage import LogTicketStorage, LogTicketStorageGetException + +from piracyshield_service.log.ticket.errors import LogTicketErrorCode, LogTicketErrorMessage + +class LogTicketGetAllService(BaseService): + + """ + Gets all the logs of a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + try: + response = self.data_storage.get_all( + ticket_id = ticket_id + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'Could not find any log for ticket `{ticket_id}`') + + return list(batch) + + except LogTicketStorageGetException as e: + self.logger.error(f'Could not get all the logs for ticket `{ticket_id}`') + + raise ApplicationException(LogTicketErrorCode.GENERIC, LogTicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = LogTicketStorage() diff --git a/src/piracyshield_service/log/ticket/item/__init__.py b/src/piracyshield_service/log/ticket/item/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/log/ticket/item/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/log/ticket/item/create.py b/src/piracyshield_service/log/ticket/item/create.py new file mode 100644 index 0000000..3e8cafd --- /dev/null +++ b/src/piracyshield_service/log/ticket/item/create.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.item.storage import LogTicketItemStorage, LogTicketItemStorageCreateException + +from piracyshield_data_model.log.ticket.item.model import ( + LogTicketItemModel, + LogTicketItemModelTicketItemIdentifierMissingException, + LogTicketItemModelTicketItemIdentifierNonValidException, + LogTicketItemModelMessageNonValidException, + LogTicketItemModelMessageMissingException +) + +from piracyshield_service.log.ticket.item.errors import LogTicketItemErrorCode, LogTicketItemErrorMessage + +class LogTicketItemCreateService(BaseService): + + """ + Creates a new ticket item log record. + """ + + data_storage = None + + data_model = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_item_id: str, message: str) -> bool | Exception: + model = self._validate_parameters( + ticket_item_id = ticket_item_id, + message = message + ) + + document = self._build_document( + model = model, + now = Time.now_iso8601() + ) + + try: + self.data_storage.insert(document) + + return True + + except LogTicketItemStorageCreateException as e: + self.logger.error(f'Could not create the ticket item log record') + + raise ApplicationException(LogTicketItemErrorCode.GENERIC, LogTicketItemErrorMessage.GENERIC, e) + + def _build_document(self, model: dict, now: str) -> dict: + return { + 'ticket_item_id': model.get('ticket_item_id'), + 'message': model.get('message'), + 'metadata': { + # creation date + 'created_at': now + } + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, ticket_item_id: str, message: str): + try: + model = self.data_model( + ticket_item_id = ticket_item_id, + message = message + ) + + return model.to_dict() + + except LogTicketItemModelTicketItemIdentifierMissingException: + raise ApplicationException(LogTicketItemErrorCode.MISSING_TICKET_ITEM_ID, LogTicketItemErrorMessage.MISSING_TICKET_ITEM_ID) + + except LogTicketItemModelTicketItemIdentifierNonValidException: + raise ApplicationException(LogTicketItemErrorCode.NON_VALID_TICKET_ITEM_ID, LogTicketItemErrorMessage.NON_VALID_TICKET_ITEM_ID) + + except LogTicketItemModelMessageMissingException: + raise ApplicationException(LogTicketItemErrorCode.MISSING_MESSAGE, LogTicketItemErrorMessage.MISSING_MESSAGE) + + except LogTicketItemModelMessageNonValidException: + raise ApplicationException(LogTicketItemErrorCode.NON_VALID_MESSAGE, LogTicketItemErrorMessage.NON_VALID_MESSAGE) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = LogTicketItemModel + + self.data_storage = LogTicketItemStorage() diff --git a/src/piracyshield_service/log/ticket/item/errors.py b/src/piracyshield_service/log/ticket/item/errors.py new file mode 100644 index 0000000..8a540e4 --- /dev/null +++ b/src/piracyshield_service/log/ticket/item/errors.py @@ -0,0 +1,28 @@ + +class LogTicketItemErrorCode: + + GENERIC = '5201' + + MISSING_TICKET_ID = '5202' + + NON_VALID_TICKET_ID = '5203' + + MISSING_MESSAGE = '5204' + + NON_VALID_MESSAGE = '5205' + + CANNOT_REMOVE = '5206' + +class LogTicketItemErrorMessage: + + GENERIC = 'Generic error.' + + MISSING_TICKET_ITEM_ID = 'Missing ticket item identifier.' + + NON_VALID_TICKET_ITEM_ID = 'Non valid ticket item identifier.' + + MISSING_MESSAGE = 'Missing message.' + + NON_VALID_MESSAGE = 'Non valid message.' + + CANNOT_REMOVE = 'The items could not be removed. Ensure you have proper permissions to perform this operation.' diff --git a/src/piracyshield_service/log/ticket/item/get_all.py b/src/piracyshield_service/log/ticket/item/get_all.py new file mode 100644 index 0000000..a698750 --- /dev/null +++ b/src/piracyshield_service/log/ticket/item/get_all.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.item.storage import LogTicketItemStorage, LogTicketItemStorageGetException + +from piracyshield_service.log.ticket.item.errors import LogTicketItemErrorCode, LogTicketItemErrorMessage + +class LogTicketItemGetAllService(BaseService): + + """ + Gets all the logs of a ticket item. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_item_id: str) -> list | Exception: + try: + response = self.data_storage.get_all( + ticket_item_id = ticket_item_id + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'Could not find any log for ticket item `{ticket_item_id}`') + + return list(batch) + + except LogTicketItemStorageGetException as e: + self.logger.error(f'Could not get all the logs for ticket item `{ticket_item_id}`') + + raise ApplicationException(LogTicketItemErrorCode.GENERIC, LogTicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = LogTicketItemStorage() diff --git a/src/piracyshield_service/log/ticket/item/remove_all.py b/src/piracyshield_service/log/ticket/item/remove_all.py new file mode 100644 index 0000000..245a107 --- /dev/null +++ b/src/piracyshield_service/log/ticket/item/remove_all.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.item.storage import LogTicketItemStorage, LogTicketItemStorageRemoveException + +from piracyshield_service.log.ticket.item.errors import LogTicketItemErrorCode, LogTicketItemErrorMessage + +class LogTicketItemRemoveAllService(BaseService): + + """ + Removes all the logs of a ticket item. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_item_id: str) -> bool | Exception: + try: + affected_rows = self.data_storage.remove_all( + ticket_item_id = ticket_item_id + ) + + if not affected_rows: + raise ApplicationException(LogTicketItemErrorCode.CANNOT_REMOVE, LogTicketItemErrorMessage.CANNOT_REMOVE) + + return True + + except LogTicketItemStorageRemoveException as e: + self.logger.error(f'Could not remove all the logs for ticket item `{ticket_item_id}`') + + raise ApplicationException(LogTicketItemErrorCode.GENERIC, LogTicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = LogTicketItemStorage() diff --git a/src/piracyshield_service/log/ticket/remove_all.py b/src/piracyshield_service/log/ticket/remove_all.py new file mode 100644 index 0000000..6e242a8 --- /dev/null +++ b/src/piracyshield_service/log/ticket/remove_all.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.log.ticket.storage import LogTicketStorage, LogTicketStorageRemoveException + +from piracyshield_service.log.ticket.errors import LogTicketErrorCode, LogTicketErrorMessage + +class LogTicketRemoveAllService(BaseService): + + """ + Removes all the logs of a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + try: + affected_rows = self.data_storage.remove_all( + ticket_id = ticket_id + ) + + if not affected_rows: + raise ApplicationException(LogTicketErrorCode.CANNOT_REMOVE, LogTicketErrorMessage.CANNOT_REMOVE) + + return True + + except LogTicketStorageRemoveException as e: + self.logger.error(f'Could not remove all the logs for ticket `{ticket_id}`') + + raise ApplicationException(LogTicketErrorCode.GENERIC, LogTicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = LogTicketStorage() diff --git a/src/piracyshield_service/permission/__init__.py b/src/piracyshield_service/permission/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/permission/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/permission/errors.py b/src/piracyshield_service/permission/errors.py new file mode 100644 index 0000000..6d049d3 --- /dev/null +++ b/src/piracyshield_service/permission/errors.py @@ -0,0 +1,76 @@ + +class PermissionErrorCode: + + GENERIC = '1100' + + ACCOUNT_CREATE_ERROR = '1101' + + ACCOUNT_VIEW_ERROR = '1102' + + ACCOUNT_EDIT_ERROR = '1103' + + ACCOUNT_DELETE_ERROR = '1104' + + TICKET_CREATE_ERROR = '1105' + + TICKET_VIEW_ERROR = '1106' + + TICKET_EDIT_ERROR = '1107' + + TICKET_DELETE_ERROR = '1108' + + TICKET_UPLOAD_ERROR = '1109' + + WHITELIST_ITEM_CREATE_ERROR = '1110' + + WHITELIST_ITEM_VIEW_ERROR = '1111' + + WHITELIST_ITEM_EDIT_ERROR = '1112' + + WHITELIST_ITEM_DELETE_ERROR = '1113' + + DDA_CREATE_ERROR = '1114' + + DDA_VIEW_ERROR = '1115' + + DDA_EDIT_ERROR = '1116' + + DDA_DELETE_ERROR = '1117' + +class PermissionErrorMessage: + + GENERIC = 'Cannot validate the account permissions.' + + ACCOUNT_CREATE_ERROR = 'Not enough permissions to create an account.' + + ACCOUNT_VIEW_ERROR = 'Not enough permissions to view an account.' + + ACCOUNT_EDIT_ERROR = 'Not enough permissions to edit an account.' + + ACCOUNT_DELETE_ERROR = 'Not enough permissions to delete an account.' + + TICKET_CREATE_ERROR = 'Not enough permissions to create a ticket.' + + TICKET_VIEW_ERROR = 'Not enough permissions to view a ticket.' + + TICKET_EDIT_ERROR = 'Not enough permissions to edit a ticket.' + + TICKET_DELETE_ERROR = 'Not enough permissions to delete a ticket.' + + TICKET_UPLOAD_ERROR = 'Not enough permissions to upload add an archive to ticket.' + + WHITELIST_ITEM_CREATE_ERROR = 'Not enough permissions to create a whitelist item.' + + WHITELIST_ITEM_VIEW_ERROR = 'Not enough permissions to view a whitelist item.' + + WHITELIST_ITEM_EDIT_ERROR = 'Not enough permissions to edit a whitelist item.' + + WHITELIST_ITEM_DELETE_ERROR = 'Not enough permissions to delete a whitelist item.' + + DDA_CREATE_ERROR = 'Not enough permissions to create a DDA identifier.' + + DDA_VIEW_ERROR = 'Not enough permissions to view a DDA identifier.' + + DDA_EDIT_ERROR = 'Not enough permissions to edit a DDA identifier.' + + DDA_DELETE_ERROR = 'Not enough permissions to delete a DDA identifier.' diff --git a/src/piracyshield_service/permission/schema.py b/src/piracyshield_service/permission/schema.py new file mode 100644 index 0000000..e05fe50 --- /dev/null +++ b/src/piracyshield_service/permission/schema.py @@ -0,0 +1,54 @@ +from piracyshield_data_model.account.role.model import AccountRoleModel +from piracyshield_data_model.permission.model import PermissionModel + +class PermissionSchema: + + SCHEMA = { + AccountRoleModel.GUEST: { + PermissionModel.VIEW_TICKET + }, + + AccountRoleModel.INTERNAL: { + PermissionModel.CREATE_TICKET, + PermissionModel.VIEW_TICKET, + PermissionModel.EDIT_TICKET, + PermissionModel.DELETE_TICKET, + PermissionModel.UPLOAD_TICKET, + PermissionModel.CREATE_ACCOUNT, + PermissionModel.VIEW_ACCOUNT, + PermissionModel.EDIT_ACCOUNT, + PermissionModel.DELETE_ACCOUNT, + PermissionModel.CREATE_WHITELIST_ITEM, + PermissionModel.VIEW_WHITELIST_ITEM, + PermissionModel.EDIT_WHITELIST_ITEM, + PermissionModel.DELETE_WHITELIST_ITEM, + PermissionModel.CREATE_DDA, + PermissionModel.VIEW_DDA, + PermissionModel.EDIT_DDA, + PermissionModel.DELETE_DDA + }, + + AccountRoleModel.REPORTER: { + PermissionModel.CREATE_TICKET, + PermissionModel.VIEW_TICKET, + PermissionModel.UPLOAD_TICKET, + PermissionModel.DELETE_TICKET, + PermissionModel.CREATE_WHITELIST_ITEM, + PermissionModel.VIEW_WHITELIST_ITEM, + PermissionModel.EDIT_WHITELIST_ITEM, + PermissionModel.DELETE_WHITELIST_ITEM, + # this is required as we need the list of reporter accounts to be assigned to the ticket + # to allow a future selection of the reporters instead of using all of them. + PermissionModel.VIEW_ACCOUNT, + PermissionModel.VIEW_DDA + }, + + AccountRoleModel.PROVIDER: { + PermissionModel.VIEW_TICKET, + PermissionModel.EDIT_TICKET, + PermissionModel.CREATE_WHITELIST_ITEM, + PermissionModel.VIEW_WHITELIST_ITEM, + PermissionModel.EDIT_WHITELIST_ITEM, + PermissionModel.DELETE_WHITELIST_ITEM + } + } diff --git a/src/piracyshield_service/permission/service.py b/src/piracyshield_service/permission/service.py new file mode 100644 index 0000000..5ff8169 --- /dev/null +++ b/src/piracyshield_service/permission/service.py @@ -0,0 +1,168 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_service.permission.schema import PermissionSchema + +from piracyshield_data_model.account.role.model import AccountRoleModel +from piracyshield_data_model.permission.model import PermissionModel + +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.permission.errors import PermissionErrorCode, PermissionErrorMessage + +class PermissionService(BaseService): + + permission_schema = None + + role_model = None + + role = None + + def __init__(self, role: int): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self.role = role + + self._prepare_modules() + + def execute(self): + pass + + def can_create_account(self) -> bool | Exception: + if self.has_permission(PermissionModel.CREATE_ACCOUNT) == False: + raise ApplicationException(PermissionErrorCode.ACCOUNT_CREATE_ERROR, PermissionErrorMessage.ACCOUNT_CREATE_ERROR) + + return True + + def can_view_account(self) -> bool | Exception: + if self.has_permission(PermissionModel.VIEW_ACCOUNT) == False: + raise ApplicationException(PermissionErrorCode.ACCOUNT_VIEW_ERROR, PermissionErrorMessage.ACCOUNT_VIEW_ERROR) + + return True + + def can_edit_account(self) -> bool | Exception: + if self.has_permission(PermissionModel.EDIT_ACCOUNT) == False: + raise ApplicationException(PermissionErrorCode.ACCOUNT_EDIT_ERROR, PermissionErrorMessage.ACCOUNT_EDIT_ERROR) + + return True + + def can_delete_account(self) -> bool | Exception: + if self.has_permission(PermissionModel.DELETE_ACCOUNT) == False: + raise ApplicationException(PermissionErrorCode.ACCOUNT_DELETE_ERROR, PermissionErrorMessage.ACCOUNT_DELETE_ERROR) + + return True + + def can_create_ticket(self) -> bool | Exception: + if self.has_permission(PermissionModel.CREATE_TICKET) == False: + raise ApplicationException(PermissionErrorCode.TICKET_CREATE_ERROR, PermissionErrorMessage.TICKET_CREATE_ERROR) + + return True + + def can_view_ticket(self) -> bool | Exception: + if self.has_permission(PermissionModel.VIEW_TICKET) == False: + raise ApplicationException(PermissionErrorCode.TICKET_VIEW_ERROR, PermissionErrorMessage.TICKET_VIEW_ERROR) + + return True + + def can_edit_ticket(self) -> bool | Exception: + if self.has_permission(PermissionModel.EDIT_TICKET) == False: + raise ApplicationException(PermissionErrorCode.TICKET_EDIT_ERROR, PermissionErrorMessage.TICKET_EDIT_ERROR) + + return True + + def can_delete_ticket(self) -> bool | Exception: + if self.has_permission(PermissionModel.DELETE_TICKET) == False: + raise ApplicationException(PermissionErrorCode.TICKET_DELETE_ERROR, PermissionErrorMessage.TICKET_DELETE_ERROR) + + return True + + def can_upload_ticket(self) -> bool | Exception: + if self.has_permission(PermissionModel.UPLOAD_TICKET) == False: + raise ApplicationException(PermissionErrorCode.TICKET_UPLOAD_ERROR, PermissionErrorMessage.TICKET_UPLOAD_ERROR) + + return True + + def can_create_whitelist_item(self) -> bool | Exception: + if self.has_permission(PermissionModel.CREATE_WHITELIST_ITEM) == False: + raise ApplicationException(PermissionErrorCode.WHITELIST_ITEM_CREATE_ERROR, PermissionErrorMessage.WHITELIST_ITEM_CREATE_ERROR) + + return True + + def can_view_whitelist_item(self) -> bool | Exception: + if self.has_permission(PermissionModel.VIEW_WHITELIST_ITEM) == False: + raise ApplicationException(PermissionErrorCode.WHITELIST_ITEM_VIEW_ERROR, PermissionErrorMessage.WHITELIST_ITEM_VIEW_ERROR) + + return True + + def can_edit_whitelist_item(self) -> bool | Exception: + if self.has_permission(PermissionModel.EDIT_WHITELIST_ITEM) == False: + raise ApplicationException(PermissionErrorCode.WHITELIST_ITEM_EDIT_ERROR, PermissionErrorMessage.WHITELIST_ITEM_EDIT_ERROR) + + return True + + def can_delete_whitelist_item(self) -> bool | Exception: + if self.has_permission(PermissionModel.DELETE_WHITELIST_ITEM) == False: + raise ApplicationException(PermissionErrorCode.WHITELIST_ITEM_DELETE_ERROR, PermissionErrorMessage.WHITELIST_ITEM_DELETE_ERROR) + + return True + + def can_create_dda(self) -> bool | Exception: + if self.has_permission(PermissionModel.CREATE_DDA) == False: + raise ApplicationException(PermissionErrorCode.DDA_CREATE_ERROR, PermissionErrorMessage.DDA_CREATE_ERROR) + + return True + + def can_view_dda(self) -> bool | Exception: + if self.has_permission(PermissionModel.VIEW_DDA) == False: + raise ApplicationException(PermissionErrorCode.DDA_VIEW_ERROR, PermissionErrorMessage.DDA_VIEW_ERROR) + + return True + + def can_edit_dda(self) -> bool | Exception: + if self.has_permission(PermissionModel.EDIT_DDA) == False: + raise ApplicationException(PermissionErrorCode.DDA_EDIT_ERROR, PermissionErrorMessage.DDA_EDIT_ERROR) + + return True + + def can_delete_dda(self) -> bool | Exception: + if self.has_permission(PermissionModel.DELETE_DDA) == False: + raise ApplicationException(PermissionErrorCode.DDA_DELETE_ERROR, PermissionErrorMessage.DDA_DELETE_ERROR) + + return True + + def has_permission(self, permission: int) -> bool: + """ + Checks if the permission is available based on the provided role. + """ + + return permission in self.get_permissions(self.role_model) + + def get_permissions(self, role_model: int) -> set: + """ + Returns the set of permissions associated with the given role model. + """ + + if role_model in self.permission_schema.SCHEMA: + return self.permission_schema.SCHEMA[role_model] + + else: + return set() + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.role_model = AccountRoleModel(self.role) + + self.permission_schema = PermissionSchema() diff --git a/src/piracyshield_service/provider/__init__.py b/src/piracyshield_service/provider/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/provider/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/provider/change_password.py b/src/piracyshield_service/provider/change_password.py new file mode 100644 index 0000000..6f97f9d --- /dev/null +++ b/src/piracyshield_service/provider/change_password.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.change_password import AccountChangePasswordService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderChangePasswordService(AccountChangePasswordService): + + """ + Changes password of a provider account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/provider/create.py b/src/piracyshield_service/provider/create.py new file mode 100644 index 0000000..f7eee62 --- /dev/null +++ b/src/piracyshield_service/provider/create.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from piracyshield_service.account.create import AccountCreateService + +from piracyshield_data_model.provider.model import ProviderModel + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderCreateService(AccountCreateService): + + """ + Creates a provider account. + """ + + def __init__(self): + """ + Pass the data model and data storage to the parent class. + """ + + super().__init__(ProviderModel, ProviderStorage) + + def execute(self, name: str, email: str, password: str, confirm_password: str, flags: dict, created_by: str) -> str | Exception: + """ + :param name: a string that identificates the real name (and, eventually, sourname) of the account. + :param email: e-mail address, used in conjunction with a password to authenticate the account. + :param password: a string. + :param confirm_password: must be the same as `password`. + :param flags: flags of the account. + :param created_by: account id of the creator. + :return account id of the created account. + """ + + return super().execute(name, email, password, confirm_password, flags, created_by) diff --git a/src/piracyshield_service/provider/exists_by_identifier.py b/src/piracyshield_service/provider/exists_by_identifier.py new file mode 100644 index 0000000..6949b2e --- /dev/null +++ b/src/piracyshield_service/provider/exists_by_identifier.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.exists_by_identifier import AccountExistsByIdentifierService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderExistsByIdentifierService(AccountExistsByIdentifierService): + + """ + Checks if an account with this identifier exists. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/provider/get.py b/src/piracyshield_service/provider/get.py new file mode 100644 index 0000000..7becadb --- /dev/null +++ b/src/piracyshield_service/provider/get.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get import AccountGetService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderGetService(AccountGetService): + + """ + Retrieves a provider account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/provider/get_all.py b/src/piracyshield_service/provider/get_all.py new file mode 100644 index 0000000..7433ffd --- /dev/null +++ b/src/piracyshield_service/provider/get_all.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get_all import AccountGetAllService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderGetAllService(AccountGetAllService): + + """ + Retrieves all the provider accounts. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/provider/remove.py b/src/piracyshield_service/provider/remove.py new file mode 100644 index 0000000..56dad5a --- /dev/null +++ b/src/piracyshield_service/provider/remove.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.remove import AccountRemoveService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderRemoveService(AccountRemoveService): + + """ + Removes a provider account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/provider/set_status.py b/src/piracyshield_service/provider/set_status.py new file mode 100644 index 0000000..5ee6696 --- /dev/null +++ b/src/piracyshield_service/provider/set_status.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.set_status import AccountSetStatusService + +from piracyshield_data_storage.provider.storage import ProviderStorage + +class ProviderSetStatusService(AccountSetStatusService): + + """ + Sets the status of a provider account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ProviderStorage) diff --git a/src/piracyshield_service/reporter/__init__.py b/src/piracyshield_service/reporter/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/reporter/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/reporter/change_password.py b/src/piracyshield_service/reporter/change_password.py new file mode 100644 index 0000000..af931d4 --- /dev/null +++ b/src/piracyshield_service/reporter/change_password.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.change_password import AccountChangePasswordService + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterChangePasswordService(AccountChangePasswordService): + + """ + Changes password of a reporter account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ReporterStorage) diff --git a/src/piracyshield_service/reporter/create.py b/src/piracyshield_service/reporter/create.py new file mode 100644 index 0000000..a21f4da --- /dev/null +++ b/src/piracyshield_service/reporter/create.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from piracyshield_service.account.create import AccountCreateService + +from piracyshield_data_model.reporter.model import ReporterModel + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterCreateService(AccountCreateService): + + """ + Creates a reporter account. + """ + + def __init__(self): + """ + Pass the data model and data storage to the parent class. + """ + + super().__init__(ReporterModel, ReporterStorage) + + def execute(self, name: str, email: str, password: str, confirm_password: str, flags: dict, created_by: str) -> str | Exception: + """ + :param name: a string that identificates the real name (and, eventually, sourname) of the account. + :param email: e-mail address, used in conjunction with a password to authenticate the account. + :param password: a string. + :param confirm_password: must be the same as `password`. + :param flags: flags of the account. + :param created_by: account id of the creator. + :return account id of the created account. + """ + + return super().execute(name, email, password, confirm_password, flags, created_by) diff --git a/src/piracyshield_service/reporter/get.py b/src/piracyshield_service/reporter/get.py new file mode 100644 index 0000000..47975e4 --- /dev/null +++ b/src/piracyshield_service/reporter/get.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get import AccountGetService + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterGetService(AccountGetService): + + """ + Retrieves a reporter account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ReporterStorage) diff --git a/src/piracyshield_service/reporter/get_all.py b/src/piracyshield_service/reporter/get_all.py new file mode 100644 index 0000000..dadb8d9 --- /dev/null +++ b/src/piracyshield_service/reporter/get_all.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.get_all import AccountGetAllService + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterGetAllService(AccountGetAllService): + + """ + Retrieves all the reporter accounts. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ReporterStorage) diff --git a/src/piracyshield_service/reporter/remove.py b/src/piracyshield_service/reporter/remove.py new file mode 100644 index 0000000..22d45de --- /dev/null +++ b/src/piracyshield_service/reporter/remove.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.remove import AccountRemoveService + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterRemoveService(AccountRemoveService): + + """ + Removes a reporter account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ReporterStorage) diff --git a/src/piracyshield_service/reporter/set_status.py b/src/piracyshield_service/reporter/set_status.py new file mode 100644 index 0000000..f63f063 --- /dev/null +++ b/src/piracyshield_service/reporter/set_status.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from piracyshield_service.account.set_status import AccountSetStatusService + +from piracyshield_data_storage.reporter.storage import ReporterStorage + +class ReporterSetStatusService(AccountSetStatusService): + + """ + Sets the status of a reporter account. + """ + + def __init__(self): + """ + Pass the data storage to the parent class. + """ + + super().__init__(ReporterStorage) diff --git a/src/piracyshield_service/security/__init__.py b/src/piracyshield_service/security/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/security/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/security/anti_brute_force.py b/src/piracyshield_service/security/anti_brute_force.py new file mode 100644 index 0000000..c4e3cfa --- /dev/null +++ b/src/piracyshield_service/security/anti_brute_force.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.security.anti_brute_force.memory import SecurityAntiBruteForceMemory, SecurityAntiBruteForceMemorySetException, SecurityAntiBruteForceMemoryGetException + +from piracyshield_service.security.blacklist.add_ip_address import SecurityBlacklistAddIPAddressService + +from piracyshield_service.security.errors import SecurityErrorCode, SecurityErrorMessage + +class SecurityAntiBruteForceService(BaseService): + + """ + Protection against authentication flooding. + """ + + security_blacklist_add_ip_address_service = None + + anti_brute_force_config = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, email: str, ip_address: str) -> bool | Exception: + login_attempts = self.data_memory.get_login_attempts(email = email) + + # we don't have any record, let's start monitoring + if not isinstance(login_attempts, int) or login_attempts == 0: + self.data_memory.set_login_attempts( + email = email, + timeframe = self.anti_brute_force_config.get('general').get('timeframe') + ) + + # we already have a count ongoing + else: + # the account has exceeded the maximum authentication attempts + if login_attempts > self.anti_brute_force_config.get('general').get('max_attempts'): + # remove any data as we're going to blacklist the IP + self.data_memory.reset_login_attempts(email) + + self.logger.warning(f"Authentication limit reached by `{email}`") + + # create a blacklisting the IP address + self.security_blacklist_add_ip_address_service.execute( + ip_address = ip_address, + duration = self.anti_brute_force_config.get('general').get('blacklist_duration') + ) + + raise ApplicationException(SecurityErrorCode.MAX_LOGIN_ATTEMPTS, SecurityErrorMessage.MAX_LOGIN_ATTEMPTS.format(self.anti_brute_force_config.get('general').get('blacklist_duration'))) + + # increase the requests count until the maximum attempts limit is triggered + else: + self.data_memory.increment_login_attempts( + email = email + ) + + return True + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.anti_brute_force_config = Config('security/anti_brute_force') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_memory = SecurityAntiBruteForceMemory( + database = self.anti_brute_force_config.get('database').get('memory_database') + ) + + self.security_blacklist_add_ip_address_service = SecurityBlacklistAddIPAddressService() diff --git a/src/piracyshield_service/security/blacklist/__init__.py b/src/piracyshield_service/security/blacklist/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/security/blacklist/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/security/blacklist/add_ip_address.py b/src/piracyshield_service/security/blacklist/add_ip_address.py new file mode 100644 index 0000000..17ba502 --- /dev/null +++ b/src/piracyshield_service/security/blacklist/add_ip_address.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.security.blacklist.memory import SecurityBlacklistMemory, SecurityBlacklistMemorySetException, SecurityBlacklistMemoryGetException + +from piracyshield_service.security.errors import SecurityErrorCode, SecurityErrorMessage + +class SecurityBlacklistAddIPAddressService(BaseService): + + """ + Blacklists an IP address. + """ + + blacklist_config = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, ip_address: str, duration: int) -> bool | Exception: + response = self.data_memory.add_ip_address( + ip_address = ip_address, + duration = duration + ) + + if response == True: + self.logger.warning(f"Blacklist item `{ip_address}` has been added for {duration} seconds") + + return True + + return response + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.blacklist_config = Config('security/blacklist') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_memory = SecurityBlacklistMemory( + database = self.blacklist_config.get('database').get('memory_database') + ) diff --git a/src/piracyshield_service/security/blacklist/create.py b/src/piracyshield_service/security/blacklist/create.py new file mode 100644 index 0000000..02b85db --- /dev/null +++ b/src/piracyshield_service/security/blacklist/create.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.security.memory import SecurityMemory, SecurityMemorySetException, SecurityMemoryGetException + +from piracyshield_service.security.errors import SecurityErrorCode, SecurityErrorMessage + +class SecurityBlacklistCreateService(BaseService): + + """ + Blacklists an item. + """ + + blacklist_config = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, item: str, duration: int) -> bool | Exception: + response = self.data_memory.add_to_blacklist( + item = item, + duration = duration + ) + + if response == True: + self.logger.warning(f"Blacklist item `{item}` has been created for {duration} seconds") + + return True + + return response + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.blacklist_config = Config('security/blacklist') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_memory = SecurityMemory( + database = self.blacklist_config.get('database').get('memory_database') + ) diff --git a/src/piracyshield_service/security/blacklist/exists_by_ip_address.py b/src/piracyshield_service/security/blacklist/exists_by_ip_address.py new file mode 100644 index 0000000..c475b9d --- /dev/null +++ b/src/piracyshield_service/security/blacklist/exists_by_ip_address.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.config import Config +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.security.blacklist.memory import SecurityBlacklistMemory, SecurityBlacklistMemorySetException, SecurityBlacklistMemoryGetException + +from piracyshield_service.security.errors import SecurityErrorCode, SecurityErrorMessage + +class SecurityBlacklistExistsByIPAddressService(BaseService): + + """ + Checks if an item has been blacklisted. + """ + + blacklist_config = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_configs() + + self._prepare_modules() + + def execute(self, ip_address: str) -> bool | Exception: + return self.data_memory.exists_by_ip_address( + ip_address = ip_address + ) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self) -> None: + """ + Loads the configs. + """ + + self.blacklist_config = Config('security/blacklist') + + def _prepare_modules(self) -> None: + """ + Initialize and set the instances. + """ + + self.data_memory = SecurityBlacklistMemory( + database = self.blacklist_config.get('database').get('memory_database') + ) diff --git a/src/piracyshield_service/security/errors.py b/src/piracyshield_service/security/errors.py new file mode 100644 index 0000000..3d056e7 --- /dev/null +++ b/src/piracyshield_service/security/errors.py @@ -0,0 +1,12 @@ + +class SecurityErrorCode: + + GENERIC = '1200' + + MAX_LOGIN_ATTEMPTS = '1201' + +class SecurityErrorMessage: + + GENERIC = 'Generic security error.' + + MAX_LOGIN_ATTEMPTS = 'Max login attempts reached, your IP address is now temporary banned for {} seconds.' diff --git a/src/piracyshield_service/task/__init__.py b/src/piracyshield_service/task/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/task/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/task/base.py b/src/piracyshield_service/task/base.py new file mode 100644 index 0000000..70f86c4 --- /dev/null +++ b/src/piracyshield_service/task/base.py @@ -0,0 +1,63 @@ +from piracyshield_component.log.logger import Logger +from piracyshield_component.utils.time import Time + +from abc import ABC, abstractmethod +from rq import get_current_job + +class BaseTask(ABC): + + created_at = None + + def __init__(self): + self.logger = Logger('tasks') + + self.created_at = Time.now_iso8601() + + self.job = get_current_job() + + @abstractmethod + def run(self, *args, **kwargs): + pass + + @abstractmethod + def before_run(self, *args, **kwargs): + pass + + @abstractmethod + def after_run(self, *args, **kwargs): + pass + + @abstractmethod + def on_failure(self, *args, **kwargs): + pass + + def execute(self, *args, **kwargs): + try: + self.before_run(*args, **kwargs) + + self.logger.debug('Task {} started with args: {}, kwargs: {}'.format(self.__class__.__name__, args, kwargs)) + + result = self.run(*args, **kwargs) + + self.logger.debug('Task {} completed successfully with result: {}'.format( + self.__class__.__name__, result)) + + self.after_run(*args, **kwargs) + + return result + + except Exception as e: + self.logger.error('Task {} failed with error: {}'.format(self.__class__.__name__, str(e))) + + self.on_failure(*args, **kwargs) + + self.job.meta['error'] = str(e) + + self.job.save() + + self.job.refresh() + + raise e + + def __call__(self, *args, **kwargs): + return self.execute(*args, **kwargs) diff --git a/src/piracyshield_service/task/instance.py b/src/piracyshield_service/task/instance.py new file mode 100644 index 0000000..bfeff61 --- /dev/null +++ b/src/piracyshield_service/task/instance.py @@ -0,0 +1,39 @@ +from piracyshield_component.config import Config + +from redis import Redis +from rq import Queue + +class TaskInstanceService: + + """ + Task instance class. + """ + + queue = None + + task_config = None + + database_redis_config = None + task_connection_config = None + + def __init__(self): + self._prepare_configs() + + self._prepare_connections() + + def _prepare_connections(self) -> None: + self.redis_connection = Redis( + host = self.database_redis_config.get('host'), + port = self.database_redis_config.get('port'), + db = self.task_config.get('database') + ) + + self.queue = Queue( + self.task_config.get('queue_name'), + connection = self.redis_connection + ) + + def _prepare_configs(self) -> None: + self.task_config = Config('application').get('task') + + self.database_redis_config = Config('database/redis').get('connection') diff --git a/src/piracyshield_service/task/service.py b/src/piracyshield_service/task/service.py new file mode 100644 index 0000000..d14ba23 --- /dev/null +++ b/src/piracyshield_service/task/service.py @@ -0,0 +1,70 @@ +from piracyshield_component.log.logger import Logger + +from piracyshield_service.task.instance import TaskInstanceService + +from datetime import timedelta + +from rq.exceptions import InvalidJobOperation + +class TaskService(TaskInstanceService): + + """ + Task management class. + """ + + logger = None + + def __init__(self): + super().__init__() + + self.logger = Logger('service') + + def create(self, task_caller: callable, delay: int = 0, *args: list, **kwargs: dict) -> str: + """ + Creates a task. + Expects a caller function that calls a BaseTask extended class. + + :param task_caller: a function that calls the main task class. + :param delay: seconds of delay before the task is executed. + :param *args: arguments to pass to the task class. + :param **kwargs: keyword arguments to pass to the task class. + :return: the queue job id. + """ + + scheduled_time = timedelta(seconds = delay) + + job = self.queue.enqueue_in( + scheduled_time, + task_caller, + *args, + **kwargs + ) + + self.logger.info(f'Enqueued new task `{job.id}` to be started at `{scheduled_time}`') + + return job.id + + def remove(self, job_id: str) -> bool: + """ + Removes a previously created task. + + :param job_id: an existing job identifier. + :return: true/false result status. + """ + + job = self.queue.fetch_job(job_id) + + if job: + self.logger.info(f'Removing job `{job.id}` as requested') + + try: + job.cancel() + + except InvalidJobOperation: + self.logger.debug(f'Already removed job `{job.id}`') + + return True + + return True + + return False diff --git a/src/piracyshield_service/task/tasks/__init__.py b/src/piracyshield_service/task/tasks/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/task/tasks/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/task/tasks/test.py b/src/piracyshield_service/task/tasks/test.py new file mode 100644 index 0000000..48d21f8 --- /dev/null +++ b/src/piracyshield_service/task/tasks/test.py @@ -0,0 +1,20 @@ +from piracyshield_service.task.base import BaseTask + +class TestTask(BaseTask): + + def run(self, *args: any, **kwargs: any) -> bool: + print('Hello world') + + def before_run(self): + pass + + def after_run(self): + pass + + def on_failure(self): + pass + +def test_task_caller(): + t = TestTask() + + return t.execute() diff --git a/src/piracyshield_service/task/worker.py b/src/piracyshield_service/task/worker.py new file mode 100644 index 0000000..7da16a8 --- /dev/null +++ b/src/piracyshield_service/task/worker.py @@ -0,0 +1,34 @@ +from piracyshield_service.task.instance import TaskInstanceService + +from rq import Worker + +import threading + +class TaskWorkerService(TaskInstanceService): + + """ + Task worker management. + """ + + worker = None + + def __init__(self): + super().__init__() + + self._prepare_modules() + + def start(self) -> None: + # spawn a thread to use a worker with scheduler + worker_thread = threading.Thread(target = self.worker.work( + with_scheduler = True + )) + + worker_thread.start() + + worker_thread.join() + + def _prepare_modules(self) -> None: + self.worker = Worker( + [self.queue], + connection = self.redis_connection + ) diff --git a/src/piracyshield_service/ticket/__init__.py b/src/piracyshield_service/ticket/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/create.py b/src/piracyshield_service/ticket/create.py new file mode 100644 index 0000000..a5fab92 --- /dev/null +++ b/src/piracyshield_service/ticket/create.py @@ -0,0 +1,360 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.model import ( + TicketModel, + TicketModelNoDataException, + TicketModelTicketIdException, + TicketModelDDAIdMissingException, + TicketModelDDAIdNonValidException, + TicketModelDescriptionException, + TicketModelFQDNMissingException, + TicketModelFQDNNonValidException, + TicketModelIPv4MissingException, + TicketModelIPv4NonValidException, + TicketModelIPv6MissingException, + TicketModelIPv6NonValidException, + TicketModelAssignedToNonValidException +) + +from piracyshield_data_model.ticket.status.model import TicketStatusModel + +from piracyshield_service.ticket.relation.establish import TicketRelationEstablishService +from piracyshield_service.ticket.relation.abandon import TicketRelationAbandonService + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageCreateException + +from piracyshield_service.provider.get_all import ProviderGetAllService +from piracyshield_service.provider.exists_by_identifier import ProviderExistsByIdentifierService + +from piracyshield_service.ticket.tasks.ticket_initialize import ticket_initialize_task_caller +from piracyshield_service.ticket.tasks.ticket_autoclose import ticket_autoclose_task_caller + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +from piracyshield_service.forensic.create_hash import ForensicCreateHashService +from piracyshield_service.forensic.remove_by_ticket import ForensicRemoveByTicketService + +from piracyshield_service.dda.is_assigned_to_account import DDAIsAssignedToAccountService + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +from datetime import datetime, timedelta + +class TicketCreateService(BaseService): + + """ + Manages the creation of a new ticket. + """ + + dda_is_assigned_to_account_service = None + + forensic_create_hash_service = None + + log_ticket_create_service = None + + ticket_relation_establish_service = None + + ticket_relation_abandon_service = None + + provider_exists_by_identifier_service = None + + provider_get_all_service = None + + data_model = None + + data_storage = None + + identifier = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute( + self, + dda_id: str, + forensic_evidence: list, + fqdn: list, + ipv4: list, + ipv6: list, + assigned_to: list, + created_by: str, + description: str = None + ) -> tuple | Exception: + model = self._validate_parameters( + ticket_id = self._generate_ticket_id(), + dda_id = dda_id, + description = description, + fqdn = fqdn, + ipv4 = ipv4, + ipv6 = ipv6, + assigned_to = assigned_to + ) + + # check if the DDA identifier is assigned to this account + if self.dda_is_assigned_to_account_service.execute( + dda_id = dda_id, + account_id = created_by + ) == False: + raise ApplicationException(TicketErrorCode.UNKNOWN_DDA_IDENTIFIER, TicketErrorMessage.UNKNOWN_DDA_IDENTIFIER) + + # if specified, validate each provider_id + if assigned_to: + self._verify_assigned_to(assigned_to) + + # otherwise collect all the providers and assign them to the ticket + else: + providers = self.provider_get_all_service.execute() + + model['assigned_to'] = [] + + for provider in providers: + model['assigned_to'].append(provider.get('account_id')) + + self.forensic_create_hash_service.execute( + ticket_id = model.get('ticket_id'), + hash_list = forensic_evidence.get('hash'), + reporter_id = created_by + ) + + # proceed to build the relation item <-> provider + (fqdn_ticket_items, ipv4_ticket_items, ipv6_ticket_items) = self.ticket_relation_establish_service.execute( + ticket_id = model.get('ticket_id'), + providers = model.get('assigned_to'), + fqdn = model.get('fqdn') or None, + ipv4 = model.get('ipv4') or None, + ipv6 = model.get('ipv6') or None + ) + + (initialize_job_id, autoclose_job_id) = self._schedule_task( + ticket_id = model.get('ticket_id'), + revoke_time = model.get('settings').get('revoke_time'), + autoclose_time = model.get('settings').get('autoclose_time') + ) + + document = self._build_document( + model = model, + fqdn = fqdn, + ipv4 = ipv4, + ipv6 = ipv6, + now = Time.now_iso8601(), + created_by = created_by, + tasks = [ # append the task id so we can cancel its execution if needed + initialize_job_id, + autoclose_job_id + ] + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except TicketStorageCreateException as e: + self.ticket_relation_abandon_service.execute(model.get('ticket_id')) + + self.forensic_remove_by_ticket_service.execute(model.get('ticket_id')) + + # clean created tasks + for single_task in document.get('tasks'): + self.task_service.remove(single_task) + + self.logger.error(f'Could not create the ticket') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + # log the operation + self.log_ticket_create_service.execute( + ticket_id = model.get('ticket_id'), + message = f'Initial status set to `{document.get("status")}`.' + ) + + self.logger.info(f'Ticket `{model.get("ticket_id")}` created by `{document.get("metadata").get("created_by")}`') + + return ( + # ticket identifier + model.get('ticket_id'), + + # maximium time allowed before the ticket is visible to the providers + model.get('settings').get('revoke_time') + ) + + def _generate_ticket_id(self) -> str: + """ + Generates a UUIDv4. + """ + + return self.identifier.generate() + + def _verify_assigned_to(self, assigned_to: list) -> bool | Exception: + """ + Verifies each provider in the list. + + :param assigned_to: list of valid account identifiers. + :return: true if correct, exception if not. + """ + + try: + for provider_id in assigned_to: + if self.provider_exists_by_identifier_service.execute( + account_id = provider_id + ) == False: + raise ApplicationException(TicketErrorCode.NON_EXISTENT_ASSIGNED_TO, TicketErrorMessage.NON_EXISTENT_ASSIGNED_TO) + + return True + + except: + self.logger.error(f'Could not get assigned accounts: `{assigned_to}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _build_document( + self, + model: dict, + fqdn: list, + ipv4: list, + ipv6: list, + tasks: list, + now: str, + created_by: str + ): + return { + 'ticket_id': model.get('ticket_id'), + 'genre': model.get('genre'), + 'dda_id': model.get('dda_id'), + 'description': model.get('description'), + 'fqdn': fqdn, + 'ipv4': ipv4, + 'ipv6': ipv6, + 'status': model.get('status'), + 'assigned_to': model.get('assigned_to'), + 'settings': model.get('settings'), + 'tasks': tasks, + 'metadata': { + # creation date + 'created_at': now, + + # same as creation date + 'updated_at': now, + + # who created this ticket + 'created_by': created_by + } + } + + def _schedule_task(self, ticket_id: str, revoke_time: int, autoclose_time: int) -> tuple | Exception: + # schedule the initialization of the ticket + # move the ticket status to open after X seconds and perform the initial operations + try: + initialize_job_id = self.task_service.create( + task_caller = ticket_initialize_task_caller, + delay = revoke_time, + ticket_id = ticket_id + ) + + # move the ticket status to close after X seconds + autoclose_job_id = self.task_service.create( + task_caller = ticket_autoclose_task_caller, + delay = autoclose_time, + ticket_id = ticket_id + ) + + return (initialize_job_id, autoclose_job_id) + + except Exception as e: + self.ticket_relation_abandon_service.execute(ticket_id) + + self.forensic_remove_by_ticket_service.execute(ticket_id) + + self.logger.error(f'Could not create the task for `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _validate_parameters(self, ticket_id: str, dda_id: str, description: str, fqdn: list, ipv4: list, ipv6: list, assigned_to: list) -> dict | Exception: + try: + model = self.data_model( + ticket_id = ticket_id, + dda_id = dda_id, + description = description, + fqdn = fqdn, + ipv4 = ipv4, + ipv6 = ipv6, + assigned_to = assigned_to + ) + + return model.to_dict() + + except TicketModelTicketIdException as e: + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + except TicketModelDDAIdMissingException as e: + raise ApplicationException(TicketErrorCode.MISSING_DDA_IDENTIFIER, TicketErrorMessage.MISSING_DDA_IDENTIFIER) + + except TicketModelDDAIdNonValidException as e: + raise ApplicationException(TicketErrorCode.NON_VALID_DDA_IDENTIFIER, TicketErrorMessage.NON_VALID_DDA_IDENTIFIER) + + except TicketModelNoDataException: + raise ApplicationException(TicketErrorCode.NO_DATA, TicketErrorMessage.NO_DATA) + + except TicketModelDescriptionException: + raise ApplicationException(TicketErrorCode.NON_VALID_DESCRIPTION, TicketErrorMessage.NON_VALID_DESCRIPTION) + + except TicketModelFQDNMissingException: + raise ApplicationException(TicketErrorCode.MISSING_FQDN, TicketErrorMessage.MISSING_FQDN) + + except TicketModelFQDNNonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_FQDN, TicketErrorMessage.NON_VALID_FQDN) + + except TicketModelIPv4MissingException: + raise ApplicationException(TicketErrorCode.MISSING_IPV4, TicketErrorMessage.MISSING_IPV4) + + except TicketModelIPv4NonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV4, TicketErrorMessage.NON_VALID_IPV4) + + except TicketModelIPv6MissingException: + raise ApplicationException(TicketErrorCode.MISSING_IPV6, TicketErrorMessage.MISSING_IPV6) + + except TicketModelIPv6NonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV6, TicketErrorMessage.NON_VALID_IPV6) + + except TicketModelAssignedToNonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_ASSIGNED_TO, TicketErrorMessage.NON_VALID_ASSIGNED_TO) + + except TicketModelAssignedToNonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_ASSIGNED_TO, TicketErrorMessage.NON_VALID_ASSIGNED_TO) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = TicketModel + + self.data_storage = TicketStorage() + + self.identifier = Identifier() + + self.ticket_relation_establish_service = TicketRelationEstablishService() + + self.ticket_relation_abandon_service = TicketRelationAbandonService() + + self.forensic_create_hash_service = ForensicCreateHashService() + + self.forensic_remove_by_ticket_service = ForensicRemoveByTicketService() + + self.provider_get_all_service = ProviderGetAllService() + + self.provider_exists_by_identifier_service = ProviderExistsByIdentifierService() + + self.log_ticket_create_service = LogTicketCreateService() + + self.dda_is_assigned_to_account_service = DDAIsAssignedToAccountService() diff --git a/src/piracyshield_service/ticket/error/__init__.py b/src/piracyshield_service/ticket/error/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/error/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/error/create.py b/src/piracyshield_service/ticket/error/create.py new file mode 100644 index 0000000..807c7ee --- /dev/null +++ b/src/piracyshield_service/ticket/error/create.py @@ -0,0 +1,263 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.error.model import ( + TicketErrorModel, + TicketErrorModelNoDataException, + TicketErrorModelTicketErrorIdentifierException, + TicketErrorModelTicketIdentifierException, + TicketErrorModelFQDNMissingException, + TicketErrorModelFQDNNonValidException, + TicketErrorModelIPv4MissingException, + TicketErrorModelIPv4NonValidException, + TicketErrorModelIPv6MissingException, + TicketErrorModelIPv6NonValidException +) + +from piracyshield_data_storage.ticket.error.storage import TicketErrorStorage, TicketErrorStorageCreateException + +from piracyshield_service.ticket.get import TicketGetService + +from piracyshield_service.ticket.item.get_available_by_ticket import TicketItemGetAvailableByTicketService +from piracyshield_service.ticket.item.set_flag_error import TicketItemSetFlagErrorService + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketErrorCreateService(BaseService): + + """ + Manages the creation of a new error ticket. + """ + + ticket_item_set_flag_error_service = None + + ticket_get_service = None + + ticket_item_get_available_by_ticket_service = None + + log_ticket_create_service = None + + data_model = None + + data_storage = None + + identifier = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute( + self, + ticket_id: str, + fqdn: list, + ipv4: list, + ipv6: list, + created_by: str, + ) -> tuple | Exception: + model = self._validate_parameters( + ticket_error_id = self._generate_ticket_error_id(), + ticket_id = ticket_id, + fqdn = fqdn, + ipv4 = ipv4, + ipv6 = ipv6 + ) + + # get ticket if exists + ticket_data = self.ticket_get_service.execute( + ticket_id = ticket_id + ) + + # check if the error reporting time has expired + if Time.is_expired( + date = ticket_data.get('metadata').get('created_at'), + expiration_time = ticket_data.get('settings').get('report_error_time') + ) == True: + raise ApplicationException(TicketErrorCode.REPORT_ERROR_TIME_EXCEEDED, TicketErrorMessage.REPORT_ERROR_TIME_EXCEEDED) + + # retrieve all the available ticket items + available_ticket_items = self.ticket_item_get_available_by_ticket_service.execute( + ticket_id = ticket_id, + account_id = created_by + ) + + # check if the ticket items are in this ticket and proceed to set the flags + self._check_and_set_ticket_items( + ticket_id = ticket_id, + fqdn_items = fqdn, + ipv4_items = ipv4, + ipv6_items = ipv6, + available_ticket_items = available_ticket_items + ) + + document = self._build_document( + model = model, + now = Time.now_iso8601(), + created_by = created_by + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except TicketErrorStorageCreateException as e: + self.logger.error(f'Could not create the error ticket') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + # log the operation + self.log_ticket_create_service.execute( + ticket_id = model.get('ticket_id'), + message = f'An error ticket has been created with id `{model.get("ticket_error_id")}`.' + ) + + self.logger.info(f'Ticket genre `{model.get("genre")}` with identifier `{model.get("ticket_error_id")}` created by `{document.get("metadata").get("created_by")}`') + + return ( + # error ticket identifier + model.get('ticket_error_id'), + + # ticket identifier + model.get('ticket_id') + ) + + def _check_and_set_ticket_items(self, + ticket_id: str, + fqdn_items: list, + ipv4_items: list, + ipv6_items: list, + available_ticket_items: list + ) -> bool | Exception: + if fqdn_items: + for fqdn_item in fqdn_items: + if fqdn_item not in available_ticket_items: + raise ApplicationException(TicketErrorCode.NON_VALID_FQDN, TicketErrorMessage.NON_VALID_FQDN) + + else: + self.ticket_item_set_flag_error_service.execute( + ticket_id = ticket_id, + value = fqdn_item, + status = True + ) + + if ipv4_items: + for ipv4_item in ipv4_items: + if ipv4_item not in available_ticket_items: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV4, TicketErrorMessage.NON_VALID_IPV4) + + else: + self.ticket_item_set_flag_error_service.execute( + ticket_id = ticket_id, + value = ipv4_item, + status = True + ) + + if ipv6_items: + for ipv6_item in ipv6_items: + if ipv6_item not in available_ticket_items: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV6, TicketErrorMessage.NON_VALID_IPV6) + + else: + self.ticket_item_set_flag_error_service.execute( + ticket_id = ticket_id, + value = ipv6_item, + status = True + ) + + return True + + def _generate_ticket_error_id(self) -> str: + """ + Generates a UUIDv4. + """ + + return self.identifier.generate() + + def _build_document(self, model: dict, now: str, created_by: str): + return { + 'ticket_error_id': model.get('ticket_error_id'), + 'genre': model.get('genre'), + 'ticket_id': model.get('ticket_id'), + 'fqdn': model.get('fqdn'), + 'ipv4': model.get('ipv4'), + 'ipv6': model.get('ipv6'), + 'metadata': { + # creation date + 'created_at': now, + + # who created this ticket + 'created_by': created_by + } + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, ticket_error_id: str, ticket_id: str, fqdn: list, ipv4: list, ipv6: list) -> dict | Exception: + try: + model = self.data_model( + ticket_error_id = ticket_error_id, + ticket_id = ticket_id, + fqdn = fqdn, + ipv4 = ipv4, + ipv6 = ipv6 + ) + + return model.to_dict() + + except TicketErrorModelTicketErrorIdentifierException: + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC) + + except TicketErrorModelTicketIdentifierException: + raise ApplicationException(TicketErrorCode.NON_VALID_TICKET_IDENTIFIER, TicketErrorMessage.NON_VALID_TICKET_IDENTIFIER) + + except TicketErrorModelNoDataException: + raise ApplicationException(TicketErrorCode.NO_DATA, TicketErrorMessage.NO_DATA) + + except TicketErrorModelFQDNMissingException: + raise ApplicationException(TicketErrorCode.MISSING_FQDN, TicketErrorMessage.MISSING_FQDN) + + except TicketErrorModelFQDNNonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_FQDN, TicketErrorMessage.NON_VALID_FQDN) + + except TicketErrorModelIPv4MissingException: + raise ApplicationException(TicketErrorCode.MISSING_IPV4, TicketErrorMessage.MISSING_IPV4) + + except TicketErrorModelIPv4NonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV4, TicketErrorMessage.NON_VALID_IPV4) + + except TicketErrorModelIPv6MissingException: + raise ApplicationException(TicketErrorCode.MISSING_IPV6, TicketErrorMessage.MISSING_IPV6) + + except TicketErrorModelIPv6NonValidException: + raise ApplicationException(TicketErrorCode.NON_VALID_IPV6, TicketErrorMessage.NON_VALID_IPV6) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = TicketErrorModel + + self.data_storage = TicketErrorStorage() + + self.identifier = Identifier() + + self.ticket_get_service = TicketGetService() + + self.ticket_item_set_flag_error_service = TicketItemSetFlagErrorService() + + self.ticket_item_get_available_by_ticket_service = TicketItemGetAvailableByTicketService() + + self.log_ticket_create_service = LogTicketCreateService() diff --git a/src/piracyshield_service/ticket/error/get.py b/src/piracyshield_service/ticket/error/get.py new file mode 100644 index 0000000..991474e --- /dev/null +++ b/src/piracyshield_service/ticket/error/get.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.error.storage import TicketErrorStorage, TicketErrorStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketErrorGetService(BaseService): + + """ + Returns an error ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_error_id: str) -> dict | Exception: + """ + :param ticket_error_id: a valid ticket error identifier. + :return: the error ticket document. + """ + + try: + response = self.data_storage.get( + ticket_error_id = ticket_error_id + ) + + if response.empty(): + self.logger.debug(f'Could not get error ticket for `{ticket_error_id}`') + + document = next(response, None) + + return document + + except TicketStorageGetException as e: + self.logger.error(f'Could not get ticket for `{ticket_error_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketErrorStorage() diff --git a/src/piracyshield_service/ticket/error/get_by_reporter.py b/src/piracyshield_service/ticket/error/get_by_reporter.py new file mode 100644 index 0000000..469e596 --- /dev/null +++ b/src/piracyshield_service/ticket/error/get_by_reporter.py @@ -0,0 +1,63 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.error.storage import TicketErrorStorage, TicketErrorStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketErrorGetByReporterService(BaseService): + + """ + Returns an error ticket by a reporter identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_error_id: str, created_by: str) -> dict | Exception: + """ + :param ticket_error_id: a valid ticket error identifier. + :param created_by: a valid reporter identifier. + :return: the error ticket document. + """ + + try: + response = self.data_storage.get_by_reporter( + ticket_error_id = ticket_error_id, + reporter_id = created_by + ) + + if response.empty(): + self.logger.debug(f'Could not get error ticket for `{ticket_error_id}` created by `{created_by}`') + + document = next(response, None) + + return document + + except TicketStorageGetException as e: + self.logger.error(f'Could not get ticket for `{ticket_error_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketErrorStorage() diff --git a/src/piracyshield_service/ticket/error/get_by_ticket.py b/src/piracyshield_service/ticket/error/get_by_ticket.py new file mode 100644 index 0000000..096438e --- /dev/null +++ b/src/piracyshield_service/ticket/error/get_by_ticket.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.error.storage import TicketErrorStorage, TicketErrorStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketErrorGetByTicketService(BaseService): + + """ + Returns the error tickets by ticket identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + :param ticket_id: a valid ticket identifier. + :return: list of error tickets identifiers. + """ + + try: + response = self.data_storage.get_by_ticket( + ticket_id = ticket_id + ) + + return list(response.batch()) + + except TicketStorageGetException as e: + self.logger.error(f'Could not get tickets for `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketErrorStorage() diff --git a/src/piracyshield_service/ticket/errors.py b/src/piracyshield_service/ticket/errors.py new file mode 100644 index 0000000..1945648 --- /dev/null +++ b/src/piracyshield_service/ticket/errors.py @@ -0,0 +1,76 @@ + +class TicketErrorCode: + + GENERIC = '4000' + + NO_DATA = '4001' + + NON_VALID_TICKET_IDENTIFIER = '4002' + + MISSING_DDA_IDENTIFIER = '4003' + + NON_VALID_DDA_IDENTIFIER = '4004' + + UNKNOWN_DDA_IDENTIFIER = '4005' + + NON_VALID_DESCRIPTION = '4006' + + MISSING_FQDN = '4007' + + NON_VALID_FQDN = '4008' + + MISSING_IPV4 = '4009' + + NON_VALID_IPV4 = '4010' + + MISSING_IPV6 = '4011' + + NON_VALID_IPV6 = '4012' + + NON_VALID_ASSIGNED_TO = '4013' + + NON_EXISTENT_ASSIGNED_TO = '4014' + + REVOKE_TIME_EXCEEDED = '4015' + + REPORT_ERROR_TIME_EXCEEDED = '4016' + + TICKET_NOT_FOUND = '4017' + +class TicketErrorMessage: + + GENERIC = 'Error during the handling of the ticket.' + + NO_DATA = 'No data provided.' + + NON_VALID_TICKET_IDENTIFIER = 'Non valid ticket identifier.' + + MISSING_DDA_IDENTIFIER = 'Missing DDA identifier.' + + NON_VALID_DDA_IDENTIFIER = 'Non valid DDA identifier.' + + UNKNOWN_DDA_IDENTIFIER = 'The DDA identifier does not exist or not assigned to this account.' + + NON_VALID_DESCRIPTION = 'The description should be a string between 3 and 255 characters.' + + MISSING_FQDN = 'Missing FQDN list.' + + NON_VALID_FQDN = 'Non valid FQDN.' + + MISSING_IPV4 = 'Missing IPv4 list.' + + NON_VALID_IPV4 = 'Non valid IPv4.' + + MISSING_IPV6 = 'Missing IPv6 list.' + + NON_VALID_IPV6 = 'Non valid IPv6.' + + NON_VALID_ASSIGNED_TO = 'Non valid assigned identifier.' + + NON_EXISTENT_ASSIGNED_TO = 'One or more providers indicated in `assigned_to` does not exist.' + + REVOKE_TIME_EXCEEDED = 'Cannot remove the ticket, exceeded max revoke time.' + + REPORT_ERROR_TIME_EXCEEDED = 'Cannot create the ticket, exceeded max error reporting time.' + + TICKET_NOT_FOUND = 'Ticket not found.' diff --git a/src/piracyshield_service/ticket/exists_by_identifier.py b/src/piracyshield_service/ticket/exists_by_identifier.py new file mode 100644 index 0000000..da2916c --- /dev/null +++ b/src/piracyshield_service/ticket/exists_by_identifier.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketExistsByIdentifierService(BaseService): + + """ + Checks if there's a ticket with this identifier. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + try: + response = self.data_storage.exists_by_identifier( + ticket_id = ticket_id + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except TicketStorageGetException as e: + self.logger.error(f'Could not verify if a ticket exists with the identifier `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get.py b/src/piracyshield_service/ticket/get.py new file mode 100644 index 0000000..4ad81ee --- /dev/null +++ b/src/piracyshield_service/ticket/get.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetService(BaseService): + + """ + Ticket management class. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + try: + response = self.data_storage.get(ticket_id) + + if response.empty(): + self.logger.debug(f'No ticket found for `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.TICKET_NOT_FOUND, TicketErrorMessage.TICKET_NOT_FOUND) + + document = next(response, None) + + return document + + except TicketStorageGetException as e: + self.logger.error(f'Could not get ticket `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_all.py b/src/piracyshield_service/ticket/get_all.py new file mode 100644 index 0000000..1f2b17b --- /dev/null +++ b/src/piracyshield_service/ticket/get_all.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetAllService(BaseService): + + """ + Returns every ticket without any status filter. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> list | Exception: + try: + response = self.data_storage.get_all() + + if response.empty(): + self.logger.debug(f'No ticket found') + + return list(response.batch()) + + except TicketStorageGetException as e: + self.logger.error(f'Could not get tickets') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_all_by_provider.py b/src/piracyshield_service/ticket/get_all_by_provider.py new file mode 100644 index 0000000..a0b4e12 --- /dev/null +++ b/src/piracyshield_service/ticket/get_all_by_provider.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetAllByProviderService(BaseService): + + """ + Returns only the tickets assigned to the specified provider account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + """ + :param account_id: the identifier of the account which created the tickets. + :return: list of requested data. + """ + + try: + response = self.data_storage.get_all_provider(account_id) + + if response.empty(): + self.logger.debug(f'No ticket found') + + return list(response.batch()) + + except TicketStorageGetException as e: + self.logger.error(f'Could not get tickets for `{account_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_all_by_reporter.py b/src/piracyshield_service/ticket/get_all_by_reporter.py new file mode 100644 index 0000000..fbc2aae --- /dev/null +++ b/src/piracyshield_service/ticket/get_all_by_reporter.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetAllByReporterService(BaseService): + + """ + Returns only the tickets created by the specified reporter account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> bool | Exception: + """ + Returns only the tickets created by the specified account. + + :param account_id: the identifier of the account which created the tickets. + :return: list of requested data. + """ + + try: + response = self.data_storage.get_all_reporter(account_id) + + if response.empty(): + self.logger.debug(f'No ticket found') + + return list(response.batch()) + + except TicketStorageGetException as e: + self.logger.error(f'Could not get tickets for `{account_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_by_provider.py b/src/piracyshield_service/ticket/get_by_provider.py new file mode 100644 index 0000000..c7c291b --- /dev/null +++ b/src/piracyshield_service/ticket/get_by_provider.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetByProviderService(BaseService): + + """ + Returns a ticket readable by the provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> dict | Exception: + try: + response = self.data_storage.get_provider(ticket_id, account_id) + + if response.empty(): + self.logger.debug(f'No ticket found for `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.TICKET_NOT_FOUND, TicketErrorMessage.TICKET_NOT_FOUND) + + document = next(response, None) + + return document + + except TicketStorageGetException as e: + self.logger.error(f'Could not get ticket `{ticket_id}` for `{account_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_by_reporter.py b/src/piracyshield_service/ticket/get_by_reporter.py new file mode 100644 index 0000000..49af814 --- /dev/null +++ b/src/piracyshield_service/ticket/get_by_reporter.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetByReporterService(BaseService): + + """ + Returns a ticket created by a reporter account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> dict | Exception: + try: + response = self.data_storage.get_reporter(ticket_id, account_id) + + if response.empty(): + self.logger.debug(f'No ticket found for `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.TICKET_NOT_FOUND, TicketErrorMessage.TICKET_NOT_FOUND) + + document = next(response, None) + + return document + + except TicketStorageGetException as e: + self.logger.error(f'Could not get ticket `{ticket_id}` for `{account_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/get_total.py b/src/piracyshield_service/ticket/get_total.py new file mode 100644 index 0000000..bd82f74 --- /dev/null +++ b/src/piracyshield_service/ticket/get_total.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketGetTotalService(BaseService): + + """ + Returns the tickets count. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> int | Exception: + try: + return self.data_storage.get_total() + + except TicketStorageGetException as e: + self.logger.error(f'Could not get total count of tickets') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/has_dda_id.py b/src/piracyshield_service/ticket/has_dda_id.py new file mode 100644 index 0000000..d9dcd87 --- /dev/null +++ b/src/piracyshield_service/ticket/has_dda_id.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketHasDDAIdService(BaseService): + + """ + Checks wether a ticket has a DDA identifier assigned. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, dda_id: str) -> list | Exception: + try: + response = self.data_storage.has_dda_id( + dda_id = dda_id + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except TicketStorageGetException as e: + self.logger.error(f'Could not verify if a ticket has a DDA identifier assigned') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() diff --git a/src/piracyshield_service/ticket/item/__init__.py b/src/piracyshield_service/ticket/item/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/item/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/item/create.py b/src/piracyshield_service/ticket/item/create.py new file mode 100644 index 0000000..4173552 --- /dev/null +++ b/src/piracyshield_service/ticket/item/create.py @@ -0,0 +1,143 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.item.model import TicketItemModel + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageCreateException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemCreateService(BaseService): + + """ + Creates a new ticket item. + """ + + data_model = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, + ticket_id: str, + ticket_item_id: str, + provider_id: str, + value: str, + genre: str, + is_active: bool, + is_duplicate: bool, + is_whitelisted: bool, + is_error: bool + ) -> bool | Exception: + """ + :param ticket_id: ticket identifier associated to the ticket item. + :param ticket_item_id: random generated identifier. + :param provider_id: account identifier that will handle this ticket item. + :param value: a valid FQDN or IPv4. + :param genre: FQDN or IPv4 type. + :return + """ + + model = self._validate_parameters( + ticket_id = ticket_id, + ticket_item_id = ticket_item_id, + value = value, + genre = genre, + provider_id = provider_id, + is_active = is_active, + is_duplicate = is_duplicate, + is_whitelisted = is_whitelisted, + is_error = is_error + ) + + document = self._build_document( + model = model, + now = Time.now_iso8601() + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except TicketItemStorageCreateException as e: + self.logger.error(f'Could not create the ticket item `{document.get("value")}` for `{document.get("ticket_id")}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + self.logger.info(f'Ticket item `{document.get("value")}` created for ticket `{document.get("ticket_id")}`') + + return True + + def _build_document(self, model: dict, now: str) -> dict: + return { + 'ticket_id': model.get('ticket_id'), + 'ticket_item_id': model.get('ticket_item_id'), + 'provider_id': model.get('provider_id'), + 'value': model.get('value'), + 'genre': model.get('genre'), + 'status': model.get('status'), + 'is_active': model.get('is_active'), + 'is_duplicate': model.get('is_duplicate'), + 'is_whitelisted': model.get('is_whitelisted'), + 'is_error': model.get('is_error'), + 'settings': model.get('settings'), + 'metadata': { + 'created_at': now, + 'updated_at': now + } + } + + def _schedule_task(self): + pass + + def _validate_parameters(self, + ticket_id: str, + ticket_item_id: str, + provider_id: str, + value: str, + genre: str, + is_active: bool, + is_duplicate: bool, + is_whitelisted: bool, + is_error: bool + ): + try: + model = self.data_model( + ticket_id = ticket_id, + ticket_item_id = ticket_item_id, + provider_id = provider_id, + value = value, + genre = genre, + is_active = is_active, + is_duplicate = is_duplicate, + is_whitelisted = is_whitelisted, + is_error = is_error + ) + + return model.to_dict() + + # this has been already validated by the ticket service, but better safe than sorry + except Exception as e: + self.logger.error(f'Could not create the ticket item `{value}` for `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = TicketItemModel + + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/errors.py b/src/piracyshield_service/ticket/item/errors.py new file mode 100644 index 0000000..660516d --- /dev/null +++ b/src/piracyshield_service/ticket/item/errors.py @@ -0,0 +1,48 @@ + +class TicketItemErrorCode: + + GENERIC = '5000' + + TICKET_ITEM_NOT_FOUND = '5001' + + TICKET_ITEM_PROVIDER_ID_MISSING = '5002' + + TICKET_ITEM_PROVIDER_ID_NON_VALID = '5003' + + TICKET_ITEM_VALUE_MISSING = '5004' + + TICKET_ITEM_VALUE_NON_VALID = '5005' + + TICKET_ITEM_TIMESTAMP_NON_VALID = '5006' + + TICKET_ITEM_NOTE_NON_VALID = '5007' + + TICKET_ITEM_REASON_MISSING = '5008' + + TICKET_ITEM_REASON_NON_VALID = '5009' + + TICKET_ITEM_UPDATE_TIME_EXCEEDED = '5010' + +class TicketItemErrorMessage: + + GENERIC = 'Error during the creation of the ticket item.' + + TICKET_ITEM_NOT_FOUND = 'Ticket item not found.' + + TICKET_ITEM_PROVIDER_ID_MISSING = 'Missing provider identifier.' + + TICKET_ITEM_PROVIDER_ID_NON_VALID = 'Non valid provider identifier.' + + TICKET_ITEM_VALUE_MISSING = 'Missing ticket item value.' + + TICKET_ITEM_VALUE_NON_VALID = 'Non valid ticket item value.' + + TICKET_ITEM_TIMESTAMP_NON_VALID = 'Non valid timestamp.' + + TICKET_ITEM_NOTE_NON_VALID = 'Non valid note.' + + TICKET_ITEM_REASON_MISSING = 'Missing unprocessed reason.' + + TICKET_ITEM_REASON_NON_VALID = 'Non valid unprocessed reason.' + + TICKET_ITEM_UPDATE_TIME_EXCEEDED = 'Cannot update the ticket item: max update time has been exceeded.' diff --git a/src/piracyshield_service/ticket/item/exists_by_value.py b/src/piracyshield_service/ticket/item/exists_by_value.py new file mode 100644 index 0000000..cb740ba --- /dev/null +++ b/src/piracyshield_service/ticket/item/exists_by_value.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemExistsByValueService(BaseService): + + """ + Checks wether a ticket item exists. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, genre: str, value: str) -> list | Exception: + try: + response = self.data_storage.exists_by_value( + genre = genre, + value = value + ) + + return list(response.batch()) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not verify if ticket item exists') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/__init__.py b/src/piracyshield_service/ticket/item/fqdn/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all.py b/src/piracyshield_service/ticket/item/fqdn/get_all.py new file mode 100644 index 0000000..b18d698 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllService(BaseService): + + """ + Returns all the tickets' FQDN items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> dict | Exception: + """ + Get all the FQDN items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre(genre = 'fqdn') + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket FQDNs') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_provider.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_provider.py new file mode 100644 index 0000000..8a92ee8 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_provider.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByProviderService(BaseService): + + """ + Returns all the FQDN elements assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + """ + Get all the FQDN items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_provider(genre = 'fqdn', provider_id = account_id) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket FQDNs') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket.py new file mode 100644 index 0000000..0156dee --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByTicketService(BaseService): + + """ + Returns the FQDN list of a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get all the FQDN items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket( + ticket_id = ticket_id, + genre = 'fqdn' + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the FQDN items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum.py new file mode 100644 index 0000000..707c8e2 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.fqdn.get_all_by_ticket import TicketItemFQDNGetAllByTicketService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByTicketChecksumService(BaseService): + + """ + Returns the checksum of the FQDN list of a ticket. + """ + + checksum = None + + ticket_item_fqdn_get_all_by_ticket_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get the checksum of all the FQDN items by ticket_id. + + :return + """ + + response = self.ticket_item_fqdn_get_all_by_ticket_service.execute( + ticket_id = ticket_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for FQDN for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_fqdn_get_all_by_ticket_service = TicketItemFQDNGetAllByTicketService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum_for_provider.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum_for_provider.py new file mode 100644 index 0000000..651d5a8 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_checksum_for_provider.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.fqdn.get_all_by_ticket_for_provider import TicketItemFQDNGetAllByTicketForProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByTicketChecksumForProviderService(BaseService): + + """ + Returns the checksum of the FQDN list of a ticket assigned to a provider. + """ + + checksum = None + + ticket_item_fqdn_get_all_by_ticket_for_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get the checksum of all the FQDN items by ticket_id. + + :return + """ + + response = self.ticket_item_fqdn_get_all_by_ticket_for_provider_service.execute( + ticket_id = ticket_id, + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for FQDN for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_fqdn_get_all_by_ticket_for_provider_service = TicketItemFQDNGetAllByTicketForProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_provider.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_provider.py new file mode 100644 index 0000000..2f4a68b --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_provider.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByTicketForProviderService(BaseService): + + """ + Returns the FQDN list of a ticket assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the FQDN items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_provider( + ticket_id = ticket_id, + genre = 'fqdn', + provider_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the FQDN items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_reporter.py b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_reporter.py new file mode 100644 index 0000000..5330d7c --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_by_ticket_for_reporter.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllByTicketForReporterService(BaseService): + + """ + Returns the FQDN items of a ticket created by a reporter account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_reporter( + ticket_id = ticket_id, + genre = 'fqdn', + reporter_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the FQDN items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_checksum.py b/src/piracyshield_service/ticket/item/fqdn/get_all_checksum.py new file mode 100644 index 0000000..f128662 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_checksum.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.fqdn.get_all import TicketItemFQDNGetAllService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllChecksumService(BaseService): + + """ + Returns the checksum of all the tickets' FQDN lists. + """ + + checksum = None + + ticket_item_fqdn_get_all_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> dict | Exception: + """ + Get the checksum of all the FQDN items in the database. + + :return + """ + + response = self.ticket_item_fqdn_get_all_service.execute() + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for FQDNs') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_fqdn_get_all_service = TicketItemFQDNGetAllService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_all_checksum_by_provider.py b/src/piracyshield_service/ticket/item/fqdn/get_all_checksum_by_provider.py new file mode 100644 index 0000000..ba20ab9 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_all_checksum_by_provider.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.fqdn.get_all_by_provider import TicketItemFQDNGetAllByProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetAllChecksumByProviderService(BaseService): + + """ + Returns the checksum of all the tickets' FQDN lists assigned to a provider. + """ + + checksum = None + + ticket_item_fqdn_get_all_by_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> str | Exception: + """ + Get the checksum of all the FQDN items in the database. + + :return + """ + + response = self.ticket_item_fqdn_get_all_by_provider_service.execute( + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for FQDNs') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_fqdn_get_all_by_provider_service = TicketItemFQDNGetAllByProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_processed_by_ticket.py b/src/piracyshield_service/ticket/item/fqdn/get_processed_by_ticket.py new file mode 100644 index 0000000..cc5d75d --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_processed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetProcessedByTicketService(BaseService): + + """ + Returns the processed FQDN ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the processed FQDN items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.FQDN.value, + status = TicketItemStatusModel.PROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No processed FQDN ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the procesed FQDN items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/fqdn/get_unprocessed_by_ticket.py b/src/piracyshield_service/ticket/item/fqdn/get_unprocessed_by_ticket.py new file mode 100644 index 0000000..94c7a90 --- /dev/null +++ b/src/piracyshield_service/ticket/item/fqdn/get_unprocessed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemFQDNGetUnprocessedByTicketService(BaseService): + + """ + Returns the unprocessed FQDN ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the unprocessed FQDN items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.FQDN.value, + status = TicketItemStatusModel.UNPROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No unprocessed FQDN ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the unprocesed FQDN items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get.py b/src/piracyshield_service/ticket/item/get.py new file mode 100644 index 0000000..2b8e8db --- /dev/null +++ b/src/piracyshield_service/ticket/item/get.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetService(BaseService): + + """ + Returns a single ticket item. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, value: str) -> dict | Exception: + try: + response = self.data_storage.get(ticket_id, value) + + if response.empty(): + self.logger.debug(f'No ticket item found for `{ticket_id}` value `{value}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + document = next(response, None) + + return document + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get the ticket item `{value}` for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_all.py b/src/piracyshield_service/ticket/item/get_all.py new file mode 100644 index 0000000..2479e00 --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_all.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetAllService(BaseService): + + """ + Returns all the ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + try: + response = self.data_storage.get_all(ticket_id) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_all_by_provider.py b/src/piracyshield_service/ticket/item/get_all_by_provider.py new file mode 100644 index 0000000..32d1c92 --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_all_by_provider.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetAllByProviderService(BaseService): + + """ + Returns all the ticket items assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, provider_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_by_provider( + provider_id = provider_id, + ticket_id = ticket_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket items for ticket `{ticket_id}` for account `{provider_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_all_status.py b/src/piracyshield_service/ticket/item/get_all_status.py new file mode 100644 index 0000000..dfb752e --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_all_status.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetAllStatusService(BaseService): + + """ + Returns the statuses of ticket items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_status(ticket_id) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No ticket item found') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get the statuses of ticket items by ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_available_by_ticket.py b/src/piracyshield_service/ticket/item/get_available_by_ticket.py new file mode 100644 index 0000000..5a7d139 --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_available_by_ticket.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetAvailableByTicketService(BaseService): + + """ + Gets all the ticket items that aren't a duplicate, whitelisted or errors. + + This is needed by the error ticket to compare each requested item with the truely available data. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_items_available_by_ticket( + ticket_id = ticket_id, + account_id = account_id + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No ticket item found') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the available ticket items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_by_value.py b/src/piracyshield_service/ticket/item/get_by_value.py new file mode 100644 index 0000000..36e9dc9 --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_by_value.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetByValueService(BaseService): + + """ + Returns a single ticket item by its value. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, provider_id: str, value: str) -> dict | Exception: + try: + response = self.data_storage.get_by_value( + provider_id = provider_id, + value = value + ) + + if response.empty(): + self.logger.debug(f'Could not find a ticket item for value `{value}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + document = next(response, None) + + return document + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get the ticket item `{value}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/get_details.py b/src/piracyshield_service/ticket/item/get_details.py new file mode 100644 index 0000000..7bdb54b --- /dev/null +++ b/src/piracyshield_service/ticket/item/get_details.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemGetDetailsService(BaseService): + + """ + Returns details needed to visualize the statistics of the ticket items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, ticket_item_id: str) -> list | Exception: + try: + response = self.data_storage.get_details(ticket_id, ticket_item_id) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No ticket item found') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get ticket item details for `{ticket_item_id}` by ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/__init__.py b/src/piracyshield_service/ticket/item/ipv4/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all.py b/src/piracyshield_service/ticket/item/ipv4/get_all.py new file mode 100644 index 0000000..12b8b1e --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllService(BaseService): + + """ + Returns all the tickets' IPv4 items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> dict | Exception: + """ + Get all the IPv4 items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre(genre = 'ipv4') + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket IPv4s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_provider.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_provider.py new file mode 100644 index 0000000..7e1dd61 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_provider.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByProviderService(BaseService): + + """ + Returns all the IPv4 elements assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + """ + Get all the IPv4 items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_provider( + genre = 'ipv4', + provider_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket IPv4s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket.py new file mode 100644 index 0000000..7508dab --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByTicketService(BaseService): + + """ + Returns the IPv4 list of a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get all the IPv4 items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket( + ticket_id = ticket_id, + genre = 'ipv4' + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv4 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum.py new file mode 100644 index 0000000..bf88347 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv4.get_all_by_ticket import TicketItemIPv4GetAllByTicketService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByTicketChecksumService(BaseService): + + """ + Returns the checksum of the IPv4 list of a ticket. + """ + + checksum = None + + ticket_item_ipv4_get_all_by_ticket_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get the checksum of all the IPv4 items by ticket_id. + + :return + """ + + response = self.ticket_item_ipv4_get_all_by_ticket_service.execute( + ticket_id = ticket_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv4 for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv4_get_all_by_ticket_service = TicketItemIPv4GetAllByTicketService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum_for_provider.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum_for_provider.py new file mode 100644 index 0000000..e877705 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_checksum_for_provider.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv4.get_all_by_ticket_for_provider import TicketItemIPv4GetAllByTicketForProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByTicketChecksumForProviderService(BaseService): + + """ + Returns the checksum of the IPv4 list of a ticket assigned to a provider. + """ + + checksum = None + + ticket_item_ipv4_get_all_by_ticket_for_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get the checksum of all the IPv4 items by ticket_id. + + :return + """ + + response = self.ticket_item_ipv4_get_all_by_ticket_for_provider_service.execute( + ticket_id = ticket_id, + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv4 for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv4_get_all_by_ticket_for_provider_service = TicketItemIPv4GetAllByTicketForProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_provider.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_provider.py new file mode 100644 index 0000000..0607652 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_provider.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByTicketForProviderService(BaseService): + + """ + Returns the IPv4 list of a ticket assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the IPv4 items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_provider( + ticket_id = ticket_id, + genre = 'ipv4', + provider_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv4 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_reporter.py b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_reporter.py new file mode 100644 index 0000000..f631ad1 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_by_ticket_for_reporter.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllByTicketForReporterService(BaseService): + + """ + Returns the IPv4 items of a ticket created by a reporter account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_reporter( + ticket_id = ticket_id, + genre = 'ipv4', + reporter_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv4 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_checksum.py b/src/piracyshield_service/ticket/item/ipv4/get_all_checksum.py new file mode 100644 index 0000000..7a73a2d --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_checksum.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv4.get_all import TicketItemIPv4GetAllService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllChecksumService(BaseService): + + """ + Returns the checksum of all the tickets' IPv4 lists. + """ + + checksum = None + + ticket_item_ipv4_get_all_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> dict | Exception: + """ + Get the checksum of all the IPv4 items in the database. + + :return + """ + + response = self.ticket_item_ipv4_get_all_service.execute() + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv4s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv4_get_all_service = TicketItemIPv4GetAllService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_all_checksum_by_provider.py b/src/piracyshield_service/ticket/item/ipv4/get_all_checksum_by_provider.py new file mode 100644 index 0000000..afb50b7 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_all_checksum_by_provider.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv4.get_all_by_provider import TicketItemIPv4GetAllByProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetAllChecksumByProviderService(BaseService): + + """ + Returns the checksum of all the tickets' IPv4 lists assigned to a provider. + """ + + checksum = None + + ticket_item_ipv4_get_all_by_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> str: + """ + Get the checksum of all the IPv4 items in the database. + + :return + """ + + response = self.ticket_item_ipv4_get_all_by_provider_service.execute( + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv4s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv4_get_all_by_provider_service = TicketItemIPv4GetAllByProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_processed_by_ticket.py b/src/piracyshield_service/ticket/item/ipv4/get_processed_by_ticket.py new file mode 100644 index 0000000..6d8097c --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_processed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetProcessedByTicketService(BaseService): + + """ + Returns the processed IPv4 ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the processed IPv4 items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.IPV4.value, + status = TicketItemStatusModel.PROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No processed IPv4 ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the procesed IPv4 items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv4/get_unprocessed_by_ticket.py b/src/piracyshield_service/ticket/item/ipv4/get_unprocessed_by_ticket.py new file mode 100644 index 0000000..eff0d63 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv4/get_unprocessed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv4GetUnprocessedByTicketService(BaseService): + + """ + Returns the unprocessed IPv4 ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the unprocessed IPv4 items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.IPV4.value, + status = TicketItemStatusModel.UNPROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No unprocessed IPv4 ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the procesed IPv4 items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/__init__.py b/src/piracyshield_service/ticket/item/ipv6/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all.py b/src/piracyshield_service/ticket/item/ipv6/get_all.py new file mode 100644 index 0000000..6bf8de4 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllService(BaseService): + + """ + Returns all the tickets' IPv6 items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> dict | Exception: + """ + Get all the IPv6 items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre(genre = 'ipv6') + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket IPv6s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_provider.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_provider.py new file mode 100644 index 0000000..b04a325 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_provider.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByProviderService(BaseService): + + """ + Returns all the IPv6 elements assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + """ + Get all the IPv6 items in the database. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_provider( + genre = 'ipv6', + provider_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the ticket IPv4s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket.py new file mode 100644 index 0000000..65de8bb --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByTicketService(BaseService): + + """ + Returns the IPv6 list of a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get all the IPv6 items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket( + ticket_id = ticket_id, + genre = 'ipv6' + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv6 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum.py new file mode 100644 index 0000000..0f3ae35 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByTicketChecksumService(BaseService): + + """ + Returns the checksum of the IPv6 list of a ticket. + """ + + checksum = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> list | Exception: + """ + Get the checksum of all the IPv6 items by ticket_id. + + :return + """ + + response = self.get_ipv6_all_by_ticket(ticket_id) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv6 for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum_for_provider.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum_for_provider.py new file mode 100644 index 0000000..eab7e61 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_checksum_for_provider.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv6.get_all_by_ticket_for_provider import TicketItemIPv6GetAllByTicketForProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByTicketChecksumForProviderService(BaseService): + + """ + Returns the checksum of the IPv6 list of a ticket assigned to a provider. + """ + + checksum = None + + ticket_item_ipv6_get_all_by_ticket_for_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get the checksum of all the IPv6 items by ticket_id. + + :return + """ + + response = self.ticket_item_ipv6_get_all_by_ticket_for_provider_service.execute( + ticket_id = ticket_id, + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv6 for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv6_get_all_by_ticket_for_provider_service = TicketItemIPv6GetAllByTicketForProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_provider.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_provider.py new file mode 100644 index 0000000..27a2c07 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_provider.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByTicketForProviderService(BaseService): + + """ + Returns the IPv6 list of a ticket assigned to a provider. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the IPv6 items by ticket_id. + + :return + """ + + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_provider( + ticket_id = ticket_id, + genre = 'ipv6', + provider_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv6 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_reporter.py b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_reporter.py new file mode 100644 index 0000000..0c14d6c --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_by_ticket_for_reporter.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllByTicketForReporterService(BaseService): + + """ + Returns the IPv6 items of a ticket created by a reporter account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all_items_with_genre_by_ticket_for_reporter( + ticket_id = ticket_id, + genre = 'ipv6', + reporter_id = account_id + ) + + batch = response.batch() + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the IPv6 items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_checksum.py b/src/piracyshield_service/ticket/item/ipv6/get_all_checksum.py new file mode 100644 index 0000000..e949cf6 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_checksum.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv6.get_all import TicketItemIPv6GetAllService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllChecksumService(BaseService): + + """ + Returns the checksum of all the tickets' IPv6 lists. + """ + + checksum = None + + ticket_item_ipv6_get_all_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> dict | Exception: + """ + Get the checksum of all the IPv6 items in the database. + + :return + """ + + response = self.ticket_item_ipv6_get_all_service.execute() + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv6s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv6_get_all_service = TicketItemIPv6GetAllService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_all_checksum_by_provider.py b/src/piracyshield_service/ticket/item/ipv6/get_all_checksum_by_provider.py new file mode 100644 index 0000000..46e2171 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_all_checksum_by_provider.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.checksum import Checksum +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.ipv6.get_all_by_provider import TicketItemIPv6GetAllByProviderService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetAllChecksumByProviderService(BaseService): + + """ + Returns the checksum of all the tickets' IPv6 lists assigned to a provider. + """ + + checksum = None + + ticket_item_ipv6_get_all_by_provider_service = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> str: + """ + Get the checksum of all the IPv6 items in the database. + + :return + """ + + response = self.ticket_item_ipv6_get_all_by_provider_service.execute( + account_id = account_id + ) + + data = '\n'.join(response) + + try: + return self.checksum.from_string( + algorithm = 'sha256', + string = data + ) + + except ChecksumUnicodeException as e: + self.logger.error(f'Could not generate the checksum for IPv6s') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_ipv6_get_all_by_provider_service = TicketItemIPv6GetAllByProviderService() + + self.checksum = Checksum() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_processed_by_ticket.py b/src/piracyshield_service/ticket/item/ipv6/get_processed_by_ticket.py new file mode 100644 index 0000000..10814fa --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_processed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetProcessedByTicketService(BaseService): + + """ + Returns the processed IPv6 ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the processed IPv6 items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.IPV6.value, + status = TicketItemStatusModel.PROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No processed IPv6 ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the procesed IPv6 items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/ipv6/get_unprocessed_by_ticket.py b/src/piracyshield_service/ticket/item/ipv6/get_unprocessed_by_ticket.py new file mode 100644 index 0000000..ea77b76 --- /dev/null +++ b/src/piracyshield_service/ticket/item/ipv6/get_unprocessed_by_ticket.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageGetException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemIPv6GetUnprocessedByTicketService(BaseService): + + """ + Returns the unprocessed IPv6 ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, account_id: str) -> list | Exception: + """ + Get all the unprocessed IPv6 items, of a specific ticket id, assigned to the account identifier. + + :param ticket_id: main ticket identifier. + :param account_id: identifier of a provider. + :return + """ + + try: + response = self.data_storage.get_all_ticket_items_by( + ticket_id = ticket_id, + account_id = account_id, + genre = TicketItemGenreModel.IPV6.value, + status = TicketItemStatusModel.UNPROCESSED.value + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No unprocessed IPv6 ticket item found for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + return list(batch) + + except TicketItemStorageGetException as e: + self.logger.error(f'Could not get all the procesed IPv6 items for ticket `{ticket_id}` for account `{account_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/remove_all.py b/src/piracyshield_service/ticket/item/remove_all.py new file mode 100644 index 0000000..d10c1d7 --- /dev/null +++ b/src/piracyshield_service/ticket/item/remove_all.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageRemoveException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemRemoveAllService(BaseService): + + """ + Removes all the ticket items in a ticket. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + try: + # remove all the ticket items + self.data_storage.remove_all(ticket_id) + + except TicketItemStorageRemoveException as e: + self.logger.error(f'Could not remove all the ticket items for ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + return True + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/set_flag_active.py b/src/piracyshield_service/ticket/item/set_flag_active.py new file mode 100644 index 0000000..0c1c0e3 --- /dev/null +++ b/src/piracyshield_service/ticket/item/set_flag_active.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageUpdateException + +from piracyshield_service.log.ticket.item.create import LogTicketItemCreateService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemSetFlagActiveService(BaseService): + + """ + Sets the flags as active or not. + + This removes the ticket item from the list of the ticket items to block by the providers. + """ + + log_ticket_item_create_service = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, internal_id: str, value: str, status: bool) -> bool | Exception: + """ + Set the blocking activity status. + This will exclude the ticket item from the list that any provider can get. + + :param internal_id: the associated internal id. + :param value: the value of the ticket item. + :param status: true/false if status is active or not. + :return + """ + + # TODO: validate status. + + try: + affected_rows = self.data_storage.set_flag_active( + value = value, + status = status + ) + + if not len(affected_rows): + self.logger.debug(f'Could not set active flag for requested ticket item `{value}`, requested by {internal_id}') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + # TODO: log operation. + + self.logger.debug(f'Ticket item active flag set to `{status}` for `{value}` by `{internal_id}`') + + return True + + except TicketItemStorageUpdateException as e: + self.logger.error(f'Could not update the ticket item `{value}` with status `{status}` for account `{internal_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() + + self.log_ticket_item_create_service = LogTicketItemCreateService() diff --git a/src/piracyshield_service/ticket/item/set_flag_error.py b/src/piracyshield_service/ticket/item/set_flag_error.py new file mode 100644 index 0000000..40ca2ca --- /dev/null +++ b/src/piracyshield_service/ticket/item/set_flag_error.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageUpdateException + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemSetFlagErrorService(BaseService): + + """ + Flags a ticket item as error. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, value: str, status: bool) -> bool | Exception: + """ + :param ticket_id: a valid ticket identifier. + :param value: the value of the ticket item. + :param: status: true or false if error or not. + :return: true if everything is correct. + """ + + # TODO: validate status. + + try: + affected_rows = self.data_storage.set_flag_error( + ticket_id = ticket_id, + value = value, + status = status + ) + + if not len(affected_rows): + self.logger.debug(f'Could not set error flag for requested ticket item `{value}`, ticket `{ticket_id}`') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + # TODO: log operation. + + self.logger.debug(f'Ticket item error flag set to `{status}` for ticket item `{value}`, ticket `{ticket_id}`') + + return True + + except TicketItemStorageUpdateException as e: + self.logger.error(f'Could not set error flag for requested ticket item `{value}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketItemStorage() diff --git a/src/piracyshield_service/ticket/item/set_processed.py b/src/piracyshield_service/ticket/item/set_processed.py new file mode 100644 index 0000000..46ef6a9 --- /dev/null +++ b/src/piracyshield_service/ticket/item/set_processed.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.item.processed.model import ( + TicketItemProcessedModel, + TicketItemProcessedModelProviderIdentifierMissingException, + TicketItemProcessedModelProviderIdentifierNonValidException, + TicketItemProcessedModelValueMissingException, + TicketItemProcessedModelValueNonValidException, + TicketItemProcessedModelTimestampNonValidException, + TicketItemProcessedModelNoteNonValidException +) + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageUpdateException + +from piracyshield_service.ticket.item.get_by_value import TicketItemGetByValueService + +from piracyshield_service.log.ticket.create import LogTicketCreateService +from piracyshield_service.log.ticket.item.create import LogTicketItemCreateService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemSetProcessedService(BaseService): + + """ + Sets the ticket item as successfully processed. + """ + + log_ticket_item_create_service = None + + log_ticket_create_service = None + + ticket_item_get_by_value_service = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, provider_id: str, value: str, timestamp: str = None, note: str = None) -> bool | Exception: + """ + Sets the item status with `PROCESSED`. + + :param provider_id: the associated provider id. + :param value: the value of the ticket item. + :param timestamp: optional valid ISO8601 date. + :param note: optional string. + :return + """ + + model = self._validate_parameters( + provider_id = provider_id, + value = value, + timestamp = timestamp, + note = note + ) + + ticket_item_data = self.ticket_item_get_by_value_service.execute( + provider_id = provider_id, + value = value + ) + + # check if ticket item update time is expired + if Time.is_expired( + ticket_item_data.get('metadata').get('created_at'), + expiration_time = ticket_item_data.get('settings').get('update_max_time') + ) == True: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_UPDATE_TIME_EXCEEDED, TicketItemErrorMessage.TICKET_ITEM_UPDATE_TIME_EXCEEDED) + + try: + affected_rows = self.data_storage.update_status_by_value( + provider_id = model.get('provider_id'), + value = model.get('value'), + status = model.get('status'), + updated_at = Time.now_iso8601(), + timestamp = model.get('timestamp'), + note = model.get('note') + ) + + if not len(affected_rows): + self.logger.debug(f'No ticket item found for `{value}` requested by {provider_id}') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + ticket_item = list(affected_rows).__getitem__(0) + + # log on parent ticket level + self.log_ticket_create_service.execute( + ticket_id = ticket_item.get('ticket_id'), + message = f'Updated {value} status to `{model.get("status")}` by `{provider_id}`.' + ) + + # log on a ticket item level + self.log_ticket_item_create_service.execute( + ticket_item_id = ticket_item.get('ticket_item_id'), + message = f'Updated with status to `{model.get("status")}` by `{provider_id}`.' + ) + + self.logger.debug(f'Status `{model.get("status")}` set for {value} by {provider_id}') + + return True + + except TicketItemStorageUpdateException as e: + self.logger.error(f'Could not update the ticket item `{value}` for account `{provider_id}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _validate_parameters(self, provider_id: str, value: str, timestamp: str = None, note: str = None): + try: + model = self.data_model( + provider_id = provider_id, + value = value, + timestamp = timestamp, + note = note + ) + + return model.to_dict() + + except TicketItemProcessedModelProviderIdentifierMissingException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_PROVIDER_ID_MISSING, TicketItemErrorMessage.TICKET_ITEM_PROVIDER_ID_MISSING) + + except TicketItemProcessedModelProviderIdentifierNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_PROVIDER_ID_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_PROVIDER_ID_NON_VALID) + + except TicketItemProcessedModelValueMissingException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_VALUE_MISSING, TicketItemErrorMessage.TICKET_ITEM_VALUE_MISSING) + + except TicketItemProcessedModelValueNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_VALUE_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_VALUE_NON_VALID) + + except TicketItemProcessedModelTimestampNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_TIMESTAMP_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_TIMESTAMP_NON_VALID) + + except TicketItemProcessedModelNoteNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOTE_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_NOTE_NON_VALID) + + def _schedule_task(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = TicketItemProcessedModel + + self.data_storage = TicketItemStorage() + + self.ticket_item_get_by_value_service = TicketItemGetByValueService() + + self.log_ticket_create_service = LogTicketCreateService() + + self.log_ticket_item_create_service = LogTicketItemCreateService() diff --git a/src/piracyshield_service/ticket/item/set_unprocessed.py b/src/piracyshield_service/ticket/item/set_unprocessed.py new file mode 100644 index 0000000..4a05c89 --- /dev/null +++ b/src/piracyshield_service/ticket/item/set_unprocessed.py @@ -0,0 +1,173 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.item.unprocessed.model import ( + TicketItemUnprocessedModel, + TicketItemUnprocessedModelProviderIdentifierMissingException, + TicketItemUnprocessedModelProviderIdentifierNonValidException, + TicketItemUnprocessedModelValueMissingException, + TicketItemUnprocessedModelValueNonValidException, + TicketItemUnprocessedModelReasonMissingException, + TicketItemUnprocessedModelReasonNonValidException, + TicketItemUnprocessedModelTimestampNonValidException, + TicketItemUnprocessedModelNoteNonValidException +) + +from piracyshield_data_storage.ticket.item.storage import TicketItemStorage, TicketItemStorageUpdateException + +from piracyshield_service.ticket.item.get_by_value import TicketItemGetByValueService + +from piracyshield_service.log.ticket.create import LogTicketCreateService +from piracyshield_service.log.ticket.item.create import LogTicketItemCreateService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketItemSetUnprocessedService(BaseService): + + """ + Sets the ticket item as non processed. + """ + + log_ticket_item_create_service = None + + log_ticket_create_service = None + + ticket_item_get_by_value_service = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, provider_id: str, value: str, reason: str, timestamp: str = None, note: str = None) -> bool | Exception: + """ + Sets the item status with `UNPROCESSED`. + + :param provider_id: the associated provider id. + :param value: the value of the ticket item. + :param reason: a valid predefined reason. + :param status_reason: reason of unprocessed status. + :return + """ + + model = self._validate_parameters( + provider_id = provider_id, + value = value, + reason = reason, + timestamp = timestamp, + note = note + ) + + ticket_item_data = self.ticket_item_get_by_value_service.execute( + provider_id = provider_id, + value = value + ) + + # check if ticket item update time is expired + if Time.is_expired( + ticket_item_data.get('metadata').get('created_at'), + expiration_time = ticket_item_data.get('settings').get('update_max_time') + ) == True: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_UPDATE_TIME_EXCEEDED, TicketItemErrorMessage.TICKET_ITEM_UPDATE_TIME_EXCEEDED) + + try: + affected_rows = self.data_storage.update_status_by_value( + provider_id = model.get('provider_id'), + value = model.get('value'), + status = model.get('status'), + updated_at = Time.now_iso8601(), + status_reason = model.get('reason'), + timestamp = model.get('timestamp'), + note = model.get('note') + ) + + if not len(affected_rows): + self.logger.debug(f'No ticket item found for `{value}` requested by {provider_id}') + + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOT_FOUND, TicketItemErrorMessage.TICKET_ITEM_NOT_FOUND) + + ticket_item = list(affected_rows).__getitem__(0) + + # log on parent ticket level + self.log_ticket_create_service.execute( + ticket_id = ticket_item.get('ticket_id'), + message = f'Updated {value} status to `{model.get("status")}` (reason: `{reason}`) by `{provider_id}`.' + ) + + # log on a ticket item level + self.log_ticket_item_create_service.execute( + ticket_item_id = ticket_item.get('ticket_item_id'), + message = f'Updated with status to `{model.get("status")}` (reason: `{reason}`) by `{provider_id}`.' + ) + + self.logger.debug(f'Status `{model.get("status")}` set for {value} by {provider_id}') + + return True + + except TicketItemStorageUpdateException as e: + self.logger.error(f'Could not update the ticket item `{value}` for account `{provider_id}` with reason `{reason}`') + + raise ApplicationException(TicketItemErrorCode.GENERIC, TicketItemErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self, provider_id: str, value: str, reason: str, timestamp: str = None, note: str = None): + try: + model = self.data_model( + provider_id = provider_id, + value = value, + reason = reason, + timestamp = timestamp, + note = note + ) + + return model.to_dict() + + except TicketItemUnprocessedModelProviderIdentifierMissingException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_PROVIDER_ID_MISSING, TicketItemErrorMessage.TICKET_ITEM_PROVIDER_ID_MISSING) + + except TicketItemUnprocessedModelProviderIdentifierNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_PROVIDER_ID_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_PROVIDER_ID_NON_VALID) + + except TicketItemUnprocessedModelValueMissingException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_VALUE_MISSING, TicketItemErrorMessage.TICKET_ITEM_VALUE_MISSING) + + except TicketItemUnprocessedModelValueNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_VALUE_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_VALUE_NON_VALID) + + except TicketItemUnprocessedModelReasonMissingException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_REASON_MISSING, TicketItemErrorMessage.TICKET_ITEM_REASON_MISSING) + + except TicketItemUnprocessedModelReasonNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_REASON_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_REASON_NON_VALID) + + except TicketItemUnprocessedModelTimestampNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_TIMESTAMP_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_TIMESTAMP_NON_VALID) + + except TicketItemUnprocessedModelNoteNonValidException: + raise ApplicationException(TicketItemErrorCode.TICKET_ITEM_NOTE_NON_VALID, TicketItemErrorMessage.TICKET_ITEM_NOTE_NON_VALID) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = TicketItemUnprocessedModel + + self.data_storage = TicketItemStorage() + + self.ticket_item_get_by_value_service = TicketItemGetByValueService() + + self.log_ticket_create_service = LogTicketCreateService() + + self.log_ticket_item_create_service = LogTicketItemCreateService() diff --git a/src/piracyshield_service/ticket/relation/__init__.py b/src/piracyshield_service/ticket/relation/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/relation/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/relation/abandon.py b/src/piracyshield_service/ticket/relation/abandon.py new file mode 100644 index 0000000..22b45a8 --- /dev/null +++ b/src/piracyshield_service/ticket/relation/abandon.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_service.ticket.item.remove_all import TicketItemRemoveAllService + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class TicketRelationAbandonService(BaseService): + + """ + Removes the relationship. + """ + + ticket_item_remove_all_service = None + + identifier = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> str | Exception: + self.logger.debug(f'Removing relations for `{ticket_id}`') + + self.ticket_item_remove_all_service.execute(ticket_id) + + self.logger.info(f'Removed all the items for `{ticket_id}`') + + return True + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_remove_all_service = TicketItemRemoveAllService() diff --git a/src/piracyshield_service/ticket/relation/establish.py b/src/piracyshield_service/ticket/relation/establish.py new file mode 100644 index 0000000..3fe5d80 --- /dev/null +++ b/src/piracyshield_service/ticket/relation/establish.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.security.identifier import Identifier +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.ticket.item.genre.model import TicketItemGenreModel + +from piracyshield_service.ticket.item.create import TicketItemCreateService +from piracyshield_service.ticket.item.exists_by_value import TicketItemExistsByValueService + +from piracyshield_service.ticket.error.get_by_ticket import TicketErrorGetByTicketService + +from piracyshield_service.whitelist.exists_by_value import WhitelistExistsByValueService + +from piracyshield_service.ticket.item.errors import TicketItemErrorCode, TicketItemErrorMessage + +class TicketRelationEstablishService(BaseService): + + """ + Builds the relation of a ticket items and assigned providers. + Each ticket item is duplicated and associated to a single provider. + """ + + ticket_item_create_service = None + + whitelist_exists_by_value_service = None + + ticket_error_get_by_ticket_service = None + + ticket_item_exists_by_value_service = None + + identifier = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str, providers: list, fqdn: list = None, ipv4: list = None, ipv6: list = None) -> bool | Exception: + self.logger.debug(f'Establishing relations for `{ticket_id}`') + + fqdn_ticket_items = None + ipv4_ticket_items = None + ipv6_ticket_items = None + + if fqdn: + fqdn_ticket_items = self._establish_relation( + ticket_id = ticket_id, + genre = TicketItemGenreModel.FQDN.value, + items = fqdn, + providers = providers + ) + + if ipv4: + ipv4_ticket_items = self._establish_relation( + ticket_id = ticket_id, + genre = TicketItemGenreModel.IPV4.value, + items = ipv4, + providers = providers + ) + + if ipv6: + ipv6_ticket_items = self._establish_relation( + ticket_id = ticket_id, + genre = TicketItemGenreModel.IPV6.value, + items = ipv6, + providers = providers + ) + + self.logger.info(f'Ticket relations completed') + + return (fqdn_ticket_items, ipv4_ticket_items, ipv6_ticket_items) + + def _establish_relation(self, ticket_id: str, genre: str, items: list, providers: list) -> dict: + ticket_items = [] + + for value in items: + # generate ticket item identifier + ticket_item_id = self._generate_ticket_item_id() + + is_active = True + + is_duplicate = self._is_duplicate( + genre = genre, + value = value + ) + + is_whitelisted = self._is_whitelisted( + value = value + ) + + is_error = False + + for provider_id in providers: + self.ticket_item_create_service.execute( + ticket_id = ticket_id, + ticket_item_id = ticket_item_id, + provider_id = provider_id, + value = value, + genre = genre, + is_active = is_active, + is_duplicate = is_duplicate, + is_whitelisted = is_whitelisted, + is_error = is_error + ) + + ticket_items.append({ + 'value': value, + 'genre': genre, + 'is_active': is_active, + 'is_duplicate': is_duplicate, + 'is_whitelisted': is_whitelisted, + 'is_error': is_error + }) + + return ticket_items + + def _is_duplicate(self, genre: str, value: str) -> bool: + found_tickets = self.ticket_item_exists_by_value_service.execute( + genre = genre, + value = value + ) + + print(" r -> ", found_tickets) + + # no ticket item found + if not len(found_tickets): + return False + + # we have a ticket that contains this ticket item + if len(found_tickets): + # but let's search for a ticket error in this case + for ticket_blocking in found_tickets: + print(" tb -> ", ticket_blocking) + ticket_errors = self.ticket_error_get_by_ticket_service.execute( + ticket_blocking.get('ticket_id') + ) + + # found one, let's search for our item + if len(ticket_errors): + for ticket_error_response in ticket_errors: + print(ticket_error_response) + print(ticket_error_response.get(genre)) + + # found the item, so we don't have any duplicate + if value in ticket_error_response.get(genre): + return False + + return True + + def _is_whitelisted(self, value: str) -> bool: + return self.whitelist_exists_by_value_service.execute( + value = value + ) + + def _generate_ticket_item_id(self) -> str: + """ + Generates a UUIDv4. + """ + + return self.identifier.generate() + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.ticket_item_exists_by_value_service = TicketItemExistsByValueService() + + self.ticket_error_get_by_ticket_service = TicketErrorGetByTicketService() + + self.whitelist_exists_by_value_service = WhitelistExistsByValueService() + + self.ticket_item_create_service = TicketItemCreateService() + + self.identifier = Identifier() diff --git a/src/piracyshield_service/ticket/remove.py b/src/piracyshield_service/ticket/remove.py new file mode 100644 index 0000000..6571ee9 --- /dev/null +++ b/src/piracyshield_service/ticket/remove.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageGetException, TicketStorageRemoveException + +from piracyshield_service.ticket.relation.abandon import TicketRelationAbandonService + +from piracyshield_service.ticket.get import TicketGetService + +from piracyshield_service.ticket.tasks.remove_logs import remove_logs_task_caller + +from piracyshield_service.forensic.remove_by_ticket import ForensicRemoveByTicketService + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +from datetime import datetime, timedelta + +class TicketRemoveService(BaseService): + + """ + Removes a ticket within the allowed time. + """ + + ticket_get_service = None + + ticket_relation_abandon_service = None + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, ticket_id: str) -> bool | Exception: + # document = self._get_ticket(ticket_id) + document = self.ticket_get_service.execute( + ticket_id = ticket_id + ) + + # check if ticket is expired + if Time.is_expired( + date = document.get('metadata').get('created_at'), + expiration_time = document.get('settings').get('revoke_time') + ) == True: + raise ApplicationException(TicketErrorCode.REVOKE_TIME_EXCEEDED, TicketErrorMessage.REVOKE_TIME_EXCEEDED) + + # TODO: have a centralized tasks collection and service to do this. + + # if not, proceed to cancel each associated task + for task in document.get('tasks'): + self.task_service.remove(task) + + # this removal operation is only available within the revoke time process (75s as per today), + # therefore we don't need to have any other deletion process than the main ticket + self._schedule_task( + ticket_id = document.get('ticket_id') + ) + + # remove ticket items + self.ticket_relation_abandon_service.execute( + ticket_id = document.get('ticket_id') + ) + + # remove associated forensic evidence + self.forensic_remove_by_ticket_service.execute( + ticket_id = document.get('ticket_id') + ) + + # finally remove the ticket + try: + self.data_storage.remove( + ticket_id = document.get('ticket_id') + ) + + return True + + except TicketStorageRemoveException as e: + self.logger.error(f'Could not remove ticket `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _schedule_task(self, ticket_id: str): + try: + self.task_service.create( + task_caller = remove_logs_task_caller, + delay = 1, + ticket_id = ticket_id + ) + + except Exception as e: + self.logger.error(f'Could not remove tasks for ticket `{ticket_id}`') + + raise ApplicationException(TicketErrorCode.GENERIC, TicketErrorMessage.GENERIC, e) + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = TicketStorage() + + self.forensic_remove_by_ticket_service = ForensicRemoveByTicketService() + + self.ticket_relation_abandon_service = TicketRelationAbandonService() + + self.ticket_get_service = TicketGetService() diff --git a/src/piracyshield_service/ticket/tasks/__init__.py b/src/piracyshield_service/ticket/tasks/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/ticket/tasks/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/ticket/tasks/remove_logs.py b/src/piracyshield_service/ticket/tasks/remove_logs.py new file mode 100644 index 0000000..a12706d --- /dev/null +++ b/src/piracyshield_service/ticket/tasks/remove_logs.py @@ -0,0 +1,45 @@ +from piracyshield_service.task.base import BaseTask + +from piracyshield_service.log.ticket.remove_all import LogTicketRemoveAllService + +class RemoveLogsTask(BaseTask): + + """ + Operations scheduled on ticket deletion. + """ + + ticket_id = None + + log_ticket_remove_all_service = None + + def __init__(self, ticket_id: str): + super().__init__() + + self.ticket_id = ticket_id + + def run(self) -> bool: + """ + Removes the logs for a defined ticket. + """ + + self.log_ticket_remove_all_service.execute( + ticket_id = self.ticket_id + ) + + def before_run(self): + """ + Initialize required modules. + """ + + self.log_ticket_remove_all_service = LogTicketRemoveAllService() + + def after_run(self): + pass + + def on_failure(self): + pass + +def remove_logs_task_caller(**kwargs): + t = RemoveLogsTask(**kwargs) + + return t.execute() diff --git a/src/piracyshield_service/ticket/tasks/ticket_autoclose.py b/src/piracyshield_service/ticket/tasks/ticket_autoclose.py new file mode 100644 index 0000000..dd267d4 --- /dev/null +++ b/src/piracyshield_service/ticket/tasks/ticket_autoclose.py @@ -0,0 +1,67 @@ +from piracyshield_service.task.base import BaseTask + +from piracyshield_data_model.ticket.status.model import TicketStatusModel + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageUpdateException + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +class TicketAutocloseTask(BaseTask): + + """ + Operations scheduled after the creation of a ticket. + """ + + ticket_id = None + + ticket_storage = None + + log_ticket_create_service = None + + def __init__(self, ticket_id: str): + super().__init__() + + self.ticket_id = ticket_id + + def run(self) -> bool: + """ + Auto-closes the ticket after 30 minutes. + This ticket will not be visible anymore to the providers. + """ + + # TODO: must check if the ticket exists. + + # change status + try: + self.ticket_storage.update_status( + ticket_id = self.ticket_id, + ticket_status = TicketStatusModel.CLOSED.value + ) + + except TicketStorageUpdateException: + self.logger.error(f'Could not update the ticket `{self.ticket_id}`') + + # log the operation + self.log_ticket_create_service.execute( + ticket_id = self.ticket_id, + message = f'Changed status to `{TicketStatusModel.CLOSED.value}`.' + ) + + def before_run(self): + """ + Initialize required modules. + """ + self.ticket_storage = TicketStorage() + + self.log_ticket_create_service = LogTicketCreateService() + + def after_run(self): + pass + + def on_failure(self): + pass + +def ticket_autoclose_task_caller(**kwargs): + t = TicketAutocloseTask(**kwargs) + + return t.execute() diff --git a/src/piracyshield_service/ticket/tasks/ticket_initialize.py b/src/piracyshield_service/ticket/tasks/ticket_initialize.py new file mode 100644 index 0000000..682a5c5 --- /dev/null +++ b/src/piracyshield_service/ticket/tasks/ticket_initialize.py @@ -0,0 +1,67 @@ +from piracyshield_service.task.base import BaseTask + +from piracyshield_data_model.ticket.status.model import TicketStatusModel + +from piracyshield_data_storage.ticket.storage import TicketStorage, TicketStorageUpdateException + +from piracyshield_service.log.ticket.create import LogTicketCreateService + +class TicketInitializeTask(BaseTask): + + """ + Operations scheduled after the creation of a ticket. + """ + + ticket_id = None + + ticket_storage = None + + log_ticket_create_service = None + + def __init__(self, ticket_id: str): + super().__init__() + + self.ticket_id = ticket_id + + def run(self) -> bool: + """ + Starts the operations for the new ticket. + The status gets set to `open` as we make it visible for API pulls and notifications + """ + + # TODO: must check if the ticket exists. + + # change status + try: + self.ticket_storage.update_status( + ticket_id = self.ticket_id, + ticket_status = TicketStatusModel.OPEN.value + ) + + except TicketStorageUpdateException: + self.logger.error(f'Could not update the ticket `{self.ticket_id}`') + + # log the operation + self.log_ticket_create_service.execute( + ticket_id = self.ticket_id, + message = f'Changed status to `{TicketStatusModel.OPEN.value}`.' + ) + + def before_run(self): + """ + Initialize required modules. + """ + self.ticket_storage = TicketStorage() + + self.log_ticket_create_service = LogTicketCreateService() + + def after_run(self): + pass + + def on_failure(self): + pass + +def ticket_initialize_task_caller(**kwargs): + t = TicketInitializeTask(**kwargs) + + return t.execute() diff --git a/src/piracyshield_service/whitelist/__init__.py b/src/piracyshield_service/whitelist/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/src/piracyshield_service/whitelist/__init__.py @@ -0,0 +1 @@ + diff --git a/src/piracyshield_service/whitelist/cidr/Cargo.lock b/src/piracyshield_service/whitelist/cidr/Cargo.lock new file mode 100644 index 0000000..f540410 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/Cargo.lock @@ -0,0 +1,286 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "indoc" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a89dc7a5850d0e983be1ec2a463a171d20990487c3cfcd68b5363f1ee3d6fe0" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "parking_lot", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07426f0d8fe5a601f26293f300afd1a7b1ed5e78b2a705870c5f30893c5163be" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb7dec17e17766b46bca4f1a4215a85006b4c2ecde122076c562dd058da6cf1" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f738b4e40d50b5711957f142878cfa0f28e054aa0ebdfc3fd137a843f74ed3" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc910d4851847827daf9d6cdd4a823fbdaab5b8818325c5e97a86da79e8881f" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rs_cidr_verifier" +version = "0.1.0" +dependencies = [ + "ipnetwork", + "pyo3", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "smallvec" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "target-lexicon" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/src/piracyshield_service/whitelist/cidr/Cargo.toml b/src/piracyshield_service/whitelist/cidr/Cargo.toml new file mode 100644 index 0000000..410faea --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "rs_cidr_verifier" +version = "0.1.0" +edition = "2021" + +[profile.release] +opt-level = 3 +lto = true + +[lib] +name = "rs_cidr_verifier" +path = "src/lib.rs" +crate-type = ["cdylib"] + +[dependencies] +pyo3 = { version = "0.20.2", features = ["extension-module"] } +ipnetwork = "0.20.0" diff --git a/src/piracyshield_service/whitelist/cidr/MANIFEST.in b/src/piracyshield_service/whitelist/cidr/MANIFEST.in new file mode 100644 index 0000000..7c68298 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/MANIFEST.in @@ -0,0 +1,2 @@ +include Cargo.toml +recursive-include src * diff --git a/src/piracyshield_service/whitelist/cidr/src/lib.rs b/src/piracyshield_service/whitelist/cidr/src/lib.rs new file mode 100644 index 0000000..5c1c2ce --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/src/lib.rs @@ -0,0 +1,34 @@ +use pyo3::prelude::*; +use ipnetwork::{Ipv4Network, Ipv6Network}; +use std::net::{Ipv4Addr, Ipv6Addr}; +use std::str::FromStr; + +#[pyfunction] +fn is_ipv4_in_cidr(ip: &str, cidr: &str) -> PyResult { + let ip_addr = ip.parse::() + .map_err(|_| PyErr::new::("Invalid IPv4 address"))?; + + let cidr_net = Ipv4Network::from_str(cidr) + .map_err(|_| PyErr::new::("Invalid IPv4 CIDR notation"))?; + + Ok(cidr_net.contains(ip_addr)) +} + +#[pyfunction] +fn is_ipv6_in_cidr(ip: &str, cidr: &str) -> PyResult { + let ip_addr = ip.parse::() + .map_err(|_| PyErr::new::("Invalid IPv6 address"))?; + + let cidr_net = Ipv6Network::from_str(cidr) + .map_err(|_| PyErr::new::("Invalid IPv6 CIDR notation"))?; + + Ok(cidr_net.contains(ip_addr)) +} + +#[pymodule] +fn rs_cidr_verifier(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_function(wrap_pyfunction!(is_ipv4_in_cidr, m)?)?; + m.add_function(wrap_pyfunction!(is_ipv6_in_cidr, m)?)?; + + Ok(()) +} diff --git a/src/piracyshield_service/whitelist/cidr/target/.rustc_info.json b/src/piracyshield_service/whitelist/cidr/target/.rustc_info.json new file mode 100644 index 0000000..c8d169a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":17319823511861937527,"outputs":{"15697416045686424142":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n","stderr":""},"10376369925670944939":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/dan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.67.1 (d5a82bbd2 2023-02-07)\nbinary: rustc\ncommit-hash: d5a82bbd26e1ad8b7401f6a718a9c57c96905483\ncommit-date: 2023-02-07\nhost: x86_64-unknown-linux-gnu\nrelease: 1.67.1\nLLVM version: 15.0.6\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/CACHEDIR.TAG b/src/piracyshield_service/whitelist/cidr/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.cargo-lock b/src/piracyshield_service/whitelist/cidr/target/release/.cargo-lock new file mode 100644 index 0000000..e69de29 diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/dep-lib-autocfg b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/dep-lib-autocfg new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/dep-lib-autocfg differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg new file mode 100644 index 0000000..dd10585 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg @@ -0,0 +1 @@ +81390007618af90e \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg.json new file mode 100644 index 0000000..92ae7b4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/autocfg-3c7b4dffaf762fc6/lib-autocfg.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":14886237245231788030,"profile":12321446146528634949,"path":1508705218243615787,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/autocfg-3c7b4dffaf762fc6/dep-lib-autocfg"}}],"rustflags":[],"metadata":13102859075309379048,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/dep-lib-cfg-if b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/dep-lib-cfg-if new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/dep-lib-cfg-if differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if new file mode 100644 index 0000000..3fbb7c6 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if @@ -0,0 +1 @@ +8a5d436b1fa97435 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if.json new file mode 100644 index 0000000..db21c70 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cfg-if-69bae101b1b42a45/lib-cfg-if.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":10623512480563079566,"profile":1509744450976549833,"path":5683068338619622551,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/cfg-if-69bae101b1b42a45/dep-lib-cfg-if"}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-cidr_verifier new file mode 100644 index 0000000..fb1fbec Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-cidr_verifier differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-rs_cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-rs_cidr_verifier new file mode 100644 index 0000000..fb1fbec Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-rs_cidr_verifier differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier new file mode 100644 index 0000000..858a4d4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier @@ -0,0 +1 @@ +cfd2836bb4045e0b \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier.json new file mode 100644 index 0000000..2eebdf3 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-cidr_verifier.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":7417581250161613012,"profile":8636261160412388944,"path":17523903030608720598,"deps":[[44330350830970175,"ipnetwork",false,7436470098127048064],[7641949085763620439,"pyo3",false,8460350699825535659]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-cidr_verifier"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier new file mode 100644 index 0000000..6bed470 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier @@ -0,0 +1 @@ +79e0590fc9a74ac8 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier.json new file mode 100644 index 0000000..5127674 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/cidr_verifier-9b130a522d43d4df/lib-rs_cidr_verifier.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":5038954277287160859,"profile":8636261160412388944,"path":17523903030608720598,"deps":[[44330350830970175,"ipnetwork",false,7436470098127048064],[7641949085763620439,"pyo3",false,8460350699825535659]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/cidr_verifier-9b130a522d43d4df/dep-lib-rs_cidr_verifier"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/dep-lib-heck b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/dep-lib-heck new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/dep-lib-heck differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck new file mode 100644 index 0000000..2a19930 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck @@ -0,0 +1 @@ +2f9469b466c55f51 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck.json new file mode 100644 index 0000000..5e8e361 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/heck-d3dc0407160b1e40/lib-heck.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":11271119367433188140,"profile":12321446146528634949,"path":8725470669610913627,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/heck-d3dc0407160b1e40/dep-lib-heck"}}],"rustflags":[],"metadata":4968006677088137060,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/dep-lib-indoc b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/dep-lib-indoc new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/dep-lib-indoc differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc new file mode 100644 index 0000000..83e45de --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc @@ -0,0 +1 @@ +246561ccb4563bac \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc.json new file mode 100644 index 0000000..9270c17 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/indoc-c77d2dc488364d05/lib-indoc.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":6743194288437464973,"profile":12321446146528634949,"path":4483898621172251922,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/indoc-c77d2dc488364d05/dep-lib-indoc"}}],"rustflags":[],"metadata":5965780065096453740,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/dep-lib-instant b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/dep-lib-instant new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/dep-lib-instant differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant new file mode 100644 index 0000000..2e4c476 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant @@ -0,0 +1 @@ +ab34924fd542043c \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant.json new file mode 100644 index 0000000..e059ef8 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/instant-2e29094680d3afa0/lib-instant.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":4958521052457594671,"profile":1509744450976549833,"path":4805769327782337818,"deps":[[2452538001284770427,"cfg_if",false,3851889533717273994]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/instant-2e29094680d3afa0/dep-lib-instant"}}],"rustflags":[],"metadata":124121305543948399,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/dep-lib-ipnetwork b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/dep-lib-ipnetwork new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/dep-lib-ipnetwork differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork new file mode 100644 index 0000000..c2b4eb7 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork @@ -0,0 +1 @@ +804dad7527a63367 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork.json new file mode 100644 index 0000000..1efa153 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/ipnetwork-042f9be8bb94ad85/lib-ipnetwork.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"serde\"]","target":14627857454533796518,"profile":1509744450976549833,"path":15863122801210945821,"deps":[[645485383021743094,"serde",false,14170690070559771807]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/ipnetwork-042f9be8bb94ad85/dep-lib-ipnetwork"}}],"rustflags":[],"metadata":4558886099469382129,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build new file mode 100644 index 0000000..02e8f5f --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build @@ -0,0 +1 @@ +e9ad702d61c6c229 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build.json new file mode 100644 index 0000000..9e7e8da --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"std\"]","target":8188216131759486267,"profile":12321446146528634949,"path":6247229781548556303,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/libc-501f12722be35828/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-501f12722be35828/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/dep-lib-libc b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/dep-lib-libc new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/dep-lib-libc differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc new file mode 100644 index 0000000..1e76f5b --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc @@ -0,0 +1 @@ +df098ed53f7509da \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc.json new file mode 100644 index 0000000..09c89ca --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-a74c7b6f391bdb51/lib-libc.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"std\"]","target":1307715644349195660,"profile":1509744450976549833,"path":8234994876308704716,"deps":[[6024382616234287946,"build_script_build",false,9858810141422712097]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/libc-a74c7b6f391bdb51/dep-lib-libc"}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build new file mode 100644 index 0000000..46e4c96 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build @@ -0,0 +1 @@ +21f584e39687d188 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build.json new file mode 100644 index 0000000..04b81d4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/libc-d10154460ce4fbfb/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[6024382616234287946,"build_script_build",false,3009185621713399273]],"local":[{"RerunIfChanged":{"output":"release/build/libc-d10154460ce4fbfb/output","paths":["build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/dep-lib-lock_api b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/dep-lib-lock_api new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/dep-lib-lock_api differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api new file mode 100644 index 0000000..b5799ce --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api @@ -0,0 +1 @@ +41d223bed8687bba \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api.json new file mode 100644 index 0000000..e9ab0aa --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-2c19fe8acfa1b895/lib-lock_api.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"atomic_usize\", \"default\"]","target":12865556649856506668,"profile":1509744450976549833,"path":6327298379781517958,"deps":[[2334936782960947306,"build_script_build",false,10952437094773767153],[12681349708887310001,"scopeguard",false,15490523870735929834]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/lock_api-2c19fe8acfa1b895/dep-lib-lock_api"}}],"rustflags":[],"metadata":1004704486619092063,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build new file mode 100644 index 0000000..0a72e7e --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build @@ -0,0 +1 @@ +f13bcd5a82dffe97 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build.json new file mode 100644 index 0000000..b58f1a8 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bf9734d4998732b3/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[2334936782960947306,"build_script_build",false,8850846881586279167]],"local":[{"Precalculated":"0.4.11"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build new file mode 100644 index 0000000..3f3d1e4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build @@ -0,0 +1 @@ +fff252525886d47a \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build.json new file mode 100644 index 0000000..ff234c8 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"atomic_usize\", \"default\"]","target":2297296889237502566,"profile":12321446146528634949,"path":13167596972573995437,"deps":[[14832468857926148571,"autocfg",false,1079045735065860481]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/lock_api-bff8049b5a4be134/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":1004704486619092063,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/lock_api-bff8049b5a4be134/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build new file mode 100644 index 0000000..6f8ffa2 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build @@ -0,0 +1 @@ +cd79c3befe3be194 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build.json new file mode 100644 index 0000000..55f3d5f --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-3d5672c427250e26/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[4178676130950226943,"build_script_build",false,3655536711730558681]],"local":[{"Precalculated":"0.9.0"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/dep-lib-memoffset b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/dep-lib-memoffset new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/dep-lib-memoffset differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset new file mode 100644 index 0000000..9463590 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset @@ -0,0 +1 @@ +cc006579ae4b614e \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset.json new file mode 100644 index 0000000..53d2ed8 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-7104f089c172eb7f/lib-memoffset.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":1229535848872979174,"profile":1509744450976549833,"path":9117854021220840721,"deps":[[4178676130950226943,"build_script_build",false,10727921752681445837]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/memoffset-7104f089c172eb7f/dep-lib-memoffset"}}],"rustflags":[],"metadata":1371205671251306698,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build new file mode 100644 index 0000000..a741d18 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build @@ -0,0 +1 @@ +d976197e4513bb32 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build.json new file mode 100644 index 0000000..14539ee --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":8188216131759486267,"profile":12321446146528634949,"path":15852565422576767447,"deps":[[14832468857926148571,"autocfg",false,1079045735065860481]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/memoffset-bb7b1e4bfea18caf/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":1371205671251306698,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/memoffset-bb7b1e4bfea18caf/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/dep-lib-once_cell b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/dep-lib-once_cell new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/dep-lib-once_cell differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell new file mode 100644 index 0000000..768b75a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell @@ -0,0 +1 @@ +4f7c67868d055529 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell.json new file mode 100644 index 0000000..68a1b77 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/once_cell-48a31306d8a78192/lib-once_cell.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"alloc\", \"default\", \"race\", \"std\"]","target":14856186769647684053,"profile":12321446146528634949,"path":7889486972867630825,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/once_cell-48a31306d8a78192/dep-lib-once_cell"}}],"rustflags":[],"metadata":14177539708254521827,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/dep-lib-parking_lot b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/dep-lib-parking_lot new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/dep-lib-parking_lot differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot new file mode 100644 index 0000000..76801b1 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot @@ -0,0 +1 @@ +2fea1cd47d0a07aa \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot.json new file mode 100644 index 0000000..b758767 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot-4e57fa5af92dd2a0/lib-parking_lot.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":13897877484550706946,"profile":1509744450976549833,"path":12899186000819682222,"deps":[[2334936782960947306,"lock_api",false,13437449193302250049],[7100013823197763026,"instant",false,4324655026112967851],[7975973975090648226,"parking_lot_core",false,12983814497458492142]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/parking_lot-4e57fa5af92dd2a0/dep-lib-parking_lot"}}],"rustflags":[],"metadata":3021512261575560469,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build new file mode 100644 index 0000000..ee59789 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build @@ -0,0 +1 @@ +41fac0b0f305a046 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build.json new file mode 100644 index 0000000..f8e24b5 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":2297296889237502566,"profile":12321446146528634949,"path":12765185757994506137,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/parking_lot_core-10fbd565a1957747/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":2941687627020168538,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-10fbd565a1957747/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build new file mode 100644 index 0000000..1487c4f --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build @@ -0,0 +1 @@ +8ce68e87190798f0 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build.json new file mode 100644 index 0000000..1c33097 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-2bf3bfe652cd0915/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[7975973975090648226,"build_script_build",false,5089074123129289281]],"local":[{"RerunIfChanged":{"output":"release/build/parking_lot_core-2bf3bfe652cd0915/output","paths":["build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/dep-lib-parking_lot_core b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/dep-lib-parking_lot_core new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/dep-lib-parking_lot_core differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core new file mode 100644 index 0000000..c10f292 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core @@ -0,0 +1 @@ +ee9294867ec62fb4 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core.json new file mode 100644 index 0000000..cabf15c --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/parking_lot_core-dada876bb2f77143/lib-parking_lot_core.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":5037276530626780085,"profile":1509744450976549833,"path":2947727976457670229,"deps":[[2452538001284770427,"cfg_if",false,3851889533717273994],[6024382616234287946,"libc",false,15711217692084931039],[7100013823197763026,"instant",false,4324655026112967851],[7975973975090648226,"build_script_build",false,17336614571792590476],[13158408678124349672,"smallvec",false,8355406863820353757]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/parking_lot_core-dada876bb2f77143/dep-lib-parking_lot_core"}}],"rustflags":[],"metadata":2941687627020168538,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build new file mode 100644 index 0000000..4b905ef --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build @@ -0,0 +1 @@ +5348193a018f9d76 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build.json new file mode 100644 index 0000000..034ddc7 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66b6a8d62d2811ee/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[14911020584695712288,"build_script_build",false,17698638073366404994]],"local":[{"RerunIfChanged":{"output":"release/build/proc-macro2-66b6a8d62d2811ee/output","paths":["build/probe.rs"]}},{"RerunIfEnvChanged":{"var":"RUSTC_BOOTSTRAP","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/dep-lib-proc-macro2 b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/dep-lib-proc-macro2 new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/dep-lib-proc-macro2 differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2 b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2 new file mode 100644 index 0000000..e372069 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2 @@ -0,0 +1 @@ +1118fcf69f3cab89 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2.json new file mode 100644 index 0000000..5f67004 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-66c04dbd96f31577/lib-proc-macro2.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"proc-macro\"]","target":16714894217519287322,"profile":12321446146528634949,"path":17887261960842346737,"deps":[[10045147784146067611,"unicode_ident",false,16293206037392524906],[14911020584695712288,"build_script_build",false,8547144903251544147]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/proc-macro2-66c04dbd96f31577/dep-lib-proc-macro2"}}],"rustflags":[],"metadata":7635439851376710101,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build new file mode 100644 index 0000000..9a373d1 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build @@ -0,0 +1 @@ +825f356b8e319ef5 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build.json new file mode 100644 index 0000000..8d5d509 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"proc-macro\"]","target":427768481117760528,"profile":12321446146528634949,"path":4433474220518438043,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/proc-macro2-cbba3cda61be204f/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":7635439851376710101,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/proc-macro2-cbba3cda61be204f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/dep-lib-pyo3 b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/dep-lib-pyo3 new file mode 100644 index 0000000..e5563ff Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/dep-lib-pyo3 differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3 b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3 new file mode 100644 index 0000000..6c496dd --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3 @@ -0,0 +1 @@ +ab1a54fa22346975 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3.json new file mode 100644 index 0000000..a9f8c7f --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-2042e268c490fafc/lib-pyo3.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\", \"indoc\", \"macros\", \"pyo3-macros\", \"unindent\"]","target":2514981023303760909,"profile":1509744450976549833,"path":16087649911528942181,"deps":[[2452538001284770427,"cfg_if",false,3851889533717273994],[3033405811964739476,"pyo3_ffi",false,780494140352079992],[3150190333329786216,"parking_lot",false,12251772846830578223],[4178676130950226943,"memoffset",false,5647878620432367820],[4489656566913619533,"indoc",false,12410608532672570660],[6024382616234287946,"libc",false,15711217692084931039],[7641949085763620439,"build_script_build",false,7401727730795605700],[10363810604620644647,"unindent",false,17908731086457626775],[17349650477604003977,"pyo3_macros",false,5600983673118544620]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-2042e268c490fafc/dep-lib-pyo3"}}],"rustflags":[],"metadata":13602786906243840833,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build new file mode 100644 index 0000000..bcea9c5 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build @@ -0,0 +1 @@ +a993b15ecfdef189 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build.json new file mode 100644 index 0000000..6059fbb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\", \"indoc\", \"macros\", \"pyo3-macros\", \"unindent\"]","target":427768481117760528,"profile":12321446146528634949,"path":11369707826065767490,"deps":[[3109312250534210964,"pyo3_build_config",false,3850113308011819198]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-30e732b99beedf97/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":13602786906243840833,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-30e732b99beedf97/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build new file mode 100644 index 0000000..962cfe6 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build @@ -0,0 +1 @@ +c4ee3ab62738b866 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build.json new file mode 100644 index 0000000..6a7b1b4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-4d344485182477df/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[7641949085763620439,"build_script_build",false,9939970834811687849],[3033405811964739476,"build_script_build",false,14830781530919242644]],"local":[{"Precalculated":"0.20.2"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/dep-lib-pyo3-build-config b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/dep-lib-pyo3-build-config new file mode 100644 index 0000000..8eb0214 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/dep-lib-pyo3-build-config differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config new file mode 100644 index 0000000..0a9ee25 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config @@ -0,0 +1 @@ +be700ca5a7596e35 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config.json new file mode 100644 index 0000000..50c8516 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-0118c39491801101/lib-pyo3-build-config.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\", \"resolve-config\"]","target":1503312609917995646,"profile":12321446146528634949,"path":312244710858641366,"deps":[[3109312250534210964,"build_script_build",false,17241220402831611990],[4254328441789853856,"once_cell",false,2978292833978907727],[16671795803904886250,"target_lexicon",false,7128119846446742854]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-build-config-0118c39491801101/dep-lib-pyo3-build-config"}}],"rustflags":[],"metadata":11483842606431734629,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build new file mode 100644 index 0000000..9611550 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build @@ -0,0 +1 @@ +b93c07971807e987 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build.json new file mode 100644 index 0000000..b93f028 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\", \"resolve-config\"]","target":427768481117760528,"profile":12321446146528634949,"path":4970670619528456710,"deps":[[16671795803904886250,"target_lexicon",false,7128119846446742854]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":11483842606431734629,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-13ad33d03908f5eb/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build new file mode 100644 index 0000000..c071b46 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build @@ -0,0 +1 @@ +56d8fec49b1e45ef \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build.json new file mode 100644 index 0000000..3be8523 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-build-config-4c246793abfb3a11/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[3109312250534210964,"build_script_build",false,9793366666888297657]],"local":[{"RerunIfEnvChanged":{"var":"PYO3_CONFIG_FILE","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_NO_PYTHON","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_ENVIRONMENT_SIGNATURE","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_PYTHON","val":"/usr/bin/python3"}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build new file mode 100644 index 0000000..83f8f2d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build @@ -0,0 +1 @@ +a5c008e8add7eaad \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build.json new file mode 100644 index 0000000..e354a4d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\"]","target":427768481117760528,"profile":12321446146528634949,"path":2275488375648971313,"deps":[[3109312250534210964,"pyo3_build_config",false,3850113308011819198]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":5563924103901193512,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cbeaf21d13269e99/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build new file mode 100644 index 0000000..bea5ea7 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build @@ -0,0 +1 @@ +948bddbb3985d1cd \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build.json new file mode 100644 index 0000000..13a0026 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-cc030c3027ee1272/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[3033405811964739476,"build_script_build",false,12532066055034028197]],"local":[{"RerunIfEnvChanged":{"var":"PYO3_CROSS","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_CROSS_LIB_DIR","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_CROSS_PYTHON_VERSION","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_CROSS_PYTHON_IMPLEMENTATION","val":null}},{"RerunIfEnvChanged":{"var":"PYO3_PRINT_CONFIG","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/dep-lib-pyo3-ffi b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/dep-lib-pyo3-ffi new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/dep-lib-pyo3-ffi differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi new file mode 100644 index 0000000..6b9385d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi @@ -0,0 +1 @@ +78a8f51049dfd40a \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi.json new file mode 100644 index 0000000..abb87f1 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/lib-pyo3-ffi.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"extension-module\"]","target":14197248618787980681,"profile":1509744450976549833,"path":10274958301638006360,"deps":[[3033405811964739476,"build_script_build",false,14830781530919242644],[6024382616234287946,"libc",false,15711217692084931039]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-ffi-e2e8be335f7bec72/dep-lib-pyo3-ffi"}}],"rustflags":[],"metadata":5563924103901193512,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/dep-lib-pyo3-macros b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/dep-lib-pyo3-macros new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/dep-lib-pyo3-macros differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros new file mode 100644 index 0000000..79c53b0 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros @@ -0,0 +1 @@ +ec52feb4f9b0ba4d \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros.json new file mode 100644 index 0000000..638c201 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-8055185c2296dd9b/lib-pyo3-macros.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":8035750528347072699,"profile":12321446146528634949,"path":13028767679875046019,"deps":[[1933759491588147092,"syn",false,7258540691284707282],[3470141838209150393,"pyo3_macros_backend",false,2929965603663942138],[9618700007800273094,"quote",false,6543048669976199466],[14911020584695712288,"proc_macro2",false,9920089261954832401]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-macros-8055185c2296dd9b/dep-lib-pyo3-macros"}}],"rustflags":[],"metadata":16539445494936841672,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/dep-lib-pyo3-macros-backend b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/dep-lib-pyo3-macros-backend new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/dep-lib-pyo3-macros-backend differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend new file mode 100644 index 0000000..75805c0 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend @@ -0,0 +1 @@ +fa9180623154a928 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend.json new file mode 100644 index 0000000..acddb2f --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/lib-pyo3-macros-backend.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":15258218011340413199,"profile":12321446146528634949,"path":11842413193538643895,"deps":[[1933759491588147092,"syn",false,7258540691284707282],[9618700007800273094,"quote",false,6543048669976199466],[11709930968028960932,"heck",false,5863622284763829295],[14911020584695712288,"proc_macro2",false,9920089261954832401]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/pyo3-macros-backend-bdcf66a835555dbc/dep-lib-pyo3-macros-backend"}}],"rustflags":[],"metadata":13274255201501344874,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/dep-lib-quote b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/dep-lib-quote new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/dep-lib-quote differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote new file mode 100644 index 0000000..f6f8dea --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote @@ -0,0 +1 @@ +2a01064a1994cd5a \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote.json new file mode 100644 index 0000000..30175fd --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/quote-cb9f0fdc266e6110/lib-quote.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"proc-macro\"]","target":10824007166531090010,"profile":12321446146528634949,"path":60841468783882513,"deps":[[14911020584695712288,"proc_macro2",false,9920089261954832401]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/quote-cb9f0fdc266e6110/dep-lib-quote"}}],"rustflags":[],"metadata":2717943770976187624,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/dep-lib-rs_cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/dep-lib-rs_cidr_verifier new file mode 100644 index 0000000..fb1fbec Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/dep-lib-rs_cidr_verifier differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier new file mode 100644 index 0000000..3b99374 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier @@ -0,0 +1 @@ +cd9f3c2e6866e2fc \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier.json new file mode 100644 index 0000000..d165ea4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/lib-rs_cidr_verifier.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":5038954277287160859,"profile":8636261160412388944,"path":17523903030608720598,"deps":[[44330350830970175,"ipnetwork",false,7436470098127048064],[7641949085763620439,"pyo3",false,8460350699825535659]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/rs_cidr_verifier-7f12d1a997bb645a/dep-lib-rs_cidr_verifier"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/dep-lib-scopeguard b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/dep-lib-scopeguard new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/dep-lib-scopeguard differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard new file mode 100644 index 0000000..3bbe0bf --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard @@ -0,0 +1 @@ +ea91ec5b6365f9d6 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard.json new file mode 100644 index 0000000..3c841fb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/scopeguard-75c1fe041118ac0e/lib-scopeguard.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":8394170625300587899,"profile":1509744450976549833,"path":3746820521361403374,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/scopeguard-75c1fe041118ac0e/dep-lib-scopeguard"}}],"rustflags":[],"metadata":8648443508444719667,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/dep-lib-serde b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/dep-lib-serde new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/dep-lib-serde differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde new file mode 100644 index 0000000..2fef173 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde @@ -0,0 +1 @@ +9fccde258a67a8c4 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde.json new file mode 100644 index 0000000..99060dd --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-0f0732ff4b97647e/lib-serde.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"std\"]","target":12518487807107382959,"profile":1509744450976549833,"path":6337489974371182461,"deps":[[645485383021743094,"build_script_build",false,7854310831688210999]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/serde-0f0732ff4b97647e/dep-lib-serde"}}],"rustflags":[],"metadata":3767376778934503013,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build new file mode 100644 index 0000000..0759444 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build @@ -0,0 +1 @@ +375a4766161e006d \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build.json new file mode 100644 index 0000000..4f46262 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-4154f96e6a9fcca7/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[645485383021743094,"build_script_build",false,8175147241448235363]],"local":[{"RerunIfChanged":{"output":"release/build/serde-4154f96e6a9fcca7/output","paths":["build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build new file mode 100644 index 0000000..7547acb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build @@ -0,0 +1 @@ +636109311af57371 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build.json new file mode 100644 index 0000000..0cb0e95 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\", \"std\"]","target":2297296889237502566,"profile":12321446146528634949,"path":5520690234529410931,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/serde-828f58dc7646c79c/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":3767376778934503013,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/serde-828f58dc7646c79c/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/dep-lib-smallvec b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/dep-lib-smallvec new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/dep-lib-smallvec differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec new file mode 100644 index 0000000..8d27159 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec @@ -0,0 +1 @@ +dd70df17465ef473 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec.json new file mode 100644 index 0000000..d4b7b87 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/smallvec-2082adecdd99a2ff/lib-smallvec.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":15021638563153388439,"profile":1509744450976549833,"path":1124671024699438235,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/smallvec-2082adecdd99a2ff/dep-lib-smallvec"}}],"rustflags":[],"metadata":15767570753543272391,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/dep-lib-syn b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/dep-lib-syn new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/dep-lib-syn differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn new file mode 100644 index 0000000..d3b4e3d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn @@ -0,0 +1 @@ +d247be234d84bb64 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn.json new file mode 100644 index 0000000..2d039bb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/syn-5f4affaca40e76f3/lib-syn.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"clone-impls\", \"default\", \"derive\", \"extra-traits\", \"full\", \"parsing\", \"printing\", \"proc-macro\", \"quote\"]","target":9229941241798225847,"profile":12321446146528634949,"path":4542429717357836020,"deps":[[9618700007800273094,"quote",false,6543048669976199466],[10045147784146067611,"unicode_ident",false,16293206037392524906],[14911020584695712288,"proc_macro2",false,9920089261954832401]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/syn-5f4affaca40e76f3/dep-lib-syn"}}],"rustflags":[],"metadata":6886477143387768027,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build new file mode 100644 index 0000000..4117cda --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build @@ -0,0 +1 @@ +b7957a16a442e5b3 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build.json new file mode 100644 index 0000000..c57fa1a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":2297296889237502566,"profile":12321446146528634949,"path":10134245108742642855,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":1674627598342396715,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/dep-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/dep-build-script-build-script-build new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/dep-build-script-build-script-build differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-53ddb1dbbb6a3c1e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/dep-lib-target-lexicon b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/dep-lib-target-lexicon new file mode 100644 index 0000000..316ab17 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/dep-lib-target-lexicon differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon new file mode 100644 index 0000000..3401135 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon @@ -0,0 +1 @@ +46bddee33b2bec62 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon.json new file mode 100644 index 0000000..a6178fb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-73cb5898dc8df82f/lib-target-lexicon.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[\"default\"]","target":8086471352453642149,"profile":12321446146528634949,"path":14969428156263983443,"deps":[[16671795803904886250,"build_script_build",false,5872220838613594329]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/target-lexicon-73cb5898dc8df82f/dep-lib-target-lexicon"}}],"rustflags":[],"metadata":1674627598342396715,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build new file mode 100644 index 0000000..79e2302 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build @@ -0,0 +1 @@ +d9b03588bd517e51 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build.json new file mode 100644 index 0000000..3844bd5 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/target-lexicon-96937896324a6b69/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"","target":0,"profile":0,"path":0,"deps":[[16671795803904886250,"build_script_build",false,12962840374975042999]],"local":[{"Precalculated":"0.12.13"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/dep-lib-unicode-ident b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/dep-lib-unicode-ident new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/dep-lib-unicode-ident differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident new file mode 100644 index 0000000..6e9334a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident @@ -0,0 +1 @@ +6a0608df90181de2 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident.json new file mode 100644 index 0000000..b008b8d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unicode-ident-4628bccdb087e41d/lib-unicode-ident.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":7243519288898877878,"profile":12321446146528634949,"path":11167862883179446290,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/unicode-ident-4628bccdb087e41d/dep-lib-unicode-ident"}}],"rustflags":[],"metadata":1159190378059262574,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/dep-lib-unindent b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/dep-lib-unindent new file mode 100644 index 0000000..1b1cb4d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/dep-lib-unindent differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/invoked.timestamp b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent new file mode 100644 index 0000000..b758026 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent @@ -0,0 +1 @@ +97604de2099888f8 \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent.json b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent.json new file mode 100644 index 0000000..358b7ec --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/.fingerprint/unindent-d7f28a3d503a99e0/lib-unindent.json @@ -0,0 +1 @@ +{"rustc":4936231744503104448,"features":"[]","target":5442838093997039134,"profile":1509744450976549833,"path":5877633038576333237,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/unindent-d7f28a3d503a99e0/dep-lib-unindent"}}],"rustflags":[],"metadata":10374369828540625574,"config":2202906307356721367,"compile_kind":0} \ No newline at end of file diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/autocfg-3c7b4dffaf762fc6.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/autocfg-3c7b4dffaf762fc6.d new file mode 100644 index 0000000..7ec237d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/autocfg-3c7b4dffaf762fc6.d @@ -0,0 +1,9 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/autocfg-3c7b4dffaf762fc6.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/version.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/version.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/autocfg-3c7b4dffaf762fc6.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/version.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/error.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.1.0/src/version.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/cfg_if-69bae101b1b42a45.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/cfg_if-69bae101b1b42a45.d new file mode 100644 index 0000000..5ba63af --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/cfg_if-69bae101b1b42a45.d @@ -0,0 +1,7 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/cfg_if-69bae101b1b42a45.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/cfg_if-69bae101b1b42a45.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/src/lib.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/cidr_verifier.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/cidr_verifier.d new file mode 100644 index 0000000..e2c8c7c --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/cidr_verifier.d @@ -0,0 +1,5 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libcidr_verifier.so: src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/cidr_verifier.d: src/lib.rs + +src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/heck-d3dc0407160b1e40.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/heck-d3dc0407160b1e40.d new file mode 100644 index 0000000..7960792 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/heck-d3dc0407160b1e40.d @@ -0,0 +1,15 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/heck-d3dc0407160b1e40.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lower_camel.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/title.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/train.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/upper_camel.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lower_camel.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/title.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/train.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/upper_camel.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/heck-d3dc0407160b1e40.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lower_camel.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_kebab.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/snake.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/title.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/train.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/upper_camel.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/kebab.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/lower_camel.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_kebab.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/shouty_snake.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/snake.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/title.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/train.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/heck-0.4.1/src/upper_camel.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/indoc-c77d2dc488364d05.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/indoc-c77d2dc488364d05.d new file mode 100644 index 0000000..64fa6cf --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/indoc-c77d2dc488364d05.d @@ -0,0 +1,8 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libindoc-c77d2dc488364d05.so: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/expr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/unindent.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/indoc-c77d2dc488364d05.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/expr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/unindent.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/error.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/expr.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/indoc-2.0.4/src/unindent.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/instant-2e29094680d3afa0.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/instant-2e29094680d3afa0.d new file mode 100644 index 0000000..9512359 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/instant-2e29094680d3afa0.d @@ -0,0 +1,8 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/instant-2e29094680d3afa0.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/native.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/native.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/instant-2e29094680d3afa0.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/native.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/instant-0.1.12/src/native.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/ipnetwork-042f9be8bb94ad85.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/ipnetwork-042f9be8bb94ad85.d new file mode 100644 index 0000000..1e6f963 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/ipnetwork-042f9be8bb94ad85.d @@ -0,0 +1,10 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/ipnetwork-042f9be8bb94ad85.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/common.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv4.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv6.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/common.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv4.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv6.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/ipnetwork-042f9be8bb94ad85.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/common.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv4.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv6.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/common.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv4.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/ipnetwork-0.20.0/src/ipv6.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rlib new file mode 100644 index 0000000..ef23c11 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rmeta new file mode 100644 index 0000000..2645390 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libautocfg-3c7b4dffaf762fc6.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libc-a74c7b6f391bdb51.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/libc-a74c7b6f391bdb51.d new file mode 100644 index 0000000..bd00e81 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/libc-a74c7b6f391bdb51.d @@ -0,0 +1,23 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libc-a74c7b6f391bdb51.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/fixed_width_ints.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/generic/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/non_exhaustive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/align.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/fixed_width_ints.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/generic/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/non_exhaustive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/align.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libc-a74c7b6f391bdb51.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/fixed_width_ints.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/generic/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/align.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/non_exhaustive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/align.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/macros.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/fixed_width_ints.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/gnu/align.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/arch/generic/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/align.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/linux_like/linux/non_exhaustive.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.152/src/unix/align.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rlib new file mode 100644 index 0000000..bfb356b Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rmeta new file mode 100644 index 0000000..b3f7c01 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcfg_if-69bae101b1b42a45.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libcidr_verifier.so b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcidr_verifier.so new file mode 100755 index 0000000..dabb1c6 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libcidr_verifier.so differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rlib new file mode 100644 index 0000000..1ebc40f Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rmeta new file mode 100644 index 0000000..cdcacac Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libheck-d3dc0407160b1e40.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libindoc-c77d2dc488364d05.so b/src/piracyshield_service/whitelist/cidr/target/release/deps/libindoc-c77d2dc488364d05.so new file mode 100755 index 0000000..0044ae6 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libindoc-c77d2dc488364d05.so differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rlib new file mode 100644 index 0000000..687a21b Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rmeta new file mode 100644 index 0000000..82607e4 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libinstant-2e29094680d3afa0.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rlib new file mode 100644 index 0000000..dcd4c65 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rmeta new file mode 100644 index 0000000..5c7b134 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libipnetwork-042f9be8bb94ad85.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rlib new file mode 100644 index 0000000..fbe89b2 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rmeta new file mode 100644 index 0000000..2b7929d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblibc-a74c7b6f391bdb51.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rlib new file mode 100644 index 0000000..9195e6c Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rmeta new file mode 100644 index 0000000..7c63ae3 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rlib new file mode 100644 index 0000000..b648ca2 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rmeta new file mode 100644 index 0000000..5e2124e Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rlib new file mode 100644 index 0000000..27b957b Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rmeta new file mode 100644 index 0000000..6d8106e Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rlib new file mode 100644 index 0000000..f6e4cfa Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rmeta new file mode 100644 index 0000000..e74e7e0 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rlib new file mode 100644 index 0000000..2408c65 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rmeta new file mode 100644 index 0000000..557333a Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rlib new file mode 100644 index 0000000..5833bce Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rmeta new file mode 100644 index 0000000..6a4689b Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rlib new file mode 100644 index 0000000..363efd6 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rmeta new file mode 100644 index 0000000..128bf6a Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rlib new file mode 100644 index 0000000..5d4520c Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rmeta new file mode 100644 index 0000000..31fa75b Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rlib new file mode 100644 index 0000000..ad092f1 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rmeta new file mode 100644 index 0000000..fea353c Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros-8055185c2296dd9b.so b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros-8055185c2296dd9b.so new file mode 100755 index 0000000..1de8b98 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros-8055185c2296dd9b.so differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rlib new file mode 100644 index 0000000..780a2f7 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rmeta new file mode 100644 index 0000000..5b001a4 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rlib new file mode 100644 index 0000000..00798f3 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rmeta new file mode 100644 index 0000000..01baffd Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/librs_cidr_verifier.so b/src/piracyshield_service/whitelist/cidr/target/release/deps/librs_cidr_verifier.so new file mode 100755 index 0000000..ddc6648 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/librs_cidr_verifier.so differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rlib new file mode 100644 index 0000000..ce6721f Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rmeta new file mode 100644 index 0000000..6cdf882 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rlib new file mode 100644 index 0000000..cf6d58e Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rmeta new file mode 100644 index 0000000..d652d00 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rlib new file mode 100644 index 0000000..c8413ca Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rmeta new file mode 100644 index 0000000..55e1f6a Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rlib new file mode 100644 index 0000000..caec74d Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rmeta new file mode 100644 index 0000000..34158bd Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rlib new file mode 100644 index 0000000..9299d17 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rmeta new file mode 100644 index 0000000..8898971 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rlib new file mode 100644 index 0000000..8f1f1ed Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rmeta new file mode 100644 index 0000000..c051ddf Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rlib b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rlib new file mode 100644 index 0000000..c51d35f Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rlib differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rmeta b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rmeta new file mode 100644 index 0000000..7a72acc Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rmeta differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/lock_api-2c19fe8acfa1b895.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/lock_api-2c19fe8acfa1b895.d new file mode 100644 index 0000000..36dc588 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/lock_api-2c19fe8acfa1b895.d @@ -0,0 +1,10 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/lock_api-2c19fe8acfa1b895.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/rwlock.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/liblock_api-2c19fe8acfa1b895.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/rwlock.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/lock_api-2c19fe8acfa1b895.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/rwlock.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/mutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/remutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.11/src/rwlock.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/memoffset-7104f089c172eb7f.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/memoffset-7104f089c172eb7f.d new file mode 100644 index 0000000..727997b --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/memoffset-7104f089c172eb7f.d @@ -0,0 +1,10 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/memoffset-7104f089c172eb7f.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/raw_field.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/offset_of.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/span_of.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libmemoffset-7104f089c172eb7f.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/raw_field.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/offset_of.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/span_of.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/memoffset-7104f089c172eb7f.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/raw_field.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/offset_of.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/span_of.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/raw_field.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/offset_of.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/memoffset-0.9.0/src/span_of.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/once_cell-48a31306d8a78192.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/once_cell-48a31306d8a78192.d new file mode 100644 index 0000000..2d897f4 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/once_cell-48a31306d8a78192.d @@ -0,0 +1,9 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/once_cell-48a31306d8a78192.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/imp_std.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/race.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libonce_cell-48a31306d8a78192.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/imp_std.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/race.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/once_cell-48a31306d8a78192.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/imp_std.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/race.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/imp_std.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.19.0/src/race.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot-4e57fa5af92dd2a0.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot-4e57fa5af92dd2a0.d new file mode 100644 index 0000000..45abbba --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot-4e57fa5af92dd2a0.d @@ -0,0 +1,19 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot-4e57fa5af92dd2a0.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/condvar.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/elision.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/once.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/deadlock.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot-4e57fa5af92dd2a0.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/condvar.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/elision.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/once.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/deadlock.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot-4e57fa5af92dd2a0.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/condvar.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/elision.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/once.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_fair_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_mutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/remutex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/rwlock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/deadlock.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/condvar.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/elision.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/fair_mutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/mutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/once.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_fair_mutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_mutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/raw_rwlock.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/remutex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/rwlock.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/util.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot-0.11.2/src/deadlock.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot_core-dada876bb2f77143.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot_core-dada876bb2f77143.d new file mode 100644 index 0000000..cfa395a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot_core-dada876bb2f77143.d @@ -0,0 +1,13 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot_core-dada876bb2f77143.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/parking_lot.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/spinwait.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/word_lock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/linux.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libparking_lot_core-dada876bb2f77143.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/parking_lot.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/spinwait.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/word_lock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/linux.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/parking_lot_core-dada876bb2f77143.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/parking_lot.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/spinwait.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/util.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/word_lock.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/linux.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/parking_lot.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/spinwait.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/util.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/word_lock.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/parking_lot_core-0.8.6/src/thread_parker/linux.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/proc_macro2-66c04dbd96f31577.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/proc_macro2-66c04dbd96f31577.d new file mode 100644 index 0000000..7da6225 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/proc_macro2-66c04dbd96f31577.d @@ -0,0 +1,14 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/proc_macro2-66c04dbd96f31577.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/rcvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/detection.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/fallback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/extra.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/wrapper.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libproc_macro2-66c04dbd96f31577.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/rcvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/detection.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/fallback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/extra.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/wrapper.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/proc_macro2-66c04dbd96f31577.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/rcvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/detection.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/fallback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/extra.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/wrapper.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/marker.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/parse.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/rcvec.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/detection.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/fallback.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/extra.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.76/src/wrapper.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3-2042e268c490fafc.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3-2042e268c490fafc.d new file mode 100644 index 0000000..6deaa11 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3-2042e268c490fafc.d @@ -0,0 +1,105 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3-2042e268c490fafc.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/internal_tricks.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/callback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversion.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/anyhow.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/chrono.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/either.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/eyre.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/hashbrown.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/indexmap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/rust_decimal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/serde.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/smallvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/array.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/ipaddr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/map.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/osstr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/vec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/derive_utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/err_state.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/exceptions.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/ffi/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/gil.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/extract_argument.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/freelist.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/not_send.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass/lazy_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymethods.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/trampoline.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/wrap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/instance.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/sync.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/prelude.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/create_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/gc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass_init.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytearray.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/capsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/dict.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/ellipsis.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/floatob.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frame.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frozenset.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/function.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/iterator.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/list.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mapping.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/none.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/notimplemented.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/pysuper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/sequence.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/tuple.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/typeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/version.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/../guide/pyclass_parameters.md + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3-2042e268c490fafc.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/internal_tricks.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/callback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversion.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/anyhow.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/chrono.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/either.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/eyre.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/hashbrown.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/indexmap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/rust_decimal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/serde.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/smallvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/array.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/ipaddr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/map.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/osstr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/vec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/derive_utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/err_state.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/exceptions.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/ffi/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/gil.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/extract_argument.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/freelist.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/not_send.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass/lazy_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymethods.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/trampoline.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/wrap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/instance.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/sync.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/prelude.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/create_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/gc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass_init.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytearray.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/capsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/dict.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/ellipsis.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/floatob.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frame.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frozenset.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/function.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/iterator.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/list.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mapping.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/none.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/notimplemented.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/pysuper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/sequence.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/tuple.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/typeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/version.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/../guide/pyclass_parameters.md + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3-2042e268c490fafc.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/internal_tricks.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/callback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversion.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/anyhow.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/chrono.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/either.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/eyre.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/hashbrown.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/indexmap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/rust_decimal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/serde.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/smallvec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/array.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/ipaddr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/map.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/osstr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/vec.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/derive_utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/err_state.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/exceptions.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/ffi/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/gil.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/extract_argument.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/freelist.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/not_send.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass/lazy_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymethods.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/trampoline.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/wrap.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/instance.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marker.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/sync.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/panic.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/prelude.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell/impl_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/create_type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/gc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass_init.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/type_object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytearray.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/capsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/complex.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/dict.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/ellipsis.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/floatob.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frame.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frozenset.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/function.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/iterator.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/list.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mapping.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/none.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/notimplemented.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/num.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/pysuper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/sequence.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/set.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/slice.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/string.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/tuple.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/typeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/version.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/../guide/pyclass_parameters.md + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/internal_tricks.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/buffer.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/callback.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversion.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/anyhow.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/chrono.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/either.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/eyre.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/hashbrown.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/indexmap.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_bigint.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/num_complex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/rust_decimal.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/serde.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/smallvec.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/array.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/ipaddr.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/map.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/num.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/osstr.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/path.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/set.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/slice.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/string.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/conversions/std/vec.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/derive_utils.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/err_state.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/err/impls.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/exceptions.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/ffi/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/gil.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/deprecations.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/extract_argument.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/freelist.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/frompyobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/not_send.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/panic.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pycell.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyclass/lazy_type_object.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pyfunction.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymethods.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/pymodule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/trampoline.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/impl_/wrap.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/instance.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marker.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/marshal.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/sync.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/panic.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/prelude.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pycell/impl_.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/create_type_object.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass/gc.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/pyclass_init.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/type_object.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/any.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/boolobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytearray.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/bytes.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/capsule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/code.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/complex.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/datetime.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/dict.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/ellipsis.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/floatob.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frame.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/frozenset.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/function.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/iterator.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/list.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/mapping.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/module.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/none.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/notimplemented.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/num.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/pysuper.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/sequence.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/set.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/slice.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/string.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/traceback.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/tuple.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/types/typeobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/version.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/macros.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.20.2/src/../guide/pyclass_parameters.md: + +# env-dep:CARGO_PKG_VERSION=0.20.2 +# env-dep:CARGO_PRIMARY_PACKAGE diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_build_config-0118c39491801101.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_build_config-0118c39491801101.d new file mode 100644 index 0000000..4b8454d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_build_config-0118c39491801101.d @@ -0,0 +1,14 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_build_config-0118c39491801101.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/errors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/impl_.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config-file.txt /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config.txt + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_build_config-0118c39491801101.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/errors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/impl_.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config-file.txt /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config.txt + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_build_config-0118c39491801101.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/errors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/impl_.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config-file.txt /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config.txt + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/errors.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.20.2/src/impl_.rs: +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config-file.txt: +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out/pyo3-build-config.txt: + +# env-dep:CARGO_PKG_VERSION=0.20.2 +# env-dep:OUT_DIR=/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/pyo3-build-config-4c246793abfb3a11/out diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_ffi-e2e8be335f7bec72.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_ffi-e2e8be335f7bec72.d new file mode 100644 index 0000000..817f4f8 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_ffi-e2e8be335f7bec72.d @@ -0,0 +1,90 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_ffi-e2e8be335f7bec72.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bltinmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytearrayobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/codecs.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/complexobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/context.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/enumobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileutils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/intrcheck.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/iterobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/longobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/memoryobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/modsupport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/moduleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/osmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pybuffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pycapsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyhash.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystrtod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/rangeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/setobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sliceobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structseq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sysmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/typeslots.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/warnings.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/weakrefobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structmember.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/frameobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/funcobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/genobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/initconfig.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pydebug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/weakrefobject.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_ffi-e2e8be335f7bec72.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bltinmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytearrayobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/codecs.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/complexobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/context.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/enumobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileutils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/intrcheck.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/iterobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/longobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/memoryobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/modsupport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/moduleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/osmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pybuffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pycapsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyhash.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystrtod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/rangeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/setobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sliceobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structseq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sysmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/typeslots.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/warnings.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/weakrefobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structmember.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/frameobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/funcobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/genobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/initconfig.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pydebug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/weakrefobject.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_ffi-e2e8be335f7bec72.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bltinmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/boolobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytearrayobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/codecs.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/complexobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/context.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/datetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/enumobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileutils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/intrcheck.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/iterobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/longobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/marshal.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/memoryobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/modsupport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/moduleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/osmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pybuffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pycapsule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyhash.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyport.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystrtod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/rangeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/setobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sliceobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structseq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sysmodule.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/traceback.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/typeslots.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/warnings.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/weakrefobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structmember.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/abstract_.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/bytesobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/ceval.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/code.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/compile.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/descrobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/dictobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/frameobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/funcobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/genobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/import.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/initconfig.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/listobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/methodobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/object.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/objimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pydebug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyerrors.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pylifecycle.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pymem.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pystate.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pythonrun.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/floatobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyframe.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/tupleobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/unicodeobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/weakrefobject.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/abstract_.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bltinmodule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/boolobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytearrayobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/bytesobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/ceval.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/codecs.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/compile.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/complexobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/context.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/datetime.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/descrobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/dictobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/enumobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/fileutils.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/floatobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/import.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/intrcheck.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/iterobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/listobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/longobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/marshal.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/memoryobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/methodobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/modsupport.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/moduleobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/object.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/objimpl.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/osmodule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pybuffer.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pycapsule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyerrors.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyframe.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyhash.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pylifecycle.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pymem.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pyport.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystate.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pythonrun.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/pystrtod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/rangeobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/setobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sliceobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structseq.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/sysmodule.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/traceback.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/tupleobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/typeslots.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/unicodeobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/warnings.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/weakrefobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/structmember.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/abstract_.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/bytesobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/ceval.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/code.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/compile.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/descrobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/dictobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/frameobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/funcobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/genobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/import.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/initconfig.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/listobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/methodobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/object.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/objimpl.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pydebug.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyerrors.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pylifecycle.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pymem.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pystate.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pythonrun.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/floatobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/pyframe.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/tupleobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/unicodeobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.20.2/src/cpython/weakrefobject.rs: + +# env-dep:CARGO_PKG_VERSION=0.20.2 diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros-8055185c2296dd9b.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros-8055185c2296dd9b.d new file mode 100644 index 0000000..f7ebbdd --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros-8055185c2296dd9b.d @@ -0,0 +1,5 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros-8055185c2296dd9b.so: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-0.20.2/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros-8055185c2296dd9b.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-0.20.2/src/lib.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-0.20.2/src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros_backend-bdcf66a835555dbc.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros_backend-bdcf66a835555dbc.d new file mode 100644 index 0000000..06d7914 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros_backend-bdcf66a835555dbc.d @@ -0,0 +1,21 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros_backend-bdcf66a835555dbc.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/attributes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/konst.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/method.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/params.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction/signature.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pymethod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/quotes.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libpyo3_macros_backend-bdcf66a835555dbc.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/attributes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/konst.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/method.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/params.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction/signature.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pymethod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/quotes.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/pyo3_macros_backend-bdcf66a835555dbc.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/utils.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/attributes.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/deprecations.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/frompyobject.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/konst.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/method.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/module.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/params.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyclass.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction/signature.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyimpl.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pymethod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/quotes.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/utils.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/attributes.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/deprecations.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/frompyobject.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/konst.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/method.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/module.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/params.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyclass.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyfunction/signature.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pyimpl.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/pymethod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-macros-backend-0.20.2/src/quotes.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/quote-cb9f0fdc266e6110.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/quote-cb9f0fdc266e6110.d new file mode 100644 index 0000000..77756a0 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/quote-cb9f0fdc266e6110.d @@ -0,0 +1,13 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/quote-cb9f0fdc266e6110.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ident_fragment.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/to_tokens.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/runtime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/spanned.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libquote-cb9f0fdc266e6110.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ident_fragment.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/to_tokens.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/runtime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/spanned.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/quote-cb9f0fdc266e6110.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ident_fragment.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/to_tokens.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/runtime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/spanned.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ext.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/format.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/ident_fragment.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/to_tokens.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/runtime.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.35/src/spanned.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/rs_cidr_verifier.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/rs_cidr_verifier.d new file mode 100644 index 0000000..2357d17 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/rs_cidr_verifier.d @@ -0,0 +1,5 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/librs_cidr_verifier.so: src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/rs_cidr_verifier.d: src/lib.rs + +src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/scopeguard-75c1fe041118ac0e.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/scopeguard-75c1fe041118ac0e.d new file mode 100644 index 0000000..4cf982a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/scopeguard-75c1fe041118ac0e.d @@ -0,0 +1,7 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/scopeguard-75c1fe041118ac0e.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/scopeguard-1.2.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libscopeguard-75c1fe041118ac0e.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/scopeguard-1.2.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/scopeguard-75c1fe041118ac0e.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/scopeguard-1.2.0/src/lib.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/scopeguard-1.2.0/src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/serde-0f0732ff4b97647e.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/serde-0f0732ff4b97647e.d new file mode 100644 index 0000000..6c75dfb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/serde-0f0732ff4b97647e.d @@ -0,0 +1,24 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/serde-0f0732ff4b97647e.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/integer128.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/value.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/ignored_any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/size_hint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/fmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impossible.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/de.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/ser.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/doc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/seed.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libserde-0f0732ff4b97647e.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/integer128.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/value.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/ignored_any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/size_hint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/fmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impossible.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/de.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/ser.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/doc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/seed.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/serde-0f0732ff4b97647e.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/integer128.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/value.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/format.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/ignored_any.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/size_hint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/fmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impls.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impossible.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/mod.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/de.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/ser.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/doc.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/seed.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/macros.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/integer128.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/value.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/format.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/ignored_any.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/impls.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/size_hint.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/fmt.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impls.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/ser/impossible.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/mod.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/de.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/ser.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/private/doc.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.195/src/de/seed.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/smallvec-2082adecdd99a2ff.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/smallvec-2082adecdd99a2ff.d new file mode 100644 index 0000000..144a2fb --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/smallvec-2082adecdd99a2ff.d @@ -0,0 +1,7 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/smallvec-2082adecdd99a2ff.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.13.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libsmallvec-2082adecdd99a2ff.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.13.0/src/lib.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/smallvec-2082adecdd99a2ff.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.13.0/src/lib.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.13.0/src/lib.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/syn-5f4affaca40e76f3.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/syn-5f4affaca40e76f3.d new file mode 100644 index 0000000..8c6174d --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/syn-5f4affaca40e76f3.d @@ -0,0 +1,55 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/syn-5f4affaca40e76f3.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/group.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/token.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/attr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_keyword.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_punctuation.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/data.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/derive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/drops.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/expr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/file.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/generics.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ident.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/item.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lifetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lit.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lookahead.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/mac.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/meta.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/op.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/discouraged.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_macro_input.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_quote.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/pat.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/print.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/punctuated.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/restriction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/sealed.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/span.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/spanned.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/stmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/thread.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/tt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ty.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/verbatim.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/whitespace.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/../gen_helper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/export.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/clone.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/debug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/eq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/hash.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libsyn-5f4affaca40e76f3.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/group.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/token.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/attr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_keyword.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_punctuation.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/data.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/derive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/drops.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/expr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/file.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/generics.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ident.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/item.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lifetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lit.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lookahead.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/mac.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/meta.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/op.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/discouraged.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_macro_input.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_quote.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/pat.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/print.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/punctuated.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/restriction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/sealed.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/span.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/spanned.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/stmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/thread.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/tt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ty.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/verbatim.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/whitespace.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/../gen_helper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/export.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/clone.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/debug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/eq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/hash.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/syn-5f4affaca40e76f3.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/macros.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/group.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/token.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/attr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/bigint.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/buffer.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_keyword.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_punctuation.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/data.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/derive.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/drops.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/expr.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ext.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/file.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/generics.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ident.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/item.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lifetime.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lit.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lookahead.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/mac.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/meta.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/op.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/discouraged.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_macro_input.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_quote.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/pat.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/path.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/print.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/punctuated.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/restriction.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/sealed.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/span.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/spanned.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/stmt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/thread.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/tt.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ty.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/verbatim.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/whitespace.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/../gen_helper.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/export.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/clone.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/debug.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/eq.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/hash.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/macros.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/group.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/token.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/attr.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/bigint.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/buffer.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_keyword.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/custom_punctuation.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/data.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/derive.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/drops.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/error.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/expr.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ext.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/file.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/generics.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ident.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/item.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lifetime.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lit.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/lookahead.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/mac.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/meta.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/op.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/discouraged.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_macro_input.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/parse_quote.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/pat.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/path.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/print.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/punctuated.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/restriction.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/sealed.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/span.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/spanned.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/stmt.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/thread.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/tt.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/ty.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/verbatim.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/whitespace.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/../gen_helper.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/export.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/clone.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/debug.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/eq.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/syn-2.0.48/src/gen/hash.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/target_lexicon-73cb5898dc8df82f.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/target_lexicon-73cb5898dc8df82f.d new file mode 100644 index 0000000..b75b09a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/target_lexicon-73cb5898dc8df82f.d @@ -0,0 +1,15 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/target_lexicon-73cb5898dc8df82f.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/data_model.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/host.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/parse_error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/targets.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/triple.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/target-lexicon-96937896324a6b69/out/host.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libtarget_lexicon-73cb5898dc8df82f.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/data_model.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/host.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/parse_error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/targets.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/triple.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/target-lexicon-96937896324a6b69/out/host.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/target_lexicon-73cb5898dc8df82f.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/data_model.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/host.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/parse_error.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/targets.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/triple.rs /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/target-lexicon-96937896324a6b69/out/host.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/data_model.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/host.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/parse_error.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/targets.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/target-lexicon-0.12.13/src/triple.rs: +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/target-lexicon-96937896324a6b69/out/host.rs: + +# env-dep:OUT_DIR=/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/build/target-lexicon-96937896324a6b69/out diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/unicode_ident-4628bccdb087e41d.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/unicode_ident-4628bccdb087e41d.d new file mode 100644 index 0000000..5840127 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/unicode_ident-4628bccdb087e41d.d @@ -0,0 +1,8 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/unicode_ident-4628bccdb087e41d.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/tables.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libunicode_ident-4628bccdb087e41d.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/tables.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/unicode_ident-4628bccdb087e41d.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/tables.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unicode-ident-1.0.12/src/tables.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/deps/unindent-d7f28a3d503a99e0.d b/src/piracyshield_service/whitelist/cidr/target/release/deps/unindent-d7f28a3d503a99e0.d new file mode 100644 index 0000000..b55f17a --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/deps/unindent-d7f28a3d503a99e0.d @@ -0,0 +1,8 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/unindent-d7f28a3d503a99e0.rmeta: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/unindent.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/libunindent-d7f28a3d503a99e0.rlib: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/unindent.rs + +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/deps/unindent-d7f28a3d503a99e0.d: /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/lib.rs /home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/unindent.rs + +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/lib.rs: +/home/dan/.cargo/registry/src/github.com-1ecc6299db9ec823/unindent-0.2.3/src/unindent.rs: diff --git a/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.d b/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.d new file mode 100644 index 0000000..16d3984 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.d @@ -0,0 +1 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.so: /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/src/lib.rs diff --git a/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.so b/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.so new file mode 100755 index 0000000..dabb1c6 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/libcidr_verifier.so differ diff --git a/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.d b/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.d new file mode 100644 index 0000000..0be2937 --- /dev/null +++ b/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.d @@ -0,0 +1 @@ +/home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.so: /home/dan/Documents/Development/SPTech/products/piracyshield/piracyshield_service/src/piracyshield_service/whitelist/cidr/src/lib.rs diff --git a/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.so b/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.so new file mode 100755 index 0000000..ddc6648 Binary files /dev/null and b/src/piracyshield_service/whitelist/cidr/target/release/librs_cidr_verifier.so differ diff --git a/src/piracyshield_service/whitelist/create.py b/src/piracyshield_service/whitelist/create.py new file mode 100644 index 0000000..469b92b --- /dev/null +++ b/src/piracyshield_service/whitelist/create.py @@ -0,0 +1,184 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.utils.time import Time +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_model.whitelist.model import ( + WhitelistModel, + WhitelistModelGenreException, + WhitelistModelFQDNMissingException, + WhitelistModelFQDNNonValidException, + WhitelistModelIPv4MissingException, + WhitelistModelIPv4NonValidException, + WhitelistModelIPv6MissingException, + WhitelistModelIPv6NonValidException, + WhitelistModelRegistrarMissingException, + WhitelistModelRegistrarNonValidException, + WhitelistModelASCodeMissingException, + WhitelistModelASCodeNonValidException +) + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageCreateException, WhitelistStorageGetException + +from piracyshield_service.whitelist.exists_by_value import WhitelistExistsByValueService + +from piracyshield_service.ticket.item.exists_by_value import TicketItemExistsByValueService + +from piracyshield_service.whitelist.errors import WhitelistErrorCode, WhitelistErrorMessage + +class WhitelistCreateService(BaseService): + + """ + Whitelist creation class. + """ + + ticket_item_exists_by_value_service = None + + whitelist_exists_by_value_service = None + + data_storage = None + + data_model = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, genre: str, value: str, created_by: str, registrar: str = None, as_code: str = None) -> bool | Exception: + model = self._validate_parameters( + genre = genre, + value = value, + is_active = True, + registrar = registrar, + as_code = as_code + ) + + # check for duplicates + if self.whitelist_exists_by_value_service.execute( + value = model.get('value') + ): + raise ApplicationException(WhitelistErrorCode.ITEM_EXISTS, WhitelistErrorMessage.ITEM_EXISTS) + + if self.ticket_item_exists_by_value_service.execute( + genre = model.get('genre'), + value = model.get('value') + ): + # NOTE: this exposes the information to any user testing a whitelist item value. + raise ApplicationException(WhitelistErrorCode.ITEM_HAS_TICKET, WhitelistErrorMessage.ITEM_HAS_TICKET) + + document = self._build_document( + model = model, + now = Time.now_iso8601(), + created_by = created_by + ) + + try: + # insert the data into the database + self.data_storage.insert(document) + + except WhitelistStorageCreateException as e: + self.logger.error(f'Error while creating the whitelist item') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + self.logger.info(f'Whitelist item `{document.get("value")}` created by `{document.get("metadata").get("created_by")}`') + + # NOTE: should we consider a task to mark all the pre existent items as whitelisted? + + return True + + def _build_document(self, model: dict, now: str, created_by: str) -> dict: + document = { + 'genre': model.get('genre'), + 'value': model.get('value'), + 'is_active': model.get('is_active'), + 'metadata': { + # creation date + 'created_at': now, + + # same as creation date + 'updated_at': now, + + # who created this item + 'created_by': created_by + } + } + + match model.get('genre'): + case 'fqdn': + document['registrar'] = model.get('registrar') + + case 'ipv4': + document['as_code'] = model.get('as_code') + + case 'ipv6': + document['as_code'] = model.get('as_code') + + return document + + def _schedule_task(self): + pass + + def _validate_parameters(self, genre: str, value: str, is_active: bool, registrar: str = None, as_code: str = None) -> dict: + try: + model = self.data_model( + genre = genre, + value = value, + is_active = is_active, + registrar = registrar, + as_code = as_code + ) + + return model.to_dict() + + except WhitelistModelGenreException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_GENRE, WhitelistErrorMessage.NON_VALID_GENRE) + + except WhitelistModelFQDNMissingException: + raise ApplicationException(WhitelistErrorCode.MISSING_FQDN, WhitelistErrorMessage.MISSING_FQDN) + + except WhitelistModelFQDNNonValidException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_FQDN, WhitelistErrorMessage.NON_VALID_FQDN) + + except WhitelistModelIPv4MissingException: + raise ApplicationException(WhitelistErrorCode.MISSING_IPV4, WhitelistErrorMessage.MISSING_IPV4) + + except WhitelistModelIPv4NonValidException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_IPV4, WhitelistErrorMessage.NON_VALID_IPV4) + + except WhitelistModelIPv6MissingException: + raise ApplicationException(WhitelistErrorCode.MISSING_IPV6, WhitelistErrorMessage.MISSING_IPV6) + + except WhitelistModelIPv6NonValidException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_IPV6, WhitelistErrorMessage.NON_VALID_IPV6) + + except WhitelistModelRegistrarMissingException: + raise ApplicationException(WhitelistErrorCode.MISSING_REGISTRAR, WhitelistErrorMessage.MISSING_REGISTRAR) + + except WhitelistModelRegistrarNonValidException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_REGISTRAR, WhitelistErrorMessage.NON_VALID_REGISTRAR) + + except WhitelistModelASCodeMissingException: + raise ApplicationException(WhitelistErrorCode.MISSING_AS_CODE, WhitelistErrorMessage.MISSING_AS_CODE) + + except WhitelistModelASCodeNonValidException: + raise ApplicationException(WhitelistErrorCode.NON_VALID_AS_CODE, WhitelistErrorMessage.NON_VALID_AS_CODE) + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_model = WhitelistModel + + self.data_storage = WhitelistStorage() + + self.whitelist_exists_by_value_service = WhitelistExistsByValueService() + + self.ticket_item_exists_by_value_service = TicketItemExistsByValueService() diff --git a/src/piracyshield_service/whitelist/errors.py b/src/piracyshield_service/whitelist/errors.py new file mode 100644 index 0000000..d51ee56 --- /dev/null +++ b/src/piracyshield_service/whitelist/errors.py @@ -0,0 +1,68 @@ + +class WhitelistErrorCode: + + GENERIC = '6000' + + NON_VALID_GENRE = '6001' + + MISSING_FQDN = '6002' + + NON_VALID_FQDN = '6003' + + MISSING_IPV4 = '6004' + + NON_VALID_IPV4 = '6005' + + MISSING_IPV6 = '6006' + + NON_VALID_IPV6 = '6007' + + MISSING_REGISTRAR = '6008' + + NON_VALID_REGISTRAR = '6009' + + MISSING_AS_CODE = '6010' + + NON_VALID_AS_CODE = '6011' + + ITEM_EXISTS = '6012' + + ITEM_HAS_TICKET = '6013' + + CANNOT_REMOVE = '6014' + + CANNOT_SET_STATUS = '6015' + +class WhitelistErrorMessage: + + GENERIC = 'Error during the creation of the whitelist item.' + + NON_VALID_GENRE = 'Non valid genre.' + + MISSING_FQDN = 'Missing FQDN item.' + + NON_VALID_FQDN = 'Non valid FQDN.' + + MISSING_IPV4 = 'Missing IPv4 item.' + + NON_VALID_IPV4 = 'Non valid IPv4.' + + MISSING_IPV6 = 'Missing IPv6 item.' + + NON_VALID_IPV6 = 'Non valid IPv6.' + + MISSING_REGISTRAR = 'Missing registrar.' + + NON_VALID_REGISTRAR = 'Non valid registrar. A registrar must be a string (allowed characters: ` -`)' + + MISSING_AS_CODE = 'Missing AS code.' + + NON_VALID_AS_CODE = 'Non valid AS code. An AS code must be represented by a sequence of maximum 9 numbers with or without the `AS` prefix.' + + ITEM_EXISTS = 'This item has been already created.' + + ITEM_HAS_TICKET = 'This item is in a ticket and cannot be whitelisted.' + + CANNOT_REMOVE = 'The item could not be removed. Ensure you have proper permissions or to specify a valid item.' + + CANNOT_SET_STATUS = 'Cannot update the status of the whitelist item.' diff --git a/src/piracyshield_service/whitelist/exists_by_value.py b/src/piracyshield_service/whitelist/exists_by_value.py new file mode 100644 index 0000000..6eb1487 --- /dev/null +++ b/src/piracyshield_service/whitelist/exists_by_value.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class WhitelistExistsByValueService(BaseService): + + """ + Check if a whitelist item exist. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, value: str) -> bool | Exception: + try: + response = self.data_storage.exists_by_value( + value = value + ) + + batch = response.batch() + + if len(batch): + return True + + return False + + except WhitelistStorageGetException as e: + self.logger.error(f'Cannot find whitelist item `{item}`') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = WhitelistStorage() diff --git a/src/piracyshield_service/whitelist/get_all.py b/src/piracyshield_service/whitelist/get_all.py new file mode 100644 index 0000000..7f8809c --- /dev/null +++ b/src/piracyshield_service/whitelist/get_all.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageGetException + +from piracyshield_service.whitelist.errors import WhitelistErrorCode, WhitelistErrorMessage + +class WhitelistGetAllService(BaseService): + + """ + Get all the whitelist items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, account_id: str) -> list | Exception: + try: + response = self.data_storage.get_all( + account_id = account_id + ) + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No whitelist item found') + + return list(batch) + + except WhitelistStorageGetException as e: + self.logger.error(f'Cannot get all the whitelist items') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = WhitelistStorage() diff --git a/src/piracyshield_service/whitelist/get_global.py b/src/piracyshield_service/whitelist/get_global.py new file mode 100644 index 0000000..0baa5cb --- /dev/null +++ b/src/piracyshield_service/whitelist/get_global.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageGetException + +from piracyshield_service.ticket.errors import TicketErrorCode, TicketErrorMessage + +class WhitelistGetGlobalService(BaseService): + + """ + Get all the whitelist items. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self) -> list | Exception: + try: + response = self.data_storage.get_global() + + batch = response.batch() + + if not len(batch): + self.logger.debug(f'No whitelist item found') + + return list(batch) + + except WhitelistStorageGetException as e: + self.logger.error(f'Cannot get all the whitelist items') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = WhitelistStorage() diff --git a/src/piracyshield_service/whitelist/remove.py b/src/piracyshield_service/whitelist/remove.py new file mode 100644 index 0000000..dca0d6b --- /dev/null +++ b/src/piracyshield_service/whitelist/remove.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageRemoveException + +from piracyshield_service.whitelist.errors import WhitelistErrorCode, WhitelistErrorMessage + +class WhitelistRemoveService(BaseService): + + """ + Removes a whitelist item created by an account. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, value: str, account_id: str) -> None | Exception: + try: + affected_rows = self.data_storage.remove( + value = value, + account_id = account_id + ) + + if not affected_rows: + raise ApplicationException(WhitelistErrorCode.CANNOT_REMOVE, WhitelistErrorMessage.CANNOT_REMOVE) + + # NOTE: should we consider a task to mark all the pre existent items as non whitelisted anymore? + + except WhitelistStorageRemoveException as e: + self.logger.error(f'Cannot remove whitelist item `{value}`') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = WhitelistStorage() diff --git a/src/piracyshield_service/whitelist/set_status.py b/src/piracyshield_service/whitelist/set_status.py new file mode 100644 index 0000000..cf36373 --- /dev/null +++ b/src/piracyshield_service/whitelist/set_status.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from piracyshield_service.base import BaseService + +from piracyshield_component.exception import ApplicationException + +from piracyshield_data_storage.whitelist.storage import WhitelistStorage, WhitelistStorageUpdateException + +from piracyshield_service.whitelist.errors import WhitelistErrorCode, WhitelistErrorMessage + +class WhitelistSetStatusService(BaseService): + + """ + Sets the status of a whitelist item. + """ + + data_storage = None + + def __init__(self): + """ + Inizialize logger and required modules. + """ + + super().__init__() + + self._prepare_modules() + + def execute(self, item: str, status: bool) -> bool | Exception: + try: + affected_rows = self.data_storage.update_status( + value = item, + status = status + ) + + if not len(affected_rows): + self.logger.debug(f'Could not set the status for the whitelist item') + + raise ApplicationException(WhitelistErrorCode.CANNOT_SET_STATUS, WhitelistErrorMessage.CANNOT_SET_STATUS) + + except WhitelistStorageUpdateException as e: + self.logger.error(f'Could not update the status of the whitelist item `{item}`') + + raise ApplicationException(WhitelistErrorCode.GENERIC, WhitelistErrorMessage.GENERIC, e) + + return True + + def _schedule_task(self): + pass + + def _validate_parameters(self): + pass + + def _prepare_configs(self): + pass + + def _prepare_modules(self): + self.data_storage = WhitelistStorage()