mirror of
https://github.com/donl/gPanel.git
synced 2026-05-25 22:06:55 -06:00
deleting server users now works
This commit is contained in:
parent
a12a0e5073
commit
b9256cc335
6 changed files with 113 additions and 1 deletions
60
pkg/api/user/delete.go
Normal file
60
pkg/api/user/delete.go
Normal 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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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":
|
||||
|
|
|
|||
32
server/document_root/assets/js/panelHandlers/users/delete.js
Normal file
32
server/document_root/assets/js/panelHandlers/users/delete.js
Normal 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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue