JJ_MKVMaker/lib/core
RyuJongJin b5918b7aa2 WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완)
사용자 "진행" (10/17, 관리자 3a 전달) - 88 설계안의 제안값:
1) Windows SMB 는 운영체제 그대로 2) 키 암호는 안전 저장소 3) ssh-rsa 기본 끔 · 서버마다 켬 4) SMB3 암호화 (SMB 때) 5) 서버 rsync 는 다음 판.

이 커밋 (화면은 아직 없음 - 설정 화면 · 탐색기 탭은 다음 커밋):
- lib/core/remote_fs.dart: 원격 저장소 공통 동작 (RemoteClient). WebDAV (DavClient) 도 이것으로.
- lib/core/sftp.dart: SftpServer (설정, 비밀 값은 toJson 에 없음) · SftpRemote (dartssh2, 서버마다 연결 하나를 다시 씀) · SftpRegistry.
  - 호스트 키: 믿은 지문이 없으면 연결하지 않고 지문 (SHA256:…) 을 알림 (SftpHostKeyException) → 화면이 묻고 저장.
    바뀌면 막고 예전 · 지금 지문을 알림 (중간자 공격 안내).
  - 비밀번호 · keyboard-interactive · 개인 키 (암호), 키 암호 틀림 · 키를 못 읽음 · 저장된 비밀번호 없음 · 닿지 않음 · 권한 · 없는 경로를 사람 말로.
  - 오래된 서버: 처음엔 SHA-1 을 쓰지 않고 "오래된 ssh-rsa 허용" 을 안내, 서버마다 켜면 ssh-rsa · SHA-1 키 교환.
  - DNS 강제를 따라 직접 연결 (집 안 이름 · 주소는 기기 DNS), 시작 폴더 (비우면 홈).
  - 소켓 끊김의 쓰기 실패가 처리되지 않은 오류로 올라오지 않게.
- vfs: sftp:// 를 dav:// 와 같은 원격 길로 (isDav = 원격, isWebDav · isSftp 따로). 화면 "🔑 서버/경로", 받아서 열기는 jj_sftp.
- 설정: sftpServers (비밀번호 · 개인 키 · 키 암호는 안전 저장소 sftp.pw/key/kp.<id> 에만, 평문 파일에 쓰지 않음), .bak · 깨진 파일 가림,
  최상 비밀번호 초기화의 "저장된 비밀번호 지우기" 에 SFTP 도.
- 재생 · 다른 앱: SFTP 는 스트리밍 주소가 없어 고른 파일만 받아서 (진행 · 취소) 틀고 같은 폴더 자막도 받음 (다음 파일로 넘어가지 않음 - 1차).
- 시험: test/sftp_test.dart 7개 (설정 · 경로 + paramiko 시험 서버: TOFU · 바뀐 키 · 틀린 비밀번호 · 닿지 않음 · vfs 전체 · 키 로그인 · ssh-rsa).
  tool/sftp_test_server.py (paramiko 3.5.1 - 5.0 은 SHA-1 을 뺌), venv 는 ..\tools\sftp_test_py (없으면 건너뜀).
