Documentation ¶
Index ¶
- Variables
- func ApplySeeding(t *testing.T, seed Seeder, db *database.Connection)
- func ClearDB(db *database.Connection) error
- func ContextForUser(my models.User, db *database.Connection) context.Context
- func CountRows(t *testing.T, db *database.Connection, tablename, where string, ...) int64
- func CreatePopulatedMemStore(seed Seeder) *contentstore.MemStore
- func DefaultTagIDsFromTags(tags ...models.DefaultTag) []int64
- func FillEvidenceWithTags(t *testing.T, db *database.Connection, evidence *[]FullEvidence)
- func GetAPIKeysForUserID(t *testing.T, db *database.Connection, userID int64) []models.APIKey
- func GetAllDeletedUsers(t *testing.T, db *database.Connection) []models.User
- func GetAllUsers(t *testing.T, db *database.Connection) []models.User
- func GetAuthsForUser(t *testing.T, db *database.Connection, userID int64) []models.AuthSchemeData
- func GetDefaultTagByID(t *testing.T, db *database.Connection, id int64) models.DefaultTag
- func GetDefaultTags(t *testing.T, db *database.Connection) []models.DefaultTag
- func GetEvidenceByID(t *testing.T, db *database.Connection, id int64) models.Evidence
- func GetEvidenceByUUID(t *testing.T, db *database.Connection, uuid string) models.Evidence
- func GetEvidenceForOperation(t *testing.T, db *database.Connection, operationID int64) []models.Evidence
- func GetEvidenceIDsFromFinding(t *testing.T, db *database.Connection, findingID int64) []int64
- func GetEvidenceMetadataByEvidenceID(t *testing.T, db *database.Connection, id int64) []models.EvidenceMetadata
- func GetFavoriteForOperation(t *testing.T, db *database.Connection, slug string, id int64) bool
- func GetFindingByUUID(t *testing.T, db *database.Connection, uuid string) models.Finding
- func GetFindingsByOperationID(t *testing.T, db *database.Connection, id int64) []models.Finding
- func GetFullEvidenceViaSelectBuilder(t *testing.T, db *database.Connection, condition sq.Eq) models.Evidence
- func GetGlobalVarFromName(t *testing.T, db *database.Connection, name string) models.GlobalVar
- func GetOperationFromSlug(t *testing.T, db *database.Connection, slug string) models.Operation
- func GetOperationVarFromSlug(t *testing.T, db *database.Connection, slug string) models.OperationVar
- func GetOperations(t *testing.T, db *database.Connection) []services.OperationWithID
- func GetOperationsForUser(t *testing.T, db *database.Connection, user models.User) []*dtos.Operation
- func GetQueriesForOperationID(t *testing.T, db *database.Connection, id int64) []models.Query
- func GetQueryByID(t *testing.T, db *database.Connection, id int64) models.Query
- func GetRealUsers(t *testing.T, db *database.Connection) []models.User
- func GetServiceWorkerByID(t *testing.T, db *database.Connection, id int64) models.ServiceWorker
- func GetServiceWorkerByName(t *testing.T, db *database.Connection, name string) models.ServiceWorker
- func GetTagByID(t *testing.T, db *database.Connection, id int64) models.Tag
- func GetTagFromOperationID(t *testing.T, db *database.Connection, id int64) []models.Tag
- func GetTagIDsFromEvidenceID(t *testing.T, db *database.Connection, evidenceID int64) []int64
- func GetTagUsage(t *testing.T, db *database.Connection, tagID int64) int64
- func GetUserBySlug(t *testing.T, db *database.Connection, slug string) models.User
- func GetUserGroupFromSlug(t *testing.T, db *database.Connection, slug string) models.UserGroup
- func GetUserProfile(t *testing.T, db *database.Connection, id int64) models.User
- func GetUserRolesForOperationByOperationID(t *testing.T, db *database.Connection, id int64) []models.UserOperationPermission
- func GetUsersForAuth(t *testing.T, db *database.Connection, authName string) []models.User
- func InitTest(t *testing.T) *database.Connection
- func InitTestWithName(t *testing.T, dbname string) *database.Connection
- func InitTestWithOptions(t *testing.T, options TestOptions) *database.Connection
- func IsSeeded(db *database.Connection) (bool, error)
- func ListServiceWorkers(t *testing.T, db *database.Connection) []models.ServiceWorker
- func MkDBRowCounter(t *testing.T, db *database.Connection, tablename, where string, ...) func() int64
- func SimpleFullContext(my models.User) context.Context
- func Sorted(slice []int64) []int64
- func TagIDsFromTags(tags ...models.Tag) []int64
- type FullEvidence
- type PreferencesOperations
- type Seeder
- func (seed Seeder) AllInitialDefaultTagIds() []int64
- func (seed Seeder) AllInitialTagIds() []int64
- func (seed Seeder) ApplyTo(db *database.Connection) error
- func (seed Seeder) CategoryForFinding(finding models.Finding) string
- func (seed Seeder) EvidenceForOperation(opID int64) []models.Evidence
- func (seed Seeder) EvidenceIDsForFinding(finding models.Finding) []int64
- func (seed Seeder) GetTagFromID(id int64) models.Tag
- func (seed Seeder) GetUserFromID(id int64) models.User
- func (seed Seeder) GetUserGroupFromID(id int64) models.UserGroup
- func (seed Seeder) OperationForEvidence(evidence models.Evidence) *models.Operation
- func (seed Seeder) Reset(db *database.Connection) error
- func (seed Seeder) TagIDsUsageByDate(opID int64) map[int64][]time.Time
- func (seed Seeder) TagsForEvidence(evidence models.Evidence) []models.Tag
- func (seed Seeder) TagsForFinding(finding models.Finding) []models.Tag
- func (seed Seeder) UserGroupRoleForOp(userGroup models.UserGroup, op models.Operation) policy.OperationRole
- func (seed Seeder) UserGroupsForOp(op models.Operation) []models.UserGroup
- func (seed Seeder) UserRoleForOp(user models.User, op models.Operation) policy.OperationRole
- func (seed Seeder) UsersForOp(op models.Operation) []models.User
- type TestOptions
- type UserGroupOpPermJoinUser
- type UserOpPermJoinUser
Constants ¶
This section is empty.
Variables ¶
var APIKeyHarry1 = newAPIKey(UserHarry.ID, "harry-abc", []byte{0x01, 0x02, 0x03})
var APIKeyHarry2 = newAPIKey(UserHarry.ID, "harry-123", []byte{0x11, 0x12, 0x13})
var APIKeyNick = newAPIKey(UserHeadlessNick.ID, "gR6nVtaQmp2SvzIqLUWdedDk", []byte{
0x5A, 0xFB, 0x6F, 0xC4, 0x56, 0x89, 0x4B, 0x49, 0x8F, 0xB3, 0xCD, 0xA7, 0x0B, 0x3A, 0x9A, 0x98,
0x8F, 0x9B, 0x38, 0x65, 0xE9, 0xAB, 0xB1, 0x08, 0x42, 0x18, 0x38, 0x50, 0x3F, 0x27, 0xC5, 0x2E,
0x78, 0xE3, 0xC5, 0xC6, 0xF4, 0xDD, 0x20, 0x34, 0x07, 0x1E, 0x24, 0x60, 0x4B, 0x3D, 0xD0, 0x80,
0xDE, 0x40, 0x33, 0x0B, 0x83, 0x1D, 0x51, 0x21, 0xE7, 0x28, 0x22, 0x7F, 0x95, 0x90, 0xFE, 0xF8,
})
var APIKeyRon1 = newAPIKey(UserRon.ID, "ron-abc", []byte{0x01, 0x02, 0x03})
var APIKeyRon2 = newAPIKey(UserRon.ID, "ron-123", []byte{0x11, 0x12, 0x13})
var AddCedricToHufflepuff = newUserGroupMapping(UserCedric, UserGroupHufflepuff)
var AddChoToRavenclaw = newUserGroupMapping(UserCho, UserGroupRavenclaw)
var AddFleurToHufflepuff = newUserGroupMapping(UserFleur, UserGroupHufflepuff)
var AddGinnyToGryffindor = newUserGroupMapping(UserGinny, UserGroupGryffindor)
var AddHarryToGryffindor = newUserGroupMapping(UserHarry, UserGroupGryffindor)
var AddHermioneToGryffindor = newUserGroupMapping(UserHermione, UserGroupGryffindor)
var AddLuciusToSlytherin = newUserGroupMapping(UserLucius, UserGroupSlytherin)
var AddMalfoyToSlytherin = newUserGroupMapping(UserDraco, UserGroupSlytherin)
var AddRonToGryffindor = newUserGroupMapping(UserRon, UserGroupGryffindor)
var AddSnapeToSlytherin = newUserGroupMapping(UserSnape, UserGroupSlytherin)
var AddViktorToRavenclaw = newUserGroupMapping(UserViktor, UserGroupRavenclaw)
var BehavioralFindingCategory = newHpFindingCategory("Behavioral", false)
var CommonTagWhatCoS = newHPTag(OpChamberOfSecrets.ID, "What", "lightBlue")
var CommonTagWhatGoF = newHPTag(OpGobletOfFire.ID, "What", "lightBlue")
var CommonTagWhatSS = newHPTag(OpSorcerersStone.ID, "What", "lightBlue")
var CommonTagWhenCoS = newHPTag(OpChamberOfSecrets.ID, "When", "lightIndigo")
var CommonTagWhenGoF = newHPTag(OpGobletOfFire.ID, "When", "lightIndigo")
var CommonTagWhenSS = newHPTag(OpSorcerersStone.ID, "When", "lightIndigo")
var CommonTagWhereCoS = newHPTag(OpChamberOfSecrets.ID, "Where", "lightGreen")
var CommonTagWhereGoF = newHPTag(OpGobletOfFire.ID, "Where", "lightGreen")
var CommonTagWhereSS = newHPTag(OpSorcerersStone.ID, "Where", "lightGreen")
var CommonTagWhoCoS = newHPTag(OpChamberOfSecrets.ID, "Who", "lightRed")
var CommonTagWhoGoF = newHPTag(OpGobletOfFire.ID, "Who", "lightRed")
var CommonTagWhoSS = newHPTag(OpSorcerersStone.ID, "Who", "lightRed")
Common tags are used to test migrating content from one operation to another
var CommonTagWhyCoS = newHPTag(OpChamberOfSecrets.ID, "Why", "lightYellow")
var CommonTagWhyGoF = newHPTag(OpGobletOfFire.ID, "Why", "lightYellow")
var CommonTagWhySS = newHPTag(OpSorcerersStone.ID, "Why", "lightYellow")
var DefaultTagWhat = newDefaultHPTag("What", "lightBlue")
var DefaultTagWhen = newDefaultHPTag("When", "lightIndigo")
var DefaultTagWhere = newDefaultHPTag("Where", "lightGreen")
var DefaultTagWho = newDefaultHPTag("Who", "lightRed")
var DefaultTagWhy = newDefaultHPTag("Why", "lightYellow")
var DeletedCategory = newHpFindingCategory("I was deleted", true)
var DemoServiceWorker = newHPServiceWorker("Demo", `{ "type": "web", "version": 1, "url": "http://demo:3001/process" }`)
var DetectionGapFindingCategory = newHpFindingCategory("Detection Gap", false)
var EnterpriseFindingCategory = newHpFindingCategory("Enterprise", false)
var EviDobby = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_dobby", "an elf?", "image", 0, nil)
var EviDursleys = newHPEvidence(OpSorcerersStone.ID, UserHarry.ID, "seed_dursleys", "Family of self-centered muggles + Harry", "image", 0, &timeNow)
var EviEntryForm = newHPEvidence(OpGobletOfFire.ID, UserCedric.ID, "seed_entry", "Cedric's entry form for Triwizard competition", "codeblock", 0, nil)
var EviFlyingCar = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_car", "A Car that flies", "image", 0, &timeNow)
var EviHeadlessHuntApplication = newHPEvidence(OpChamberOfSecrets.ID, UserRon.ID, "seed_py_aoc201717", "This group is very particular", "codeblock", 0, &timeNow)
var EviLevitateSpell = newHPEvidence(OpSorcerersStone.ID, UserHarry.ID, "seed_md_levitate", "Documented Levitation Spell effects", "codeblock", 0, &timeNow)
var EviMetaDobby = newHPEviMetadata(EviDobby.ID, "color-averager", "rgb(74, 51, 32)\n#4a3320\nhsl(27, 40%, 21%)", nil, helpers.PTrue(), 0)
var EviMetaDursleys = newHPEviMetadata(EviDursleys.ID, "color-averager", "rgb(65, 65, 65)\n#414141\nhsl(0, 0%, 25%)", nil, helpers.PTrue(), 0)
var EviMetaEntryForm = newHPEviMetadata(EviEntryForm.ID, "run-result", "(No output)", nil, helpers.PTrue(), 0)
var EviMetaEntryFormTwo = newHPEviMetadata(EviEntryForm.ID, "wc -l", "13 seed_entry", nil, helpers.PTrue(), 0)
var EviMetaFlyingCar = newHPEviMetadata(EviFlyingCar.ID, "color-averager", "rgb(106, 109, 84)\n#6a6d54\nhsl(67, 13%, 38%)", evidencemetadata.StatusCompleted.Ptr(), helpers.PTrue(), 0)
var EviMetaHeadlessHuntApplication = newHPEviMetadata(EviHeadlessHuntApplication.ID, "run-result", "41797835\nelapsed time (seconds): 3.772843360900879", nil, helpers.PTrue(), 0)
var EviMetaLevitateSpell = newHPEviMetadata(EviLevitateSpell.ID, "wc -l", "12 seed_md_levitate", nil, helpers.PTrue(), 0)
var EviMetaMirrorOfErised = newHPEviMetadata(EviMirrorOfErised.ID, "color-averager", "rgb(111, 77, 14)\n#6f4d0e\nhsl(39, 78%, 25%)", nil, helpers.PTrue(), 0)
var EviMetaMoaningMyrtle = newHPEviMetadata(EviMoaningMyrtle.ID, "color-averager", "rgb(118, 103, 102)\n#766766\nhsl(4, 7%, 43%)", nil, helpers.PTrue(), 0)
var EviMetaPetrifiedHermione = newHPEviMetadata(EviPetrifiedHermione.ID, "color-averager", "rgb(162, 104, 101)\n#a26865\nhsl(3, 25%, 52%)", nil, helpers.PTrue(), 0)
var EviMetaPolyjuice = newHPEviMetadata(EviPolyjuice.ID, "wc -l", "13 seed_juice", nil, helpers.PTrue(), 0)
var EviMetaRulesForQuidditch = newHPEviMetadata(EviRulesForQuidditch.ID, "run-result", "Last floor reached: 138 \n Step on which basement is reached (first time): 1771", nil, helpers.PTrue(), 0)
var EviMetaRulesForQuidditchTwo = newHPEviMetadata(EviRulesForQuidditch.ID, "wc-l", "33 main.rs", nil, helpers.PTrue(), 0)
var EviMetaSpiderAragog = newHPEviMetadata(EviSpiderAragog.ID, "color-averager", "rgb(189, 156, 146)\n#bd9c92\nhsl(14, 25%, 66%)", nil, helpers.PTrue(), 0)
var EviMetaTomRiddlesDiary = newHPEviMetadata(EviTomRiddlesDiary.ID, "run-result", "All keys found by index: 19968", nil, helpers.PTrue(), 0)
var EviMetaTomRiddlesDiaryTwo = newHPEviMetadata(EviTomRiddlesDiary.ID, "wc -l", "98 main.go", nil, helpers.PTrue(), 0)
var EviMetaTristateTrophy = newHPEviMetadata(EviTristateTrophy.ID, "color-averager", "rgb(182, 184, 183)\n#b6b8b7\nhsl(150, 1%, 72%)", nil, helpers.PTrue(), 0)
var EviMetaWarewolf = newHPEviMetadata(EviWarewolf.ID, "duration", "348.163058815", nil, helpers.PTrue(), 0)
var EviMetaWarewolfOther = newHPEviMetadata(EviWarewolf.ID, "color-averager", "Yo, I can't process this", nil, helpers.PFalse(), 0)
var EviMetaWhompingWillow = newHPEviMetadata(EviWhompingWillow.ID, "color-averager", "rgb(115, 109, 81)\n#736d51\nhsl(49, 17%, 38%)", nil, helpers.PTrue(), 0)
var EviMetaWizardDance = newHPEviMetadata(EviWizardDance.ID, "color-averager", "rgb(22, 19, 2nil, 0)\n#161314\nhsl(340, 7%, 8%)", nil, helpers.PTrue(), 0)
var EviMirrorOfErised = newHPEvidence(OpSorcerersStone.ID, UserHarry.ID, "seed_mirror", "Mysterious mirror that shows you your deepest desires", "image", 0, nil)
var EviMoaningMyrtle = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_myrtle", "She's very sad", "image", 0, nil)
var EviPetrifiedHermione = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_statue", "Strangely real-looking statue", "image", 0, &timeNow)
var EviPolyjuice = newHPEvidence(OpGobletOfFire.ID, UserAlastor.ID, "seed_juice", "DIY instructions for Polyjuice Potion", "codeblock", 0, &timeNow)
var EviRulesForQuidditch = newHPEvidence(OpSorcerersStone.ID, UserHarry.ID, "seed_rs_aoc201501", "Complex rules for a simple game", "codeblock", 0, &timeNow)
var EviSpiderAragog = newHPEvidence(OpChamberOfSecrets.ID, UserHagrid.ID, "seed_aragog", "Just a big spider", "image", 0, nil)
var EviTomRiddlesDiary = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_go_aoc201614", "What's a Horcrux?", "codeblock", 0, &timeNow)
var EviTristateTrophy = newHPEvidence(OpGobletOfFire.ID, UserHarry.ID, "seed_trophy", "First Triwizard Champion Trophy", "image", 0, nil)
var EviWarewolf = newHPEvidence(OpGobletOfFire.ID, UserViktor.ID, "seed_wolf", "Strangely real-looking statue", "terminal-recording", 0, &timeNow)
var EviWhompingWillow = newHPEvidence(OpChamberOfSecrets.ID, UserHarry.ID, "seed_tree", "Don't get too close", "image", 0, &timeNow)
var EviWizardDance = newHPEvidence(OpGobletOfFire.ID, UserCho.ID, "seed_dance", "Advertising for the Triwizard Dance", "image", 0, &timeNow)
var FindingBook2CGI = newHPFinding(OpChamberOfSecrets.ID, "find-uuid-cgi", &SomeOtherFindingCategory.ID, "this looks fake", "I'm not entirely sure this is all above board", &noLink)
var FindingBook2Magic = newHPFinding(OpChamberOfSecrets.ID, "find-uuid-b2magic", &SomeFindingCategory.ID, "lots o' magic", "Magic plagues Harry's life", nil)
var FindingBook2Robes = newHPFinding(OpChamberOfSecrets.ID, "find-uuid-robes", nil, "Robes for all seasons", "Turns out there's only one kind of robe.", &spiderLink)
var FindingBook2SpiderFear = newHPFinding(OpChamberOfSecrets.ID, "find-uuid-spider", &SomeFindingCategory.ID, "how to scare spiders", "Who would have thought?", &spiderLink)
var HarryPotterSeedData = Seeder{ FindingCategories: []models.FindingCategory{ ProductFindingCategory, NetworkFindingCategory, EnterpriseFindingCategory, VendorFindingCategory, BehavioralFindingCategory, DetectionGapFindingCategory, DeletedCategory, SomeFindingCategory, SomeOtherFindingCategory, }, Users: []models.User{UserHarry, UserRon, UserGinny, UserHermione, UserNeville, UserSeamus, UserDraco, UserSnape, UserDumbledore, UserHagrid, UserTomRiddle, UserHeadlessNick, UserCedric, UserFleur, UserViktor, UserAlastor, UserMinerva, UserLucius, UserSirius, UserPeter, UserParvati, UserPadma, UserCho, }, UserGroups: []models.UserGroup{ UserGroupGryffindor, UserGroupHufflepuff, UserGroupRavenclaw, UserGroupSlytherin, UserGroupOtherHouse, }, UserGroupMaps: []models.UserGroupMap{ AddHarryToGryffindor, AddRonToGryffindor, AddGinnyToGryffindor, AddHermioneToGryffindor, AddMalfoyToSlytherin, AddSnapeToSlytherin, AddLuciusToSlytherin, AddCedricToHufflepuff, AddFleurToHufflepuff, AddChoToRavenclaw, AddViktorToRavenclaw, }, Operations: []models.Operation{OpSorcerersStone, OpChamberOfSecrets, OpPrisonerOfAzkaban, OpGobletOfFire, OpOrderOfThePhoenix, OpHalfBloodPrince, OpDeathlyHallows}, Tags: []models.Tag{ TagFamily, TagFriendship, TagHome, TagLoyalty, TagCourage, TagGoodVsEvil, TagSupernatural, TagMercury, TagVenus, TagEarth, TagMars, TagJupiter, TagSaturn, TagNeptune, CommonTagWhoSS, CommonTagWhatSS, CommonTagWhereSS, CommonTagWhenSS, CommonTagWhySS, CommonTagWhoCoS, CommonTagWhatCoS, CommonTagWhereCoS, CommonTagWhenCoS, CommonTagWhyCoS, CommonTagWhoGoF, CommonTagWhatGoF, CommonTagWhereGoF, CommonTagWhenGoF, CommonTagWhyGoF, }, DefaultTags: []models.DefaultTag{ DefaultTagWho, DefaultTagWhat, DefaultTagWhere, DefaultTagWhen, DefaultTagWhy, }, APIKeys: []models.APIKey{ APIKeyHarry1, APIKeyHarry2, APIKeyRon1, APIKeyRon2, APIKeyNick, }, UserOpPrefMap: []models.UserOperationPreferences{ newUserOperationPreferences(UserRon, OpChamberOfSecrets, true), newUserOperationPreferences(UserDumbledore, OpGobletOfFire, true), newUserOperationPreferences(UserDraco, OpChamberOfSecrets, true), }, UserOpMap: []models.UserOperationPermission{ newUserOpPermission(UserHarry, OpSorcerersStone, policy.OperationRoleAdmin), newUserOpPermission(UserRon, OpSorcerersStone, policy.OperationRoleWrite), newUserOpPermission(UserSeamus, OpSorcerersStone, policy.OperationRoleWrite), newUserOpPermission(UserHermione, OpSorcerersStone, policy.OperationRoleRead), newUserOpPermission(UserNeville, OpSorcerersStone, policy.OperationRoleWrite), newUserOpPermission(UserRon, OpChamberOfSecrets, policy.OperationRoleAdmin), newUserOpPermission(UserHarry, OpChamberOfSecrets, policy.OperationRoleWrite), newUserOpPermission(UserHermione, OpChamberOfSecrets, policy.OperationRoleWrite), newUserOpPermission(UserSeamus, OpChamberOfSecrets, policy.OperationRoleRead), newUserOpPermission(UserGinny, OpChamberOfSecrets, policy.OperationRoleWrite), newUserOpPermission(UserHarry, OpGobletOfFire, policy.OperationRoleAdmin), newUserOpPermission(UserRon, OpGobletOfFire, policy.OperationRoleWrite), newUserOpPermission(UserGinny, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserHermione, OpGobletOfFire, policy.OperationRoleWrite), newUserOpPermission(UserNeville, OpGobletOfFire, policy.OperationRoleWrite), newUserOpPermission(UserSeamus, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserDraco, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserSnape, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserHagrid, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserHeadlessNick, OpGobletOfFire, policy.OperationRoleWrite), newUserOpPermission(UserCedric, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserFleur, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserViktor, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserAlastor, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserMinerva, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserLucius, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserSirius, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserPeter, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserParvati, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserPadma, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserCho, OpGobletOfFire, policy.OperationRoleRead), newUserOpPermission(UserDumbledore, OpSorcerersStone, policy.OperationRoleAdmin), newUserOpPermission(UserDumbledore, OpChamberOfSecrets, policy.OperationRoleAdmin), newUserOpPermission(UserDumbledore, OpGobletOfFire, policy.OperationRoleAdmin), }, UserGroupOpMap: []models.UserGroupOperationPermission{ newUserGroupOpPermission(UserGroupGryffindor, OpSorcerersStone, policy.OperationRoleRead), newUserGroupOpPermission(UserGroupHufflepuff, OpSorcerersStone, policy.OperationRoleWrite), newUserGroupOpPermission(UserGroupSlytherin, OpSorcerersStone, policy.OperationRoleAdmin), }, Findings: []models.Finding{ FindingBook2Magic, FindingBook2CGI, FindingBook2SpiderFear, FindingBook2Robes, }, Evidences: []models.Evidence{ EviDursleys, EviMirrorOfErised, EviLevitateSpell, EviRulesForQuidditch, EviFlyingCar, EviDobby, EviSpiderAragog, EviMoaningMyrtle, EviWhompingWillow, EviTomRiddlesDiary, EviPetrifiedHermione, EviHeadlessHuntApplication, EviTristateTrophy, EviEntryForm, EviWizardDance, EviPolyjuice, EviWarewolf, }, EvidenceMetadatas: []models.EvidenceMetadata{ EviMetaDursleys, EviMetaMirrorOfErised, EviMetaLevitateSpell, EviMetaRulesForQuidditch, EviMetaRulesForQuidditchTwo, EviMetaFlyingCar, EviMetaDobby, EviMetaSpiderAragog, EviMetaMoaningMyrtle, EviMetaWhompingWillow, EviMetaTomRiddlesDiary, EviMetaTomRiddlesDiaryTwo, EviMetaPetrifiedHermione, EviMetaHeadlessHuntApplication, EviMetaTristateTrophy, EviMetaEntryForm, EviMetaWizardDance, EviMetaPolyjuice, EviMetaEntryFormTwo, EviMetaWarewolf, EviMetaWarewolfOther, }, TagEviMap: unionTagEviMap( associateTagsToEvidence(EviDursleys, TagFamily, TagHome), associateTagsToEvidence(EviFlyingCar, TagEarth, TagSaturn), associateTagsToEvidence(EviDobby, TagMars, TagJupiter, TagMercury), associateTagsToEvidence(EviPetrifiedHermione, TagMars, CommonTagWhatCoS, CommonTagWhoCoS), associateTagsToEvidence(EviTristateTrophy, CommonTagWhoGoF, CommonTagWhereGoF, CommonTagWhyGoF), associateTagsToEvidence(EviEntryForm, CommonTagWhatGoF, CommonTagWhereGoF, CommonTagWhenGoF), associateTagsToEvidence(EviWizardDance, CommonTagWhereGoF, CommonTagWhenGoF), associateTagsToEvidence(EviPolyjuice, CommonTagWhatGoF, CommonTagWhereGoF, CommonTagWhenGoF, CommonTagWhyGoF), associateTagsToEvidence(EviWarewolf, CommonTagWhoGoF, CommonTagWhereGoF, CommonTagWhyGoF), ), EviFindingsMap: unionEviFindingMap( associateEvidenceToFinding(FindingBook2Magic, EviDobby, EviFlyingCar, EviWhompingWillow), associateEvidenceToFinding(FindingBook2CGI, EviDobby, EviSpiderAragog), ), Queries: []models.Query{ QuerySalazarsHier, QueryWhereIsTheChamberOfSecrets, }, ServiceWorkers: []models.ServiceWorker{ DemoServiceWorker, }, GlobalVars: []models.GlobalVar{ VarExpelliarmus, VarAlohomora, VarAscendio, VarImperio, VarLumos, VarObliviate, }, OperationVars: []models.OperationVar{ OpVarImmobulus, OpVarObscuro, OpVarProtego, OpVarReparo, OpVarStupefy, OpVarWingardiumLeviosa, }, VarOperationMap: unionVarOperationMap( associateVarsToOperation(OpSorcerersStone, OpVarImmobulus, OpVarObscuro), associateVarsToOperation(OpChamberOfSecrets, OpVarProtego, OpVarReparo), associateVarsToOperation(OpGobletOfFire, OpVarStupefy, OpVarWingardiumLeviosa), ), }
var NetworkFindingCategory = newHpFindingCategory("Network", false)
var OpChamberOfSecrets = newHPOp("HPCoS", "Harry Potter and The Chamber Of Secrets")
OpChamberOfSecrets is reserved to test permission issues. Also used with OpSorcerersStone
var OpDeathlyHallows = newHPOp("HPDH", "Harry Potter and The Deathly Hallows")
OpDeathlyHallows is a vailable for use
var OpGobletOfFire = newHPOp("HPGoF", "Harry Potter and The Goblet Of Fire")
OpGobletOfFire is reserved for a common-operation for all users
var OpHalfBloodPrince = newHPOp("HPHBP", "Harry Potter and The Half Blood Prince")
OpHalfBloodPrince is available for use
var OpOrderOfThePhoenix = newHPOp("HPOotP", "Harry Potter and The Order Of The Phoenix")
OpOrderOfThePhoenix is available for use
var OpPrisonerOfAzkaban = newHPOp("HPPoA", "Harry Potter and The Prisoner Of Azkaban")
OpPrisonerOfAzkaban is reserved as a no-user (orphaned) operation
var OpSorcerersStone = newHPOp("HPSS", "Harry Potter and The Sorcerer's Stone")
OpSorcerersStone is reserved to test permission issues. Also used with OpChamberOfSecrets
var OpVarImmobulus = newOperationVar("immobulus", "IMMOBULUS", "freezes objects")
var OpVarObscuro = newOperationVar("obscuro", "OBSCURO", "blindfolds the victim")
var OpVarProtego = newOperationVar("protego", "PROTEGO", "shield charm")
var OpVarReparo = newOperationVar("reparo", "REPARO", "repairs broken objects")
var OpVarStupefy = newOperationVar("stupefy", "STUPEFY", "knocks out opponent")
var OpVarWingardiumLeviosa = newOperationVar("wingardium_leviosa", "WINGARDIUM_LEVIOSA", "levitates objects")
var ProductFindingCategory = newHpFindingCategory("Product", false)
var QuerySalazarsHier = newHPQuery(OpChamberOfSecrets.ID, "Find Heir", "Magic Query String", "findings")
var QueryWhereIsTheChamberOfSecrets = newHPQuery(OpChamberOfSecrets.ID, "Locate Chamber", "Fancy Query", "evidence")
var SomeFindingCategory = newHpFindingCategory("some-category", false)
var SomeOtherFindingCategory = newHpFindingCategory("alt-category", false)
var TagCourage = newHPTag(OpSorcerersStone.ID, "Courage", "blue")
var TagEarth = newHPTag(OpChamberOfSecrets.ID, "Earth", "orange")
var TagFamily = newHPTag(OpSorcerersStone.ID, "Family", "red")
var TagFriendship = newHPTag(OpSorcerersStone.ID, "Friendship", "orange")
var TagGoodVsEvil = newHPTag(OpSorcerersStone.ID, "Good vs. Evil", "indigo")
var TagHome = newHPTag(OpSorcerersStone.ID, "Home", "yellow")
var TagJupiter = newHPTag(OpChamberOfSecrets.ID, "Jupiter", "green")
var TagLoyalty = newHPTag(OpSorcerersStone.ID, "Loyalty", "green")
var TagMars = newHPTag(OpChamberOfSecrets.ID, "Mars", "yellow")
var TagMercury = newHPTag(OpChamberOfSecrets.ID, "Mercury", "violet")
var TagNeptune = newHPTag(OpChamberOfSecrets.ID, "Neptune", "indigo")
var TagSaturn = newHPTag(OpChamberOfSecrets.ID, "Saturn", "blue")
var TagSupernatural = newHPTag(OpSorcerersStone.ID, "Super Natural", "violet")
var TagVenus = newHPTag(OpChamberOfSecrets.ID, "Venus", "red")
var TinyCodeblock []byte = []byte(`{"contentSubtype": "python", "content": "print(\"Hello World!\")"}`)
TinyCodeblock is a minimal codeblock. Used for testing.
var TinyImg []byte = []byte{
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00,
0x05, 0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
0x42, 0x60, 0x82,
}
TinyImg is the smallest png. Used for testing. Reference: https://github.com/mathiasbynens/small
var TinyTermRec []byte = []byte(
`{"version":2,"width":75,"height":18,"timestamp":1593020879,"title":"1593020879","env":{"SHELL":"/bin/bash","TERM":"xterm-256color"}}` +
"\n" + `[0.188801409,"o","\u001b]0;user@localhost:~\u0007"]` +
"\n" + `[0.189032775,"o","[user@localhost ~]$ "]` +
"\n" + `[0.716089612,"o","ll\r\n"]` +
"\n" + `[1.061539838,"o","total 10652\r\n"]` +
"\n" + `[1.061654704,"o","-rwxrwxr-x. 1 user user 10905365 Jun 24 10:41 \u001b[0m\u001b[38;5;40mtermrec\u001b[0m\r\n"]` +
"\n" + `[1.062881589,"o","\u001b]0;user@localhost:~\u0007"]` +
"\n" + `[1.063084503,"o","[user@localhost ~]$ "]` +
"\n" + `[1.517546751,"o","exit\r\n"]` +
"\n" + `[2.129344227,"o","exit\r\n"]`,
)
TinyTermRec is a minimal terminal recording. Used for testing.
var UserAlastor = newHPUser(newUserInput{FirstName: "Alastor", LastName: "Moody", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserCedric = newHPUser(newUserInput{FirstName: "Cedric", LastName: "Digory", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserCho = newHPUser(newUserInput{FirstName: "Cho", LastName: "Chang", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserDraco = newHPUser(newUserInput{FirstName: "Draco", LastName: "Malfoy", Birthday: date(1980, 6, 5), SetLastUpdated: true})
var UserDumbledore = newHPUser(newUserInput{FirstName: "Albus", LastName: "Dumbledore", Birthday: date(1970, 8, 1), SetLastUpdated: true, IsAdmin: true}) // birthday should be in 1881, but timestamp range is 1970-2038
UserDumbledore is reserved to be a super admin.
var UserFleur = newHPUser(newUserInput{FirstName: "Fleur", LastName: "Delacour", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserGinny = newHPUser(newUserInput{FirstName: "Ginny", LastName: "Weasley", Birthday: date(1981, 3, 1), SetLastUpdated: true})
var UserGroupGryffindor = newUserGroup("Gryffindor", false)
var UserGroupHufflepuff = newUserGroup("Hufflepuff", false)
var UserGroupOtherHouse = newUserGroup("Other House", true)
UserGroupOtherHouse is reserved to test deleted user groups
var UserGroupRavenclaw = newUserGroup("Ravenclaw", false)
var UserGroupSlytherin = newUserGroup("Slytherin", false)
var UserHagrid = newHPUser(newUserInput{FirstName: "Rubeus", LastName: "Hagrid", Birthday: date(1980, 1, 1), SetLastUpdated: true, Disabled: true})
UserHagrid is reserved to test disabled users
var UserHarry = newHPUser(newUserInput{FirstName: "Harry", LastName: "Potter", Birthday: date(1980, 7, 31), SetLastUpdated: true})
var UserHeadlessNick = newHPUser(newUserInput{FirstName: "Nicholas", LastName: "de Mimsy-Porpington", Birthday: date(1980, 1, 1), SetLastUpdated: true, Headless: true})
UserHeadlessNick is reserved to test api-only access/"headless" users
var UserHermione = newHPUser(newUserInput{FirstName: "Hermione", LastName: "Granger", Birthday: date(1979, 9, 19), SetLastUpdated: true})
var UserLucius = newHPUser(newUserInput{FirstName: "Lucius", LastName: "Malfoy", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserMinerva = newHPUser(newUserInput{FirstName: "Minerva", LastName: "McGonagall", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserNeville = newHPUser(newUserInput{FirstName: "Neville", LastName: "Longbottom", Birthday: date(1979, 9, 19), SetLastUpdated: true})
var UserPadma = newHPUser(newUserInput{FirstName: "Padma", LastName: "Patil", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserParvati = newHPUser(newUserInput{FirstName: "Parvati", LastName: "Patil", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserPeter = newHPUser(newUserInput{FirstName: "Peter", LastName: "Pettigrew", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserRon = newHPUser(newUserInput{FirstName: "Ron", LastName: "Weasley", Birthday: date(1980, 3, 1), SetLastUpdated: true})
var UserSeamus = newHPUser(newUserInput{FirstName: "Seamus", LastName: "Finnigan", Birthday: date(1980, 9, 1), SetLastUpdated: true})
var UserSirius = newHPUser(newUserInput{FirstName: "Sirius", LastName: "Black", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserSnape = newHPUser(newUserInput{FirstName: "Serverus", LastName: "Snape", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var UserTomRiddle = newHPUser(newUserInput{FirstName: "Tom", LastName: "Riddle", Birthday: date(1980, 1, 1), SetLastUpdated: true, Deleted: true})
UserTomRiddle is reserved to test deleted users
var UserViktor = newHPUser(newUserInput{FirstName: "Viktor", LastName: "Krum", Birthday: date(1980, 1, 1), SetLastUpdated: true})
var VarAlohomora = newGlobalVar("ALOHOMORA", "unlock doors")
var VarAscendio = newGlobalVar("ASCENDIO", "lifts the caster high into the air")
var VarExpelliarmus = newGlobalVar("EXPELLIARMUS", "disarm an opponent")
var VarImperio = newGlobalVar("IMPERIO", "control another person")
var VarLumos = newGlobalVar("LUMOS", "creates a narrow beam of light")
var VarObliviate = newGlobalVar("PETRIFICUS_TOTALUS", "paralyzes someone")
var VendorFindingCategory = newHpFindingCategory("Vendor", false)
Functions ¶
func ApplySeeding ¶
func ApplySeeding(t *testing.T, seed Seeder, db *database.Connection)
func ClearDB ¶
func ClearDB(db *database.Connection) error
ClearDB empties the database of all values. This leaves behind small residue: IDs are already taken, so, auto-incremented values will use the next value, not re-use values. However, this is easily overcome by specifying what the ID should be -- which is part of each seed anyway.
Note: this should only be done in a testing environment.
func ContextForUser ¶
ContextForUser genereates a user's context as if they had just logged in. All settings are set, except for NeedsReset, which is always false
func CreatePopulatedMemStore ¶
func CreatePopulatedMemStore(seed Seeder) *contentstore.MemStore
CreatePopulatedMemStore generates an in-memory content store with all evidence of the given seed populated with tiny versions (see TinyTermRec, TinyImg, and TinyCodeblock). Useful for delete tests
func DefaultTagIDsFromTags ¶
func DefaultTagIDsFromTags(tags ...models.DefaultTag) []int64
DefaultTagIDsFromTags maps over models.DefaultTags to come up with a collection of IDs for those tags equivalent js: tags.map( i => i.ID)
func FillEvidenceWithTags ¶
func FillEvidenceWithTags(t *testing.T, db *database.Connection, evidence *[]FullEvidence)
func GetAPIKeysForUserID ¶
db queries
func GetAllDeletedUsers ¶
func GetAllUsers ¶
func GetAuthsForUser ¶
func GetAuthsForUser(t *testing.T, db *database.Connection, userID int64) []models.AuthSchemeData
func GetDefaultTagByID ¶
func GetDefaultTagByID(t *testing.T, db *database.Connection, id int64) models.DefaultTag
func GetDefaultTags ¶
func GetDefaultTags(t *testing.T, db *database.Connection) []models.DefaultTag
func GetEvidenceByID ¶
func GetEvidenceByUUID ¶
func GetEvidenceForOperation ¶
func GetEvidenceMetadataByEvidenceID ¶
func GetEvidenceMetadataByEvidenceID(t *testing.T, db *database.Connection, id int64) []models.EvidenceMetadata
func GetFavoriteForOperation ¶
func GetFindingByUUID ¶
func GetGlobalVarFromName ¶
func GetOperationFromSlug ¶
func GetOperationVarFromSlug ¶
func GetOperationVarFromSlug(t *testing.T, db *database.Connection, slug string) models.OperationVar
func GetOperations ¶
func GetOperations(t *testing.T, db *database.Connection) []services.OperationWithID
func GetOperationsForUser ¶
func GetOperationsForUser(t *testing.T, db *database.Connection, user models.User) []*dtos.Operation
TODO this is too close to what ListOperations does. We can leave it like this, but should have a a test to verify the intial case (matches the seed data), plus a minor addition
func GetQueryByID ¶
func GetRealUsers ¶
func GetServiceWorkerByID ¶
func GetServiceWorkerByID(t *testing.T, db *database.Connection, id int64) models.ServiceWorker
func GetServiceWorkerByName ¶
func GetServiceWorkerByName(t *testing.T, db *database.Connection, name string) models.ServiceWorker
func GetTagByID ¶
func GetTagFromOperationID ¶
func GetTagIDsFromEvidenceID ¶
func GetTagUsage ¶
func GetUserBySlug ¶
func GetUserGroupFromSlug ¶
func GetUserProfile ¶
func GetUserRolesForOperationByOperationID ¶
func GetUserRolesForOperationByOperationID(t *testing.T, db *database.Connection, id int64) []models.UserOperationPermission
func GetUsersForAuth ¶
func InitTest ¶
func InitTest(t *testing.T) *database.Connection
InitTest creates a connection to the database and provides an established, but otherwise empty database. The database is named "service-test-db"
func InitTestWithName ¶
func InitTestWithName(t *testing.T, dbname string) *database.Connection
InitTestWithName creates a connection to the database with an established, but otherwise empty database _of the given name_.
func InitTestWithOptions ¶
func InitTestWithOptions(t *testing.T, options TestOptions) *database.Connection
InitTestWithOptions creates a connection to the database with an established, but otherwise empty database, configured with.
func IsSeeded ¶
func IsSeeded(db *database.Connection) (bool, error)
IsSeeded does a check against the database to see if any users are registered. if no users are registered, then it is assumed that the database has not been seeded.
func ListServiceWorkers ¶
func ListServiceWorkers(t *testing.T, db *database.Connection) []models.ServiceWorker
func MkDBRowCounter ¶
func SimpleFullContext ¶
SimpleFullContext returns back a context with a proper authenticated policy
func Sorted ¶
Sorted orders an int slice in asc order, then returns back a copy of the sorted list note: underlying list is unedited
func TagIDsFromTags ¶
TagIDsFromTags maps over models.Tags to come up with a collection of IDs for those tags equivalent js: tags.map( i => i.ID)
Types ¶
type FullEvidence ¶
type FullEvidence struct { models.Evidence // copied from models.User Slug string `db:"slug"` FirstName string `db:"first_name"` LastName string `db:"last_name"` Tags []models.Tag }
func GetFullEvidenceByFindingID ¶
func GetFullEvidenceByFindingID(t *testing.T, db *database.Connection, findingID int64) []FullEvidence
func GetFullEvidenceByOperationID ¶
func GetFullEvidenceByOperationID(t *testing.T, db *database.Connection, operationID int64) []FullEvidence
type PreferencesOperations ¶
type PreferencesOperations struct { models.UserOperationPreferences Slug string `db:"slug"` }
func GetFavoritesByUserID ¶
func GetFavoritesByUserID(t *testing.T, db *database.Connection, id int64) []PreferencesOperations
type Seeder ¶
type Seeder struct { FindingCategories []models.FindingCategory APIKeys []models.APIKey Findings []models.Finding Evidences []models.Evidence EvidenceMetadatas []models.EvidenceMetadata Users []models.User UserGroups []models.UserGroup UserGroupMaps []models.UserGroupMap Operations []models.Operation DefaultTags []models.DefaultTag Tags []models.Tag UserOpMap []models.UserOperationPermission UserGroupOpMap []models.UserGroupOperationPermission UserOpPrefMap []models.UserOperationPreferences TagEviMap []models.TagEvidenceMap EviFindingsMap []models.EvidenceFindingMap Queries []models.Query ServiceWorkers []models.ServiceWorker GlobalVars []models.GlobalVar OperationVars []models.OperationVar VarOperationMap []models.VarOperationMap }
Seeder is designed to allow a database-to-structure mapping. This is useful either for populating/seeding the database (see ApplyTo method), or alternatively, as acting as a source of truth for post-db operations.
func (Seeder) AllInitialDefaultTagIds ¶
AllInitialDefaultTagIds is a (convenience) method version of the function DefaultTagIDsFromTags
func (Seeder) AllInitialTagIds ¶
AllInitialTagIds is a (convenience) method version of the function TagIDsFromTags
func (Seeder) ApplyTo ¶
func (seed Seeder) ApplyTo(db *database.Connection) error
ApplyTo takes the configured Seeder and writes these values to the database.
func (Seeder) CategoryForFinding ¶
func (Seeder) EvidenceForOperation ¶
func (Seeder) EvidenceIDsForFinding ¶
func (Seeder) OperationForEvidence ¶
func (Seeder) TagIDsUsageByDate ¶
func (Seeder) TagsForEvidence ¶
func (Seeder) TagsForFinding ¶
func (Seeder) UserGroupRoleForOp ¶
func (Seeder) UserGroupsForOp ¶
func (Seeder) UserRoleForOp ¶
type TestOptions ¶
type UserGroupOpPermJoinUser ¶
type UserGroupOpPermJoinUser struct { models.UserGroup Role policy.OperationRole `db:"role"` }
func GetUserGroupsWithRoleForOperationByOperationID ¶
func GetUserGroupsWithRoleForOperationByOperationID(t *testing.T, db *database.Connection, id int64) []UserGroupOpPermJoinUser
type UserOpPermJoinUser ¶
type UserOpPermJoinUser struct { models.User Role policy.OperationRole `db:"role"` }
func GetUsersWithRoleForOperationByOperationID ¶
func GetUsersWithRoleForOperationByOperationID(t *testing.T, db *database.Connection, id int64) []UserOpPermJoinUser