Class: Threatstack::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/threatstack/client.rb

Constant Summary collapse

THREATSTACK_API =
'https://api.threatstack.com'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(token, organization_id: nil, api_version: 'v2') ⇒ Client

Returns a new instance of Client.



17
18
19
20
21
22
23
24
# File 'lib/threatstack/client.rb', line 17

def initialize(token, organization_id: nil, api_version: 'v2')
  @api_version = api_version
  @token = token
  @org_id = organization_id
  if api_version == 'v1'
    raise ThreatstackError, "This version of threatstack-ruby does not support Threatstack API v1"
  end
end

Instance Attribute Details

#api_versionObject (readonly)

Returns the value of attribute api_version.



15
16
17
# File 'lib/threatstack/client.rb', line 15

def api_version
  @api_version
end

#last_pagination_tokenObject (readonly)

Returns the value of attribute last_pagination_token.



15
16
17
# File 'lib/threatstack/client.rb', line 15

def last_pagination_token
  @last_pagination_token
end

#org_idObject (readonly)

Returns the value of attribute org_id.



15
16
17
# File 'lib/threatstack/client.rb', line 15

def org_id
  @org_id
end

#tokenObject (readonly)

Returns the value of attribute token.



15
16
17
# File 'lib/threatstack/client.rb', line 15

def token
  @token
end

Instance Method Details

#agent(agent_id, params = {}) ⇒ Object

Raises:



33
34
35
36
37
# File 'lib/threatstack/client.rb', line 33

def agent(agent_id, params = {})
  raise ThreatstackError, "Must specify agent id" unless agent_id
  response = do_request(:get, "agents/#{agent_id}", params)
  Agent.new(response, self)
end

#agents(params = {}) ⇒ Object

ALERTS ###



28
29
30
31
# File 'lib/threatstack/client.rb', line 28

def agents(params = {})
  response = do_request(:get, 'agents', params)
  Response.new(response['agents'], self, entity: :agent).agents
end

#alert(alert_id, params = {}) ⇒ Object

Raises:



50
51
52
53
54
# File 'lib/threatstack/client.rb', line 50

def alert(alert_id, params = {})
  raise ThreatstackError, "Must specify alert id" unless alert_id
  response = do_request(:get, "alerts/#{alert_id}", params)
  Alert.new(response, self)
end

#alerts(params = {}) ⇒ Object

ALERTS ###



40
41
42
43
# File 'lib/threatstack/client.rb', line 40

def alerts(params = {})
  response = do_request(:get, 'alerts', params)
  Response.new(response['alerts'], self, entity: :alert).alerts
end

#cves_by_agent(agent, params = {}) ⇒ Object

Raises:



97
98
99
100
101
102
103
# File 'lib/threatstack/client.rb', line 97

def cves_by_agent(agent, params = {})
  raise ThreatstackError, "Must specify agent" unless agent
  uri = "vulnerabilities/agent/#{agent}"
  uri += "/suppressed" if params[:suppressed]
  response = do_request(:get, uri, params)
  response['cves']
end

#dismissed_alerts(params = {}) ⇒ Object



45
46
47
48
# File 'lib/threatstack/client.rb', line 45

def dismissed_alerts(params = {})
  response = do_request(:get, 'alerts/dismissed', params)
  Response.new(response['alerts'], self, entity: :alert).alerts
end

#event(alert_id, event_id, params = {}) ⇒ Object



61
62
63
64
# File 'lib/threatstack/client.rb', line 61

def event(alert_id, event_id, params = {})
  response = do_request(:get, "alerts/#{alert_id}/events/#{event_id}", params)
  GenericObject.new(response['details'], self, entity: :event)
end

#package_vulnerabilities(package, params = {}) ⇒ Object

Raises:



81
82
83
84
85
86
87
# File 'lib/threatstack/client.rb', line 81

