## Problem Kattis and USACO login and submit were broken in multiple ways discovered during manual end-to-end testing. Neither platform could successfully authenticate or submit through the plugin. ## Solution **Kattis:** switch login from `POST /login/email` (requires CSRF fetch) to `POST /login` with `script=true` (200 = success, 403 = bad credentials); remove `_check_kattis_login` entirely since Kattis blocks all GET requests from httpx; add submit retry on `"Request validation failed"` to handle expired sessions; fix language ID `"C++17"` → `"C++"`. **USACO:** fix login field `user` → `uname`; fix success check to `code==1`; fix submit endpoint to `submit-solution.php`, file field to `sourcefile`, hidden field extraction off-by-one (`group(2)` → `group(1)`); fix `_pick_lang_option` loop order (keywords outer, options inner) so specific keywords like `"c++17"` match before broad ones like `"c++"`. **`submit.lua`:** absolutize source file path via `fnamemodify(..., ':p')` before passing to the scraper — Python is spawned with `cwd=plugin_path` so relative paths silently fail with `FileNotFoundError`. **Both platforms:** remove cookie fast path from `login` subcommand so credentials are always validated, preventing stale cookies from masking wrong credentials.
30 lines
588 B
Python
30 lines
588 B
Python
LANGUAGE_IDS = {
|
|
"atcoder": {
|
|
"cpp": "6017",
|
|
"python": "6082",
|
|
},
|
|
"codeforces": {
|
|
"cpp": "89",
|
|
"python": "70",
|
|
},
|
|
"cses": {
|
|
"cpp": "C++17",
|
|
"python": "Python3",
|
|
},
|
|
"usaco": {
|
|
"cpp": "cpp",
|
|
"python": "python",
|
|
},
|
|
"kattis": {
|
|
"cpp": "C++",
|
|
"python": "Python 3",
|
|
},
|
|
"codechef": {
|
|
"cpp": "C++ 17",
|
|
"python": "Python 3",
|
|
},
|
|
}
|
|
|
|
|
|
def get_language_id(platform: str, language: str) -> str | None:
|
|
return LANGUAGE_IDS.get(platform, {}).get(language)
|