Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
103 lines
2.9 KiB
Python
103 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
密碼雜湊生成工具
|
||
|
||
使用方法:
|
||
1. 直接執行:python generate_password_hash.py
|
||
2. 輸入新密碼(至少8字元,包含英文和數字)
|
||
3. 將生成的雜湊值複製到 .env 檔案的 LOGIN_PASSWORD 欄位
|
||
|
||
注意:執行後請立即刪除或清空終端機歷史記錄,避免明文密碼外洩
|
||
"""
|
||
|
||
from werkzeug.security import generate_password_hash
|
||
import sys
|
||
import getpass
|
||
|
||
def validate_password_strength(password):
|
||
"""
|
||
驗證密碼強度
|
||
|
||
要求:
|
||
- 至少 8 個字元
|
||
- 包含英文字母
|
||
- 包含數字
|
||
"""
|
||
if len(password) < 8:
|
||
return False, "密碼長度至少需要 8 個字元"
|
||
|
||
has_letter = any(c.isalpha() for c in password)
|
||
has_digit = any(c.isdigit() for c in password)
|
||
|
||
if not has_letter:
|
||
return False, "密碼必須包含英文字母"
|
||
|
||
if not has_digit:
|
||
return False, "密碼必須包含數字"
|
||
|
||
return True, None
|
||
|
||
def main():
|
||
print("=" * 60)
|
||
print("🔐 MOMO 監控系統 - 密碼雜湊生成工具")
|
||
print("=" * 60)
|
||
print()
|
||
print("密碼要求:")
|
||
print(" • 至少 8 個字元")
|
||
print(" • 包含英文字母(大小寫皆可)")
|
||
print(" • 包含數字")
|
||
print(" • 建議使用符號增加強度(如 !@#$%^&*)")
|
||
print()
|
||
|
||
try:
|
||
# 使用 getpass 隱藏輸入(不會在終端顯示)
|
||
password = getpass.getpass("請輸入新密碼: ")
|
||
|
||
if not password:
|
||
print("\n❌ 密碼不能為空")
|
||
sys.exit(1)
|
||
|
||
# 驗證密碼強度
|
||
is_valid, error_message = validate_password_strength(password)
|
||
if not is_valid:
|
||
print(f"\n❌ {error_message}")
|
||
sys.exit(1)
|
||
|
||
# 再次確認密碼
|
||
password_confirm = getpass.getpass("請再次輸入密碼: ")
|
||
|
||
if password != password_confirm:
|
||
print("\n❌ 兩次輸入的密碼不一致")
|
||
sys.exit(1)
|
||
|
||
# 生成雜湊
|
||
password_hash = generate_password_hash(password, method='pbkdf2:sha256', salt_length=16)
|
||
|
||
print("\n" + "=" * 60)
|
||
print("✅ 密碼雜湊生成成功!")
|
||
print("=" * 60)
|
||
print()
|
||
print("請將以下內容複製到 .env 檔案中:")
|
||
print()
|
||
print(f"LOGIN_PASSWORD={password_hash}")
|
||
print()
|
||
print("⚠️ 安全提醒:")
|
||
print(" 1. 請立即將上述雜湊值複製到 .env 檔案")
|
||
print(" 2. 重新啟動 app.py 使新密碼生效")
|
||
print(" 3. 清空終端機歷史記錄(history -c)")
|
||
print(" 4. 不要將 .env 檔案提交到 Git")
|
||
print(" 5. 定期更換密碼(建議每 90 天)")
|
||
print()
|
||
print("=" * 60)
|
||
|
||
except KeyboardInterrupt:
|
||
print("\n\n⚠️ 操作已取消")
|
||
sys.exit(0)
|
||
except Exception as e:
|
||
print(f"\n❌ 發生錯誤: {e}")
|
||
sys.exit(1)
|
||
|
||
if __name__ == "__main__":
|
||
main()
|