Fix API server and URL handling for frontend connectivity

This commit is contained in:
Andreas Düren 2025-03-20 13:22:13 +01:00
parent f4fd4fdf77
commit d345b2f460

173
start.sh

@ -1073,13 +1073,13 @@ else
# Create a proper Go module structure - this is critical for the build
echo "==> Creating proper Go module structure"
# Initialize an explicit Go module
echo "module mock-server" > go.mod
# Initialize an explicit Go module with specified go version
echo "module main" > go.mod
echo "go 1.19" >> go.mod
# Write main.go as a single file with correct quoted heredoc
# Write main.go as a single file without heredoc
echo "==> Writing main.go file for mock API server"
cat > main.go <<'ENDOFPROGRAM'
cat > main.go << 'ENDOFFILE'
package main
import (
@ -1139,6 +1139,72 @@ func main() {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"status":"ok","version":"mock-1.0.0","time":"%s"}`, time.Now().Format(time.RFC3339))
})
// Handle OTT (One-Time Token) requests
http.HandleFunc("/users/ott", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
body, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "Error reading request body", http.StatusBadRequest)
return
}
logger.Printf("REGISTRATION REQUEST TO /users/ott: %s", string(body))
// Extract email from request - simplified parsing
emailStart := strings.Index(string(body), "\"email\":\"")
var email string
if emailStart >= 0 {
emailStart += 9 // Length of "\"email\":\""
emailEnd := strings.Index(string(body)[emailStart:], "\"")
if emailEnd >= 0 {
email = string(body)[emailStart : emailStart+emailEnd]
}
}
// Generate verification code - 6 digits for OTT
verificationCode := fmt.Sprintf("%06d", 100000 + rand.Intn(900000)) // 6-digit code
if email != "" {
verificationCodes[email] = verificationCode
logger.Printf("===================================================")
logger.Printf("⚠️ OTT/VERIFICATION CODE for %s: %s", email, verificationCode)
logger.Printf("===================================================")
// Also log to console for immediate visibility
fmt.Printf("===================================================\n")
fmt.Printf("⚠️ OTT/VERIFICATION CODE for %s: %s\n", email, verificationCode)
fmt.Printf("===================================================\n")
}
// Return a success response with properly formatted data
w.Header().Set("Content-Type", "application/json")
// Create a response with the required fields
jsonResponse := map[string]interface{}{
"status": "ok",
"id": 12345, // Add required ID field as a number
"token": "mock-token-12345",
"ott": verificationCode,
"exp": time.Now().Add(time.Hour).Unix(),
"email": email,
"createdAt": time.Now().Format(time.RFC3339),
"updatedAt": time.Now().Format(time.RFC3339),
"key": map[string]interface{}{
"pubKey": "mockPubKey123456",
"encPubKey": "mockEncPubKey123456",
"kty": "mockKty",
"kid": "mockKid",
"alg": "mockAlg",
"verifyKey": "mockVerifyKey123456",
},
}
json.NewEncoder(w).Encode(jsonResponse)
} else {
// Just handle other methods with a generic response
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"status":"mock","endpoint":"%s","method":"%s"}`, r.URL.Path, r.Method)
}
})
// Generic handler for all other requests
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
@ -1172,13 +1238,15 @@ func main() {
logger.Fatalf("Server failed: %v", err)
}
}
ENDOFPROGRAM
ENDOFFILE
# Show the created files for debugging
echo "==> Listing created files:"
ls -la
echo "==> Contents of go.mod:"
cat go.mod
echo "==> First 10 lines of main.go:"
head -10 main.go
# Completely unset Go module environment variables
echo "==> Unsetting module flags before building mock server"
@ -1187,7 +1255,7 @@ ENDOFPROGRAM
unset GOPATH
unset GOMODCACHE
# Build the mock server using the direct build command
# Build the mock server using Go directly
echo "==> Building mock API server on port 8080"
# Show Go version
@ -1196,47 +1264,20 @@ ENDOFPROGRAM
# Set SERVER_PID to 0 initially - CRITICAL for avoiding unbound variable later
SERVER_PID=0
# Try building with explicit output file
if go build -o mock_server .; then
echo "==> Successfully compiled mock API server"
# Create log directory if it doesn't exist
mkdir -p /app/data/logs
# Start the server and log both to file and to console
chmod +x ./mock_server
nohup ./mock_server > /app/data/logs/mock_server.log 2>&1 &
SERVER_PID=$!
echo "==> Mock API server started with PID $SERVER_PID"
# Wait to ensure the server is up
echo "==> Waiting for server to start..."
sleep 5 # Increased sleep time for better reliability
# Check if the server is actually running
if ps -p $SERVER_PID > /dev/null; then
echo "==> Mock API server is running with PID $SERVER_PID"
# Check if the port is actually listening
if netstat -tulpn 2>/dev/null | grep ":8080" > /dev/null; then
echo "==> Mock API server is listening on port 8080"
else
echo "==> WARNING: Mock API server doesn't appear to be listening on port 8080"
echo "==> Checking server logs:"
tail -n 30 /app/data/logs/mock_server.log
fi
else
echo "==> ERROR: Mock API server failed to start"
echo "==> Server log:"
cat /app/data/logs/mock_server.log
# Reset SERVER_PID if process died
SERVER_PID=0
fi
else
echo "==> ERROR: Failed to build mock API server"
go version
# Server PID is already set to 0 above
fi
# Use go run instead of build to simplify the process
echo "==> Running Go mock API server directly"
mkdir -p /app/data/logs
touch /app/data/logs/api_requests.log
chmod 666 /app/data/logs/api_requests.log
# Run directly with go run in the background
nohup go run main.go > /app/data/logs/mock_server.log 2>&1 &
SERVER_PID=$!
echo "==> Mock API server started with PID $SERVER_PID"
# Wait to ensure the server is up
echo "==> Waiting for server to start..."
sleep 5 # Increased sleep time for better reliability
fi
echo "==> Server started with PID ${SERVER_PID:-0}"
@ -1616,15 +1657,41 @@ window.process.env.REACT_APP_ENTE_ENDPOINT = '${API_ENDPOINT}';
// Make sure all URLs are properly formatted for URL constructor
if (!window.ENTE_CONFIG.API_URL.startsWith('http')) {
console.log('Adding https:// prefix to API_URL');
window.ENTE_CONFIG.API_URL = window.location.origin + window.ENTE_CONFIG.API_URL;
window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT = window.location.origin + window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT;
window.process.env.REACT_APP_ENTE_ENDPOINT = window.location.origin + window.process.env.REACT_APP_ENTE_ENDPOINT;
window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT = window.location.origin + window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT;
// Ensure the API URL has a proper protocol prefix for URL constructor
if (window.ENTE_CONFIG.API_URL.startsWith('/')) {
window.ENTE_CONFIG.API_URL = window.location.origin + window.ENTE_CONFIG.API_URL;
} else {
window.ENTE_CONFIG.API_URL = window.location.origin + '/' + window.ENTE_CONFIG.API_URL;
}
// Fix environment variables too
if (window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT.startsWith('/')) {
window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT = window.location.origin + window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT;
} else {
window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT = window.location.origin + '/' + window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT;
}
// Same for other variables
if (window.process.env.REACT_APP_ENTE_ENDPOINT.startsWith('/')) {
window.process.env.REACT_APP_ENTE_ENDPOINT = window.location.origin + window.process.env.REACT_APP_ENTE_ENDPOINT;
} else {
window.process.env.REACT_APP_ENTE_ENDPOINT = window.location.origin + '/' + window.process.env.REACT_APP_ENTE_ENDPOINT;
}
if (window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT && !window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT.startsWith('http')) {
if (window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT.startsWith('/')) {
window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT = window.location.origin + window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT;
} else {
window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT = window.location.origin + '/' + window.process.env.NEXT_PUBLIC_REACT_APP_ENTE_ENDPOINT;
}
}
}
// Extra logging to debug URL construction
console.log('Ente runtime config loaded from runtime-config.js');
console.log('API_URL:', window.ENTE_CONFIG.API_URL);
console.log('PUBLIC_ALBUMS_URL:', window.ENTE_CONFIG.PUBLIC_ALBUMS_URL);
console.log('API_URL (final):', window.ENTE_CONFIG.API_URL);
console.log('PUBLIC_ALBUMS_URL (final):', window.ENTE_CONFIG.PUBLIC_ALBUMS_URL);
console.log('NEXT_PUBLIC_ENTE_ENDPOINT (final):', window.process.env.NEXT_PUBLIC_ENTE_ENDPOINT);
EOF
# Update the variables in the runtime config