|
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