diff --git a/README.md b/README.md index f1d206f..299cd0d 100644 --- a/README.md +++ b/README.md @@ -118,15 +118,15 @@ sudo systemctl start email-system } ``` -- **获取当前允许的域名列表**: +- **获取当前允许的域名及其创建时间**: - **请求方法**: `GET` - **请求路径**: `/allowed_domains/list` - **成功响应**: ```json - [ - "nosqli.com", - "email.nosqli.com" - ] + { + "email.nosqli.com": "2025-02-26T19:03:53.838745", + "tw.nosqli.com": "2025-02-26T19:05:00.123456" + } ``` ## 日志记录 diff --git a/app/utils.py b/app/utils.py index fa78532..9e0e307 100644 --- a/app/utils.py +++ b/app/utils.py @@ -260,10 +260,13 @@ def extract_code_from_body(body): def add_allowed_domain(domain): - """添加允许的域名""" + """添加允许的域名并记录创建时间""" try: - redis_client.sadd('allowed_domains', domain) - logger.info(f'Added allowed domain: {domain}') + timestamp = datetime.now().isoformat() + redis_client.rpush('allowed_domains_list', domain) # 添加到列表 + redis_client.hset(f'domain:{domain}', 'created_at', timestamp) # 记录创建时间 + redis_client.hset(f'domain_time:{domain}', 'timestamp', timestamp) # 记录时间 + logger.info(f'Added allowed domain: {domain} with timestamp: {timestamp}') except Exception as e: logger.error(f'Error adding allowed domain: {e}') @@ -272,16 +275,35 @@ def remove_allowed_domain(domain): """删除允许的域名""" try: redis_client.srem('allowed_domains', domain) + redis_client.delete(f'domain_time:{domain}') # 删除时间记录 logger.info(f'Removed allowed domain: {domain}') except Exception as e: logger.error(f'Error removing allowed domain: {e}') def get_allowed_domains(): - """获取当前允许的域名列表""" + """获取当前允许的域名""" try: - domains = redis_client.smembers('allowed_domains') - return [domain.decode() for domain in domains] + domains = redis_client.lrange('allowed_domains_list', 0, -1) + domain_list = [] + for domain in domains: + domain_list.append(domain.decode()) + return domain_list except Exception as e: logger.error(f'Error fetching allowed domains: {e}') - return [] \ No newline at end of file + return [] + + +def get_allowed_domains_for_time(): + """获取当前允许的域名及其创建时间,按时间排序""" + try: + domains = redis_client.lrange('allowed_domains_list', 0, -1) + domain_info = {} + for domain in domains: + domain = domain.decode() + created_at = redis_client.hget(f'domain_time:{domain}', 'timestamp') + domain_info[domain] = created_at.decode() if created_at else None + return domain_info + except Exception as e: + logger.error(f'Error fetching allowed domains: {e}') + return {} \ No newline at end of file