mirror of
https://github.com/khairul169/garage-webui.git
synced 2025-10-14 23:09:32 +07:00
91 lines
1.9 KiB
Go
91 lines
1.9 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
var envMutex sync.RWMutex
|
|
|
|
func GetEnv(key, defaultValue string) string {
|
|
value := os.Getenv(key)
|
|
if len(value) == 0 {
|
|
return defaultValue
|
|
}
|
|
return value
|
|
}
|
|
|
|
// SetEnv sets an environment variable (thread-safe)
|
|
func SetEnv(key, value string) error {
|
|
envMutex.Lock()
|
|
defer envMutex.Unlock()
|
|
return os.Setenv(key, value)
|
|
}
|
|
|
|
// GetAllEnv returns all environment variables as a map
|
|
func GetAllEnv() map[string]string {
|
|
envMutex.RLock()
|
|
defer envMutex.RUnlock()
|
|
|
|
result := make(map[string]string)
|
|
for _, env := range os.Environ() {
|
|
parts := strings.SplitN(env, "=", 2)
|
|
if len(parts) == 2 {
|
|
result[parts[0]] = parts[1]
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func LastString(str []string) string {
|
|
return str[len(str)-1]
|
|
}
|
|
|
|
func ResponseError(w http.ResponseWriter, err error) {
|
|
ResponseErrorStatus(w, err, http.StatusInternalServerError)
|
|
}
|
|
|
|
func ResponseErrorStatus(w http.ResponseWriter, err error, status int) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.Header().Set("X-Content-Type-Options", "nosniff")
|
|
w.Header().Set("X-Frame-Options", "DENY")
|
|
w.Header().Set("X-XSS-Protection", "1; mode=block")
|
|
w.WriteHeader(status)
|
|
|
|
message := "Internal server error"
|
|
if err != nil {
|
|
message = err.Error()
|
|
}
|
|
|
|
response := map[string]interface{}{
|
|
"success": false,
|
|
"message": message,
|
|
}
|
|
|
|
// Add error details for development (remove in production)
|
|
if status >= 500 && err != nil {
|
|
log.Printf("Server error: %v", err)
|
|
}
|
|
|
|
json.NewEncoder(w).Encode(response)
|
|
}
|
|
|
|
func ResponseSuccess(w http.ResponseWriter, data interface{}) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.Header().Set("X-Content-Type-Options", "nosniff")
|
|
w.Header().Set("X-Frame-Options", "DENY")
|
|
w.Header().Set("X-XSS-Protection", "1; mode=block")
|
|
w.WriteHeader(http.StatusOK)
|
|
|
|
response := map[string]interface{}{
|
|
"success": true,
|
|
"data": data,
|
|
}
|
|
|
|
json.NewEncoder(w).Encode(response)
|
|
}
|