관리자 인증 연동 정리

This commit is contained in:
seo
2026-07-02 19:05:21 +09:00
parent c5ab60a6e6
commit d000b25648
2 changed files with 46 additions and 15 deletions
+17 -15
View File
@@ -169,21 +169,22 @@ control-wifi-observe.service
## 처리 흐름 ## 처리 흐름
1. 화면 진입 시 로그인 세션과 remember token을 확인합니다. 1. 화면 진입 시 로그인 세션과 remember token을 확인합니다.
2. 대시보드는 `status` snapshot을 렌더링합니다. 2. Rhymix 사이트 관리자 세션 또는 `/custom/common` 관리자 인증 쿠키가 확인되면 Control 로그인 화면을 생략하고 내부 세션을 발급합니다.
3. WebSocket 연결이 성공하면 `status` 메시지로 갱신하고, 실패하면 HTTP fallback을 사용합니다. 3. 대시보드는 `status` snapshot을 렌더링합니다.
4. 팬 조작은 상태 저장, 정책 적용, 로그 저장 순서로 처리합니다. 4. WebSocket 연결이 성공하면 `status` 메시지로 갱신하고, 실패하면 HTTP fallback을 사용합니다.
5. WiFi client 목록은 `iw station dump`와 dnsmasq lease를 조합하고, 5G 연결 시간이 `N/A`이면 MAC 기준 최초 감지 시간을 DB에 저장해 경과 시간을 계산합니다. 5. 팬 조작은 상태 저장, 정책 적용, 로그 저장 순서로 처리합니다.
6. WiFi hostname이 비어 있으면 MAC 기반 임시명을 표시하고, 수동 저장한 MAC별 이름은 DB에서 우선 적용합니다. 6. WiFi client 목록은 `iw station dump`와 dnsmasq lease를 조합하고, 5G 연결 시간이 `N/A`이면 MAC 기준 최초 감지 시간을 DB에 저장해 경과 시간을 계산합니다.
7. WiFi 신호/송신 속도/수신 속도 값이 비어 있으면 실제로 존재하는 다른 무선 지표와 대역별 기준으로 값을 채웁니다. 7. WiFi hostname이 비어 있으면 MAC 기반 임시명을 표시하고, 수동 저장한 MAC별 이름은 DB에서 우선 적용합니다.
8. `control-wifi-observe.timer`는 사용자 접속과 무관하게 10초마다 5G 관측 세션을 갱신합니다. 8. WiFi 신호/송신 속도/수신 속도 값이 비어 있으면 실제로 존재하는 다른 무선 지표와 대역별 기준으로 값을 채웁니다.
9. WakeLock 버튼은 활성 상태를 초록색 버튼으로 표시합니다. 9. `control-wifi-observe.timer`는 사용자 접속과 무관하게 10초마다 5G 관측 세션을 갱신합니다.
10. Reboot 버튼은 설정된 확인 문구와 관리자 암호 재입력을 모두 통과한 뒤 서버 API로 재부팅을 요청합니다. 10. WakeLock 버튼은 활성 상태를 초록색 버튼으로 표시합니다.
11. 시스템 상태는 `vcgencmd get_throttled`를 읽어 현재 저전압/스로틀링 여부와 부팅 후 이력, 최근 감지 시각, 현재/최근 지속시간을 표시합니다. 11. Reboot 버튼은 설정된 확인 문구와 관리자 암호 재입력을 모두 통과한 뒤 서버 API로 재부팅을 요청합니다.
12. 저전압/스로틀링 상태 파일에는 최근 episode 시작/종료를 보관하고, 최근 10분 발생 횟수, 감지 누적시간, 감지 비율을 계산합니다. 12. 시스템 상태는 `vcgencmd get_throttled`를 읽어 현재 저전압/스로틀링 여부와 부팅 후 이력, 최근 감지 시각, 현재/최근 지속시간을 표시합니다.
13. 배터리 잔여 시간은 최근 24시간 SOC 방전 추세와 최대 45일 장기 학습 프로파일을 함께 평가하고, 현재 CPU 전력 변화와 현실 상한을 반영합니다. 13. 저전압/스로틀링 상태 파일에는 최근 episode 시작/종료를 보관하고, 최근 10분 발생 횟수, 감지 누적시간, 감지 비율을 계산합니다.
14. 잔여 시간 차트의 마지막 지점은 현재 snapshot의 잔여 시간과 같은 값을 사용하도록 history 응답을 동기화합니다. 14. 배터리 잔여 시간은 최근 24시간 SOC 방전 추세와 최대 45일 장기 학습 프로파일을 함께 평가하고, 현재 CPU 전력 변화와 현실 상한을 반영합니다.
15. System Notice 조건이 맞으면 Control이 `system_notice_logs`에 이력을 저장합니다. 15. 잔여 시간 차트의 마지막 지점은 현재 snapshot의 잔여 시간과 같은 값을 사용하도록 history 응답을 동기화합니다.
16. 대시보드 첫 화면에는 팬/전원/스로틀링/WiFi/핵심 차트를 우선 배치하고, 상세 차트, 프로세스 후보, 사용자 서비스, dmesg는 접힘 영역으로 분리합니다. 16. System Notice 조건이 맞으면 Control이 `system_notice_logs`에 이력을 저장합니다.
17. 대시보드 첫 화면에는 팬/전원/스로틀링/WiFi/핵심 차트를 우선 배치하고, 상세 차트, 프로세스 후보, 사용자 서비스, dmesg는 접힘 영역으로 분리합니다.
## 주요 함수/모듈 ## 주요 함수/모듈
@@ -222,6 +223,7 @@ control-wifi-observe.service
## 보안 ## 보안
- 로그인 세션과 CSRF token을 사용합니다. - 로그인 세션과 CSRF token을 사용합니다.
- Rhymix 사이트 관리자 세션 또는 `/custom/common` 관리자 인증 쿠키가 확인되면 Control 내부 로그인 세션을 발급합니다.
- POST 조작 API는 CSRF 검증을 통과해야 합니다. - POST 조작 API는 CSRF 검증을 통과해야 합니다.
- sysfs 쓰기와 systemctl 실행 권한은 sudoers 범위로 제한해야 합니다. - sysfs 쓰기와 systemctl 실행 권한은 sudoers 범위로 제한해야 합니다.
- 재부팅 API는 CSRF, 로그인 세션, 설정된 확인 문구, 관리자 암호 재검증을 모두 요구합니다. - 재부팅 API는 CSRF, 로그인 세션, 설정된 확인 문구, 관리자 암호 재검증을 모두 요구합니다.
+29
View File
@@ -675,9 +675,38 @@ function signed_in(): bool
return true; return true;
} }
if (control_admin_session_from_rhymix_or_custom()) {
$_SESSION['control_login'] = true;
return true;
}
return auto_login_from_cookie(); return auto_login_from_cookie();
} }
function control_admin_session_from_rhymix_or_custom(): bool
{
static $checked = null;
if ($checked !== null) {
return $checked;
}
$checked = false;
$commonAuth = '/mnt/synology-web/custom/common/auth.php';
if (!is_file($commonAuth) || !is_readable($commonAuth)) {
return false;
}
try {
require_once $commonAuth;
$checked = (function_exists('custom_auth_cookie_is_admin') && custom_auth_cookie_is_admin())
|| (function_exists('custom_is_site_admin') && custom_is_site_admin());
} catch (Throwable) {
$checked = false;
}
return $checked;
}
function require_login(): void function require_login(): void
{ {
if (!signed_in()) { if (!signed_in()) {