mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 01:18:42 +00:00
Added built in labels (#526)
This commit is contained in:
parent
46dee08ab3
commit
44ef92550f
22 changed files with 600 additions and 360 deletions
318
cli/serve.go
318
cli/serve.go
|
|
@ -7,7 +7,6 @@ import (
|
|||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/WatchBeam/clock"
|
||||
kitlog "github.com/go-kit/kit/log"
|
||||
|
|
@ -25,6 +24,12 @@ import (
|
|||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
type initializer interface {
|
||||
// Initialize is used to populate a datastore with
|
||||
// preloaded data
|
||||
Initialize() error
|
||||
}
|
||||
|
||||
func createServeCmd(configManager config.Manager) *cobra.Command {
|
||||
var devMode = false
|
||||
|
||||
|
|
@ -67,7 +72,7 @@ the way that the kolide server works.
|
|||
"Warning: Changes will not be saved across process restarts. This should NOT be used in production.",
|
||||
)
|
||||
|
||||
if ds, err = inmem.New(); err != nil {
|
||||
if ds, err = inmem.New(config); err != nil {
|
||||
initFatal(err, "initializing inmem database")
|
||||
}
|
||||
} else {
|
||||
|
|
@ -79,7 +84,12 @@ the way that the kolide server works.
|
|||
if err != nil {
|
||||
initFatal(err, "initializing datastore")
|
||||
}
|
||||
}
|
||||
|
||||
if initializingDS, ok := ds.(initializer); ok {
|
||||
if err := initializingDS.Initialize(); err != nil {
|
||||
initFatal(err, "loading built in data")
|
||||
}
|
||||
}
|
||||
|
||||
svc, err := service.NewService(ds, pubsub.NewInmemQueryResults(), logger, config, mailService, clock.C)
|
||||
|
|
@ -87,15 +97,6 @@ the way that the kolide server works.
|
|||
initFatal(err, "initializing service")
|
||||
}
|
||||
|
||||
if devMode {
|
||||
createDevUsers(ds, config)
|
||||
createDevHosts(ds, config)
|
||||
createDevQueries(ds, config)
|
||||
createDevLabels(ds, config)
|
||||
createDevOrgInfo(ds, config)
|
||||
createDevPacksAndQueries(ds, config)
|
||||
}
|
||||
|
||||
fieldKeys := []string{"method", "error"}
|
||||
requestCount := kitprometheus.NewCounterFrom(prometheus.CounterOpts{
|
||||
Namespace: "api",
|
||||
|
|
@ -190,298 +191,3 @@ func createDevMailService(config config.KolideConfig) kolide.MailService {
|
|||
}
|
||||
return devMailService{}
|
||||
}
|
||||
|
||||
// Bootstrap a few users when using the in-memory database.
|
||||
// Each user's default password will just be their username.
|
||||
func createDevUsers(ds kolide.Datastore, config config.KolideConfig) {
|
||||
users := []kolide.User{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "Admin User",
|
||||
Username: "admin",
|
||||
Email: "admin@kolide.co",
|
||||
Position: "Director of Security",
|
||||
Admin: true,
|
||||
Enabled: true,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-3 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "Normal User",
|
||||
Username: "user",
|
||||
Email: "user@kolide.co",
|
||||
Position: "Security Engineer",
|
||||
Admin: false,
|
||||
Enabled: true,
|
||||
},
|
||||
}
|
||||
for _, user := range users {
|
||||
user := user
|
||||
err := user.SetPassword(user.Username, config.Auth.SaltKeySize, config.Auth.BcryptCost)
|
||||
if err != nil {
|
||||
initFatal(err, "creating bootstrap user")
|
||||
}
|
||||
_, err = ds.NewUser(&user)
|
||||
if err != nil {
|
||||
initFatal(err, "creating bootstrap user")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bootstrap a few hosts when using the in-memory database.
|
||||
func createDevHosts(ds kolide.Datastore, config config.KolideConfig) {
|
||||
hosts := []kolide.Host{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-20 * time.Minute),
|
||||
},
|
||||
},
|
||||
NodeKey: "totally-legit",
|
||||
HostName: "jmeller-mbp.local",
|
||||
UUID: "1234-5678-9101",
|
||||
Platform: "darwin",
|
||||
OsqueryVersion: "2.0.0",
|
||||
OSVersion: "Mac OS X 10.11.6",
|
||||
Uptime: 60 * time.Minute,
|
||||
PhysicalMemory: 4145483776,
|
||||
PrimaryMAC: "C0:11:1B:13:3E:15",
|
||||
PrimaryIP: "192.168.1.10",
|
||||
DetailUpdateTime: time.Now().Add(-20 * time.Minute),
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
NodeKey: "definitely-legit",
|
||||
HostName: "marpaia.local",
|
||||
UUID: "1234-5678-9102",
|
||||
Platform: "windows",
|
||||
OsqueryVersion: "2.0.0",
|
||||
OSVersion: "Windows 10.0.0",
|
||||
Uptime: 60 * time.Minute,
|
||||
PhysicalMemory: 17179869184,
|
||||
PrimaryMAC: "7e:5c:be:ef:b4:df",
|
||||
PrimaryIP: "192.168.1.11",
|
||||
DetailUpdateTime: time.Now().Add(-10 * time.Second),
|
||||
},
|
||||
}
|
||||
|
||||
for _, host := range hosts {
|
||||
host := host
|
||||
_, err := ds.NewHost(&host)
|
||||
if err != nil {
|
||||
initFatal(err, "creating bootstrap host")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func createDevOrgInfo(ds kolide.Datastore, config config.KolideConfig) {
|
||||
devOrgInfo := &kolide.AppConfig{
|
||||
OrgName: "Kolide",
|
||||
OrgLogoURL: fmt.Sprintf("%s/logo.png", config.Server.Address),
|
||||
}
|
||||
_, err := ds.NewAppConfig(devOrgInfo)
|
||||
if err != nil {
|
||||
initFatal(err, "creating fake org info")
|
||||
}
|
||||
}
|
||||
|
||||
func createDevQueries(ds kolide.Datastore, config config.KolideConfig) {
|
||||
queries := []kolide.Query{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 17, 7, 6, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 17, 7, 6, 0, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_1",
|
||||
Query: "select * from processes",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
Name: "dev_query_2",
|
||||
Query: "select * from time",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-24 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-17 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_3",
|
||||
Query: "select * from cpuid",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-30 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_4",
|
||||
Query: "select 1 from processes where name like '%Apache%'",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now(),
|
||||
},
|
||||
},
|
||||
Name: "dev_query_5",
|
||||
Query: "select 1 from osquery_info where build_platform='darwin'",
|
||||
},
|
||||
}
|
||||
|
||||
for _, query := range queries {
|
||||
query := query
|
||||
_, err := ds.NewQuery(&query)
|
||||
if err != nil {
|
||||
initFatal(err, "creating bootstrap query")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func createDevLabels(ds kolide.Datastore, config config.KolideConfig) {
|
||||
labels := []kolide.Label{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 8, 31, 16, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 8, 31, 16, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
Name: "dev_label_apache",
|
||||
Query: "select * from processes where name like '%Apache%'",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now(),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_label_darwin",
|
||||
Query: "select * from osquery_info where build_platform='darwin'",
|
||||
},
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
label := label
|
||||
_, err := ds.NewLabel(&label)
|
||||
if err != nil {
|
||||
initFatal(err, "creating bootstrap label")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func createDevPacksAndQueries(ds kolide.Datastore, config config.KolideConfig) {
|
||||
query1 := &kolide.Query{
|
||||
Name: "Osquery Info",
|
||||
Query: "select * from osquery_info",
|
||||
}
|
||||
query1, err := ds.NewQuery(query1)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev queries")
|
||||
}
|
||||
|
||||
query2 := &kolide.Query{
|
||||
Name: "Launchd",
|
||||
Query: "select * from launchd",
|
||||
Platform: "darwin",
|
||||
}
|
||||
query2, err = ds.NewQuery(query2)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev queries")
|
||||
}
|
||||
|
||||
query3 := &kolide.Query{
|
||||
Name: "registry",
|
||||
Query: "select * from osquery_registry",
|
||||
}
|
||||
query3, err = ds.NewQuery(query3)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev queries")
|
||||
}
|
||||
|
||||
pack1 := &kolide.Pack{
|
||||
Name: "Osquery Internal Info",
|
||||
}
|
||||
pack1, err = ds.NewPack(pack1)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev packs")
|
||||
}
|
||||
|
||||
pack2 := &kolide.Pack{
|
||||
Name: "macOS Attacks",
|
||||
}
|
||||
pack2, err = ds.NewPack(pack2)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev packs")
|
||||
}
|
||||
|
||||
err = ds.AddQueryToPack(query1.ID, pack1.ID)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev packs")
|
||||
}
|
||||
|
||||
err = ds.AddQueryToPack(query3.ID, pack1.ID)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev packs")
|
||||
}
|
||||
|
||||
err = ds.AddQueryToPack(query2.ID, pack2.ID)
|
||||
if err != nil {
|
||||
initFatal(err, "creating dev packs")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/datastore/mysql"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
|
@ -276,6 +278,22 @@ func testListHostsInLabel(t *testing.T, db kolide.Datastore) {
|
|||
}
|
||||
}
|
||||
|
||||
func testBuiltInLabels(t *testing.T, db kolide.Datastore) {
|
||||
if i, ok := db.(*mysql.Datastore); ok {
|
||||
err := i.Initialize()
|
||||
require.Nil(t, err)
|
||||
}
|
||||
if i, ok := db.(*inmem.Datastore); ok {
|
||||
err := i.Initialize()
|
||||
require.Nil(t, err)
|
||||
}
|
||||
|
||||
hits, err := db.SearchLabels("Mac OS X")
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 1, len(hits))
|
||||
assert.Equal(t, kolide.LabelTypeBuiltIn, hits[0].LabelType)
|
||||
}
|
||||
|
||||
func testListUniqueHostsInLabels(t *testing.T, db kolide.Datastore) {
|
||||
h1, err := db.NewHost(&kolide.Host{
|
||||
DetailUpdateTime: time.Now(),
|
||||
|
|
|
|||
|
|
@ -47,4 +47,5 @@ var testFunctions = [...]func(*testing.T, kolide.Datastore){
|
|||
testListHost,
|
||||
testGetHostsInPack,
|
||||
testDistributedQueryCampaign,
|
||||
testBuiltInLabels,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@ package inmem
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/patrickmn/sortutil"
|
||||
)
|
||||
|
|
@ -30,11 +33,13 @@ type Datastore struct {
|
|||
distributedQueryCampaignTargets map[uint]kolide.DistributedQueryCampaignTarget
|
||||
|
||||
orginfo *kolide.AppConfig
|
||||
config *config.KolideConfig
|
||||
}
|
||||
|
||||
func New() (*Datastore, error) {
|
||||
func New(config config.KolideConfig) (*Datastore, error) {
|
||||
ds := &Datastore{
|
||||
Driver: "inmem",
|
||||
config: &config,
|
||||
}
|
||||
|
||||
if err := ds.Migrate(); err != nil {
|
||||
|
|
@ -88,6 +93,38 @@ func (orm *Datastore) Drop() error {
|
|||
return orm.Migrate()
|
||||
}
|
||||
|
||||
func (orm *Datastore) Initialize() error {
|
||||
if err := orm.createBuiltinLabels(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevUsers(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevHosts(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevQueries(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevLabels(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevOrgInfo(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := orm.createDevPacksAndQueries(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getLimitOffsetSliceBounds returns the bounds that should be used for
|
||||
// re-slicing the results to comply with the requested ListOptions. Lack of
|
||||
// generics forces us to do this rather than reslicing in this method.
|
||||
|
|
@ -115,3 +152,394 @@ func (orm *Datastore) nextID(val interface{}) uint {
|
|||
orm.nextIDs[valType]++
|
||||
return orm.nextIDs[valType]
|
||||
}
|
||||
|
||||
func (orm *Datastore) createDevPacksAndQueries() error {
|
||||
query1 := &kolide.Query{
|
||||
Name: "Osquery Info",
|
||||
Query: "select * from osquery_info",
|
||||
}
|
||||
query1, err := orm.NewQuery(query1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
query2 := &kolide.Query{
|
||||
Name: "Launchd",
|
||||
Query: "select * from launchd",
|
||||
Platform: "darwin",
|
||||
}
|
||||
query2, err = orm.NewQuery(query2)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
query3 := &kolide.Query{
|
||||
Name: "registry",
|
||||
Query: "select * from osquery_registry",
|
||||
}
|
||||
query3, err = orm.NewQuery(query3)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pack1 := &kolide.Pack{
|
||||
Name: "Osquery Internal Info",
|
||||
}
|
||||
pack1, err = orm.NewPack(pack1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pack2 := &kolide.Pack{
|
||||
Name: "macOS Attacks",
|
||||
}
|
||||
pack2, err = orm.NewPack(pack2)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = orm.AddQueryToPack(query1.ID, pack1.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = orm.AddQueryToPack(query3.ID, pack1.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = orm.AddQueryToPack(query2.ID, pack2.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (orm *Datastore) createBuiltinLabels() error {
|
||||
labels := []kolide.Label{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().UTC(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
},
|
||||
},
|
||||
Platform: "darwin",
|
||||
Name: "Mac OS X",
|
||||
Query: "select 1 from osquery_info where build_platform = 'darwin';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().UTC(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
},
|
||||
},
|
||||
Platform: "ubuntu",
|
||||
Name: "Ubuntu Linux",
|
||||
Query: "select 1 from osquery_info where build_platform = 'ubuntu';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().UTC(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
},
|
||||
},
|
||||
Platform: "centos",
|
||||
Name: "CentOS Linux",
|
||||
Query: "select 1 from osquery_info where build_platform = 'centos';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().UTC(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
},
|
||||
},
|
||||
Platform: "windows",
|
||||
Name: "MS Windows",
|
||||
Query: "select 1 from osquery_info where build_platform = 'windows';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().UTC(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
},
|
||||
},
|
||||
Platform: "all",
|
||||
Name: "All Hosts",
|
||||
Query: "select 1;",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
label := label
|
||||
_, err := orm.NewLabel(&label)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Bootstrap a few users when using the in-memory database.
|
||||
// Each user's default password will just be their username.
|
||||
func (orm *Datastore) createDevUsers() error {
|
||||
users := []kolide.User{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "Admin User",
|
||||
Username: "admin",
|
||||
Email: "admin@kolide.co",
|
||||
Position: "Director of Security",
|
||||
Admin: true,
|
||||
Enabled: true,
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-3 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "Normal User",
|
||||
Username: "user",
|
||||
Email: "user@kolide.co",
|
||||
Position: "Security Engineer",
|
||||
Admin: false,
|
||||
Enabled: true,
|
||||
},
|
||||
}
|
||||
for _, user := range users {
|
||||
user := user
|
||||
err := user.SetPassword(user.Username, orm.config.Auth.SaltKeySize, orm.config.Auth.BcryptCost)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
_, err = orm.NewUser(&user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (orm *Datastore) createDevQueries() error {
|
||||
queries := []kolide.Query{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 17, 7, 6, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 17, 7, 6, 0, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_1",
|
||||
Query: "select * from processes",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
Name: "dev_query_2",
|
||||
Query: "select * from time",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-24 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-17 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_3",
|
||||
Query: "select * from cpuid",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-30 * time.Hour),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_query_4",
|
||||
Query: "select 1 from processes where name like '%Apache%'",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now(),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now(),
|
||||
},
|
||||
},
|
||||
Name: "dev_query_5",
|
||||
Query: "select 1 from osquery_info where build_platform='darwin'",
|
||||
},
|
||||
}
|
||||
|
||||
for _, query := range queries {
|
||||
query := query
|
||||
_, err := orm.NewQuery(&query)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Bootstrap a few hosts when using the in-memory database.
|
||||
func (orm *Datastore) createDevHosts() error {
|
||||
hosts := []kolide.Host{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 10, 0, 0, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now().Add(-20 * time.Minute),
|
||||
},
|
||||
},
|
||||
NodeKey: "totally-legit",
|
||||
HostName: "jmeller-mbp.local",
|
||||
UUID: "1234-5678-9101",
|
||||
Platform: "darwin",
|
||||
OsqueryVersion: "2.0.0",
|
||||
OSVersion: "Mac OS X 10.11.6",
|
||||
Uptime: 60 * time.Minute,
|
||||
PhysicalMemory: 4145483776,
|
||||
PrimaryMAC: "C0:11:1B:13:3E:15",
|
||||
PrimaryIP: "192.168.1.10",
|
||||
DetailUpdateTime: time.Now().Add(-20 * time.Minute),
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 4, 3, 10, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
|
||||
NodeKey: "definitely-legit",
|
||||
HostName: "marpaia.local",
|
||||
UUID: "1234-5678-9102",
|
||||
Platform: "windows",
|
||||
OsqueryVersion: "2.0.0",
|
||||
OSVersion: "Windows 10.0.0",
|
||||
Uptime: 60 * time.Minute,
|
||||
PhysicalMemory: 17179869184,
|
||||
PrimaryMAC: "7e:5c:be:ef:b4:df",
|
||||
PrimaryIP: "192.168.1.11",
|
||||
DetailUpdateTime: time.Now().Add(-10 * time.Second),
|
||||
},
|
||||
}
|
||||
|
||||
for _, host := range hosts {
|
||||
host := host
|
||||
_, err := orm.NewHost(&host)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (orm *Datastore) createDevOrgInfo() error {
|
||||
devOrgInfo := &kolide.AppConfig{
|
||||
OrgName: "Kolide",
|
||||
OrgLogoURL: fmt.Sprintf("%s/logo.png", orm.config.Server.Address),
|
||||
}
|
||||
_, err := orm.NewAppConfig(devOrgInfo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (orm *Datastore) createDevLabels() error {
|
||||
labels := []kolide.Label{
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Date(2016, time.October, 27, 8, 31, 16, 0, time.UTC),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Date(2016, time.October, 27, 8, 31, 16, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
Name: "dev_label_apache",
|
||||
Query: "select * from processes where name like '%Apache%'",
|
||||
},
|
||||
{
|
||||
UpdateCreateTimestamps: kolide.UpdateCreateTimestamps{
|
||||
CreateTimestamp: kolide.CreateTimestamp{
|
||||
CreatedAt: time.Now().Add(-1 * time.Hour),
|
||||
},
|
||||
UpdateTimestamp: kolide.UpdateTimestamp{
|
||||
UpdatedAt: time.Now(),
|
||||
},
|
||||
},
|
||||
|
||||
Name: "dev_label_darwin",
|
||||
Query: "select * from osquery_info where build_platform='darwin'",
|
||||
},
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
label := label
|
||||
_, err := orm.NewLabel(&label)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package datastore
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
|
@ -11,7 +12,7 @@ func TestInmem(t *testing.T) {
|
|||
|
||||
for _, f := range testFunctions {
|
||||
t.Run(functionName(f), func(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
defer func() { require.Nil(t, ds.Drop()) }()
|
||||
require.Nil(t, err)
|
||||
f(t, ds)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,14 @@ func (d *Datastore) Migrate() error {
|
|||
|
||||
}
|
||||
|
||||
// Initialize preload data needed by the application
|
||||
func (d *Datastore) Initialize() error {
|
||||
if err := d.createBuiltinLabels(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Drop removes database
|
||||
func (d *Datastore) Drop() error {
|
||||
goose.SetDialect("mysql")
|
||||
|
|
@ -152,3 +160,54 @@ func GetMysqlConnectionString(conf config.MysqlConfig) string {
|
|||
conf.Database,
|
||||
)
|
||||
}
|
||||
|
||||
func (d *Datastore) createBuiltinLabels() error {
|
||||
// Nuke built in labels and recreate them
|
||||
_, err := d.db.Exec("DELETE from labels WHERE label_type = ?", kolide.LabelTypeBuiltIn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
labels := []kolide.Label{
|
||||
{
|
||||
Platform: "darwin",
|
||||
Name: "Mac OS X",
|
||||
Query: "select 1 from osquery_info where build_platform = 'darwin';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "ubuntu",
|
||||
Name: "Ubuntu Linux",
|
||||
Query: "select 1 from osquery_info where build_platform = 'ubuntu';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "centos",
|
||||
Name: "CentOS Linux",
|
||||
Query: "select 1 from osquery_info where build_platform = 'centos';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "windows",
|
||||
Name: "MS Windows",
|
||||
Query: "select 1 from osquery_info where build_platform = 'windows';",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
{
|
||||
Platform: "all",
|
||||
Name: "All Hosts",
|
||||
Query: "select 1;",
|
||||
LabelType: kolide.LabelTypeBuiltIn,
|
||||
},
|
||||
}
|
||||
|
||||
for _, label := range labels {
|
||||
_, err = d.NewLabel(&label)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,10 +17,11 @@ func (d *Datastore) NewLabel(label *kolide.Label) (*kolide.Label, error) {
|
|||
name,
|
||||
description,
|
||||
query,
|
||||
platform
|
||||
) VALUES ( ?, ?, ?, ?)
|
||||
platform,
|
||||
label_type
|
||||
) VALUES ( ?, ?, ?, ?, ?)
|
||||
`
|
||||
result, err := d.db.Exec(sql, label.Name, label.Description, label.Query, label.Platform)
|
||||
result, err := d.db.Exec(sql, label.Name, label.Description, label.Query, label.Platform, label.LabelType)
|
||||
if err != nil {
|
||||
return nil, errors.DatabaseError(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package migration
|
|||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/pressly/goose"
|
||||
)
|
||||
|
||||
|
|
@ -22,6 +24,7 @@ func Up_20161118212557(tx *sql.Tx) error {
|
|||
"`description` varchar(255) DEFAULT NULL," +
|
||||
"`query` varchar(255) NOT NULL," +
|
||||
"`platform` varchar(255) DEFAULT NULL," +
|
||||
fmt.Sprintf("`label_type` INT UNSIGNED NOT NULL DEFAULT %d,", kolide.LabelTypeDefault) +
|
||||
"PRIMARY KEY (`id`)," +
|
||||
"UNIQUE KEY `idx_label_unique_name` (`name`)," +
|
||||
"FULLTEXT KEY `labels_search` (`name`)" +
|
||||
|
|
|
|||
|
|
@ -49,14 +49,26 @@ type LabelPayload struct {
|
|||
Description *string `json:"description"`
|
||||
}
|
||||
|
||||
// LabelType is used to catagorize the kind of label
|
||||
type LabelType uint
|
||||
|
||||
const (
|
||||
// LabelTypeDefault - the label can change, this is the default
|
||||
LabelTypeDefault LabelType = iota
|
||||
// LabelTypeBuiltIn - this type of label is created by Kolide on start up
|
||||
// and can't be removed by end user.
|
||||
LabelTypeBuiltIn
|
||||
)
|
||||
|
||||
type Label struct {
|
||||
UpdateCreateTimestamps
|
||||
DeleteFields
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Query string `json:"query"`
|
||||
Platform string `json:"platform"`
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Query string `json:"query"`
|
||||
Platform string `json:"platform"`
|
||||
LabelType LabelType `json:"label_type" db:"label_type"`
|
||||
}
|
||||
|
||||
type LabelQueryExecution struct {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/go-kit/kit/endpoint"
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/contexts/viewer"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
|
|
@ -17,7 +18,7 @@ import (
|
|||
// permissions to access or modify resources
|
||||
func TestEndpointPermissions(t *testing.T) {
|
||||
req := struct{}{}
|
||||
ds, _ := inmem.New()
|
||||
ds, _ := inmem.New(config.TestConfig())
|
||||
createTestUsers(t, ds)
|
||||
admin1, _ := ds.User("admin1")
|
||||
user1, _ := ds.User("user1")
|
||||
|
|
@ -184,7 +185,7 @@ func TestGetNodeKey(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAuthenticatedHost(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
svc, err := newTestService(ds, nil)
|
||||
require.Nil(t, err)
|
||||
|
|
|
|||
|
|
@ -6,13 +6,14 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
func TestAPIRoutes(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
kitlog "github.com/go-kit/kit/log"
|
||||
kithttp "github.com/go-kit/kit/transport/http"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -23,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
ds, _ := inmem.New()
|
||||
ds, _ := inmem.New(config.TestConfig())
|
||||
svc, _ := newTestService(ds, nil)
|
||||
users := createTestUsers(t, ds)
|
||||
logger := kitlog.NewLogfmtLogger(os.Stdout)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -11,7 +12,7 @@ import (
|
|||
)
|
||||
|
||||
func TestCreateAppConfig(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
svc, err := newTestService(ds, nil)
|
||||
require.Nil(t, err)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -10,7 +11,7 @@ import (
|
|||
)
|
||||
|
||||
func TestListHosts(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -33,7 +34,7 @@ func TestListHosts(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetHost(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -54,7 +55,7 @@ func TestGetHost(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeleteHost(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import (
|
|||
)
|
||||
|
||||
func TestInviteNewUser(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
createTestUsers(t, ds)
|
||||
assert.Nil(t, err)
|
||||
nosuchAdminID := uint(999)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -10,7 +11,7 @@ import (
|
|||
)
|
||||
|
||||
func TestListLabels(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -35,7 +36,7 @@ func TestListLabels(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetLabel(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -57,7 +58,7 @@ func TestGetLabel(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewLabel(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -82,7 +83,7 @@ func TestNewLabel(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeleteLabel(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/WatchBeam/clock"
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
hostctx "github.com/kolide/kolide-ose/server/contexts/host"
|
||||
"github.com/kolide/kolide-ose/server/contexts/viewer"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
|
|
@ -23,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestEnrollAgent(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -45,7 +46,7 @@ func TestEnrollAgent(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEnrollAgentIncorrectEnrollSecret(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -67,7 +68,7 @@ func TestEnrollAgentIncorrectEnrollSecret(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSubmitStatusLogs(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -139,7 +140,7 @@ func TestSubmitStatusLogs(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSubmitResultLogs(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -247,7 +248,7 @@ func TestHostDetailQueries(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestLabelQueries(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -374,7 +375,7 @@ func TestLabelQueries(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetClientConfig(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -455,7 +456,7 @@ func TestGetClientConfig(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDetailQueries(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -597,7 +598,7 @@ func TestDetailQueries(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDistributedQueries(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -10,7 +11,7 @@ import (
|
|||
)
|
||||
|
||||
func TestListPacks(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -33,7 +34,7 @@ func TestListPacks(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -55,7 +56,7 @@ func TestGetPack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -76,7 +77,7 @@ func TestNewPack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestModifyPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -102,7 +103,7 @@ func TestModifyPack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeletePack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -127,7 +128,7 @@ func TestDeletePack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAddQueryToPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -163,7 +164,7 @@ func TestAddQueryToPack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetQueriesInPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -195,7 +196,7 @@ func TestGetQueriesInPack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRemoveQueryFromPack(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -10,7 +11,7 @@ import (
|
|||
)
|
||||
|
||||
func TestListQueries(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -34,7 +35,7 @@ func TestListQueries(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGetQuery(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -57,7 +58,7 @@ func TestGetQuery(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewQuery(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -80,7 +81,7 @@ func TestNewQuery(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestModifyQuery(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -107,7 +108,7 @@ func TestModifyQuery(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeleteQuery(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -14,7 +15,7 @@ import (
|
|||
const bcryptCost = 6
|
||||
|
||||
func TestAuthenticate(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
svc, err := newTestService(ds, nil)
|
||||
require.Nil(t, err)
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/WatchBeam/clock"
|
||||
"github.com/kolide/kolide-ose/server/config"
|
||||
"github.com/kolide/kolide-ose/server/datastore/inmem"
|
||||
"github.com/kolide/kolide-ose/server/kolide"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -14,7 +15,7 @@ import (
|
|||
)
|
||||
|
||||
func TestSearchTargets(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -45,7 +46,7 @@ func TestSearchTargets(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestCountHostsInTargets(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
mockClock := clock.NewMockClock()
|
||||
|
|
@ -162,7 +163,7 @@ func TestCountHostsInTargets(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSearchWithOmit(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -214,7 +215,7 @@ func TestSearchWithOmit(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSearchHostsInLabels(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -267,7 +268,7 @@ func TestSearchHostsInLabels(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSearchResultsLimit(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
require.Nil(t, err)
|
||||
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import (
|
|||
)
|
||||
|
||||
func TestAuthenticatedUser(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
createTestUsers(t, ds)
|
||||
svc, err := newTestService(ds, nil)
|
||||
|
|
@ -34,7 +34,7 @@ func TestAuthenticatedUser(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRequestPasswordReset(t *testing.T) {
|
||||
ds, err := inmem.New()
|
||||
ds, err := inmem.New(config.TestConfig())
|
||||
assert.Nil(t, err)
|
||||
createTestUsers(t, ds)
|
||||
admin1, err := ds.User("admin1")
|
||||
|
|
@ -114,7 +114,7 @@ func TestRequestPasswordReset(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestCreateUser(t *testing.T) {
|
||||
ds, _ := inmem.New()
|
||||
ds, _ := inmem.New(config.TestConfig())
|
||||
svc, _ := newTestService(ds, nil)
|
||||
invites := setupInvites(t, ds, []string{"admin2@example.com"})
|
||||
ctx := context.Background()
|
||||
|
|
@ -245,7 +245,7 @@ func setupInvites(t *testing.T, ds kolide.Datastore, emails []string) map[string
|
|||
}
|
||||
|
||||
func TestChangeUserPassword(t *testing.T) {
|
||||
ds, _ := inmem.New()
|
||||
ds, _ := inmem.New(config.TestConfig())
|
||||
svc, _ := newTestService(ds, nil)
|
||||
createTestUsers(t, ds)
|
||||
var passwordChangeTests = []struct {
|
||||
|
|
|
|||
Loading…
Reference in a new issue