修复了在实际部署环境中,请求可能命中不同进程导致的登录报错
This commit is contained in:
@@ -12,7 +12,7 @@ from django.views.decorators.csrf import csrf_protect, ensure_csrf_cookie
|
||||
from django.conf import settings
|
||||
|
||||
from .es_client import get_user_by_username
|
||||
from .crypto import get_public_key_spki_b64, rsa_oaep_decrypt_b64, aes_gcm_decrypt_b64, verify_password
|
||||
from .crypto import get_public_key_spki_b64, rsa_oaep_decrypt_b64, aes_gcm_decrypt_b64, verify_password, generate_rsa_private_pem_b64, public_spki_b64_from_private_pem_b64, rsa_oaep_decrypt_b64_with_private_pem
|
||||
from elastic.es_connect import get_registration_code, get_user_by_username as es_get_user_by_username, get_all_users as es_get_all_users, write_user_data
|
||||
|
||||
|
||||
@@ -25,7 +25,11 @@ def login_page(request):
|
||||
@require_http_methods(["GET"])
|
||||
@ensure_csrf_cookie
|
||||
def pubkey(request):
|
||||
pk_b64 = get_public_key_spki_b64()
|
||||
pem_b64 = request.session.get("rsa_private_pem_b64")
|
||||
if not pem_b64:
|
||||
pem_b64 = generate_rsa_private_pem_b64()
|
||||
request.session["rsa_private_pem_b64"] = pem_b64
|
||||
pk_b64 = public_spki_b64_from_private_pem_b64(pem_b64)
|
||||
return JsonResponse({"public_key_spki": pk_b64})
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
@@ -56,7 +60,10 @@ def set_session_key(request):
|
||||
if not enc_key_b64:
|
||||
return HttpResponseBadRequest("Missing fields")
|
||||
try:
|
||||
key_bytes = rsa_oaep_decrypt_b64(enc_key_b64)
|
||||
pem_b64 = request.session.get("rsa_private_pem_b64")
|
||||
if not pem_b64:
|
||||
return HttpResponseBadRequest("Decrypt error")
|
||||
key_bytes = rsa_oaep_decrypt_b64_with_private_pem(pem_b64, enc_key_b64)
|
||||
except Exception:
|
||||
return HttpResponseBadRequest("Decrypt error")
|
||||
request.session["session_enc_key_b64"] = base64.b64encode(key_bytes).decode("ascii")
|
||||
@@ -110,6 +117,8 @@ def secure_login_submit(request):
|
||||
request.session["permission"] = 1
|
||||
if "session_enc_key_b64" in request.session:
|
||||
del request.session["session_enc_key_b64"]
|
||||
if "rsa_private_pem_b64" in request.session:
|
||||
del request.session["rsa_private_pem_b64"]
|
||||
if "login_failed_once" in request.session:
|
||||
del request.session["login_failed_once"]
|
||||
if "captcha_code" in request.session:
|
||||
|
||||
Reference in New Issue
Block a user