Commit Graph

160 Commits

Author SHA1 Message Date
leetcrypt
70ddca8a1f feat: encrypted file transfer with propose/accept flow
New commands: /send <filepath>, /accept, /reject

Protocol:
- Sender proposes file (name, size, SHA-256 hash)
- Recipient sees offer and chooses /accept or /reject
- On accept: file chunked (64KB), encrypted with room key, sent over WebSocket
- On receive: chunks reassembled, SHA-256 verified, saved to ./downloads/
- Server never sees file content (E2E encrypted, same as messages)

Limits: 50MB max file size. Files saved with collision-safe naming.
No server changes — server remains a dumb encrypted relay.

All 79 existing tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 00:01:51 -07:00
leetcrypt
65ee9dee16 feat: add host-chat.sh — one-command server setup with friend instructions
Detects all available IPs (Tailscale, LAN, public), prints connect
command for friends to copy, prompts for password securely via getpass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 22:40:57 -07:00
leetcrypt
90491988b8 feat: add interactive 2-user lab environment + fix requirements.txt encoding
- lab/setup-lab.sh: automated tmux setup with server + 2 chat clients
  Supports --no-tls, --password, --port, --user1/--user2, --teardown
  Auto-installs missing pip dependencies, verifies port availability,
  waits for server health before connecting clients
- lab/README.md: usage docs and keyboard shortcuts
- requirements.txt: fixed UTF-16 encoding to UTF-8, cleaned pinned versions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 21:44:24 -07:00
leetcrypt
e7bacc93da fix(security): comprehensive security hardening — TLS, HMAC WS auth, rate limiting, IP leak prevention
CRITICAL fixes:
- Auto-generated self-signed TLS certs (HTTPS/WSS by default)
- Removed session_key from /srp/verify response (was sent in plaintext)
- Replaced with HMAC-SHA256 ws_token for WebSocket authentication

HIGH fixes:
- WebSocket auth now validates ws_token via hmac.compare_digest()
- /clear endpoint requires Bearer admin_token (printed at server start)
- Password no longer required as CLI arg — supports env var + getpass prompt
- Removed user_ip from Message model (no longer broadcast to clients)

MEDIUM fixes:
- Rate limiter on /srp/init and /srp/verify (10 req/min/IP)
- MessageStore capped at 1000 messages (prevents RAM DoS)
- access_log disabled (was leaking request metadata)

LOW fixes:
- Username sanitization against rich markup injection
- Dead code removed from helpers.py

All 79 tests passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 20:30:40 -07:00
Dior
440b67da26
Merge pull request #1 from diorwave/feature/contributing
Add CONTRIBUTING.md file
2026-01-17 16:54:40 +09:00
Dior
835945ea11
Add CONTRIBUTING.md file 2026-01-17 16:52:33 +09:00
Dior
23093068d6
Add Django CI workflow for testing 2026-01-15 18:40:26 +02:00
mirai
467d942877 New storage scheme 2026-01-06 21:42:50 +08:00
mirai
264d19e932 NO LOGS 2026-01-03 12:00:52 +03:00
mirai
8b58bf4db3 Final notes [2] 2026-01-02 23:35:20 +03:00
mirai
0756aab53f Final notes 2026-01-02 23:25:02 +03:00
mirai
5cbe355660 feat: add SRP authentication, improve security
- Replace RSA key exchange with SRP (Secure Remote Password)
- Password never transmitted over network
- Add unit tests for endpoints
- Fix datetime.UTC compatibility for Python < 3.11
- Fix logger.exception usage
- Update README with new auth flow diagram
2026-01-02 23:09:00 +03:00
mirai
e3a3dd3f0f New README + Demonstartional video 2026-01-02 20:37:11 +03:00
mirai
95f8a192b5 feat: complete client-server architecture refactoring
Server:
- Split into views, routes, helpers, models modules
- Merged /ws/talk and /ws/update into single /ws/chat endpoint
- Replaced polling with push-based broadcast model
- Added username uniqueness validation on connect
- Fixed run_server arguments bug (workers parameter)
- Removed deprecated loop argument from Sanic listeners
- Replaced datetime.utcnow() with timezone-aware datetime.now(timezone.utc)

Client:
- Rewrote client as single-file module
- Migrated from websocket-client to websockets (asyncio)
- Fixed websocket-client conflict with asyncio event loop on Windows
- Added progress indicators for key generation, exchange, connection
- Added animated 3D spinning cube in UI
- Updated RSA key from 512 to 2048 bits

