github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/show.go (about) 1 package pageactions 2 3 import ( 4 "net/http" 5 6 "github.com/fragmenta/auth/can" 7 "github.com/fragmenta/mux" 8 "github.com/fragmenta/server" 9 "github.com/fragmenta/view" 10 11 "github.com/fragmenta/fragmenta-cms/src/lib/session" 12 "github.com/fragmenta/fragmenta-cms/src/pages" 13 "github.com/fragmenta/fragmenta-cms/src/redirects" 14 ) 15 16 // HandleShow displays a single page. 17 func HandleShow(w http.ResponseWriter, r *http.Request) error { 18 19 // Fetch the params 20 params, err := mux.Params(r) 21 if err != nil { 22 return server.InternalError(err) 23 } 24 25 // Find the page 26 page, err := pages.Find(params.GetInt(pages.KeyName)) 27 if err != nil { 28 return server.NotFoundError(err) 29 } 30 31 // Authorise access 32 user := session.CurrentUser(w, r) 33 34 if !page.IsPublished() { 35 err = can.Show(page, user) 36 if err != nil { 37 return server.NotAuthorizedError(err) 38 } 39 } 40 41 // Render the template 42 view := view.NewRenderer(w, r) 43 view.CacheKey(page.CacheKey()) 44 view.AddKey("page", page) 45 view.AddKey("currentUser", user) 46 view.AddKey("meta_title", page.Name) 47 view.AddKey("meta_keywords", page.Keywords) 48 view.AddKey("meta_desc", page.Summary) 49 view.Template(page.ShowTemplate()) 50 return view.Render() 51 } 52 53 // HandleShowPath serves requests to a custom page url 54 func HandleShowPath(w http.ResponseWriter, r *http.Request) error { 55 56 // Fetch the params 57 params, err := mux.Params(r) 58 if err != nil { 59 return server.InternalError(err) 60 } 61 62 // Find the page 63 path := "/" + params.Get("path") 64 page, err := pages.FindFirst("url=?", path) 65 if err != nil { 66 redirect, err := redirects.FindFirst("old_url=?", path) 67 if err != nil { 68 return server.NotFoundError(err) 69 } 70 return server.Redirect(w, r, redirect.NewURL) 71 } 72 73 // Authorise access IF the page is not published 74 user := session.CurrentUser(w, r) 75 if !page.IsPublished() { 76 err = can.Show(page, user) 77 if err != nil { 78 return server.NotAuthorizedError(err) 79 } 80 } 81 82 // Render the template 83 view := view.NewRenderer(w, r) 84 view.CacheKey(page.CacheKey()) 85 view.AddKey("page", page) 86 view.AddKey("currentUser", user) 87 view.AddKey("meta_title", page.Name) 88 view.AddKey("meta_keywords", page.Keywords) 89 view.AddKey("meta_desc", page.Summary) 90 view.Template(page.ShowTemplate()) 91 return view.Render() 92 }