ruslan
f5c53f01bf
Reduce login logo size 72px -> 54px
2026-08-03 14:01:24 +00:00
ruslan
de6753b077
Increase login page logo size 36px -> 72px
2026-08-03 13:54:50 +00:00
ruslan
cbfafe4471
Replace logo with new MONT|4MONT design, white version fitted to existing size
2026-08-03 13:39:04 +00:00
ruslan
3251ce3380
Fix favicon HEAD 405 and unify favicon design across ico/png/svg
2026-08-03 13:00:29 +00:00
ruslan
b7ec4b81a5
fix: regenerate favicon sizes from original favicon.png (not logo)
2026-07-26 15:30:38 +00:00
ruslan
06643e2d50
seo: proper favicon sizes (32/192/512px) + web app manifest for Yandex
2026-07-26 13:21:59 +00:00
ruslan
0fe2f7d9a9
ui: replace logo with logo2.png, bump cache buster to v=3
2026-07-26 13:10:32 +00:00
ruslan
6f7f28408d
fix: iframe probe accepts only 2xx (reject portal 404 with X-Frame-Options)
2026-07-23 12:24:20 +00:00
ruslan
c3efdc5a8f
security: add brute-force rate limiting to /login
...
5 failed attempts per IP within 5 minutes triggers 15-minute block.
Counter resets on successful login. State is per-worker (in-memory).
2026-07-23 11:41:08 +00:00
ruslan
3092645408
security: disable FastAPI docs/redoc/openapi endpoints in production
2026-07-23 11:38:13 +00:00
ruslan
fc4b73c536
chore: remove unused files
...
- app/runtime.py.bak, app/static/style.css.bak — temp backups
- app/static/service-icons/svc_*_2026042*.png, svc_*_20260306*.png — old icon versions superseded by newer uploads
- app/static/parallax/ — images not referenced in any template
2026-07-23 11:20:34 +00:00
ruslan
85bcb304f6
refactor: extract _init_schema and _startup_pools to remove duplication in maintenance.py
2026-07-23 11:16:06 +00:00
ruslan
53e18d92ac
refactor: extract _dispatch_post to remove duplicate retry logic
2026-07-23 11:14:25 +00:00
ruslan
2e0d4c78ca
refactor: merge duplicate pool status functions into _get_pool_status
2026-07-23 11:13:17 +00:00
ruslan
1e6eadeed2
refactor: remove dead code (safe cleanup)
...
- main.py: remove duplicate sqlalchemy select import
- main.py: remove unused json import in _telegram_poll_loop
- runtime.py: remove unreachable return after raise LockTimeoutError
- runtime.py: remove _restart_rdp_slot_bg (defined but never called)
2026-07-23 11:07:48 +00:00
ruslan
9839539206
fix: double-check iframe src with HEAD probe before loading
...
After status/ready=true, do HEAD request to the iframe URL itself.
If it returns 5xx, keep polling. This prevents Bad Gateway appearing
in the iframe when container is technically registered but not yet serving.
2026-07-23 10:55:42 +00:00
ruslan
a1479aa47a
fix: view page polls readiness before loading iframe
...
Session view page was loading the iframe immediately on load, causing
Bad Gateway if the container was still starting. Now polls /status
until ready, then sets iframe src.
2026-07-23 10:50:41 +00:00
ruslan
b2297c7773
fix: route_ready rejects 5xx responses; remove spinner from wait page
...
route_ready returned True on 502 Bad Gateway, causing premature redirect
before the container was actually serving. Now only accepts < 500 responses.
Spinner removed from wait page per user request.
2026-07-23 10:48:16 +00:00
ruslan
b89f239d02
feat: add spinner and loading message to session wait page
...
Wait page was a blank dark screen - users saw nothing and hit refresh.
Now shows spinner + service name + status message from /status endpoint.
2026-07-23 10:43:57 +00:00
ruslan
c58ed04821
fix: recycle webpool container on TERMINATED sessions too
...
terminate_session_record was explicitly skipping WEBPOOLIDX containers.
Now stops portal-webpool-N in a background thread on any session close,
so ensure_web_pool recreates it fresh for the next user.
2026-07-22 08:10:20 +00:00
ruslan
ca5d1af2b5
fix: webpool containers now stay alive 24h; recycle on session expiry
...
- Pool containers got IDLE_TIMEOUT=86400 instead of SESSION_IDLE_SECONDS (300s)
to prevent them from cycling every 5 minutes while idle
- On session expiry, WEBPOOLIDX containers are now stopped so ensure_web_pool()
recreates them fresh for the next user (prevents dirty Chromium state)
2026-07-21 13:53:18 +00:00
ruslan
3eff94fbb2
ui: remove credentials badge from WEB sessions, remove Back button from RDP
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 11:07:21 +00:00
ruslan
51590cea80
seo: add explicit shortcut icon link to all templates for Yandex favicon indexing
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:38:24 +00:00
ruslan
65b098b702
fix: serve favicon.ico from /favicon.ico route with correct mime type
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:32:04 +00:00
ruslan
a9213eb507
update favicon.ico: multi-size (16/32/48/64/128/256px) from favicon.svg
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:27:16 +00:00
ruslan
cc5d7b8476
revert: white cards, remove credentials from service tiles
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:13:38 +00:00
ruslan
cdc30f126c
fix: add cache-busting v=2 to style.css to force browser reload
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:10:29 +00:00
ruslan
ccc3a2fb51
fix: force original icon box size with explicit !important overrides
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:08:15 +00:00
ruslan
4c2fc455ff
revert: restore original icon box size
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:05:12 +00:00
ruslan
1fe62af26b
revert: remove search bar and credentials collapsible
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 08:04:04 +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
cfadc72e6c
dashboard: glassmorphism cards, compact accent icon box, live search bar
...
- Tile cards: backdrop-filter blur(22px), rgba white bg, inset highlight
- Hover: translateY(-5px) + brighter glass effect
- Icon box: 68px compact rounded square with blue gradient accent
- Added live search input with glass style (filters by service name)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-07-21 07:48:11 +00:00
ruslan
174efa7f57
form: add Select All checkbox to products list in access request form
2026-07-20 20:19:07 +00:00
ruslan
b7a5d42644
fix: serve /favicon.ico so search engines find the site icon
2026-07-20 19:37:09 +00:00
ruslan
709de88c95
fix: encode From header with RFC 2047 to fix email delivery with Cyrillic sender name
2026-07-20 17:06:52 +00:00
ruslan
806c5d8e1f
session wait page: replace visible card with silent dark redirect
2026-07-20 16:04:21 +00:00
ruslan
3433e32df3
Handle renewal: extend expiry, add new products, send renewal email
2026-07-08 08:56:53 +00:00
ruslan
4b4b07dd20
Fix Telegram sendMessage: switch to HTML parse mode, escape user data
2026-07-03 11:37:30 +00:00
ruslan
18bb4bfaf4
Update description text: Партнеры MONT и их заказчики
2026-06-15 13:27:03 +00:00
ruslan
2a494dfa5e
Reduce left panel title font size to fit narrow column
2026-06-08 09:39:06 +00:00
ruslan
8bf6c44485
Fix left panel overflow: top-align content, allow vertical scroll
2026-06-08 09:37:18 +00:00
ruslan
dff17ad56a
Move logo inside left panel to fix overlap at any screen size
2026-06-08 09:33:20 +00:00
ruslan
0d22003716
Fix logo overlap on mobile, fix cookie banner persistence
2026-06-08 09:29:39 +00:00
ruslan
986dcf5c84
Update favicon: new SVG and PNG versions
2026-05-29 16:11:26 +00:00
ruslan
efa1c26e5d
Email improvements: domain-aware portal URL, embedded logo, fix product list color
...
- Store request origin domain in PendingAccessRequest.portal_url
- Use per-request portal URL in approval/rejection emails
- Embed logo as base64 so it displays without external image loading
- Fix 'Предоставлен доступ к продуктам' text color to match body color
- Switch Telegram polling to 30-second interval with single-worker flock fix
2026-05-29 16:10:40 +00:00
ruslan
e5ea23487e
Add Telegram approval flow: inline buttons, user creation, email notifications
2026-05-29 14:41:42 +00:00
ruslan
ad1e781040
Add cookie consent banner with localStorage persistence
2026-05-28 11:42:24 +00:00
ruslan
4a16813942
Update logo link to www.mont.ru
2026-05-28 11:17:12 +00:00
ruslan
202b609b3e
Update Made by Galyaviev email to ruslan@ipcom.su
2026-05-28 11:12:32 +00:00
ruslan
56cc2495a6
Logo links to mont.ru or 4mont.ru depending on domain
2026-05-28 11:10:35 +00:00