From 9da994cfbb0b45bbc7ca2d553fd28ed7dd0674f9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 21 Dec 2025 00:28:26 -0500 Subject: [PATCH] update frontend --- src/components/Map/usePostsEngine.js | 4 - utils/b.bottom | 0 utils/b.right | 0 utils/patch_backend_refresh.sh | 119 ------------------------ utils/patch_frontend_auth_to_backend.sh | 38 -------- utils/patch_show_auth_errors.sh | 13 --- 6 files changed, 174 deletions(-) delete mode 100644 utils/b.bottom delete mode 100644 utils/b.right delete mode 100755 utils/patch_backend_refresh.sh delete mode 100755 utils/patch_frontend_auth_to_backend.sh delete mode 100755 utils/patch_show_auth_errors.sh diff --git a/src/components/Map/usePostsEngine.js b/src/components/Map/usePostsEngine.js index 6785285..72f42b2 100644 --- a/src/components/Map/usePostsEngine.js +++ b/src/components/Map/usePostsEngine.js @@ -252,10 +252,6 @@ export function usePostsEngine({ setLoadingPosts(false); } catch (err) { - console.error("Erreur chargement posts:", err); - if (!cancelled) { - setLoadError("Error loading posts."); - setLoadingPosts(false); } } } diff --git a/utils/b.bottom b/utils/b.bottom deleted file mode 100644 index e69de29..0000000 diff --git a/utils/b.right b/utils/b.right deleted file mode 100644 index e69de29..0000000 diff --git a/utils/patch_backend_refresh.sh b/utils/patch_backend_refresh.sh deleted file mode 100755 index c398cfe..0000000 --- a/utils/patch_backend_refresh.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# ===== CONFIG ===== -BACKEND_DIR="${BACKEND_DIR:-sociowire-backend}" - -cd "$BACKEND_DIR" - -echo "[1/2] Write auth_refresh.go" -cat > auth_refresh.go <<'GO' -package main - -import ( - "encoding/json" - "io" - "net/http" - "net/url" - "os" - "strings" - "time" -) - -func refreshHandler(w http.ResponseWriter, r *http.Request) { - setCommonHeaders(w) - - if r.Method == http.MethodOptions { - w.WriteHeader(http.StatusNoContent) - return - } - if r.Method != http.MethodPost { - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) - return - } - - type req struct { - RefreshToken string `json:"refresh_token"` - } - var body req - _ = json.NewDecoder(r.Body).Decode(&body) - - rt := strings.TrimSpace(body.RefreshToken) - if rt == "" { - http.Error(w, "refresh_token required", http.StatusBadRequest) - return - } - - kcURL := strings.TrimRight(strings.TrimSpace(os.Getenv("KEYCLOAK_URL")), "/") - realm := strings.TrimSpace(os.Getenv("KEYCLOAK_REALM")) - clientID := strings.TrimSpace(os.Getenv("KC_PUBLIC_CLIENT_ID")) - clientSecret := strings.TrimSpace(os.Getenv("KC_PUBLIC_CLIENT_SECRET")) - - if kcURL == "" || realm == "" || clientID == "" { - http.Error(w, "keycloak env missing", http.StatusBadGateway) - return - } - - tokenURL := kcURL + "/realms/" + realm + "/protocol/openid-connect/token" - - form := url.Values{} - form.Set("grant_type", "refresh_token") - form.Set("client_id", clientID) - form.Set("refresh_token", rt) - if clientSecret != "" { - form.Set("client_secret", clientSecret) - } - - req2, _ := http.NewRequest("POST", tokenURL, strings.NewReader(form.Encode())) - req2.Header.Set("Content-Type", "application/x-www-form-urlencoded") - - client := &http.Client{Timeout: 8 * time.Second} - resp, err := client.Do(req2) - if err != nil { - http.Error(w, "keycloak refresh error", http.StatusBadGateway) - return - } - defer resp.Body.Close() - - raw, _ := io.ReadAll(resp.Body) - if resp.StatusCode != 200 { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusUnauthorized) - _, _ = w.Write(raw) - return - } - - w.Header().Set("Content-Type", "application/json") - _, _ = w.Write(raw) -} -GO - -echo "[2/2] Patch main.go to add /api/refresh route" -if ! grep -q '"/api/refresh"' main.go; then - # Insert after /api/login line if present, else near auth routes block - # This is a simple awk insert. - awk ' - {print} - /mux\.HandleFunc\("\/api\/login", loginHandler\)/ { - print "\tmux.HandleFunc(\"/api/refresh\", refreshHandler)" - } - ' main.go > main.go.tmp - - # If insertion didn’t happen (no match), append under auth routes area: - if ! grep -q '"/api/refresh"' main.go.tmp; then - awk ' - {print} - /mux\.HandleFunc\("\/api\/login", loginHandler\)/==0 && /\/\/ Auth\/debug/ { - # no-op marker - } - ' main.go.tmp > /dev/null 2>&1 || true - # fallback: append near other routes (safe) - sed -i 's|mux.HandleFunc("/api/login", loginHandler)|mux.HandleFunc("/api/login", loginHandler)\n\tmux.HandleFunc("/api/refresh", refreshHandler)|' main.go.tmp || true - fi - - mv main.go.tmp main.go -else - echo "main.go already has /api/refresh" -fi - -echo "DONE backend patch." diff --git a/utils/patch_frontend_auth_to_backend.sh b/utils/patch_frontend_auth_to_backend.sh deleted file mode 100755 index 5c03b14..0000000 --- a/utils/patch_frontend_auth_to_backend.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -FRONTEND_DIR="${FRONTEND_DIR:-sociowire-frontend}" -FILE="$FRONTEND_DIR/src/auth/AuthContext.jsx" - -if [ ! -f "$FILE" ]; then - echo "ERROR: not found: $FILE" - exit 1 -fi - -echo "[1/3] Backup AuthContext.jsx" -cp -a "$FILE" "$FILE.bak.$(date +%s)" - -echo "[2/3] Remove direct Keycloak constants (KC_BASE/KC_REALM/KC_CLIENT_ID) if present" -# delete block lines that define KC_BASE/KC_REALM/KC_CLIENT_ID -sed -i \ - -e '/^const KC_BASE = /d' \ - -e '/^const KC_REALM = /d' \ - -e '/^const KC_CLIENT_ID = /d' \ - "$FILE" - -echo "[3/3] Replace refreshWithKeycloak + login() to use backend /api/login + /api/refresh" - -# Replace function refreshWithKeycloak(...) { ... } with refreshViaBackend(...) -perl -0777 -i -pe ' -s/async function refreshWithKeycloak\([^\)]*\)\s*\{.*?\n\}\n/async function refreshViaBackend(refreshToken) {\n const res = await fetch(\"\/api\/refresh\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application\/json\" },\n credentials: \"include\",\n body: JSON.stringify({ refresh_token: refreshToken }),\n });\n\n const text = await res.text();\n if (!res.ok) {\n let msg = text;\n try {\n const j = JSON.parse(text);\n msg = j.error_description || j.error || text;\n } catch {}\n throw new Error(`${res.status} ${msg}`);\n }\n\n const data = JSON.parse(text);\n if (!data.access_token) throw new Error(\"No access_token in refresh response\");\n return {\n accessToken: data.access_token,\n refreshToken: data.refresh_token || refreshToken,\n };\n}\n/sms -' "$FILE" - -# Replace any calls to refreshWithKeycloak( with refreshViaBackend( -sed -i 's/refreshWithKeycloak(/refreshViaBackend(/g' "$FILE" - -# Replace login() body to call /api/login -perl -0777 -i -pe ' -s/async function login\([^\)]*\)\s*\{.*?\n\s*\}\n\n\s*function logout\(/async function login(user, pass) {\n setLastError(\"\");\n const u = (user || \"\").trim();\n if (!u || !pass) {\n setLastError(\"Username and password required.\");\n return;\n }\n\n try {\n setLoading(true);\n\n const res = await fetch(\"\/api\/login\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application\/json\" },\n credentials: \"include\",\n body: JSON.stringify({ username: u, password: pass }),\n });\n\n const text = await res.text();\n if (!res.ok) {\n let msg = \"Invalid credentials or auth error.\";\n try {\n const j = JSON.parse(text);\n msg = j.error_description || j.error || msg;\n } catch {}\n clearAuth(`${res.status} ${msg}`);\n return;\n }\n\n const data = JSON.parse(text);\n const accessToken = data.access_token;\n const refreshToken = data.refresh_token;\n\n if (!accessToken) {\n clearAuth(\"No access token in response.\");\n return;\n }\n\n persistAuth({ accessToken, refreshToken, user: u });\n setLastError(\"\");\n } catch (e) {\n console.error(\"[AUTH] network error\", e);\n clearAuth(\"Network error during login.\");\n } finally {\n setLoading(false);\n }\n }\n\n function logout(/sms -' "$FILE" - -echo "DONE frontend patch." diff --git a/utils/patch_show_auth_errors.sh b/utils/patch_show_auth_errors.sh deleted file mode 100755 index 270a0f2..0000000 --- a/utils/patch_show_auth_errors.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -APP_DIR="${APP_DIR:-sociowire-frontend}" -FILE="$APP_DIR/src/components/Layout/TopBar.jsx" - -cp -a "$FILE" "$FILE.bak.$(date +%s)" - -# Ajoute l'affichage lastError dans le form login (sous le bouton) -perl -0777 -i -pe ' -s|(\s*)|\n {lastError &&
{lastError}
}\n |ms -' "$FILE" - -echo "OK patched: $FILE"