Confirm Location's protocol support on edit
This commit is contained in:
parent
b132265a04
commit
90dd9b309f
3 changed files with 22 additions and 18 deletions
|
|
@ -27,16 +27,10 @@ Inputs:
|
||||||
def get_supported_protocols_for_location(location_codes: str, profile_type: str = None) -> Result:
|
def get_supported_protocols_for_location(location_codes: str, profile_type: str = None) -> Result:
|
||||||
|
|
||||||
country, city = location_codes.split("_")
|
country, city = location_codes.split("_")
|
||||||
print(f"country is {country}")
|
|
||||||
print(f"city is {city}")
|
|
||||||
|
|
||||||
# this IS doing sql:
|
# this IS doing sql:
|
||||||
location = get_profile_location_data(country_code=country, city_code=city)
|
location = get_profile_location_data(country_code=country, city_code=city)
|
||||||
|
|
||||||
print(f"location is {location}")
|
|
||||||
print(f"location type is {type(location)}")
|
|
||||||
# return location
|
|
||||||
|
|
||||||
if not location:
|
if not location:
|
||||||
error_msg = f"This is a developer error. No location data found for {location_codes}"
|
error_msg = f"This is a developer error. No location data found for {location_codes}"
|
||||||
logger.error(error_msg)
|
logger.error(error_msg)
|
||||||
|
|
@ -58,10 +52,7 @@ def _get_supported_protocols_for_location(location: Location, as_strings: bool =
|
||||||
|
|
||||||
for each_protocol in ALL_PROTOCOLS:
|
for each_protocol in ALL_PROTOCOLS:
|
||||||
supported = location.supports_protocol(enum_value=each_protocol)
|
supported = location.supports_protocol(enum_value=each_protocol)
|
||||||
print(f"supported for {each_protocol} is {supported}")
|
|
||||||
print(f"type of supported is {type(supported)}")
|
|
||||||
if supported:
|
if supported:
|
||||||
print(f"THIS IS TRUE for {each_protocol}")
|
|
||||||
SUPPORTED_PROTOCOLS.append(each_protocol)
|
SUPPORTED_PROTOCOLS.append(each_protocol)
|
||||||
|
|
||||||
return SUPPORTED_PROTOCOLS
|
return SUPPORTED_PROTOCOLS
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ from core.models.BaseProfile import get_application_version
|
||||||
# from core.models.Subscription import Subscription
|
# from core.models.Subscription import Subscription
|
||||||
# from core.models.session.SessionProfile import SessionProfile
|
# from core.models.session.SessionProfile import SessionProfile
|
||||||
# from core.models.system.SystemProfile import SystemProfile
|
# from core.models.system.SystemProfile import SystemProfile
|
||||||
# from core.models.orm_models.Location import Location
|
from core.models.orm_models.Location import Location
|
||||||
# from core.models.orm_models.Operator import Operator
|
# from core.models.orm_models.Operator import Operator
|
||||||
|
|
||||||
SYSTEMWIDE_CHOICES = ['wireguard', 'hysteria2', 'vless']
|
SYSTEMWIDE_CHOICES = ['wireguard', 'hysteria2', 'vless']
|
||||||
|
|
@ -93,12 +93,15 @@ def update_profile(
|
||||||
# ============= LOCATION =============
|
# ============= LOCATION =============
|
||||||
elif key == "location":
|
elif key == "location":
|
||||||
country_code, city_code = new_value.split("_")
|
country_code, city_code = new_value.split("_")
|
||||||
location = get_profile_location_data( # SQLAlchemy
|
new_location = get_profile_location_data( # SQLAlchemy
|
||||||
country_code=country_code,
|
country_code=country_code,
|
||||||
city_code=city_code
|
city_code=city_code
|
||||||
)
|
)
|
||||||
# SQLAlchemy foreign key assignment — fills in id, timezone, operator, etc.
|
pre_existing_protocol = profile.connection.code
|
||||||
profile.location = location
|
if new_location.supports_protocol(pre_existing_protocol):
|
||||||
|
profile.location = new_location
|
||||||
|
else:
|
||||||
|
return Result(valid=False, message=f"The {new_location.name} location doesn't currently support the {str(pre_existing_protocol)} protocol", error_type=ResultError.WRONG_LOCATION)
|
||||||
|
|
||||||
# Subscription gets wiped on a location change, and is outside ORM
|
# Subscription gets wiped on a location change, and is outside ORM
|
||||||
profile.subscription = None
|
profile.subscription = None
|
||||||
|
|
@ -117,12 +120,23 @@ def update_profile(
|
||||||
|
|
||||||
def change_protocol(profile: Profile, new_value: str) -> Result:
|
def change_protocol(profile: Profile, new_value: str) -> Result:
|
||||||
logger.info(f"changing the protcol to {new_value}")
|
logger.info(f"changing the protcol to {new_value}")
|
||||||
|
|
||||||
# ============= SAME VALUE =============
|
# ============= SAME VALUE =============
|
||||||
if profile.connection.code == new_value:
|
if profile.connection.code == new_value:
|
||||||
error_msg = f"This is NOT changing the protocol, it already was {new_value}"
|
error_msg = f"This is NOT changing the protocol, it already was {new_value}"
|
||||||
logger.error(error_msg)
|
logger.error(error_msg)
|
||||||
return Result(valid=False, message=error_msg, error_type=ResultError.INVALID_INPUT)
|
return Result(valid=False, message=error_msg, error_type=ResultError.INVALID_INPUT)
|
||||||
|
|
||||||
|
# ============= LOCATION SUPPORTS PROTOCOL =============
|
||||||
|
logger.info("checking protocol support for this location..")
|
||||||
|
pre_existing_location = profile.location
|
||||||
|
|
||||||
|
if not pre_existing_location.supports_protocol(new_value):
|
||||||
|
logger.error(f"User is trying to update the protocol to {new_value}, but selected an invalid location to do so.")
|
||||||
|
error_msg = f"This location does not yet support the {str(new_value)} protocol."
|
||||||
|
return Result(valid=False, message=error_msg, error_type=ResultError.WRONG_LOCATION)
|
||||||
|
logger.info("Passed location check")
|
||||||
|
|
||||||
# ============= SYSTEMWIDE =============
|
# ============= SYSTEMWIDE =============
|
||||||
logger.info(f"Evaluating the profile's connection type of {profile.type}")
|
logger.info(f"Evaluating the profile's connection type of {profile.type}")
|
||||||
if profile.type == ProfileType.SYSTEM:
|
if profile.type == ProfileType.SYSTEM:
|
||||||
|
|
|
||||||
|
|
@ -56,9 +56,9 @@ class Location(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def supports_protocol(self, enum_value: ProtocolChoice) -> bool:
|
def supports_protocol(self, enum_value: ProtocolChoice|str) -> bool:
|
||||||
# print(f"inside {self.country_name} {self.name} location model's supports_protocol, the submitted protocol is {enum_value}")
|
"""Check if a given location supports a given protocol"""
|
||||||
print(f"enum_value type is {type(enum_value)}")
|
|
||||||
if enum_value is None:
|
if enum_value is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
@ -72,7 +72,6 @@ class Location(BaseModel):
|
||||||
string_version = enum_value
|
string_version = enum_value
|
||||||
|
|
||||||
field_name = f'is_{string_version}_capable'
|
field_name = f'is_{string_version}_capable'
|
||||||
print(f"field_name is {field_name}")
|
|
||||||
return bool(getattr(self, field_name))
|
return bool(getattr(self, field_name))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue