github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/destroy.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  
    10  	"github.com/fragmenta/fragmenta-cms/src/lib/session"
    11  	"github.com/fragmenta/fragmenta-cms/src/pages"
    12  )
    13  
    14  // HandleDestroy responds to /pages/n/destroy by deleting the page.
    15  func HandleDestroy(w http.ResponseWriter, r *http.Request) error {
    16  
    17  	// Fetch the  params
    18  	params, err := mux.Params(r)
    19  	if err != nil {
    20  		return server.InternalError(err)
    21  	}
    22  
    23  	// Find the page
    24  	page, err := pages.Find(params.GetInt(pages.KeyName))
    25  	if err != nil {
    26  		return server.NotFoundError(err)
    27  	}
    28  
    29  	// Check the authenticity token
    30  	err = session.CheckAuthenticity(w, r)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	// Authorise destroy page
    36  	user := session.CurrentUser(w, r)
    37  	err = can.Destroy(page, user)
    38  	if err != nil {
    39  		return server.NotAuthorizedError(err)
    40  	}
    41  
    42  	// Destroy the page
    43  	page.Destroy()
    44  
    45  	// Redirect to pages root
    46  	return server.Redirect(w, r, page.IndexURL())
    47  
    48  }