referencing issue #93, deleting filtered ips now works

This commit is contained in:
George Shaw 2017-11-30 17:19:44 -06:00
parent 8b6a4e65b2
commit 236c07504a
7 changed files with 92 additions and 6 deletions

View file

@ -29,3 +29,9 @@ body {
cursor:pointer;
}
/* General End */
/* IP Filter Modal Start */
._js_delete-filtered-ip {
cursor:pointer;
}
/* IP Filter Modal End */

View file

@ -43,7 +43,7 @@ function listFilteredIPs(type) {
if(xhr.response != undefined && xhr.response.length != 0) {
jsonResponse = JSON.parse(xhr.response)
jQuery.each(jsonResponse, function(k, v) {
ipModal.find('._js_currently-filtered-ips').append("<li>"+v.ip+"</li>");
ipModal.find('._js_currently-filtered-ips').append('<li class="_js_delete-filtered-ip" data="'+v.id+'">'+v.ip+'</li>');
});
}
else {

View file

@ -0,0 +1,32 @@
var ipModal = jQuery('.ip-filter-modal');
jQuery(document).on('click', '._js_delete-filtered-ip', function(e){
e.preventDefault();
var ip = jQuery(this).text();
var id = jQuery(this).attr('data');
var ensure = confirm('Are you sure you want to delete the IP filter for ' + ip + '?');
if (ensure) {
var requestData = {};
requestData["id"] = parseInt(id);
var xhr = new XMLHttpRequest();
xhr.open('UPDATE', 'api/ip/unfilter', true);
xhr.send(JSON.stringify(requestData));
xhr.onloadend = function() {
if(xhr.status == 204) {
listFilteredIPs(ipModal.find('input[name="type"]').val());
}
else {
if(xhr.response != undefined && xhr.response.length != 0) {
alert("Error: " + xhr.response);
}
else {
alert("An error has occurred, if the problem persists please contact your administrator.");
}
}
}
}
});

View file

@ -70,6 +70,7 @@
</form>
<h4 class="mt-3">Currently Filtered IPs</h4>
<h6 class="mt-1">Click on a filtered IP to delete it.</h6>
<ul class="_js_currently-filtered-ips"></ul>
</div>
<div class="modal-footer">
@ -187,6 +188,7 @@
<script type="text/javascript" src="assets/js/panelHandlers/security/ip_list.js"></script>
<script type="text/javascript" src="assets/js/panelHandlers/security/filter_ip.js"></script>
<script type="text/javascript" src="assets/js/panelHandlers/security/unfilter_ip.js"></script>
<!-- KEEP AT BOTTOM OF BODY TAGS -->
</body>
</html>

View file

@ -1,7 +1,47 @@
package ip
import "net/http"
import (
"encoding/json"
"log"
"net/http"
"strconv"
func Unfilter(res http.ResponseWriter, req *http.Request, dir string) bool {
"github.com/Ennovar/gPanel/pkg/database"
)
func Unfilter(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, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
return false
}
var unfilterIPRequestData struct {
ID int `json:"id"`
}
err := json.NewDecoder(req.Body).Decode(&unfilterIPRequestData)
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()
err = ds.Delete(database.BUCKET_FILTERED_IPS, database.IDtoKey(unfilterIPRequestData.ID))
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

@ -7,6 +7,12 @@ import (
"github.com/boltdb/bolt"
)
func IDtoKey(id int) []byte {
key := make([]byte, 8)
binary.BigEndian.PutUint64(key, uint64(id))
return key
}
func (ds *Datastore) NewFilteredIP(newip *Struct_Filtered_IP) error {
return ds.handle.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(BUCKET_FILTERED_IPS))
@ -19,9 +25,7 @@ func (ds *Datastore) NewFilteredIP(newip *Struct_Filtered_IP) error {
return err
}
key := make([]byte, 8)
binary.BigEndian.PutUint64(key, uint64(newip.ID))
key := IDtoKey(newip.ID)
return b.Put(key, buf)
})
}

View file

@ -47,6 +47,8 @@ func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request) (b
return true, ip.List(res, req, con.APILogger, con.Directory)
case "/ip/filter":
return true, ip.Filter(res, req, con.APILogger, con.Directory)
case "/ip/unfilter":
return true, ip.Unfilter(res, req, con.APILogger, con.Directory)
default:
return false, false
}