晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/lvestats/lib/commons/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/lvestats/lib/commons/htpasswd.py |
# coding=utf-8
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
import base64
import hashlib
import os
__author__ = "Eli Carter"
class HtpasswdDoesNotExists(Exception):
pass
class HtpasswdFile(object):
"""
A class for manipulating htpasswd files.
"""
def __init__(self, filename, create=False):
self.entries = []
self.filename = filename
if not create:
if os.path.exists(self.filename):
self.load()
else:
raise HtpasswdDoesNotExists(f"{self.filename} does not exist")
def load(self):
"""
Read the htpasswd file into memory.
"""
self.entries = []
with open(self.filename, 'r', encoding='utf-8') as f:
for line in f:
username, pwhash = line.split(':')
entry = [username, pwhash.rstrip()]
self.entries.append(entry)
def save(self):
"""
Write the htpasswd file to disk
"""
with open(self.filename, 'w', encoding='utf-8') as f:
for entry in self.entries:
f.write(f"{entry[0]}:{entry[1]}\n")
def update(self, username, password):
"""
Replace the entry for the given user, or add it if new.
"""
# Generate a random salt
salt = os.urandom(16)
# Hash the password using PBKDF2 with HMAC-SHA256
pwhash = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
# Store the salt along with the hash to use it during password verification
stored_password = base64.b64encode(salt + pwhash).decode('utf-8')
# Find matching entries
matching_entries = [entry for entry in self.entries
if entry[0] == username]
if matching_entries:
matching_entries[0][1] = stored_password
else:
self.entries.append([username, stored_password])
def delete(self, username):
"""
Remove the entry for the given user.
"""
self.entries = [entry for entry in self.entries
if entry[0] != username]
|