t1
This commit is contained in:
@@ -151,6 +151,26 @@ func (h *Handler) GenerateSitemapXML(w http.ResponseWriter, r *http.Request) {
|
||||
h.streamManager.CloseStream(generatedUUID)
|
||||
}()
|
||||
|
||||
// Add UUID to user UUIDs cookie
|
||||
userUUIDs := getUserUUIDsFromCookie(r)
|
||||
userUUIDs = append(userUUIDs, generatedUUID)
|
||||
|
||||
// Keep only last 20 UUIDs and remove duplicates
|
||||
uniqueUUIDs := removeDuplicateUUIDs(userUUIDs)
|
||||
if len(uniqueUUIDs) > 20 {
|
||||
uniqueUUIDs = uniqueUUIDs[len(uniqueUUIDs)-20:]
|
||||
}
|
||||
|
||||
// Set cookie with user UUIDs
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: "user_uuids",
|
||||
Value: strings.Join(uniqueUUIDs, ","),
|
||||
Path: "/",
|
||||
MaxAge: 86400 * 90, // 90 days
|
||||
HttpOnly: false,
|
||||
SameSite: http.SameSiteLaxMode,
|
||||
})
|
||||
|
||||
// Return immediately with UUID
|
||||
response := map[string]interface{}{
|
||||
"uuid": generatedUUID,
|
||||
@@ -241,7 +261,20 @@ func (h *Handler) DownloadSitemap(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// GetSites handles GET /sites
|
||||
func (h *Handler) GetSites(w http.ResponseWriter, r *http.Request) {
|
||||
sites, err := h.db.GetAllSites()
|
||||
// Get user's UUIDs from cookie
|
||||
userUUIDs := getUserUUIDsFromCookie(r)
|
||||
|
||||
var sites []*models.Site
|
||||
var err error
|
||||
|
||||
if len(userUUIDs) > 0 {
|
||||
// Get only user's sites
|
||||
sites, err = h.db.GetSitesByUUIDs(userUUIDs)
|
||||
} else {
|
||||
// No UUIDs found, return empty list
|
||||
sites = []*models.Site{}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to retrieve sites", http.StatusInternalServerError)
|
||||
return
|
||||
@@ -421,6 +454,39 @@ func getOrCreateSession(r *http.Request) string {
|
||||
return uuid.New().String()
|
||||
}
|
||||
|
||||
func getUserUUIDsFromCookie(r *http.Request) []string {
|
||||
// Get user UUIDs from cookie
|
||||
cookie, err := r.Cookie("user_uuids")
|
||||
if err != nil || cookie.Value == "" {
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// Parse comma-separated UUIDs
|
||||
uuids := strings.Split(cookie.Value, ",")
|
||||
// Filter out empty strings
|
||||
var result []string
|
||||
for _, uuid := range uuids {
|
||||
if strings.TrimSpace(uuid) != "" {
|
||||
result = append(result, strings.TrimSpace(uuid))
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func removeDuplicateUUIDs(uuids []string) []string {
|
||||
seen := make(map[string]bool)
|
||||
var result []string
|
||||
|
||||
for _, uuid := range uuids {
|
||||
if !seen[uuid] {
|
||||
seen[uuid] = true
|
||||
result = append(result, uuid)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func extractCookies(r *http.Request) string {
|
||||
cookies := r.Cookies()
|
||||
if len(cookies) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user