Улучшение обработки путей и добавление списка файлов
Go Build and Test / build-and-test (push) Successful in 29s

- Заменена filepath.Ext() на strings.HasSuffix() для корректной проверки
расширений - Оптимизирована логика проверки исключаемых путей: - Упрощён
pattern matching - Добавлена явная проверка префиксов путей - Улучшена
обработка базовых имён файлов - Добавлен новый endpoint GET /backup: -
Возвращает JSON-список файлов в директории бэкапов - Реализована
фильтрация директорий
This commit is contained in:
wt committed 2025-08-12 16:17:43 +07:00
1 parent 4639779116
commit a1681ab58a
4 files changed
+235 -13

No files matched your search

+22
View File
@@ -1,6 +1,7 @@
package cmd
import (
"encoding/json"
"fmt"
"io"
"log"
@@ -37,6 +38,7 @@ var serveCmd = &cobra.Command{
r := mux.NewRouter()
r.HandleFunc("/backup/{filename}", uploadHandler).Methods("POST")
r.HandleFunc("/backup/{filename}", downloadHandler).Methods("GET")
r.HandleFunc("/backup", listHandler).Methods("GET")
log.Printf("Starting server on %s", serveAddress)
log.Printf("Using backup directory: %s", serveDirectory)
@@ -89,6 +91,26 @@ func downloadHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Downloaded %s", filename)
}
func listHandler(w http.ResponseWriter, r *http.Request) {
files, err := os.ReadDir(serveDirectory)
if err != nil {
http.Error(w, "Failed to read directory", http.StatusInternalServerError)
log.Printf("Error reading directory: %v", err)
return
}
var filenames []string
for _, file := range files {
if !file.IsDir() {
filenames = append(filenames, file.Name())
}
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(filenames)
log.Printf("Listed files")
}
func init() {
rootCmd.AddCommand(serveCmd)
serveCmd.Flags().StringVarP(&serveAddress, "address", "a", "localhost:8080", "Address and port for the server")