- 라이선스 고지 · 화면 · Android SMB 는 다음 커밋.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:11:07 +09:00
..
ai_catalog.dart 화면 글자 검사기가 놓치던 것 잡기 · 찾은 번역 빠짐 고치기 (60) 2026-10-10 01:39:33 +09:00
ai_subtitle.dart 화면 글자 검사기가 놓치던 것 잡기 · 찾은 번역 빠짐 고치기 (60) 2026-10-10 01:39:33 +09:00
app_update.dart 문서 미리보기 컴포넌트 · 컴포넌트 설치 · 브라우저 위아래 · 화면 순서 버튼 2026-10-08 16:18:50 +09:00
archive_ops.dart WIP 86 보충 (관리자 · 15): 덮어쓰기에도 받는 쪽이 더 새것이면 그대로 · Windows 에서 쓸 수 없는 이름은 미리 건너뜀 · 릴리스에 7-Zip 꼭 (검토 대기) 2026-10-17 14:47:39 +09:00
batch_rename.dart WIP 78 보충 (15 확인 · 관리자 판단 a · b): Windows 에서 쓸 수 없는 이름 미리 막기 · 임시 이름은 고리일 때만 · 동기화에서 임시 이름 빼기 (검토 대기) 2026-10-17 11:42:57 +09:00
bookmarks.dart 다국어 작은 것들 (61) 2026-10-10 02:29:58 +09:00
charset_detector.dart JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
cron_window.dart 오류 메시지 안쪽을 화면 언어로 (59) 2026-10-10 01:11:17 +09:00
dns_resolver.dart WIP DNS: 너무 긴 이름은 이름 탓으로 - "닿지 않음" 안내 · 작업 기록에 사이트 이름이 남지 않게 (15 지적) (검토 대기) 2026-10-17 18:00:19 +09:00
download_detect.dart WIP 184-2 확장자 없는 주소의 동영상이 아닌 파일: 후처리 실패해도 받은 파일을 원래 이름으로 남기고 완료 (검토 대기) 2026-10-17 09:49:25 +09:00
encode_options.dart MKV 만들기: 화면 비율 (가로 16:9 · 세로 9:16 · 1:1 · 4:5, 채우기 · 맞추기 · 흐린 배경) · 회전 · 색 보정 (밝기 · 대비 · 채도 · 색온도), 미리보기 창 2026-10-04 15:19:35 +09:00
file_ops.dart WIP 15 캡처 지적 ①~④: 영어 단수 · 좁은 화면 풀 곳 세로 목록 · 찾기/분석 줄은 시작한 폴더 기준 짧은 경로 · 캡처 DEBUG 띠 끔 (검토 대기) 2026-10-17 15:57:25 +09:00
folder_size.dart WIP 80 보충 (15 지적 · 관리자 판단 ① ②): 폴더 크기에서 링크 · junction 은 따라가지 않음 · 화면에서 사라진 자동 계산은 멈춤 (검토 대기) 2026-10-17 12:01:06 +09:00
languages.dart 환경 설정 > MKV 만들기 > 기본 자막 언어 (MKV 기본 자막 트랙 · 플레이어가 먼저 켜는 자막) 2026-10-10 02:41:14 +09:00
local_proxy.dart WIP 관리자 결정: 거절 기록은 방식 주소:포트만 · DoH 주소는 호스트만 · 시험 임시 폴더 흔적 0 + 검사 (검토 대기) 2026-10-17 16:53:56 +09:00
mkv_command_builder.dart MKV 다시 만들기: 임시 이름에 만들고 다 됐을 때만 바꿔 넣음 · 이미 있으면 묻기 · 묶음 집계 · 끝난 뒤 취소 무시 (P0, 931) 2026-10-12 07:31:41 +09:00
models.dart 원어를 자동 감지했으면 끝난 뒤 감지한 언어 · [다른 언어로 다시] (198) 2026-10-12 06:01:45 +09:00
nllb_tokenizer.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00
output_paths.dart JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
playlist.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
reader_sources.dart 오류 메시지 안쪽을 화면 언어로 (59) 2026-10-10 01:11:17 +09:00
remote_fs.dart WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
sd_cli.dart 릴리스 전: 가짜 AI 결과 막기 · S10 해상도 속도 · 예상 시간 (156-2) · 라이선스 (64) · zip 실행 흔적 검사 (166) 2026-10-09 17:11:31 +09:00
secret_gate.dart 보안 · 비밀번호 (124 · 127~132) · 쿠키 (53) · http 경고 (56) · 안내 고침 (116 · 125 · 126) · 시험 안정화 2026-10-09 12:22:47 +09:00
sftp.dart WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
srt.dart JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
storage_scan.dart WIP 87 저장 공간 분석: 고른 폴더 · 드라이브의 큰 폴더 · 큰 파일 차례, 누르면 탐색기에서 그 자리로 (검토 대기) 2026-10-17 14:55:42 +09:00
subtitle_detector.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
subtitle_search.dart JJ_MKVMaker v1.0.0 2026-09-30 19:35:19 +09:00
sync_preview.dart WIP 78 보충 (15 확인 · 관리자 판단 a · b): Windows 에서 쓸 수 없는 이름 미리 막기 · 임시 이름은 고리일 때만 · 동기화에서 임시 이름 빼기 (검토 대기) 2026-10-17 11:42:57 +09:00
sync_tools.dart WIP 78 보충 (15 확인 · 관리자 판단 a · b): Windows 에서 쓸 수 없는 이름 미리 막기 · 임시 이름은 고리일 때만 · 동기화에서 임시 이름 빼기 (검토 대기) 2026-10-17 11:42:57 +09:00
text_codec.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00
tor_control.dart Tor 브라우저 (컴포넌트) · DNS 강제 (기본 8.8.8.8 / 8.8.4.4) 2026-10-10 21:10:17 +09:00
vfs.dart WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
web_address.dart 웹 브라우저: 동영상을 못 찾은 페이지의 다운로드 버튼은 테두리만 (137) 2026-10-10 03:45:49 +09:00
web_translate.dart 오류 메시지 안쪽을 화면 언어로 (59) 2026-10-10 01:11:17 +09:00
webdav.dart WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완) 2026-10-17 22:11:07 +09:00
youtube_ads.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00