// API function to update blog settings func patchApiBlogHandler(w http.ResponseWriter, r *http.Request, _ map[string]string) { userName := authentication.GetUserName(r) if userName != "" { userId, err := getUserId(userName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } decoder := json.NewDecoder(r.Body) var json JsonBlog err = decoder.Decode(&json) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // Make sure postPerPage is over 0 if json.PostsPerPage < 1 { json.PostsPerPage = 1 } // Remove blog url in front of navigation urls for index, _ := range json.NavigationItems { if strings.HasPrefix(json.NavigationItems[index].Url, json.Url) { json.NavigationItems[index].Url = strings.Replace(json.NavigationItems[index].Url, json.Url, "", 1) // If we removed the blog url, there should be a / in front of the url if !strings.HasPrefix(json.NavigationItems[index].Url, "/") { json.NavigationItems[index].Url = "/" + json.NavigationItems[index].Url } } } // Retrieve old blog settings for comparison blog, err := database.RetrieveBlog() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } tempBlog := structure.Blog{Url: []byte(configuration.Config.Url), Title: []byte(json.Title), Description: []byte(json.Description), Logo: []byte(json.Logo), Cover: []byte(json.Cover), AssetPath: []byte("/assets/"), PostCount: blog.PostCount, PostsPerPage: json.PostsPerPage, ActiveTheme: json.ActiveTheme, NavigationItems: json.NavigationItems} err = methods.UpdateBlog(&tempBlog, userId) // Check if active theme setting has been changed, if so, generate templates from new theme if tempBlog.ActiveTheme != blog.ActiveTheme { err = templates.Generate() if err != nil { // If there's an error while generating the new templates, the whole program must be stopped. log.Fatal("Fatal error: Template data couldn't be generated from theme files: " + err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) return } } if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Write([]byte("Blog settings updated!")) return } else { http.Error(w, "Not logged in!", http.StatusInternalServerError) return } }
func GenerateBlog() error { // Write lock the global blog if Blog != nil { Blog.Lock() defer Blog.Unlock() } // Generate blog from db blog, err := database.RetrieveBlog() if err != nil { return err } // Add parameters that are not saved in db blog.Url = []byte(configuration.Config.Url) blog.AssetPath = assetPath // Create navigation slugs for index, _ := range blog.NavigationItems { blog.NavigationItems[index].Slug = slug.Generate(blog.NavigationItems[index].Label, "navigation") } Blog = blog return nil }