sync from local backup
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import uuid
|
||||
import time
|
||||
from django.core.cache import cache
|
||||
|
||||
QR_TOKEN_PREFIX = "qr_token:"
|
||||
QR_TOKEN_EXPIRE = 300
|
||||
QR_CONFIRM_EXPIRE = 120
|
||||
|
||||
|
||||
def generate_qr_token():
|
||||
token = uuid.uuid4().hex
|
||||
key = f"{QR_TOKEN_PREFIX}{token}"
|
||||
cache.set(key, {
|
||||
"status": "waiting",
|
||||
"user_id": None,
|
||||
"scan_user_id": None,
|
||||
"scan_username": None,
|
||||
"created_at": time.time(),
|
||||
"expires_at": time.time() + QR_TOKEN_EXPIRE,
|
||||
}, QR_TOKEN_EXPIRE)
|
||||
return token
|
||||
|
||||
|
||||
def get_qr_status(token):
|
||||
key = f"{QR_TOKEN_PREFIX}{token}"
|
||||
data = cache.get(key)
|
||||
if not data:
|
||||
return {"status": "expired"}
|
||||
return data
|
||||
|
||||
|
||||
def scan_qr(token, user_id, username):
|
||||
key = f"{QR_TOKEN_PREFIX}{token}"
|
||||
data = cache.get(key)
|
||||
if not data or data["status"] != "waiting":
|
||||
return False
|
||||
data["status"] = "scanned"
|
||||
data["scan_user_id"] = user_id
|
||||
data["scan_username"] = username
|
||||
data["expires_at"] = time.time() + QR_CONFIRM_EXPIRE
|
||||
cache.set(key, data, QR_CONFIRM_EXPIRE)
|
||||
return True
|
||||
|
||||
|
||||
def confirm_qr(token):
|
||||
key = f"{QR_TOKEN_PREFIX}{token}"
|
||||
data = cache.get(key)
|
||||
if not data or data["status"] != "scanned":
|
||||
return None
|
||||
data["status"] = "confirmed"
|
||||
cache.set(key, data, 60)
|
||||
return data
|
||||
|
||||
|
||||
def cancel_qr(token):
|
||||
key = f"{QR_TOKEN_PREFIX}{token}"
|
||||
data = cache.get(key)
|
||||
if data:
|
||||
data["status"] = "cancelled"
|
||||
cache.set(key, data, 60)
|
||||
Reference in New Issue
Block a user