-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusers.go
136 lines (122 loc) · 4.83 KB
/
users.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
thehive5 implements functionality to interact with the most recent version of thehive.
https://www.strangebee.com/thehive/
*/
package thehive5
import (
"encoding/json"
"net/url"
"time"
)
// UserResponse contains all available data of a user object on the hive
type UserResponse struct {
Id string `json:"_id"`
CreatedBy string `json:"_createdBy"`
UpdatedBy string `json:"_updatedBy,omitempty"`
CreatedAt time.Time `json:"_createdAt"`
UpdatedAt time.Time `json:"_updatedAt,omitempty"`
Login string `json:"login"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
HasKey bool `json:"hasKey"`
HasPassword bool `json:"hasPassword"`
HasMFA bool `json:"hasMFA"`
Locked bool `json:"locked"`
Profile string `json:"profile"`
Permissions []string `json:"permissions,omitempty"`
Organisation string `json:"organisation"`
Avatar string `json:"avatar,omitempty"`
Organisations []Organisations `json:"organisations,omitempty"`
Type string `json:"type"`
DefaultOrganisation string `json:"defaultOrganisation"`
ExtraData map[string]string `json:"extraData"`
}
type Links struct {
ToOrganisation string `json:"toOrganisation"`
Avatar string `json:"avatar,omitempty"`
LinkType string `json:"linkType,omitempty"`
OtherLinkType string `json:"otherLinkType,omitempty"`
Alert *HiveAlertResponse `json:"alert,omitempty"`
Case *HiveCaseResponse `json:"case,omitempty"`
}
type Organisations struct {
OrganisationID string `json:"organisationId"`
Organisation string `json:"organisation"`
Profile string `json:"profile"`
Avatar string `json:"avatar"`
Links []Links `json:"links"`
}
type shadowUserResponse struct {
Id string `json:"_id"`
CreatedBy string `json:"_createdBy"`
UpdatedBy string `json:"_updatedBy,omitempty"`
CreatedAt int64 `json:"_createdAt"`
UpdatedAt int64 `json:"_updatedAt,omitempty"`
Login string `json:"login"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
HasKey bool `json:"hasKey"`
HasPassword bool `json:"hasPassword"`
HasMFA bool `json:"hasMFA"`
Locked bool `json:"locked"`
Profile string `json:"profile"`
Permissions []string `json:"permissions,omitempty"`
Organisation string `json:"organisation"`
Avatar string `json:"avatar,omitempty"`
Organisations []Organisations `json:"organisations,omitempty"`
Type string `json:"type"`
DefaultOrganisation string `json:"defaultOrganisation"`
ExtraData map[string]string `json:"extraData"`
}
func (u *UserResponse) UnmarshalJSON(data []byte) error {
shadow := new(shadowUserResponse)
err := json.Unmarshal(data, &shadow)
if err != nil {
return err
}
u.Id = shadow.Id
u.CreatedBy = shadow.CreatedBy
u.UpdatedBy = shadow.UpdatedBy
u.CreatedAt = convertInt64ToTime(shadow.CreatedAt)
u.UpdatedAt = convertInt64ToTime(shadow.UpdatedAt)
u.Login = shadow.Login
u.Name = shadow.Name
u.Email = shadow.Email
u.HasKey = shadow.HasKey
u.HasPassword = shadow.HasPassword
u.HasMFA = shadow.HasMFA
u.Locked = shadow.Locked
u.Profile = shadow.Profile
u.Permissions = shadow.Permissions
u.Organisation = shadow.Organisation
u.Avatar = shadow.Avatar
u.Organisations = shadow.Organisations
u.Type = shadow.Type
u.DefaultOrganisation = shadow.DefaultOrganisation
u.ExtraData = shadow.ExtraData
return nil
}
// executeCommentSearchQuery is a helper function to do query related searches
func (hive *Hivedata) executeUserSearchQuery(query []byte) ([]UserResponse, error) {
url, err := url.JoinPath(hive.Url, "/api/v1/query")
if err != nil {
return nil, err
}
ret, err := hive.webRequest(url, POST, query)
if err != nil {
return nil, err
}
var parsedRet []UserResponse
err = json.Unmarshal(ret, &parsedRet)
return parsedRet, err
}
// GetVisibleUsers returns all users that are visible to the service
func (hive *Hivedata) GetVisibleUsers() ([]UserResponse, error) {
query, err := hive.createSearchQuery(
SearchQuery{Name: "listVisibleUsers"},
)
if err != nil {
return nil, err
}
return hive.executeUserSearchQuery(query)
}