Commit Graph

11 Commits

Author SHA1 Message Date
shoko
d0534aedbf Fix #5: HTML injection in Telegram messages
Add escape_html() function to prevent HTML injection in Telegram
parse_mode=HTML messages. Apply escaping to event titles inserted
into <a> tags in send_to_telegram().

- Add escape_html() using stdlib html.escape()
- Escape match event titles (line 648) and non-match titles (line 676)
- Add TestHtmlInjection with 2 tests proving fix:
  - <script> tags escaped as &lt;script&gt;
  - & ampersands escaped as &amp;
- Fixes HIGH severity: titles from Polymarket API were inserted
  without escaping, allowing malformed HTML in Telegram messages
2026-03-25 11:42:42 +00:00
2703b942c1 Merge pull request 'Fix #4: Extract send() to module-level send_telegram_message() for testability' (#19) from fix/issue-4-telegram-token-refactor into master 2026-03-25 12:17:00 +01:00
shoko
f9c4bac7b8 Refactor send() to module-level send_telegram_message() for testability
Extract the nested send() function into a module-level
send_telegram_message(bot_token, chat_id, text, timeout=10)
function. This enables unit testing without hitting the real
Telegram API.

Changes:
- Add send_telegram_message() at module level in TELEGRAM section
- Replace nested send() with thin wrapper that calls
  send_telegram_message()
- Update argparse --telegram help text to use TELEGRAM_BOT_TOKEN
- Add tests/test_browse.py with 8 unit tests covering:
  - Success case (returns message_id)
  - API error (RuntimeError)
  - Invalid token (HTTPError 404)
  - Rate limit (HTTPError 429)
  - Network error (URLError)
  - Timeout (URLError)
  - Custom timeout parameter
  - HTML parse_mode in request

Ref: #4
2026-03-25 11:07:10 +00:00
shoko
c49600cd4d Fix CRITICAL: Telegram bot token exposed in process command line
Replace curl subprocess with urllib.request to prevent token leakage via
ps aux / /proc/*/cmdline. Token now stays in process memory only.

Changes:
- Remove subprocess import, add urllib.parse.urlencode and urllib.request
- Replace curl subprocess call with urlopen(Request(...))
- Change env var BOT_TOKEN -> TELEGRAM_BOT_TOKEN (clearer naming)
- Raise RuntimeError on missing env vars, API errors, or network errors
- Add 10s timeout to urlopen

Fixes #4
2026-03-25 10:46:10 +00:00
shoko
3a988943b9 docs: rename review folder to match skill structure
docs/polymarket-browse/ mirrors skills/polymarket-browse/
Future reviews for this skill can use date-based filenames in the same folder.
2026-03-25 10:02:43 +00:00
shoko
da367c594b docs: add polymarket-browse review (2026-03-25)
Security audit + code quality review of polymarket-browse skill.
Contains 8 security issues, 6 code quality issues, 2 docs issues.
Issues tracked in repo.
2026-03-25 10:00:12 +00:00
shoko
b1b5ecaa2e polymarket-browse: fix relative time - show LIVE instead of In 0m when event is starting now 2026-03-25 06:20:13 +00:00
shoko
88dc651232 polymarket-browse: add --search, --telegram, --matches-only, --non-matches-only flags; fix partial fetch warnings; clean up output formatting 2026-03-24 13:26:29 +00:00
46ecb38049 Add OpenClaw installation guide 2026-03-24 07:26:43 +00:00
a8560f7170 Add installation guide to SKILL.md 2026-03-24 07:20:51 +00:00
cd842df060 Add polymarket-browse skill
Browse tradeable Polymarket events by game category.
Supports Dota 2, Counter Strike, League of Legends, Valorant, NBA, NFL, UFC, Tennis.
Features WIB timezone, compact 6-line format, exponential backoff rate limiting.
2026-03-24 07:18:05 +00:00