Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions admin/handlers/json-logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,29 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request)
return
}
// Extract environment
env, ok := vars["environment"]
envVar, ok := vars["environment"]
if !ok {
log.Println("environment is missing")
h.Inc(metricJSONErr)
return
}
// Get environment
env, err := h.Envs.Get(envVar)
if err != nil {
log.Printf("error getting environment %s - %v", envVar, err)
h.Inc(metricJSONErr)
return
}
// Check if environment is valid
if !h.Envs.Exists(env) {
log.Printf("error unknown environment (%s)", env)
if !h.Envs.Exists(envVar) {
log.Printf("error unknown environment (%s)", envVar)
h.Inc(metricJSONErr)
return
}
// Get context data
ctx := r.Context().Value(sessions.ContextKey("session")).(sessions.ContextValue)
// Check permissions
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env) {
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env.Name) {
log.Printf("%s has insuficient permissions", ctx[sessions.CtxUser])
h.Inc(metricJSONErr)
return
Expand All @@ -116,7 +123,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request)
// Get logs
logJSON := []LogJSON{}
if logType == "status" {
statusLogs, err := h.LoggerDB.StatusLogs(UUID, env, secondsBack)
statusLogs, err := h.LoggerDB.StatusLogs(UUID, env.Name, secondsBack)
if err != nil {
log.Printf("error getting logs %v", err)
h.Inc(metricJSONErr)
Expand All @@ -136,7 +143,7 @@ func (h *HandlersAdmin) JSONLogsHandler(w http.ResponseWriter, r *http.Request)
logJSON = append(logJSON, _l)
}
} else if logType == "result" {
resultLogs, err := h.LoggerDB.ResultLogs(UUID, env, secondsBack)
resultLogs, err := h.LoggerDB.ResultLogs(UUID, env.Name, secondsBack)
if err != nil {
log.Printf("error getting logs %v", err)
h.Inc(metricJSONErr)
Expand Down
17 changes: 12 additions & 5 deletions admin/handlers/json-nodes.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,29 @@ func (h *HandlersAdmin) JSONEnvironmentHandler(w http.ResponseWriter, r *http.Re
utils.DebugHTTPDump(r, h.Settings.DebugHTTP(settings.ServiceAdmin), false)
vars := mux.Vars(r)
// Extract environment
env, ok := vars["environment"]
envVar, ok := vars["environment"]
if !ok {
log.Println("error getting environment")
h.Inc(metricJSONErr)
return
}
// Check if environment is valid
if !h.Envs.Exists(env) {
log.Printf("error unknown environment (%s)", env)
if !h.Envs.Exists(envVar) {
log.Printf("error unknown environment (%s)", envVar)
h.Inc(metricJSONErr)
return
}
// Get environment
env, err := h.Envs.Get(envVar)
if err != nil {
log.Printf("error getting environment %s - %v", envVar, err)
h.Inc(metricJSONErr)
return
}
// Get context data
ctx := r.Context().Value(sessions.ContextKey("session")).(sessions.ContextValue)
// Check permissions
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env) {
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env.Name) {
log.Printf("%s has insuficient permissions", ctx[sessions.CtxUser])
h.Inc(metricJSONErr)
return
Expand All @@ -78,7 +85,7 @@ func (h *HandlersAdmin) JSONEnvironmentHandler(w http.ResponseWriter, r *http.Re
h.Inc(metricJSONErr)
return
}
nodes, err := h.Nodes.GetByEnv(env, target, h.Settings.InactiveHours())
nodes, err := h.Nodes.GetByEnv(env.Name, target, h.Settings.InactiveHours())
if err != nil {
log.Printf("error getting nodes %v", err)
h.Inc(metricJSONErr)
Expand Down
20 changes: 14 additions & 6 deletions admin/handlers/post.go
Original file line number Diff line number Diff line change
Expand Up @@ -712,8 +712,16 @@ func (h *HandlersAdmin) IntervalsPOSTHandler(w http.ResponseWriter, r *http.Requ
utils.DebugHTTPDump(r, h.Settings.DebugHTTP(settings.ServiceAdmin), true)
vars := mux.Vars(r)
// Extract environment and verify
environmentVar, ok := vars["environment"]
if !ok || !h.Envs.Exists(environmentVar) {
envVar, ok := vars["environment"]
if !ok || !h.Envs.Exists(envVar) {
adminErrorResponse(w, "error getting environment", http.StatusInternalServerError, nil)
h.Inc(metricAdminErr)
return
}
// TODO do the exist and get in one step
// Get environment
env, err := h.Envs.Get(envVar)
if err != nil {
adminErrorResponse(w, "error getting environment", http.StatusInternalServerError, nil)
h.Inc(metricAdminErr)
return
Expand All @@ -722,7 +730,7 @@ func (h *HandlersAdmin) IntervalsPOSTHandler(w http.ResponseWriter, r *http.Requ
// Get context data
ctx := r.Context().Value(sessions.ContextKey("session")).(sessions.ContextValue)
// Check permissions
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, environmentVar) {
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env.Name) {
adminErrorResponse(w, fmt.Sprintf("%s has insuficient permissions", ctx[sessions.CtxUser]), http.StatusForbidden, nil)
h.Inc(metricAdminErr)
return
Expand All @@ -742,20 +750,20 @@ func (h *HandlersAdmin) IntervalsPOSTHandler(w http.ResponseWriter, r *http.Requ
h.Inc(metricAdminErr)
return
}
if err := h.Envs.UpdateIntervals(environmentVar, c.ConfigInterval, c.LogInterval, c.QueryInterval); err != nil {
if err := h.Envs.UpdateIntervals(env.Name, c.ConfigInterval, c.LogInterval, c.QueryInterval); err != nil {
adminErrorResponse(w, "error updating intervals", http.StatusInternalServerError, err)
h.Inc(metricAdminErr)
return
}
// After updating interval, you need to re-generate flags
flags, err := h.Envs.GenerateFlagsEnv(environmentVar, "", "")
flags, err := h.Envs.GenerateFlagsEnv(envVar, "", "")
if err != nil {
adminErrorResponse(w, "error re-generating flags", http.StatusInternalServerError, err)
h.Inc(metricAdminErr)
return
}
// Update flags in the newly created environment
if err := h.Envs.UpdateFlags(environmentVar, flags); err != nil {
if err := h.Envs.UpdateFlags(envVar, flags); err != nil {
adminErrorResponse(w, "error updating flags", http.StatusInternalServerError, err)
h.Inc(metricAdminErr)
return
Expand Down
26 changes: 16 additions & 10 deletions admin/handlers/templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,22 +91,29 @@ func (h *HandlersAdmin) EnvironmentHandler(w http.ResponseWriter, r *http.Reques
utils.DebugHTTPDump(r, h.Settings.DebugHTTP(settings.ServiceAdmin), false)
vars := mux.Vars(r)
// Extract environment
env, ok := vars["environment"]
envVar, ok := vars["environment"]
if !ok {
h.Inc(metricAdminErr)
log.Println("error getting environment")
return
}
// Check if environment is valid
if !h.Envs.Exists(env) {
if !h.Envs.Exists(envVar) {
h.Inc(metricAdminErr)
log.Printf("error unknown environment (%s)", env)
log.Printf("error unknown environment (%s)", envVar)
return
}
// Get environment
env, err := h.Envs.Get(envVar)
if err != nil {
h.Inc(metricAdminErr)
log.Printf("error getting environment: %v", err)
return
}
// Get context data
ctx := r.Context().Value(sessions.ContextKey("session")).(sessions.ContextValue)
// Check permissions
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env) {
if !h.Users.CheckPermissions(ctx[sessions.CtxUser], users.EnvLevel, env.Name) {
log.Printf("%s has insuficient permissions", ctx[sessions.CtxUser])
h.Inc(metricTokenErr)
return
Expand All @@ -122,7 +129,6 @@ func (h *HandlersAdmin) EnvironmentHandler(w http.ResponseWriter, r *http.Reques
// Prepare template
tempateFiles := NewTemplateFiles(templatesFilesFolder, "table.html").filepaths
t, err := template.ParseFiles(tempateFiles...)

if err != nil {
h.Inc(metricAdminErr)
log.Printf("error getting table template: %v", err)
Expand Down Expand Up @@ -151,10 +157,10 @@ func (h *HandlersAdmin) EnvironmentHandler(w http.ResponseWriter, r *http.Reques
}
// Prepare template data
templateData := TableTemplateData{
Title: "Nodes in " + env,
Title: "Nodes in " + env.Name,
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
Selector: "environment",
SelectorName: env,
SelectorName: env.Name,
Target: target,
Tags: tags,
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
Expand Down Expand Up @@ -743,7 +749,7 @@ func (h *HandlersAdmin) ConfGETHandler(w http.ResponseWriter, r *http.Request) {
}
// Prepare template data
templateData := ConfTemplateData{
Title: envVar + " Configuration",
Title: env.Name + " Configuration",
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
Environment: env,
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
Expand Down Expand Up @@ -821,9 +827,9 @@ func (h *HandlersAdmin) EnrollGETHandler(w http.ResponseWriter, r *http.Request)
shellQuickRemove, _ := environments.QuickRemoveOneLinerShell(env)
powershellQuickRemove, _ := environments.QuickRemoveOneLinerPowershell(env)
templateData := EnrollTemplateData{
Title: envVar + " Enroll",
Title: env.Name + " Enroll",
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
EnvName: envVar,
EnvName: env.Name,
EnrollExpiry: strings.ToUpper(utils.InFutureTime(env.EnrollExpire)),
EnrollExpired: environments.IsItExpired(env.EnrollExpire),
RemoveExpiry: strings.ToUpper(utils.InFutureTime(env.RemoveExpire)),
Expand Down
22 changes: 9 additions & 13 deletions admin/static/js/stats.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
function statsRefresh(_target, _name) {
function statsRefresh(_target, _identifier) {
$.ajax({
url: '/json/stats/' + _target + '/' + _name,
url: '/json/stats/' + _target + '/' + _identifier,
dataType: 'json',
type: 'GET',
contentType: 'application/json',
success: function(data, textStatus, jQxhr){
$('.stats-' + _target + '-' + _name + '-active').text(data.active);
$('.stats-' + _target + '-' + _name + '-inactive').text(data.inactive);
$('.stats-' + _target + '-' + _name + '-total').text(data.total);
//console.log('Active: ' + data.active);
//console.log('Inactive: ' + data.inactive);
//console.log('Total: ' + data.total);
success: function (data, textStatus, jQxhr) {
$('.stats-' + _target + '-' + _identifier + '-active').text(data.active);
$('.stats-' + _target + '-' + _identifier + '-inactive').text(data.inactive);
$('.stats-' + _target + '-' + _identifier + '-total').text(data.total);
},
error: function(jqXhr, textStatus, errorThrown){
error: function (jqXhr, textStatus, errorThrown) {
var _clientmsg = 'Client: ' + errorThrown;
var _serverJSON = $.parseJSON(jqXhr.responseText);
var _servermsg = 'Server: ' + _serverJSON.message;
Expand All @@ -25,9 +22,8 @@ function statsRefresh(_target, _name) {

function beginStats() {
var _stats = ['environment', 'platform'];
for (var i = 0; i<_stats.length; i++) {
//console.log('Doing ' + _stats[i]);
$('input[type="hidden"].stats-' + _stats[i] + '-value').each(function() {
for (var i = 0; i < _stats.length; i++) {
$('input[type="hidden"].stats-' + _stats[i] + '-value').each(function () {
statsRefresh(_stats[i], $(this).val());
});
}
Expand Down
20 changes: 10 additions & 10 deletions admin/templates/components/page-aside-left.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,39 @@
<li id="dropdown-env-{{ $e.Name }}" class="nav-item nav-dropdown">
<a class="nav-link nav-dropdown-toggle">
<i class="nav-icon {{ $e.Icon }}"></i>
<input type="hidden" class="stats-environment-value" value="{{ $e.Name }}">
<input type="hidden" class="stats-environment-value" value="{{ $e.UUID }}">
{{ $e.Name }}
<span class="mr-4 badge badge-light stats-environment-{{ $e.Name }}-total">X</span>
<span class="mr-4 badge badge-light stats-environment-{{ $e.UUID }}-total">X</span>
</a>
<ul class="nav-dropdown-items">
<li class="nav-item nav-dropdown">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.Name }}/active">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.UUID }}/active">
<i class="nav-icon {{ $e.Icon }}"></i>
active
<span class="badge badge-success stats-environment-{{ $e.Name }}-active">X</span>
<span class="badge badge-success stats-environment-{{ $e.UUID }}-active">X</span>
</a>
</li>
<li class="nav-item nav-dropdown">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.Name }}/inactive">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.UUID }}/inactive">
<i class="nav-icon {{ $e.Icon }}"></i>
inactive
<span class="badge badge-danger stats-environment-{{ $e.Name }}-inactive">X</span>
<span class="badge badge-danger stats-environment-{{ $e.UUID }}-inactive">X</span>
</a>
</li>
<li class="nav-item nav-dropdown">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.Name }}/all">
<a style="padding-left: 2em;" class="nav-link" href="/environment/{{ $e.UUID }}/all">
<i class="nav-icon {{ $e.Icon }}"></i>
all
<span class="badge badge-light stats-environment-{{ $e.Name }}-total">X</span>
<span class="badge badge-light stats-environment-{{ $e.UUID }}-total">X</span>
</a>
</li>
<li class="nav-item nav-dropdown">
<a style="padding-left: 2em;" class="nav-link" href="/conf/{{ $e.Name }}">
<a style="padding-left: 2em;" class="nav-link" href="/conf/{{ $e.UUID }}">
<i class="nav-icon fas fa-cog"></i> osquery conf
</a>
</li>
<li class="nav-item nav-dropdown">
<a style="padding-left: 2em;" class="nav-link" href="/enroll/{{ $e.Name }}">
<a style="padding-left: 2em;" class="nav-link" href="/enroll/{{ $e.UUID }}">
<i class="nav-icon fas fa-plus-circle"></i> enroll nodes
</a>
</li>
Expand Down
Loading