晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/dodgy/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/dodgy/run.py |
import json
import mimetypes
import os
import re
import sys
from argparse import ArgumentParser
from dodgy.checks import check_file
IGNORE_PATHS = [
re.compile(patt % {"sep": re.escape(os.path.sep)})
for patt in (
r"(^|%(sep)s)\.[^\.]", # ignores any files or directories starting with '.'
r"^tests?%(sep)s?",
r"%(sep)stests?(%(sep)s|$)",
# Ignore foo_test(s)/.
r"_tests?(%(sep)s|$)",
)
]
def list_files(start_path):
filepaths = []
for root, _, files in os.walk(start_path):
for file_name in files:
filepaths.append(os.path.join(root, file_name))
return filepaths
def run_checks(directory, ignore_paths=None):
warnings = []
ignore_paths = ignore_paths or []
ignore_paths = [re.compile(patt) for patt in ignore_paths]
ignore_paths += IGNORE_PATHS
filepaths = list_files(directory)
for filepath in filepaths:
relpath = os.path.relpath(filepath, directory)
if any([ignore.search(relpath) for ignore in ignore_paths]):
continue
# this is a naive check to skip binary files, it's probably okay for now
mimetype = mimetypes.guess_type(filepath)
if mimetype[0] is None or not mimetype[0].startswith("text/"):
continue
try:
for msg_parts in check_file(filepath):
warnings.append(
{
"path": relpath,
"line": msg_parts[0],
"code": msg_parts[1],
"message": msg_parts[2],
}
)
except UnicodeDecodeError as err:
# This is a file which cannot be opened using codecs with UTF-8
print("Unable to read {!r}: {}".format(filepath, err))
return warnings
def run(ignore_paths=None, zero_exit=False):
warnings = run_checks(os.getcwd(), ignore_paths=ignore_paths)
output = json.dumps({"warnings": warnings}, indent=2)
sys.stdout.write(output + "\n")
if zero_exit:
sys.exit(0)
sys.exit(1 if warnings else 0)
def main(argv=None):
argv = argv or sys.argv
desc = (
'A very basic tool to run against your codebase to search for "dodgy" looking values. '
"It is a series of simple regular expressions designed to detect things such as "
"accidental SCM diff checkins, or passwords/secret keys hardcoded into files."
)
parser = ArgumentParser("dodgy", description=desc)
parser.add_argument(
"--ignore-paths",
"-i",
nargs="+",
type=str,
dest="ignore",
default=None,
metavar="IGNORE_PATH",
help="Paths to ignore",
)
parser.add_argument(
"--zero-exit",
"-0",
dest="zero_exit",
help="Dodgy will exit with a code of 1 if problems are found. This flag ensures that it always returns with 0 unless an exception is raised.",
action="store_true",
)
args, _ = parser.parse_known_args(argv)
run(ignore_paths=args.ignore, zero_exit=args.zero_exit)
if __name__ == "__main__":
main()
|