mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-11-17 19:16:25 +00:00
Update AppImage
This commit is contained in:
@@ -24,13 +24,13 @@ except ImportError:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
import pyotp
|
import pyotp
|
||||||
import qrcode
|
import segno
|
||||||
import io
|
import io
|
||||||
import base64
|
import base64
|
||||||
TOTP_AVAILABLE = True
|
TOTP_AVAILABLE = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
TOTP_AVAILABLE = False
|
TOTP_AVAILABLE = False
|
||||||
print("Warning: pyotp/qrcode not available. 2FA features will be disabled.")
|
print("Warning: pyotp/segno not available. 2FA features will be disabled.")
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
CONFIG_DIR = Path.home() / ".config" / "proxmenux-monitor"
|
CONFIG_DIR = Path.home() / ".config" / "proxmenux-monitor"
|
||||||
@@ -303,7 +303,7 @@ def generate_totp_secret():
|
|||||||
def generate_totp_qr(username, secret):
|
def generate_totp_qr(username, secret):
|
||||||
"""
|
"""
|
||||||
Generate a QR code for TOTP setup
|
Generate a QR code for TOTP setup
|
||||||
Returns base64 encoded PNG image
|
Returns base64 encoded SVG image
|
||||||
"""
|
"""
|
||||||
if not TOTP_AVAILABLE:
|
if not TOTP_AVAILABLE:
|
||||||
return None
|
return None
|
||||||
@@ -316,20 +316,16 @@ def generate_totp_qr(username, secret):
|
|||||||
issuer_name="ProxMenux Monitor"
|
issuer_name="ProxMenux Monitor"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Generate QR code
|
qr = segno.make(uri)
|
||||||
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
|
||||||
qr.add_data(uri)
|
|
||||||
qr.make(fit=True)
|
|
||||||
|
|
||||||
img = qr.make_image(fill_color="black", back_color="white")
|
# Convert to SVG string
|
||||||
|
buffer = io.StringIO()
|
||||||
|
qr.save(buffer, kind='svg', scale=4, border=2)
|
||||||
|
svg_content = buffer.getvalue()
|
||||||
|
|
||||||
# Convert to base64
|
# Return as data URL
|
||||||
buffer = io.BytesIO()
|
svg_base64 = base64.b64encode(svg_content.encode()).decode()
|
||||||
img.save(buffer, format='PNG')
|
return f"data:image/svg+xml;base64,{svg_base64}"
|
||||||
buffer.seek(0)
|
|
||||||
img_base64 = base64.b64encode(buffer.getvalue()).decode()
|
|
||||||
|
|
||||||
return f"data:image/png;base64,{img_base64}"
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error generating QR code: {e}")
|
print(f"Error generating QR code: {e}")
|
||||||
return None
|
return None
|
||||||
@@ -356,7 +352,7 @@ def setup_totp(username):
|
|||||||
Returns (success: bool, secret: str, qr_code: str, backup_codes: list, message: str)
|
Returns (success: bool, secret: str, qr_code: str, backup_codes: list, message: str)
|
||||||
"""
|
"""
|
||||||
if not TOTP_AVAILABLE:
|
if not TOTP_AVAILABLE:
|
||||||
return False, None, None, None, "2FA is not available (pyotp/qrcode not installed)"
|
return False, None, None, None, "2FA is not available (pyotp/segno not installed)"
|
||||||
|
|
||||||
config = load_auth_config()
|
config = load_auth_config()
|
||||||
|
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ pip3 install --target "$APP_DIR/usr/lib/python3/dist-packages" \
|
|||||||
requests \
|
requests \
|
||||||
PyJWT \
|
PyJWT \
|
||||||
pyotp \
|
pyotp \
|
||||||
qrcode[pil] \
|
segno \
|
||||||
googletrans==4.0.0-rc1 \
|
googletrans==4.0.0-rc1 \
|
||||||
httpx==0.13.3 \
|
httpx==0.13.3 \
|
||||||
httpcore==0.9.1 \
|
httpcore==0.9.1 \
|
||||||
|
|||||||
Reference in New Issue
Block a user