|
18 | 18 | from concurrent.futures import ThreadPoolExecutor |
19 | 19 |
|
20 | 20 |
|
21 | | -from dns import message |
22 | | -from dns.rdatatype import TXT |
23 | | - |
24 | | - |
25 | 21 | from .cert_pinning import TLSPinningAdapter |
26 | 22 | from .constants import (ALT_HASH_DICT, DEFAULT_TIMEOUT, DNS_HOSTS, |
27 | 23 | ENCODED_URLS, SRP_MODULUS_KEY, |
28 | 24 | SRP_MODULUS_KEY_FINGERPRINT) |
29 | 25 | from .exceptions import (ConnectionTimeOutError, NetworkError, |
30 | 26 | NewConnectionError, ProtonAPIError, TLSPinningError, |
31 | | - UnknownConnectionError) |
| 27 | + UnknownConnectionError, MissingDepedencyError) |
32 | 28 | from .logger import CustomLogger |
33 | 29 | from .metadata import MetadataBackend |
34 | 30 | from .srp import User as PmsrpUser |
@@ -151,6 +147,7 @@ def __init__( |
151 | 147 | self.__metadata = MetadataBackend.get_backend() |
152 | 148 | self.__metadata.cache_dir_path = cache_dir_path |
153 | 149 | self.__metadata.logger = self._logger |
| 150 | + self.__allow_alternative_routes = None |
154 | 151 |
|
155 | 152 | # Verify modulus |
156 | 153 | self.__gnupg = gnupg.GPG() |
@@ -473,6 +470,18 @@ def get_alternative_routes_from_dns(self, callback=None): |
473 | 470 | If callback is passed then the method does not return any value, otherwise it |
474 | 471 | returns a set(). |
475 | 472 | """ |
| 473 | + |
| 474 | + try: |
| 475 | + from dns import message |
| 476 | + from dns.rdatatype import TXT |
| 477 | + except ImportError as e: |
| 478 | + self._logger.exception(e) |
| 479 | + raise MissingDepedencyError( |
| 480 | + "Could not find dnspython package. " |
| 481 | + "Please either install the missing package or disable " |
| 482 | + "alternative routing." |
| 483 | + ) |
| 484 | + |
476 | 485 | routes = set() |
477 | 486 |
|
478 | 487 | for encoded_url in ENCODED_URLS: |
@@ -511,6 +520,9 @@ def __generate_dns_message(self, encoded_url): |
511 | 520 | dns_query (dns.message.Message): output of dns.message.make_query |
512 | 521 | base64_dns_message (base64): encode bytes |
513 | 522 | """ |
| 523 | + from dns import message |
| 524 | + from dns.rdatatype import TXT |
| 525 | + |
514 | 526 | dns_query = message.make_query(encoded_url, TXT) |
515 | 527 | dns_wire = dns_query.to_wire() |
516 | 528 | base64_dns_message = base64.urlsafe_b64encode(dns_wire).rstrip(b"=") |
@@ -552,6 +564,7 @@ def __extract_dns_answer(self, query_content, dns_query): |
552 | 564 | Returns: |
553 | 565 | set(): alternative routes for API |
554 | 566 | """ |
| 567 | + from dns import message |
555 | 568 | r = message.from_wire( |
556 | 569 | query_content, |
557 | 570 | keyring=dns_query.keyring, |
|
0 commit comments