diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 17d5c35e8..03e8dc5b6 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -2224,6 +2224,7 @@ dependencies = [ "codex-keyring-store", "codex-protocol", "codex-terminal-detection", + "codex-utils-template", "core_test_support", "keyring", "once_cell", diff --git a/codex-rs/login/Cargo.toml b/codex-rs/login/Cargo.toml index 7fd781528..92ed39a6c 100644 --- a/codex-rs/login/Cargo.toml +++ b/codex-rs/login/Cargo.toml @@ -17,6 +17,7 @@ codex-config = { workspace = true } codex-keyring-store = { workspace = true } codex-protocol = { workspace = true } codex-terminal-detection = { workspace = true } +codex-utils-template = { workspace = true } once_cell = { workspace = true } os_info = { workspace = true } rand = { workspace = true } diff --git a/codex-rs/login/src/assets/error.html b/codex-rs/login/src/assets/error.html index 96c1eb303..e5fb4dba1 100644 --- a/codex-rs/login/src/assets/error.html +++ b/codex-rs/login/src/assets/error.html @@ -101,21 +101,21 @@
Codex login
-

__ERROR_TITLE__

-

__ERROR_MESSAGE__

+

{{error_title}}

+

{{error_message}}

Error code - __ERROR_CODE__ + {{error_code}}
Details - __ERROR_DESCRIPTION__ + {{error_description}}
-

__ERROR_HELP__

+

{{error_help}}

diff --git a/codex-rs/login/src/server.rs b/codex-rs/login/src/server.rs index b726eeed8..c811fa36d 100644 --- a/codex-rs/login/src/server.rs +++ b/codex-rs/login/src/server.rs @@ -20,6 +20,7 @@ use std::net::TcpStream; use std::path::Path; use std::path::PathBuf; use std::sync::Arc; +use std::sync::LazyLock; use std::thread; use std::time::Duration; @@ -35,6 +36,7 @@ use base64::Engine; use chrono::Utc; use codex_app_server_protocol::AuthMode; use codex_client::build_reqwest_client_with_custom_ca; +use codex_utils_template::Template; use rand::RngCore; use serde_json::Value as JsonValue; use tiny_http::Header; @@ -48,6 +50,10 @@ use tracing::warn; const DEFAULT_ISSUER: &str = "https://auth.openai.com"; const DEFAULT_PORT: u16 = 1455; +static LOGIN_ERROR_PAGE_TEMPLATE: LazyLock