github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/users/actions/destroy.go (about)

     1  package useractions
     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/users"
    12  )
    13  
    14  // HandleDestroy responds to /users/n/destroy by deleting the user.
    15  func HandleDestroy(w http.ResponseWriter, r *http.Request) error {
    16  
    17  	// Get the user params for id
    18  	params, err := mux.Params(r)
    19  	if err != nil {
    20  		return server.InternalError(err)
    21  	}
    22  
    23  	// Find the user
    24  	user, err := users.Find(params.GetInt(users.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 user
    36  	currentUser := session.CurrentUser(w, r)
    37  	err = can.Destroy(user, currentUser)
    38  	if err != nil {
    39  		return server.NotAuthorizedError(err)
    40  	}
    41  
    42  	// Destroy the user
    43  	user.Destroy()
    44  
    45  	// Redirect to users root
    46  	return server.Redirect(w, r, user.IndexURL())
    47  
    48  }