晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/subsys/panels/cpanel/ |
| Current File : //opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/subsys/panels/cpanel/packages.py |
import logging
import datetime
from typing import List
from defence360agent.utils import timed_cache
from defence360agent.subsys.panels.cpanel.whm import WHMAPIException, whmapi1
logger = logging.getLogger(__name__)
class PackageNotExistError(WHMAPIException):
pass
class PkgInfo(dict):
def extensions(self) -> List[str]:
return self.get("_PACKAGE_EXTENSIONS", "").split()
def has_extension(self, name: str) -> bool:
return name in self.extensions()
def name(self) -> str:
return self["name"]
@timed_cache(datetime.timedelta(seconds=90), maxsize=100)
async def get_package_info(name: str) -> PkgInfo:
try:
data = await whmapi1("getpkginfo", pkg=name)
except WHMAPIException as e:
if "No such file or directory" in str(e):
raise PackageNotExistError(e)
else:
raise
info = PkgInfo(data["pkg"])
info["name"] = name
return info
async def list_packages(want="all") -> List[PkgInfo]:
data = await whmapi1("listpkgs", want=want)
return [PkgInfo(item) for item in data["pkg"]]
async def remove_extension(extension_name: str, package_info: PkgInfo) -> None:
"""Removes extension from a package described by package_info."""
name = package_info.name()
if package_info.has_extension(extension_name):
await whmapi1(
"delpkgext", name=name, _DELETE_EXTENSIONS=extension_name
)
logger.info(
"Extension %s disabled for package %s", extension_name, name
)
return
logger.info(
"Extension %s was already disabled for package %s",
extension_name,
name,
)
async def add_extension(
extension_name: str, package_info: PkgInfo, **kwargs
) -> None:
"""Adds extension to a package described by package_info.
kwargs holds extra variables to set for the extension."""
name = package_info.name()
if not package_info.has_extension(extension_name):
await whmapi1(
"addpkgext",
name=name,
_PACKAGE_EXTENSIONS=extension_name,
**kwargs
)
logger.info(
"Extension %s enabled for package %s", extension_name, name
)
return
logger.info(
"Extension %s was already enabled for package %s", extension_name, name
)
async def add_extension_for_all(extension_name: str, **kwargs) -> None:
"""Add given extension to all cPanel packages."""
for pkg in await list_packages():
try:
await add_extension(extension_name, pkg, **kwargs)
except WHMAPIException:
logger.exception(
"Unable to add extension %s to package %s",
extension_name,
pkg["name"],
)
async def remove_extension_from_all(extension_name: str) -> None:
"""Remove given extension from all cPanel packages."""
for pkg in await list_packages():
try:
await remove_extension(extension_name, pkg)
except WHMAPIException:
logger.exception(
"Unable to remove extension %s from package %s",
extension_name,
pkg["name"],
)
logger.info(
"Imunify360 package extensions have been removed from all packages."
)
|