deleting server users now works

This commit is contained in:
George Shaw 2017-12-01 16:17:16 -06:00
parent a12a0e5073
commit b9256cc335
6 changed files with 113 additions and 1 deletions

60
pkg/api/user/delete.go Normal file
View file

@ -0,0 +1,60 @@
package user
import (
"encoding/json"
"log"
"net/http"
"strconv"
"github.com/Ennovar/gPanel/pkg/database"
)
func Delete(res http.ResponseWriter, req *http.Request, logger *log.Logger, dir string) bool {
if req.Method != "UPDATE" {
logger.Println(req.URL.Path + "::" + req.Method + "::" + strconv.Itoa(http.StatusMethodNotAllowed) + "::" + http.StatusText(http.StatusMethodNotAllowed))
http.Error(res, req.Method+" HTTP method is unsupported for this API.", http.StatusMethodNotAllowed)
return false
}
var deleteUserRequestData struct {
User string `json:"user"`
}
err := json.NewDecoder(req.Body).Decode(&deleteUserRequestData)
if err != nil {
logger.Println(req.URL.Path + "::" + err.Error())
http.Error(res, err.Error(), http.StatusBadRequest)
return false
}
ds, err := database.Open(dir + database.DB_MAIN)
if err != nil || ds == nil {
logger.Println(req.URL.Path + "::" + err.Error())
http.Error(res, err.Error(), http.StatusInternalServerError)
return false
}
defer ds.Close()
count, err := ds.Count(database.BUCKET_USERS)
if err != nil {
logger.Println(req.URL.Path + "::" + err.Error())
http.Error(res, err.Error(), http.StatusInternalServerError)
return false
}
if count <= 1 {
logger.Println(req.URL.Path + ":: if only one user exists it cannot be deleted")
http.Error(res, "If only one user exists it cannot be deleted", http.StatusBadRequest)
return false
}
err = ds.Delete(database.BUCKET_USERS, []byte(deleteUserRequestData.User))
if err != nil {
logger.Println(req.URL.Path + "::" + err.Error())
http.Error(res, err.Error(), http.StatusInternalServerError)
return false
}
res.WriteHeader(http.StatusNoContent)
return true
}

View file

@ -122,3 +122,20 @@ func (ds *Datastore) Delete(bucket string, key []byte) error {
return tx.Bucket([]byte(bucket)).Delete(key)
})
}
func (ds *Datastore) Count(bucket string) (int, error) {
count := 0
ds.handle.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(bucket))
c := b.Cursor()
for k, _ := c.First(); k != nil; k, _ = c.Next() {
count++
}
return nil
})
return count, nil
}

View file

@ -74,6 +74,8 @@ func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request) (b
return true, user.Logout(res, req, con.APILogger, con.Directory)
case "/user/list":
return true, user.List(res, req, con.APILogger, con.Directory)
case "/user/delete":
return true, user.Delete(res, req, con.APILogger, con.Directory)
case "/bundle/create":
return true, bundle.Create(res, req, con.APILogger, con.Bundles)
case "/bundle/list":

View file

@ -0,0 +1,32 @@
jQuery(document).on('click', '._js_user-management-delete', function(e){
e.preventDefault();
if(!jQuery(this).attr('data') || jQuery(this).attr('data') == "") {
alert("An error has occurred, please refresh and try again. If problem persists please contact your administrator.");
}
var ensure = confirm('Are you sure you want to delete the user "' + jQuery(this).attr('data') + '"?');
if(ensure) {
var requestData = {};
requestData["user"] = jQuery(this).attr('data');
var xhr = new XMLHttpRequest();
xhr.open('UPDATE', 'api/user/delete', true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.send(JSON.stringify(requestData));
xhr.onloadend = function() {
if(xhr.status == 204) {
listCurrentUsers();
}
else {
if(xhr.response != undefined && xhr.response.length != 0) {
alert('Error: ' + xhr.response);
}
else {
alert("An error has occurred, please refresh and try again. If problem persists please contact your administrator.");
}
}
}
}
});

View file

@ -23,7 +23,7 @@ function listCurrentUsers() {
if(xhr.response != undefined && xhr.response.length != 0) {
jsonResponse = JSON.parse(xhr.response)
jQuery.each(jsonResponse, function(k, v) {
display.append('<div class="row mt-2"><div class="col-6 d-flex align-items-center"><p class="mb-0">'+v+'</p></div><div class="col-6 d-flex justify-content-end"><div class="btn-group" role="group"><button class="btn btn-outline-primary _js_user-management-new-password" data="'+v+'">New Password</button><button class="btn btn-outline-primary _js_user-management-delete" data="'+v+'">Delete</button></div></div></div>');
display.append('<div class="row mt-2"><div class="col-6 d-flex align-items-center"><p class="mb-0">'+v+'</p></div><div class="col-6 d-flex justify-content-end"><div class="btn-group" role="group"><button class="btn btn-outline-primary _js_user-management-new-password" data="'+v+'">New Password</button><button class="btn btn-outline-danger _js_user-management-delete" data="'+v+'">Delete</button></div></div></div>');
});
}
else {

View file

@ -317,6 +317,7 @@
<script type="text/javascript" src="assets/js/panelHandlers/users/open.js"></script>
<script type="text/javascript" src="assets/js/panelHandlers/users/new.js"></script>
<script type="text/javascript" src="assets/js/panelHandlers/users/delete.js"></script>
<!-- KEEP AT BOTTOM OF BODY TAGS -->
</body>
</html>