35 Commits

Author SHA1 Message Date
ruslan de56959ba2 fix autofill: handle two-step login forms (CommuniGate)
- Fill username by specific attrs even without visible password field
  (handles two-step forms: username first, password appears after)
- Broad input[type=text] fallback only fires when password field is present
  (prevents filling R7-Office font selector and other app inputs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 11:02:55 +00:00
ruslan d258f3e0fd fix autofill: stop filling when no visible password field on page
Prevents autofill from filling app text inputs (e.g. R7 font selector)
after login. Now tryFill() bails out immediately if no input[type=password]
is visible — meaning we are no longer on a login form.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:02:22 +00:00
ruslan 4d5e01855f dashboard: collapsible credentials block; autofill: fix Pult username field
- Credentials wrapped in svc-credentials-wrap with toggle button and chevron
- Credentials hidden by default, expand on click (CSS class toggle)
- Autofill: add autofocus selector to catch fields like Zabbix name=name
- Autofill: re-fill username after password fill if Pult/Zabbix cleared it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 08:00:02 +00:00
ruslan 0ffab2e98f web overlay: add 2s progress bar before showing Enter button 2026-07-20 19:29:44 +00:00
ruslan f1449460d0 nav: hide title text when green Enter button appears on overlay 2026-07-20 19:27:09 +00:00
ruslan 706c647ba6 nav: replace hint text with green Enter button on overlay 2026-07-20 19:24:12 +00:00
ruslan b185049a60 nav: show click-to-continue hint on overlay, fullscreen on that click 2026-07-20 19:21:02 +00:00
ruslan f00d51cd76 nav: fullscreen on first user interaction with screen (browser policy fix) 2026-07-20 19:16:02 +00:00
ruslan e079723922 nav: add labels to buttons, auto-fullscreen on session open 2026-07-20 19:12:47 +00:00
ruslan 09833cd298 Replace spinner with mont-emoji(3).gif animation in RDP and WEB overlays 2026-07-20 16:41:58 +00:00
ruslan 81608f8741 webpool: disable password save dialog and add chromium-l10n for Russian UI
- Add --disable-features=PasswordManagerEnabled to Chromium flags
- Add credentials_enable_service=False and profile.password_manager_enabled=False to Chrome Preferences
- Install chromium-l10n package in Dockerfile for Russian browser UI
2026-07-20 16:15:44 +00:00
ruslan f028f91ce4 universal-runtime: fix JS SyntaxError — remove bash escapes from single-quoted heredoc 2026-07-20 15:57:43 +00:00
ruslan 36570631cf universal-runtime: fix overlay hiding error messages on reconnect 2026-07-20 15:50:54 +00:00
ruslan 19a9764d8e universal-runtime: replace status badge with centered overlay Подготовка приложения... 2026-07-20 15:45:50 +00:00
ruslan 9530f3e957 fix: autofill dispatches focus/blur/keyup/InputEvent for SPA frameworks 2026-05-13 12:14:44 +00:00
ruslan e516cc4aeb feat: Russian locale (ru_RU.UTF-8) in universal-runtime for Chromium UI language 2026-05-08 12:54:16 +00:00
ruslan 52cb1fd3d6 feat: fullscreen button in nav panel for web and rdp services 2026-05-08 12:00:39 +00:00
ruslan 2edb804660 fix: autofill login first then password, continuous re-fill for SPA re-renders 2026-05-05 11:05:09 +00:00
ruslan a44422f43b feat: draggable nav panel in web runtime (universal-runtime) 2026-05-04 14:46:00 +00:00
ruslan 34972af7c0 fix: add tini as PID 1 to prevent zombie processes in containers 2026-05-01 14:58:51 +00:00
ruslan 96b7dff7cd fix: anti-idle uses xdotool --window; remove creds from URL
rdp-proxy/manager.py: anti_idle_loop gets window ID first, then sends
key --window ID --clearmodifiers shift (was broken chain syntax).
universal-runtime/manager.py: removed credentials from URL - they break
SPA fetch() calls causing white screen (e.g. CGP).
2026-05-01 14:44:08 +00:00
ruslan 9bd38ed6db Improve autofill extension: better field detection + Basic Auth support
- Split filled flag into userFilled/passFilled for independent tracking
- Add findUserFieldNearPassword() for DOM-relative lookup near password field
- Add isVisible() helper to skip disabled/hidden/offscreen inputs
- Add console.log tracing for debugging
- Add background.js service worker with webRequest.onAuthRequired for Basic Auth
- Add _url_with_credentials() to embed login:pass in URL for HTTP Basic Auth
- Use /usr/lib/chromium/chromium binary directly (bypass Debian wrapper)
- Add --enable-logging=stderr for console.log capture in chromium logs
2026-05-01 04:44:15 +00:00
ruslan d57acb416b Replace Login Data injection with autofill via Chromium extension
The previous approach pre-populated Chromiums Login Data SQLite with
schema version 30 and AES-128-CBC v10 encrypted passwords. Chromium 147
expects schema version 43, fails to migrate (Unable to migrate database
from 30 to 43), and refuses to open Login Data altogether. Result: the
row was written but Chromium never read it, so autofill never worked.

Instead generate a tiny Manifest V3 extension per session in a temp dir
with a content_script that finds username and password fields, sets
their values, and dispatches input/change events. Pass it via
--load-extension and --disable-extensions-except so it is the only
extension loaded.

Benefits:
- Independent of Chromium version and Login Database schema
- Works on SPAs (MutationObserver re-runs on DOM changes)
- Credentials live only in a temp file alongside the profile, removed
  on session end via _stop_current
- No SQLite or cryptography dependency
- Removes the silent failure mode of Login Data migration

Removes _chrome_encrypt_v10, sqlite3, hashlib, urlparse imports.
Adds _create_autofill_extension and tracks extension_dir alongside
profile_dir in _state for cleanup symmetry.
2026-04-30 17:47:10 +00:00
ruslan be65be8fdb Fix Chromium autofill timing bug + RDP anti-idle to prevent lock screen
- universal-runtime: set _state[profile_dir] AFTER _start_process so
  _stop_current does not delete the freshly-created profile before
  Chromium reads it. Without this, Login Data was being wiped.
- rdp-proxy: add xdotool dependency and background anti_idle_loop that
  sends Shift to the xfreerdp window every 30s, forwarded over RDP to
  reset the remote idle timer and keep the lock screen from kicking in.
2026-04-30 14:05:04 +00:00
ruslan 23c1f6e342 Chromium: Russian language, autofill passwords from svc_login/svc_password via Login Data 2026-04-30 07:22:31 +00:00
ruslan 419b495020 feat: RDP ACL exclusivity, mobile wall, nav buttons, resolution xrandr
- RDP сервис может быть назначен только одному пользователю в ACL
- Мобильная заглушка на dashboard при ширине < 1024px
- rdp-proxy: кнопки навигации, спиннер Ожидайте, реконнект
- session_wait_page: тёмная тема, CSS спиннер
- kiosk/universal-runtime manager.py: xrandr + cvt --newmode для resolution
- Dockerfiles: x11-xserver-utils, x11-utils
2026-04-27 18:49:06 +00:00
ruslan 6871ea6b67 fix: improve web runtime resolution and restore x11vnc ncache 2026-04-25 17:28:04 +00:00
ruslan 32c2b4b9a5 perf(runtime): tune x11vnc flags and ignore backup artifacts 2026-04-25 08:21:27 +00:00
ruslan 8863943d79 feat: propagate client screen size to web runtime 2026-04-24 18:26:11 +00:00
ruslan 1438dee21a feat: improve session limit handling and add k6 load testing 2026-04-23 05:17:53 +00:00
ruslan 6f9bc32440 UI/runtime polish, session rotation limit, login errors, docs update 2026-04-21 16:05:15 +00:00
ruslan c97cf5308d Tune idle timeout, heartbeat redirect, and update project context 2026-04-21 13:31:47 +00:00
ruslan 9c9b97374c Disable UI effects and refresh PROJECT_CONTEXT 2026-04-21 12:39:26 +00:00
ruslan 52d1991092 feat: categories, runtime nav, and UX updates 2026-04-21 11:43:43 +00:00
ruslan fc46d90194 feat: redesign portal UX and stabilize web session runtime 2026-04-13 08:35:07 +00:00