diff --git a/pkg/api/server/status.go b/pkg/api/server/status.go index 1212937..abb4d3a 100644 --- a/pkg/api/server/status.go +++ b/pkg/api/server/status.go @@ -11,7 +11,7 @@ import ( // Status function is called from api/server/status and will return the current status of // the public server. func Status(res http.ResponseWriter, req *http.Request, publicServer *public.Controller) bool { - if req.Method != "GET" { + if req.Method != "GET" && req.Method != "POST" { http.Error(res, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) return false } diff --git a/pkg/gpserver/apihandler.go b/pkg/gpserver/apihandler.go index f9ebd16..367f7c2 100644 --- a/pkg/gpserver/apihandler.go +++ b/pkg/gpserver/apihandler.go @@ -2,15 +2,19 @@ package gpserver import ( + "bytes" + "encoding/json" + "io/ioutil" "net/http" "strings" "github.com/Ennovar/gPanel/pkg/api/bundle" "github.com/Ennovar/gPanel/pkg/api/log" + "github.com/Ennovar/gPanel/pkg/api/server" "github.com/Ennovar/gPanel/pkg/api/user" ) -func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request, curBundle int) (bool, bool) { +func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request) (bool, bool) { path := req.URL.Path[1:] if len(path) == 0 { path = (con.Directory + "index.html") @@ -21,6 +25,34 @@ func (con *Controller) apiHandler(res http.ResponseWriter, req *http.Request, cu splitUrl := strings.SplitN(path, "api", 2) suspectApi := strings.ToLower(splitUrl[len(splitUrl)-1]) + if req.ContentLength > 0 { + var bundleRequestData struct { + BName string `json:"bundle_name,omitempty"` + } + + buf, err := ioutil.ReadAll(req.Body) + if err != nil { + return false, false + } + + b1 := ioutil.NopCloser(bytes.NewBuffer(buf)) + req.Body = ioutil.NopCloser(bytes.NewBuffer(buf)) + + err = json.NewDecoder(b1).Decode(&bundleRequestData) + if err != nil { + return false, false + } + + if specific, ok := con.Bundles[bundleRequestData.BName]; ok { + switch suspectApi { + case "/server/status": + return true, server.Status(res, req, specific.Public) + default: + return false, false + } + } + } + switch suspectApi { case "/user/auth": return true, user.Auth(res, req, con.Directory) diff --git a/pkg/gpserver/gpserver.go b/pkg/gpserver/gpserver.go index 7cacfb5..9c2e20e 100644 --- a/pkg/gpserver/gpserver.go +++ b/pkg/gpserver/gpserver.go @@ -81,7 +81,7 @@ func (con *Controller) ServeHTTP(res http.ResponseWriter, req *http.Request) { } } - isApi, _ := con.apiHandler(res, req, 0) + isApi, _ := con.apiHandler(res, req) if isApi { // API methods handle HTTP logic from here diff --git a/server/document_root/assets/js/panelHandlers/bundles/specific/open.js b/server/document_root/assets/js/panelHandlers/bundles/specific/open.js index d197cea..46bf052 100644 --- a/server/document_root/assets/js/panelHandlers/bundles/specific/open.js +++ b/server/document_root/assets/js/panelHandlers/bundles/specific/open.js @@ -1,9 +1,15 @@ +var specificBundleModal = jQuery('.specific-bundle-modal'); + jQuery(document).on('click', '._js_specific-bundle', function(e){ e.preventDefault(); var name = jQuery(this).attr('data'); jQuery('.manage-bundles-modal').modal('hide'); - jQuery('.specific-bundle-modal').find('.modal-title').html("Bundle \"" + name + "\" Management"); - jQuery('.specific-bundle-modal').modal('show'); + specificBundleModal.find('.modal-title').html("Bundle \"" + name + "\" Management"); + specificBundleModal.attr('data', name); + + getPublicServerStatus(name); + + specificBundleModal.modal('show'); }); diff --git a/server/document_root/assets/js/panelHandlers/bundles/specific/server/status.js b/server/document_root/assets/js/panelHandlers/bundles/specific/server/status.js new file mode 100644 index 0000000..e039005 --- /dev/null +++ b/server/document_root/assets/js/panelHandlers/bundles/specific/server/status.js @@ -0,0 +1,41 @@ +var statusSpan = jQuery("._js_specific-bundle-public-status"); + +function getPublicServerStatus(name) { + var xhr = new XMLHttpRequest(); + + var requestData = {}; + requestData["bundle_name"] = name; + console.log(requestData); + + xhr.open('POST', 'api/server/status', true); + xhr.send(JSON.stringify(requestData)); + + xhr.onloadend = function() { + if(xhr.status == 200) { + statusSpan.attr('class', '_js_specific-bundle-public-status'); + + switch(parseInt(xhr.response)) { + case 0: + statusSpan.addClass('text-danger').html("OFF"); + break; + case 1: + statusSpan.addClass('text-success').html("ON"); + break; + case 2: + statusSpan.addClass('text-warning').html("MAINTENANCE"); + break; + case 3: + statusSpan.addClass('text-info').html("RESTARTING"); + break; + default: + console.log(xhr.response); + statusSpan.addClass('text-danger').html('ERROR'); + break; + } + } + else { + console.log(xhr.response); + statusSpan.attr('class', '_js_specific-bundle-public-status').addClass('text-danger').html('ERROR'); + } + } +} diff --git a/server/document_root/gPanel.html b/server/document_root/gPanel.html index d6a2973..49d88ff 100644 --- a/server/document_root/gPanel.html +++ b/server/document_root/gPanel.html @@ -229,6 +229,8 @@ + +