Skip to content

Commit eae7025

Browse files
committed
Passing build metadata to admin handler
1 parent 2c6680d commit eae7025

5 files changed

Lines changed: 40 additions & 24 deletions

File tree

cmd/admin/handlers/handlers.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type HandlersAdmin struct {
3535
Settings *settings.Settings
3636
RedisCache *cache.RedisManager
3737
Sessions *sessions.SessionManager
38-
ServiceVersion string
38+
ServiceMetadata types.BuildMetadata
3939
OsqueryVersion string
4040
TemplatesFolder string
4141
StaticLocation string
@@ -115,9 +115,9 @@ func WithSessions(sessions *sessions.SessionManager) HandlersOption {
115115
}
116116
}
117117

118-
func WithVersion(version string) HandlersOption {
118+
func WithMetadata(metadata types.BuildMetadata) HandlersOption {
119119
return func(h *HandlersAdmin) {
120-
h.ServiceVersion = version
120+
h.ServiceMetadata = metadata
121121
}
122122
}
123123

cmd/admin/handlers/templates.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/jmpsec/osctrl/pkg/nodes"
1414
"github.com/jmpsec/osctrl/pkg/settings"
1515
"github.com/jmpsec/osctrl/pkg/tags"
16+
"github.com/jmpsec/osctrl/pkg/types"
1617
"github.com/jmpsec/osctrl/pkg/users"
1718
"github.com/jmpsec/osctrl/pkg/utils"
1819
"github.com/rs/zerolog/log"
@@ -36,13 +37,15 @@ var validTarget = map[string]bool{
3637

3738
// TemplateMetadata - Helper to prepare template metadata
3839
// TODO until a better implementation, all users are admin
39-
func (h *HandlersAdmin) TemplateMetadata(ctx sessions.ContextValue, version string) TemplateMetadata {
40+
func (h *HandlersAdmin) TemplateMetadata(ctx sessions.ContextValue, metadata types.BuildMetadata) TemplateMetadata {
4041
return TemplateMetadata{
4142
Username: ctx[sessions.CtxUser],
4243
Level: "admin",
4344
CSRFToken: ctx[sessions.CtxCSRF],
4445
Service: "osctrl-admin",
45-
Version: version,
46+
Version: metadata.Version,
47+
Commit: metadata.Commit,
48+
BuildDate: metadata.Date,
4649
}
4750
}
4851

@@ -147,7 +150,7 @@ func (h *HandlersAdmin) EnvironmentHandler(w http.ResponseWriter, r *http.Reques
147150
templateData := TableTemplateData{
148151
Title: "Nodes in " + env.Name,
149152
EnvUUID: env.UUID,
150-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
153+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
151154
Selector: "environment",
152155
SelectorName: env.Name,
153156
Target: target,
@@ -222,7 +225,7 @@ func (h *HandlersAdmin) PlatformHandler(w http.ResponseWriter, r *http.Request)
222225
// Prepare template data
223226
templateData := TableTemplateData{
224227
Title: "Nodes in " + platform,
225-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
228+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
226229
Selector: "platform",
227230
SelectorName: platform,
228231
Target: target,
@@ -303,7 +306,7 @@ func (h *HandlersAdmin) QueryRunGETHandler(w http.ResponseWriter, r *http.Reques
303306
templateData := QueryRunTemplateData{
304307
Title: "Query osquery Nodes in <b>" + env.Name + "</b>",
305308
EnvUUID: env.UUID,
306-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
309+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
307310
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
308311
Platforms: platforms,
309312
UUIDs: uuids,
@@ -365,7 +368,7 @@ func (h *HandlersAdmin) QueryListGETHandler(w http.ResponseWriter, r *http.Reque
365368
templateData := QueryTableTemplateData{
366369
Title: "All on-demand queries",
367370
EnvUUID: env.UUID,
368-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
371+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
369372
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
370373
Platforms: platforms,
371374
Target: "all",
@@ -424,7 +427,7 @@ func (h *HandlersAdmin) SavedQueriesGETHandler(w http.ResponseWriter, r *http.Re
424427
templateData := SavedQueriesTemplateData{
425428
Title: "Saved queries in <b>" + env.Name + "</b>",
426429
EnvUUID: env.UUID,
427-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
430+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
428431
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
429432
Platforms: platforms,
430433
Target: "saved",
@@ -496,7 +499,7 @@ func (h *HandlersAdmin) CarvesRunGETHandler(w http.ResponseWriter, r *http.Reque
496499
templateData := CarvesRunTemplateData{
497500
Title: "Query osquery Nodes in <b>" + env.Name + "</b>",
498501
EnvUUID: env.UUID,
499-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
502+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
500503
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
501504
Platforms: platforms,
502505
UUIDs: uuids,
@@ -558,7 +561,7 @@ func (h *HandlersAdmin) CarvesListGETHandler(w http.ResponseWriter, r *http.Requ
558561
templateData := CarvesTableTemplateData{
559562
Title: "Carved files in <b>" + env.Name + "</b>",
560563
EnvUUID: env.UUID,
561-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
564+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
562565
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
563566
Platforms: platforms,
564567
Target: "all",
@@ -645,7 +648,7 @@ func (h *HandlersAdmin) QueryLogsHandler(w http.ResponseWriter, r *http.Request)
645648
templateData := QueryLogsTemplateData{
646649
Title: "Query logs " + query.Name,
647650
EnvUUID: env.UUID,
648-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
651+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
649652
LeftMetadata: leftMetadata,
650653
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
651654
Platforms: platforms,
@@ -750,7 +753,7 @@ func (h *HandlersAdmin) CarvesDetailsHandler(w http.ResponseWriter, r *http.Requ
750753
templateData := CarvesDetailsTemplateData{
751754
Title: "Carve details " + query.Name,
752755
EnvUUID: env.UUID,
753-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
756+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
754757
LeftMetadata: leftMetadata,
755758
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
756759
Platforms: platforms,
@@ -812,7 +815,7 @@ func (h *HandlersAdmin) ConfGETHandler(w http.ResponseWriter, r *http.Request) {
812815
// Prepare template data
813816
templateData := ConfTemplateData{
814817
Title: env.Name + " Configuration",
815-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
818+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
816819
Environment: env,
817820
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
818821
Platforms: platforms,
@@ -874,7 +877,7 @@ func (h *HandlersAdmin) EnrollGETHandler(w http.ResponseWriter, r *http.Request)
874877
powershellQuickRemove, _ := environments.QuickRemoveOneLinerPowershell((env.Certificate != ""), env)
875878
templateData := EnrollTemplateData{
876879
Title: env.Name + " Enroll",
877-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
880+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
878881
EnvName: env.Name,
879882
EnvUUID: env.UUID,
880883
OnelinerExpiration: h.Settings.OnelinerExpiration(settings.NoEnvironmentID),
@@ -1079,7 +1082,7 @@ func (h *HandlersAdmin) NodeHandler(w http.ResponseWriter, r *http.Request) {
10791082
templateData := NodeTemplateData{
10801083
Title: "Node View " + node.Hostname,
10811084
EnvUUID: env.UUID,
1082-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1085+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
10831086
LeftMetadata: leftMetadata,
10841087
Node: node,
10851088
NodeTags: nodeTags,
@@ -1132,7 +1135,7 @@ func (h *HandlersAdmin) EnvsGETHandler(w http.ResponseWriter, r *http.Request) {
11321135
// Prepare template data
11331136
templateData := EnvironmentsTemplateData{
11341137
Title: "Manage environments",
1135-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1138+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
11361139
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
11371140
Platforms: platforms,
11381141
}
@@ -1199,7 +1202,7 @@ func (h *HandlersAdmin) SettingsGETHandler(w http.ResponseWriter, r *http.Reques
11991202
// Prepare template data
12001203
templateData := SettingsTemplateData{
12011204
Title: "Manage settings",
1202-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1205+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
12031206
Service: serviceVar,
12041207
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
12051208
Platforms: platforms,
@@ -1264,7 +1267,7 @@ func (h *HandlersAdmin) UsersGETHandler(w http.ResponseWriter, r *http.Request)
12641267
// Prepare template data
12651268
templateData := UsersTemplateData{
12661269
Title: "Manage users",
1267-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1270+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
12681271
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
12691272
Platforms: platforms,
12701273
SystemUsers: systemUsers,
@@ -1324,7 +1327,7 @@ func (h *HandlersAdmin) TagsGETHandler(w http.ResponseWriter, r *http.Request) {
13241327
// Prepare template data
13251328
templateData := TagsTemplateData{
13261329
Title: "Manage tags",
1327-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1330+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
13281331
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
13291332
Platforms: platforms,
13301333
Tags: tags,
@@ -1380,7 +1383,7 @@ func (h *HandlersAdmin) EditProfileGETHandler(w http.ResponseWriter, r *http.Req
13801383
// Prepare template data
13811384
templateData := ProfileTemplateData{
13821385
Title: "Edit " + user.Username + " profile",
1383-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1386+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
13841387
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
13851388
Platforms: platforms,
13861389
CurrentUser: user,
@@ -1436,7 +1439,7 @@ func (h *HandlersAdmin) DashboardGETHandler(w http.ResponseWriter, r *http.Reque
14361439
// Prepare template data
14371440
templateData := DashboardTemplateData{
14381441
Title: "Dashboard for " + user.Username,
1439-
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
1442+
Metadata: h.TemplateMetadata(ctx, h.ServiceMetadata),
14401443
Environments: h.allowedEnvironments(ctx[sessions.CtxUser], envAll),
14411444
Platforms: platforms,
14421445
CurrentUser: user,

cmd/admin/handlers/types-templates.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ type TemplateMetadata struct {
2424
Level string
2525
Service string
2626
Version string
27+
Commit string
28+
BuildDate string
2729
CSRFToken string
2830
}
2931

cmd/admin/main.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,11 @@ func osctrlAdminService() {
302302
handlers.WithSettings(settingsmgr),
303303
handlers.WithCache(redis),
304304
handlers.WithSessions(sessionsmgr),
305-
handlers.WithVersion(buildVersion),
305+
handlers.WithMetadata(types.BuildMetadata{
306+
Version: buildVersion,
307+
Commit: buildCommit,
308+
Date: buildDate,
309+
}),
306310
handlers.WithOsqueryVersion(flagParams.OsqueryVersion),
307311
handlers.WithTemplates(flagParams.TemplatesDir),
308312
handlers.WithStaticLocation(flagParams.StaticOffline),

pkg/types/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ type OsqueryTable struct {
88
Filter string
99
}
1010

11+
// BuildMetadata to show build metadata
12+
type BuildMetadata struct {
13+
Version string
14+
Commit string
15+
Date string
16+
}
17+
1118
// FlagsRequest to retrieve flags
1219
type FlagsRequest struct {
1320
Secret string `json:"secret"`

0 commit comments

Comments
 (0)