github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/create.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/users" 14 ) 15 16 // HandleCreateShow serves the create form via GET for pages. 17 func HandleCreateShow(w http.ResponseWriter, r *http.Request) error { 18 19 page := pages.New() 20 21 // Authorise 22 user := session.CurrentUser(w, r) 23 err := can.Create(page, user) 24 if err != nil { 25 return server.NotAuthorizedError(err) 26 } 27 28 // Fetch the users 29 authors, err := users.FindAll(users.Where("role=?", users.Admin)) 30 if err != nil { 31 return server.InternalError(err) 32 } 33 34 // Render the template 35 view := view.NewRenderer(w, r) 36 view.AddKey("page", page) 37 view.AddKey("authors", authors) 38 view.AddKey("currentUser", user) 39 return view.Render() 40 } 41 42 // HandleCreate handles the POST of the create form for pages 43 func HandleCreate(w http.ResponseWriter, r *http.Request) error { 44 45 page := pages.New() 46 47 // Check the authenticity token 48 err := session.CheckAuthenticity(w, r) 49 if err != nil { 50 return err 51 } 52 53 // Authorise 54 user := session.CurrentUser(w, r) 55 err = can.Create(page, user) 56 if err != nil { 57 return server.NotAuthorizedError(err) 58 } 59 60 // Setup context 61 params, err := mux.Params(r) 62 if err != nil { 63 return server.InternalError(err) 64 } 65 66 // Validate the params, removing any we don't accept 67 pageParams := page.ValidateParams(params.Map(), pages.AllowedParams()) 68 69 id, err := page.Create(pageParams) 70 if err != nil { 71 return server.InternalError(err) 72 } 73 74 // Redirect to the new page 75 page, err = pages.Find(id) 76 if err != nil { 77 return server.InternalError(err) 78 } 79 80 return server.Redirect(w, r, page.IndexURL()) 81 }