크라우니메일 3건 수정 — 폰트/강제로그인/저장소용량
개요
mail.crowny.org:9610(로컬 맥 + VPS 1.234.20.240 동일 구조) 앱v3 SPA에서 보고된 3건 수정:
- 중앙 크라우니디자인 CSS가 메일 자체 굵은 폰트를 얇게 덮어씀
- 세션 TTL이 DB엔 저장되나 검증 시 체크 안 해서 사실상 영구 로그인 + 로그아웃 버튼 없음
- 저장소 용량이
df -m(디스크 파티션 전체)을 반환해 실제 메일 데이터 폴더 용량과 무관한 값 표시
무엇을 했는지
1. 폰트
pages/앱v3.html 4번째 줄의 <link rel="stylesheet" href="https://studio.crowny.org/font/크라우니디자인.css" data-cds> 제거
- 다른 서비스 링크는 건드리지 않음(이 파일 단독 조치)
- 검증:
curl localhost:9610/ 응답 HTML에 data-cds 없음 확인, Pretendard/Noto Serif 링크 및 font-weight:450 등 자체 규칙 그대로 살아있음
2. 강제 로그인 게이트
버그 확인: 세션생성()은 세션만료목록에 발급시각+86400000(24h)을 저장하지만, 세션검증()은 토큰 일치만 보고 만료를 전혀 비교하지 않음 → 사실상 영구 세션
크라우니메일서버.한선 세션검증(토큰) 수정: 매칭된 세션의 만료 타임스탬프를 현재시간()과 비교해 지났으면 -1(미인증) 반환
세션폐기(토큰) 함수 신규 추가 — 만료값을 0으로 덮어써 즉시 무효화
/api/auth/logout(POST) 라우트 신규 추가 — 세션폐기(세션) 호출 후 {"ok":true} 응답
클라이언트: pages/앱v3.html의 getSession()을 localStorage→sessionStorage로 전환(탭/브라우저 종료 시 자동 로그아웃), doLogout() 함수 추가(서버 로그아웃 호출 + 세션 삭제 + 로그인 페이지 리다이렉트)
pages/로그인v3.html의 토큰 저장도 localStorage→sessionStorage로 통일
설정 화면(renderSettings)에 "계정" 카드 + 로그아웃 버튼 신규 추가(기존엔 로그아웃 UI 자체가 없었음)
검증(curl, 실제 계정 admin/crowny2026!):
잘못된 비번 → {"error":"인증 실패"}
위조 토큰(bogus-fake-token)으로 /api/storage 호출 → {"error":"로그인 필요"} (401)
정상 로그인 → 유효 토큰 발급 → /api/storage 200 정상 응답
/api/auth/logout 호출 후 같은 토큰으로 재요청 → 401 (즉시 무효화 확인)3. 저장소 용량
- 버그:
_스토리지새로고침()이 df -m '데이터경로' | tail -1 | awk '{print $3,$4}'로 디스크 파티션 전체 used/avail을 가져옴 — 메일 폴더가 1MB뿐이어도 파티션 사용량(수백GB)이 나옴
- 수정:
du -sm '데이터경로' 2>/dev/null | awk '{print $1}'로 메일 데이터 폴더 자체 용량만 집계, availMB = quotaGB(15)*1024 - usedMB로 계산(0 미만 방지)
- 검증:
curl localhost:9610/api/storage(로그인 토큰 포함) → {"usedMB":2,...}. 실측 du -sm /Users/ef/crowny-data/mail = 2MB로 일치
- 프론트
pages/앱v3.html 324줄 근처 데모 고정값(storage:{usedGB:1.2,...})은 데모 모드 전용이라 미수정(문제는 서버 모드의 df 버그였음, 확인 완료)
관련 파일
/Users/ef/crowny-mail/크라우니메일서버.한선 — 세션검증/세션폐기/logout 라우트/스토리지새로고침 수정
/Users/ef/crowny-mail/크라우니메일서버.toau — hanseonc_high 재컴파일 산출물(구버전은 .toau.bak-preSession-*로 백업)
/Users/ef/crowny-mail/pages/앱v3.html — 폰트 링크 제거, sessionStorage 전환, doLogout, 설정화면 로그아웃 버튼
/Users/ef/crowny-mail/pages/로그인v3.html — sessionStorage 전환
컴파일/재기동
/Users/ef/CrownyOS/crownyc/hanseonc_high 크라우니메일서버.한선 > 크라우니메일서버.toau
# stderr 경고 0, 61721 큐브 생성
crownyc run 크라우니메일서버.toau (기존 PID kill 후 재기동, :9610)
잔여 이슈
- VPS(1.234.20.240:9610) 미반영 — VPS는 별도 소스 패키징(
배포/까페24VPS-배포.md 절차: tar 패키징→scp→VPS에서 hanseonc_high 재컴파일)으로 배포되는 독립 인스턴스라 로컬 수정이 자동 전파되지 않음. 반영하려면 위 가이드대로 크라우니메일서버.한선 + pages/ 재전송 후 VPS에서 재컴파일·systemd 재기동 필요. 이번 세션에서는 원격 배포까지는 수행하지 않음 — 사장님 확인 후 별도 배포 작업 필요.
- 세션 TTL은 24시간 고정(86400000ms) — 요청사항 12~24h 범위 내이므로 그대로 둠. 더 짧게(예: 세션 스토리지 전환으로 사실상 탭 단위가 됨) 원하면 값 조정 가능.
- 로그아웃은 클라이언트 sessionStorage + 서버 세션폐기 이중 적용. 다만 세션 목록은 서버 메모리 배열(재기동 시 전부 초기화)이라 별도 영속화는 없음(기존 구조 그대로 유지).