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  }