From 5db28a9650ea607002a4aa948d49687104382d54 Mon Sep 17 00:00:00 2001 From: George Shaw Date: Tue, 12 Dec 2017 15:59:12 -0600 Subject: [PATCH] fixed bundle deletion hangup and added support to view and delete all registered domains from gpanel server --- pkg/database/domains.go | 13 ++-- pkg/gpserver/apihandler.go | 5 ++ .../panelHandlers/settings/client_domains.js | 70 +++++++++++++++++++ server/document_root/gPanel.html | 24 +++++++ 4 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 server/document_root/assets/js/panelHandlers/settings/client_domains.js diff --git a/pkg/database/domains.go b/pkg/database/domains.go index 72c0b43..cd6b341 100644 --- a/pkg/database/domains.go +++ b/pkg/database/domains.go @@ -38,6 +38,7 @@ func (ds *Datastore) ListDomains(bundle string) (map[string]Struct_Domain, error func (ds *Datastore) RemoveInstances(bundle string) error { var holder Struct_Domain + var toDelete []string ds.handle.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte(BUCKET_DOMAINS)) @@ -47,16 +48,20 @@ func (ds *Datastore) RemoveInstances(bundle string) error { json.Unmarshal(v, &holder) if holder.BundleName == bundle { - err := ds.Delete(BUCKET_DOMAINS, k) - if err != nil { - return err - } + toDelete = append(toDelete, string(k)) } } return nil }) + for _, v := range toDelete { + err := ds.Delete(BUCKET_DOMAINS, []byte(v)) + if err != nil && err != ErrKeyNotExist { + return err + } + } + return nil } diff --git a/pkg/gpserver/apihandler.go b/pkg/gpserver/apihandler.go index c1d8a50..8922724 100644 --- a/pkg/gpserver/apihandler.go +++ b/pkg/gpserver/apihandler.go @@ -13,6 +13,7 @@ import ( "github.com/Ennovar/gPanel/pkg/api/server" "github.com/Ennovar/gPanel/pkg/api/user" "github.com/Ennovar/gPanel/pkg/api/settings" + "github.com/Ennovar/gPanel/pkg/api/domain" ) func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request) (bool, bool) { @@ -103,6 +104,10 @@ func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request) (b return true, settings.GetNameservers(res, req, con.APILogger) case "/settings/remove_nameserver": return true, settings.RemoveNameserver(res, req, con.APILogger) + case "/domain/list": + return true, domain.List(res, req, con.APILogger) + case "/domain/unlink": + return true, domain.Unlink(res, req, con.APILogger) default: return false, false } diff --git a/server/document_root/assets/js/panelHandlers/settings/client_domains.js b/server/document_root/assets/js/panelHandlers/settings/client_domains.js new file mode 100644 index 0000000..b9b201b --- /dev/null +++ b/server/document_root/assets/js/panelHandlers/settings/client_domains.js @@ -0,0 +1,70 @@ +var clientDomainsModal = jQuery('.registered-client-domains-modal'); + +jQuery('._js_registered-domains').on('click', function(e){ + e.preventDefault(); + + ListClientDomains(); + clientDomainsModal.modal('show'); +}); + +jQuery(document).on('click', '._js_delete-client-registered-domain', function(e){ + e.preventDefault(); + + var domain = jQuery(this).attr('data'); + var ensure = confirm("Are you sure you want to unregister the domain \""+ domain +"\" from the client?"); + + if(ensure) { + var requestData = {}; + requestData["domain"] = domain; + + var xhr = new XMLHttpRequest(); + xhr.open('DELETE', 'api/domain/unlink', true); + xhr.send(JSON.stringify(requestData)); + + xhr.onloadend = function () { + if (xhr.status == 204) { + ListClientDomains(); + } + else { + if (xhr.response != undefined && xhr.response.length != 0) { + alert('Error: ' + xhr.status); + } + else { + alert('An error has occurred. If problem persists please contact your community administrator.'); + } + } + } + } +}); + +function ListClientDomains() { + var list = jQuery('._js_current-registered-client-domains'); + + var requestData = {}; + requestData["name"] = "*"; + + var xhr = new XMLHttpRequest(); + xhr.open('POST', 'api/domain/list', true); + xhr.send(JSON.stringify(requestData)); + + xhr.onloadend = function() { + list.html(''); + if(xhr.status == 200) { + jsonResponse = JSON.parse(xhr.response) + jQuery.each(jsonResponse, function(k, v) { + list.append('

'+k+'

Bundle: '+v.name+'
'); + }); + } + else if(xhr.status == 204) { + list.html('

No client registered domains exist.

'); + } + else { + if(xhr.response != undefined && xhr.response.length != 0) { + alert('Error: ' + xhr.status); + } + else { + alert('An error has occurred. If problem persists please contact your community administrator.'); + } + } + } +} \ No newline at end of file diff --git a/server/document_root/gPanel.html b/server/document_root/gPanel.html index 8446396..0fdeca5 100644 --- a/server/document_root/gPanel.html +++ b/server/document_root/gPanel.html @@ -399,6 +399,28 @@ + + +
@@ -453,6 +475,7 @@ +
@@ -510,6 +533,7 @@ +