Re-vendor the canonical files from sneak/prompts at dd4027b (closes #112)
check / check (push) Failing after 4s
check / check (push) Failing after 4s
The shared files are fetched from sneak/prompts dd4027b, with this repository's own entries after the shared content in .gitignore, .editorconfig and .dockerignore. Lint and tests are Dockerfile phases (golangci-lint v2.14.0, Debian Go 1.24.13) that the build stage depends on, and the Makefile targets call the script/ entrypoints. make fmt also formats Markdown with prettier. Fixes for the new lint findings: the auth cookie is always Secure, an IRC connection's relay goroutine stops when the connection closes, and repeated strings are constants. neoirc-cli treats a plain-HTTP server on localhost or a loopback address as secure, so local use keeps its session. Whether the 60-second test cap covers building the test phase is open on sneak/prompts issue 113. Model: opus-5-5
This commit was merged in pull request #115.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
@@ -41,11 +42,34 @@ func NewClient(baseURL string) *Client {
|
||||
BaseURL: baseURL,
|
||||
HTTPClient: &http.Client{ //nolint:exhaustruct // defaults fine
|
||||
Timeout: httpTimeout,
|
||||
Jar: jar,
|
||||
Jar: loopbackJar{CookieJar: jar},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// loopbackJar also sends the server's auth cookie, which is
|
||||
// always Secure, over plain HTTP to a server on localhost, as
|
||||
// curl does. Go 1.24's cookie jar sends a Secure cookie only
|
||||
// over HTTPS.
|
||||
type loopbackJar struct {
|
||||
http.CookieJar
|
||||
}
|
||||
|
||||
// Cookies returns the cookies to send to target, treating a
|
||||
// plain-HTTP target on localhost as HTTPS.
|
||||
func (jar loopbackJar) Cookies(target *url.URL) []*http.Cookie {
|
||||
host := target.Hostname()
|
||||
loopback := host == "localhost" || net.ParseIP(host).IsLoopback()
|
||||
|
||||
if target.Scheme == "http" && loopback {
|
||||
secure := *target
|
||||
secure.Scheme = "https"
|
||||
target = &secure
|
||||
}
|
||||
|
||||
return jar.CookieJar.Cookies(target)
|
||||
}
|
||||
|
||||
// CreateSession creates a new session on the server.
|
||||
// If the server requires hashcash proof-of-work, it
|
||||
// automatically fetches the difficulty and computes a
|
||||
|
||||
Reference in New Issue
Block a user