Compare commits

..

No commits in common. "472d17509315e5d448c7e85787bbfa9c3d55c575" and "d516147238b4bddb060c071f92908d99bce80caf" have entirely different histories.

2 changed files with 16 additions and 32 deletions

View File

@ -3,7 +3,6 @@ package http
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" // Added for fmt.Fprintf
"net" "net"
"net/http" "net/http"
"time" "time"
@ -280,37 +279,21 @@ func writeResponse(w http.ResponseWriter, result any) {
result = httpResp.Body // Set result to body for processing below result = httpResp.Body // Set result to body for processing below
} }
// Check if it's a map (table) or array - return as JSON switch res := result.(type) {
isJSON := false case string:
// String result - default to plain text
switch result.(type) { setContentTypeIfMissing(w, contentTypePlain)
case map[string]any, []any, []float64, []string, []int: w.Write([]byte(res))
isJSON = true default:
} // All other types - convert to JSON
if isJSON {
setContentTypeIfMissing(w, contentTypeJSON) setContentTypeIfMissing(w, contentTypeJSON)
data, err := json.Marshal(result) data, err := json.Marshal(res)
if err != nil { if err != nil {
logger.Error("Failed to marshal response: %v", err) logger.Error("Failed to marshal response: %v", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError) http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return return
} }
w.Write(data) w.Write(data)
return
}
// All other types - convert to plain text
setContentTypeIfMissing(w, contentTypePlain)
switch r := result.(type) {
case string:
w.Write([]byte(r))
case []byte:
w.Write(r)
default:
// Convert any other type to string
fmt.Fprintf(w, "%v", r)
} }
} }

View File

@ -117,22 +117,23 @@ local cookie = {
if opts.expires then if opts.expires then
if type(opts.expires) == "number" then if type(opts.expires) == "number" then
if opts.expires > 0 then if opts.expires > 0 then
-- Add seconds to current time
cookie.max_age = opts.expires cookie.max_age = opts.expires
local now = os.time() local now = os.time()
cookie.expires = now + opts.expires cookie.expires = now + opts.expires
elseif opts.expires < 0 then elseif opts.expires < 0 then
cookie.expires = 1 -- Session cookie (default)
cookie.max_age = 0
else else
-- opts.expires == 0: Session cookie -- Expire immediately
-- Do nothing (omitting both expires and max-age creates a session cookie) cookie.expires = 0
cookie.max_age = 0
end end
end end
end end
-- Security flags -- Set flags (http_only defaults to true)
cookie.secure = (opts.secure ~= false) cookie.secure = opts.secure or false
cookie.http_only = (opts.http_only ~= false) cookie.http_only = (opts.http_only ~= false) -- Default to true unless explicitly set to false
-- Store in cookies table -- Store in cookies table
local n = #resp.cookies + 1 local n = #resp.cookies + 1