✏️ Fix: [dev] mail 기능 수정
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
@@ -16,6 +17,9 @@ except ImportError:
|
|||||||
|
|
||||||
LOCAL_RE = re.compile(r"^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$")
|
LOCAL_RE = re.compile(r"^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$")
|
||||||
|
|
||||||
|
ANSI_RE = re.compile(r"\x1B\[[0-?]*[ -/]*[@-~]")
|
||||||
|
EMAIL_RE = re.compile(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------
|
# ----------------------------
|
||||||
# Feature toggle
|
# Feature toggle
|
||||||
@@ -84,11 +88,22 @@ def _dms_exec(setup_args):
|
|||||||
raise
|
raise
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise APIException(f"Failed to exec into '{name}'. ({e})")
|
raise APIException(f"Failed to exec into '{name}'. ({e})")
|
||||||
|
|
||||||
|
|
||||||
|
def _wait_until_exists(address: str, tries: int = 3, delay: float = 0.3) -> bool:
|
||||||
|
addr = address.strip().lower()
|
||||||
|
for _ in range(tries):
|
||||||
|
if addr in _email_list():
|
||||||
|
return True
|
||||||
|
time.sleep(delay)
|
||||||
|
return False
|
||||||
|
|
||||||
def _email_list():
|
def _email_list():
|
||||||
out = _dms_exec(["email", "list"])
|
raw = _dms_exec(["email", "list"])
|
||||||
return [ln.strip() for ln in out.splitlines() if ln.strip()]
|
raw = ANSI_RE.sub("", raw) # 색상코드 제거
|
||||||
|
# 어떤 형식이 와도 이메일만 뽑아냄
|
||||||
|
emails = set(m.group(0).strip().lower() for m in EMAIL_RE.finditer(raw))
|
||||||
|
return sorted(emails)
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------
|
# ----------------------------
|
||||||
@@ -142,19 +157,16 @@ def request_account(request):
|
|||||||
# Create account inside dms-mailserver
|
# Create account inside dms-mailserver
|
||||||
_dms_exec(["email", "add", address, password])
|
_dms_exec(["email", "add", address, password])
|
||||||
|
|
||||||
# Verify by listing again
|
if _wait_until_exists(address):
|
||||||
emails2 = _email_list()
|
|
||||||
if address in emails2:
|
|
||||||
return Response({"message": f"✅ {address} 계정이 잘 만들어졌습니다! (email list에서 확인됨)"})
|
return Response({"message": f"✅ {address} 계정이 잘 만들어졌습니다! (email list에서 확인됨)"})
|
||||||
|
|
||||||
return Response(
|
return Response({"detail": "계정 생성 후 list에서 확인이 안 됩니다. 다시 제출 버튼을 눌러서 확인해보시거나 관리자에게 문의해주세요."}, status=500)
|
||||||
{"detail": "계정 생성 후 list에서 확인이 안 됩니다."},
|
|
||||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
||||||
)
|
|
||||||
|
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
# setup command returned error
|
msg = str(e)
|
||||||
return Response({"detail": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
if "already exists" in msg.lower():
|
||||||
|
return Response({"message": f"ℹ️ {address} 는 이미 존재합니다."})
|
||||||
|
return Response({"detail": msg}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Response({"detail": f"서버 오류: {e}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
return Response({"detail": f"서버 오류: {e}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user