晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/imunify360/venv/share/imunify360/scripts/migrate_csf/ |
| Current File : //opt/imunify360/venv/share/imunify360/scripts/migrate_csf/country.py |
import subprocess
from typing import Literal
from csf_conf import get_csf_config_value
from logger_config import get_logger, capture_exception
def migrate_country_codes() -> None:
logger = get_logger()
try:
warn_cc_allow_fitler_is_set()
allowed = get_csf_config_value("CC_ALLOW")
denied = get_csf_config_value("CC_DENY")
allowed = allowed.split(",") if allowed else []
denied = denied.split(",") if denied else []
logger.info(f"detected {allowed} allowed country codes")
logger.info(f"detected {denied} denied country codes")
if "US" in denied:
logger.warning("""
Detect US in denied list, if this was unintentional, please remove it by running
imunify360-agent blacklist country delete US
""")
apply_to_imunify_lists(allowed=allowed, denied=denied)
logger.info(
"country codes migrated to imunify lists, please verify them below"
)
print_country_codes_in_imunify_lists()
except Exception as e:
logger.error(f"Error during country codes migration: {e}")
capture_exception(e, {"migration_type": "country_codes"})
def warn_cc_allow_fitler_is_set() -> None:
logger = get_logger()
value = get_csf_config_value("CC_ALLOW_FILTER")
if value and value != "":
logger.warning(
f"CC_ALLOW_FILTER is set to {value}, this will be ignored. We don't support it yet. "
"If you need it, please contact support."
)
def apply_to_imunify_lists(*, allowed: list[str], denied: list[str]) -> None:
logger = get_logger()
logger.info("applying to imunify lists")
add_country_code_to_imunify_list(
list_name="whitelist", country_codes=allowed
)
add_country_code_to_imunify_list(
list_name="blacklist", country_codes=denied
)
def add_country_code_to_imunify_list(
*, list_name: Literal["whitelist", "blacklist"], country_codes: list[str]
) -> None:
logger = get_logger()
if not country_codes:
logger.info(f"No country codes to add to {list_name}")
return
cmd = [
"imunify360-agent",
list_name,
"country",
"add",
"--comment",
'"migrated from csf"',
*country_codes,
]
logger.debug(f"Executing command: {' '.join(cmd)}")
res = subprocess.run(cmd, capture_output=True, text=True)
# Parse stderr for warnings about countries already in list
already_in_list_warnings = []
if res.stderr:
for line in res.stderr.strip().split("\n"):
if "is already in" in line and "list" in line:
already_in_list_warnings.append(line.strip())
# Log non-critical warnings as debug info
for warning in already_in_list_warnings:
logger.debug(f"Imunify agent warning: {warning}")
# Only log error if return code is non-zero AND there are no "already in list" warnings
# or if there are other types of errors
if res.returncode != 0:
if already_in_list_warnings:
# If all errors are about countries already being in the list, just log as info
logger.info(
f"Some countries from {country_codes} are already in {list_name}"
)
else:
# Log actual errors
logger.error(
f"Error adding {country_codes} to {list_name}: {res.stderr}"
)
def print_country_codes_in_imunify_lists() -> None:
print_country_codes_in_imunify_list(list_name="whitelist")
print_country_codes_in_imunify_list(list_name="blacklist")
def print_country_codes_in_imunify_list(
*, list_name: Literal["whitelist", "blacklist"]
) -> None:
logger = get_logger()
logger.info(f"\nlisting {list_name} countries:")
res = subprocess.run(
[
"imunify360-agent",
list_name,
"country",
"list",
],
capture_output=True,
text=True,
)
if res.returncode != 0:
logger.error(f"Error listing {list_name} countries: {res.stderr}")
return
logger.info(res.stdout)
|