def package_vulnerabilities(package, params = {})
  raise ThreatstackError, "Must specify package" unless package
  uri = "vulnerabilities/package/#{package}"
  uri += "/suppressed" if params[:suppressed]
  response = do_request(:get, uri, params)
  Response.new(response['packages'], self, entity: :package).list
end

#rule(ruleset_id, rule_id, params = {}) ⇒ Object

Raises:



130
131
132
133
134
# File 'lib/threatstack/client.rb', line 130

def rule(ruleset_id, rule_id, params = {})
  raise ThreatstackError, "Must specify ruleset id and rule id" unless ruleset_id && rule_id
  response = do_request(:get, "rulesets/#{ruleset_id}/rules/#{rule_id}", params)
  Rule.new(response, self)
end

#rules(ruleset_id, params = {}) ⇒ Object

Rules ###



125
126
127
128
# File 'lib/threatstack/client.rb', line 125

def rules(ruleset_id, params = {})
  response = do_request(:get, "rulesets/#{ruleset_id}/rules", params)
  Response.new(response['rules'], self, entity: :rule).rules
end

#ruleset(ruleset_id, params = {}) ⇒ Object

Raises:



117
118
119
120
121
# File 'lib/threatstack/client.rb', line 117

def ruleset(ruleset_id, params = {})
  raise ThreatstackError, "Must specify ruleset id" unless ruleset_id
  response = do_request(:get, "rulesets/#{ruleset_id}", params)
  Ruleset.new(response, self)
end

#rulesets(params = {}) ⇒ Object

Rulesets ###



112
113
114
115
# File 'lib/threatstack/client.rb', line 112

def rulesets(params = {})
  response = do_request(:get, 'rulesets', params)
  Response.new(response['rulesets'], self, entity: :ruleset).rulesets
end

#server_vulnerabilities(server, params = {}) ⇒ Object

Raises:



89
90
91
92
93
94
95
# File 'lib/threatstack/client.rb', line 89

def server_vulnerabilities(server, params = {})
  raise ThreatstackError, "Must specify server" unless server
  uri = "vulnerabilities/server/#{server}"
  uri += "/suppressed" if params[:suppressed]
  response = do_request(:get, uri, params)
  response['cves']
end

#servers(monitored = true, params = {}) ⇒ Object

Servers ###



138
139
140
141
142
143
# File 'lib/threatstack/client.rb', line 138

def servers(monitored = true, params = {})
  uri = "servers"
  uri += "/non-monitored" unless monitored
  response = do_request(:get, uri, params)
  Response.new(response['servers'], self, entity: :server).list
end

#severity_counts(params = {}) ⇒ Object



56
57
58
59
# File 'lib/threatstack/client.rb', line 56

def severity_counts(params = {})
  response = do_request(:get, "alerts/severity-counts", params)
  Response.new(response['severityCounts'], self, entity: :severity_count).list
end

#vulnerabilities(params = {}) ⇒ Object

CVEs ###



68
69
70
71
72
73
# File 'lib/threatstack/client.rb', line 68

def vulnerabilities(params = {})
  uri = "vulnerabilities"
  uri += "/suppressed" if params[:suppressed]
  response = do_request(:get, uri, params)
  Response.new(response['cves'], self, entity: :cve).cves
end

#vulnerability(vuln_id, params = {}) ⇒ Object

Raises:



75
76
77
78
79
# File 'lib/threatstack/client.rb', line 75

def vulnerability(vuln_id, params = {})
  raise ThreatstackError, "Must specify vulnerability id" unless vuln_id
  response = do_request(:get, "vulnerabilities/#{vuln_id}", params)
  Cve.new(response, self)
end

#vulnerability_suppressions(params = {}) ⇒ Object



105
106
107
108
# File 'lib/threatstack/client.rb', line 105

def vulnerability_suppressions(params = {})
  response = do_request(:get, "vulnerabilities/suppressions", params)
  Response.new(response['suppressions'], self, entity: :suppression).list
end