diff --git a/core/Constants.py b/core/Constants.py index 20dc285..fceabe2 100644 --- a/core/Constants.py +++ b/core/Constants.py @@ -6,7 +6,7 @@ import os @dataclass(frozen=True) class Constants: - DB_VERSION_THIS_APP_WANTS = 1 + DB_VERSION_THIS_APP_WANTS = 2 # Fallback for development (running outside AppImage) fallback_non_appimage = os.path.dirname(os.path.abspath(__file__)) diff --git a/core/controllers/LocationController.py b/core/controllers/LocationController.py index e18d0db..28ffbeb 100644 --- a/core/controllers/LocationController.py +++ b/core/controllers/LocationController.py @@ -7,7 +7,7 @@ from typing import Optional from sqlalchemy import select from sqlalchemy.orm import joinedload from core.models.DatabaseOperation import DatabaseOperation, DBErrorType -from core.models.orm_calls.location_calls import get_profile_location_data +from core.models.orm_calls.location_calls import execute_location_sql class LocationController: diff --git a/core/models/manage/migrations.py b/core/models/manage/migrations.py index 1859a34..f61a195 100644 --- a/core/models/manage/migrations.py +++ b/core/models/manage/migrations.py @@ -3,13 +3,11 @@ from core.errors.logger import logger from core.models.DatabaseOperation import DatabaseOperation, DBErrorType from core.Constants import Constants - -from core.models.orm_models.Location import Location -from core.models.orm_models.Operator import Operator -from core.models.orm_models.CachedSync import CachedSync -from core.models.orm_models.EncryptedProxy import EncryptedProxy - -MODELS = [Location, Operator, CachedSync, EncryptedProxy] +from core.models.manage.session_management import create_ALL_tables +# from core.models.orm_models.Location import Location +# from core.models.orm_models.Operator import Operator +# from core.models.orm_models.CachedSync import CachedSync +# from core.models.orm_models.EncryptedProxy import EncryptedProxy # generic from pathlib import Path @@ -63,6 +61,20 @@ def get_model_columns(model_class): def migrate_sql() -> DatabaseOperation: from core.models.manage.session_management import engine from core.models.orm_models.Base import BaseModel, Base + made_tables = create_ALL_tables() + if made_tables: + logger.info(f"[MIGRATION] Tables loaded") + MODELS = [Location, Operator, CachedSync, EncryptedProxy] + else: + logger.error(f"[MIGRATION] Huge issue with loading the tables via Session management. Trying again within migrations") + try: + from core.models.orm_models.Location import Location + from core.models.orm_models.Operator import Operator + from core.models.orm_models.CachedSync import CachedSync + from core.models.orm_models.EncryptedProxy import EncryptedProxy + except: + logger.error(f"[MIGRATION] Second try to load the tables failed.") + changes_made = [] # Step 1: Extract column definitions directly from each model diff --git a/core/services/networking/api_requests/step1_get_or_post.py b/core/services/networking/api_requests/step1_get_or_post.py index 6c382ed..185a395 100644 --- a/core/services/networking/api_requests/step1_get_or_post.py +++ b/core/services/networking/api_requests/step1_get_or_post.py @@ -40,7 +40,7 @@ def get_data_from_api( None, # get request has no payload connection_observer, client_observer, - timeout=10, + timeout=30, clearweb_resolved_ip=clearweb_resolved_ip ) else: @@ -51,7 +51,7 @@ def get_data_from_api( None, # get request has no payload connection_observer, client_observer, - timeout=5 + timeout=15 ) if not result_object.valid and client_observer: diff --git a/core/services/networking/api_requests/step2_execute.py b/core/services/networking/api_requests/step2_execute.py index bb7fcfd..6ca5e1a 100644 --- a/core/services/networking/api_requests/step2_execute.py +++ b/core/services/networking/api_requests/step2_execute.py @@ -35,7 +35,7 @@ def _execute_tor_request( payload: Optional[dict], connection_observer: Optional[ConnectionObserver] = None, client_observer: Optional[ClientObserver] = None, - timeout: int = 20, + timeout: int = 30, clearweb_resolved_ip: str = None # if DNS via Tor is blocked ) -> ApiResponse: """ @@ -108,7 +108,7 @@ def _execute_regular_request( payload: Optional[dict], connection_observer: Optional[ConnectionObserver] = None, client_observer: Optional[client_observer] = None, - timeout: int = 10, + timeout: int = 20, ) -> ApiResponse: """ Regular (non-Tor) request. NO observer coupling. diff --git a/core/services/networking/api_requests/step4_error_classifier.py b/core/services/networking/api_requests/step4_error_classifier.py index a5f2797..ca82816 100644 --- a/core/services/networking/api_requests/step4_error_classifier.py +++ b/core/services/networking/api_requests/step4_error_classifier.py @@ -56,7 +56,7 @@ def classify_request_error( else: return ApiResponse( valid=False, - error_type=ErrorType.UNKNOWN, + error_type=ErrorType.DNS_RESOLUTION, tor=True, ip_address=ip_via_tor, message=f"For Unknown reasons, we can't connect, but we can resolve {domain_only} to {ip_via_tor} via Tor" diff --git a/core/services/networking/api_requests/step5_solve_api_problems.py b/core/services/networking/api_requests/step5_solve_api_problems.py index a10b063..c7138e4 100644 --- a/core/services/networking/api_requests/step5_solve_api_problems.py +++ b/core/services/networking/api_requests/step5_solve_api_problems.py @@ -40,7 +40,7 @@ def solve_api_problems( elif reason_for_error == ErrorType.DNS_RESOLUTION: logger.debug(f"[API SOLVER] We're solving a DNS resolution error {api_reply_object.message}") if api_reply_object.tor: - dns_fix = get_DNS_then_use_it(get_or_post, url, payload, connection_observer, client_observer) + dns_fix = get_DNS_then_use_it(get_or_post, url, payload, api_reply_object.ip_address, connection_observer, client_observer) return dns_fix else: logger.error(f"[API SOLVER] We have NOT yet setup clearweb DNS solutions") diff --git a/core/services/networking/api_requests/subtools/direct_dns_tools.py b/core/services/networking/api_requests/subtools/direct_dns_tools.py index 719fb78..0c79723 100644 --- a/core/services/networking/api_requests/subtools/direct_dns_tools.py +++ b/core/services/networking/api_requests/subtools/direct_dns_tools.py @@ -26,6 +26,7 @@ def get_DNS_then_use_it( get_or_post: str, full_url: str, payload: str = None, + ip_address: str = None, connection_observer: Optional[ConnectionObserver] = None, client_observer: Optional[ClientObserver] = None, ) -> ApiResponse: @@ -59,17 +60,19 @@ def get_DNS_then_use_it( # ================= Do Quad9 Query =============== domain = extract_domain(full_url) logger.debug(f"[DNS TOOLS] We'll be doing a DNS lookup to the domain {domain}..") - ip_address = quad9_proxy_dns_lookup(domain, tor_proxy) if not ip_address: - return ApiResponse( - valid=False, - error_type=ErrorType.QUAD9_DNS_RESOLUTION, - tor=True, - message=f"Cannot resolve {domain} via Tor or Quad9" - ) - - logger.debug(f"[DNS TOOLS] We got an IP address from Quad9 for {domain} of: {ip_address}") + ip_address = quad9_proxy_dns_lookup(domain, tor_proxy) + + if not ip_address: + return ApiResponse( + valid=False, + error_type=ErrorType.QUAD9_DNS_RESOLUTION, + tor=True, + message=f"Cannot resolve {domain} via Tor or Quad9" + ) + + logger.debug(f"[DNS TOOLS] We got an IP address from Quad9 for {domain} of: {ip_address}") # ================= Use Custom DNS =============== client = create_httpx_client_with_custom_dns({domain: ip_address}, tor_proxy)