CLI:
- Removed unnecessary asyncio.run() wrapper
- Simplified entry point
2026-01-02 14:42:33 +03:00
mirai
faaadd839b Merge pull request #8 from hmd37/patch-1
Update to modern version of Optional type
2025-11-18 15:45:02 +03:00
mirai
6411df575e Updated to modern version of Optional type 2025-11-18 10:46:15 +04:00
mirai
945d7aeb62 Merge pull request #5 from anorak999/fix/new-change 2025-11-07 16:45:09 +03:00
mirai
0759518dce Remove .history folder 2025-11-07 16:33:18 +05:30
mirai
64b0967292 Fix renderer typing, preserve message text, and harden crypto key handling
Fix abstract renderer signatures and add small stubs so type checkers can
see expected attributes (e.g. username, _decrypt). This removes several
mypy false-positives that were caused by mixin/ABC mismatches.
Preserve message text containing ':' by using split(':', 1) in both
DefaultClientRenderer and RichClientRenderer.
Normalize renderer APIs: print_chat(...) now takes the response mapping
and returns None (matches runtime behavior).
Make RSA symmetric-key request more robust: read r.content instead of a
fixed-size r.raw.read(999), avoiding truncated key material.
Improve _connect_ws exception handling in client to ensure a valid
Exception is re-raised if connection attempts fail.
Correct server/service typing: memory_msgs is now typed as
list[Message] and we null-check incoming payload text before creating a
new Message.
Replace manual package list in setup.py with setuptools.find_packages()
so packaging uses valid Python package names.
Installed types-requests in the project venv so mypy no longer flags the
requests import.
Verification: ran python -m compileall and mypy cmd_chat — no issues
remain.
Notes:

Wire format still uses Python literal evaluation in some places (existing
behavior); switching to JSON for client/server payloads is recommended as a
follow-up for robustness and security.
2025-11-05 19:29:24 +05:30
mirai
c3467b89ae removed temporary files 2025-10-03 21:08:43 +03:00
mirai
82a78e7053 Update client.py 2025-10-03 20:58:44 +03:00
mirai
b0ff612023 Password update 2025-09-10 19:58:59 +03:00
mirai
28cbbf2cad Update README.MD 2025-09-10 16:21:12 +03:00
mirai
ea3c7d310f Update README.MD 2025-09-10 16:15:55 +03:00
mirai
6a044ecaf8 Working on 1.1.22 2023-12-03 16:18:09 +03:00
mirai
316a0e3e1e Reworked setup.py, now you can run cmd_chat directly. Reworked sanic http webserver to make it work. Update readme, etc... 2023-11-27 14:30:01 +03:00
mirai
c5fa982f65 Add CLI run options, update README 2023-11-27 06:50:16 +03:00
mirai
8c4799c634 Removed eval, fixed security vulnerability 2023-11-27 05:45:45 +03:00
mirai
5506b2d8a6 Update README.MD 2023-09-15 21:45:02 +03:00
mirai
278cedff4f Update README.MD 2023-09-15 21:44:25 +03:00
mirai
b3ba0199bb Update README.MD 2023-09-15 21:43:51 +03:00
mirai
01398af43c Update README.MD 2023-09-15 21:43:07 +03:00
mirai
3ea50f5ba9 Update README.MD 2023-09-15 21:42:01 +03:00
mirai
6ae30e4f30 Update README.MD 2023-09-15 21:38:09 +03:00
mirai
f88cb14149 Delete run_server.sh
Deleted old shell script
2023-09-06 02:26:33 +03:00
mirai
eccdbc0e0c Delete run_client.sh
Deleted old shell script
2023-09-06 02:26:25 +03:00
mirai
e6ea017d25 Update README.MD 2023-09-03 01:45:56 +03:00
mirai
574e2b8d2f Update PyPi and README, another time 2023-03-08 19:43:59 +03:00
mirai
b99ccbc2f9 Update README & pypi 2023-03-08 19:38:28 +03:00
mirai
b773f3bdb4 Update pypi 2023-03-08 19:32:44 +03:00
mirai
4554d76d0b PyPi Update 2023-03-08 19:26:21 +03:00
mirai
bad818c7e9 Create pypi package 2023-03-08 19:10:49 +03:00
mirai
a8f296c0f1 Code refactoring 2023-03-08 18:59:38 +03:00
mirai
0f066d367f Code refactoring. Add config for customize colors, add services, fixed bugs & glitches 2023-03-08 18:30:26 +03:00
mirai
b763787633 Removed idea 2022-12-05 18:33:35 +03:00
mirai
49eba7a61a Update .gitignore 2022-12-05 18:33:05 +03:00
mirai
f592e440fb Code refactoring 2022-12-05 18:31:40 +03:00
mirai
d1dc5b56e6 Merge branch 'main' of https://github.com/dinosaurtirex/secure-console-chat 2022-12-02 08:41:15 +03:00
mirai
abcc9fc656 Deleted ws_talk.py 2022-12-02 08:37:16 +03:00
mirai
0c932b92c6 Updated client/client.py 2022-12-02 08:34:31 +03:00