lita-alertlogic 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ require 'json'
2
+
3
+ # Alertlogic Helper
4
+ module AlertlogicHelper
5
+ # Incidents Helper
6
+ module Incidents
7
+ # rubocop:disable LineLength
8
+ def get_incidents(customer_id)
9
+ incidents_url = "#{config.incident_api_url}/v3/incidents?customer_id=#{customer_id}&create_date=>#{(Time.now - (24 * 60 * 60)).to_i}"
10
+ params = {
11
+ customer_id: customer_id,
12
+ url: "\"#{incidents_url}\""
13
+ }
14
+ resp = api_call(params)
15
+ parse_json(resp)
16
+ end
17
+ # rubocop:enable MethodLength
18
+
19
+ def get_incident_notes(customer_id, incident_id)
20
+ incidents_url = "#{config.incident_api_url}/v2/notes?customer_id=#{customer_id}&incident_id=>#{incident_id}"
21
+ params = {
22
+ customer_id: config.customer_id,
23
+ url: incidents_url
24
+ }
25
+ resp = api_call(params)
26
+ parse_json(resp)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,121 @@
1
+ # Alertlogic Helper
2
+ module AlertlogicHelper
3
+ # Log Manager Helper
4
+ module LogManager
5
+ # rubocop:disable MethodLength
6
+ # rubocop:disable Metrics/AbcSize
7
+ def process_lm_hosts(customer_id, hosts)
8
+ headers = [
9
+ 'Host Name',
10
+ 'Host Type',
11
+ 'Host ID',
12
+ 'IP Address',
13
+ 'Host Status'
14
+ ]
15
+ data = []
16
+ tables = []
17
+ hosts_list = hosts['hosts']
18
+ reply_head = "/code Log Hosts for customer: #{customer_id} \n"
19
+
20
+ hosts_list.each do |host|
21
+ if !host['host']['metadata'].nil?
22
+ ipv4 = host['host']['metadata']['local_ipv4']
23
+ else
24
+ ipv4 = ''
25
+ end
26
+ data << [
27
+ host['host']['name'],
28
+ host['host']['type'],
29
+ host['host']['id'],
30
+ ipv4,
31
+ host['host']['status']['status']
32
+ ]
33
+ if check_msg_size?(build_table(data, headers))
34
+ tables << [data, headers]
35
+ data = []
36
+ end
37
+ end
38
+
39
+ summary = "\nTotal Sources: #{hosts['total_count']}"
40
+ if tables.length > 0
41
+ reply = [reply_head, tables, summary]
42
+ return reply
43
+ else
44
+ reply = reply_head
45
+ reply << build_table(data, headers)
46
+ reply << summary
47
+ return reply
48
+ end
49
+ end
50
+ # rubocop:enable MethodLength
51
+ # rubocop:enable Metrics/AbcSize
52
+
53
+ # rubocop:disable MethodLength
54
+ def process_lm_sources(customer_id, sources)
55
+ headers = [
56
+ 'Source Name',
57
+ 'Source Type',
58
+ 'IP Address',
59
+ 'Source ID',
60
+ 'Source Status'
61
+ ]
62
+ data = []
63
+ tables = []
64
+ sources_list = sources['sources']
65
+ reply_head = "/code Log Sources for customer: #{customer_id} \n"
66
+
67
+ sources_list.each do |source|
68
+ source.each do |type, info|
69
+ data << [
70
+ info['name'],
71
+ type,
72
+ info['metadata']['local_ipv4'],
73
+ info['id'],
74
+ info['status']['status']
75
+ ]
76
+ if check_msg_size?(build_table(data, headers))
77
+ tables << [data, headers]
78
+ data = []
79
+ end
80
+ end
81
+ end
82
+
83
+ summary = "\nTotal Sources: #{sources['total_count']}"
84
+ if tables.length > 0
85
+ reply = [reply_head, tables, summary]
86
+ return reply
87
+ else
88
+ reply = reply_head
89
+ reply << build_table(data, headers)
90
+ reply << summary
91
+ return reply
92
+ end
93
+ end
94
+ # rubocop:enable MethodLength
95
+
96
+ def process_lm_policies(customer_id, policies)
97
+ headers = [
98
+ 'Policy Type',
99
+ 'Policy Name',
100
+ 'Policy ID'
101
+ ]
102
+ data = []
103
+ policy_list = policies['policies']
104
+ reply = "/code Log Policies for customer: #{customer_id} \n"
105
+
106
+ policy_list.each do |policy|
107
+ policy.each do |type, info|
108
+ data << [
109
+ type,
110
+ info['id'],
111
+ info['name']
112
+ ]
113
+ end
114
+ end
115
+
116
+ reply << build_table(data, headers)
117
+ reply << "\nTotal Policies: #{policies['total_count']}"
118
+ reply
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,173 @@
1
+ # Alertlogic Helper
2
+ module AlertlogicHelper
3
+ # Threat Manager Helper
4
+ module ThreatManager
5
+ # rubocop:disable MethodLength
6
+ # rubocop:disable Metrics/AbcSize
7
+ def process_tm_policies(customer_id, policies)
8
+ headers = [
9
+ 'Policy ID',
10
+ 'Name',
11
+ 'Appliance Assignment',
12
+ 'Type'
13
+ ]
14
+ data = []
15
+ tables = []
16
+ reply_head = "/code Threat Policies for customer: #{customer_id} \n"
17
+
18
+ policies['policies'].each do |policy|
19
+ data << [
20
+ policy['policy']['id'],
21
+ policy['policy']['name'],
22
+ !policy['policy']['appliance_assignment'].nil? ? policy['policy']['appliance_assignment']['appliances'].join(',') : nil,
23
+ policy['policy']['type']
24
+ ]
25
+ if check_msg_size?(build_table(data, headers))
26
+ tables << [data, headers]
27
+ data = []
28
+ end
29
+ end
30
+
31
+ summary = "\nTotal Policies: #{policies['total_count']}"
32
+ if tables.length > 0
33
+ reply = [reply_head, tables, summary]
34
+ return reply
35
+ else
36
+ reply = reply_head
37
+ reply << build_table(data, headers)
38
+ reply << summary
39
+ end
40
+ end
41
+ # rubocop:enable MethodLength
42
+ # rubocop:enable Metrics/AbcSize
43
+
44
+ # rubocop:disable MethodLength
45
+ # rubocop:disable Metrics/AbcSize
46
+ def process_tm_hosts(customer_id, hosts)
47
+ headers = [
48
+ 'Host Name',
49
+ 'Host ID',
50
+ 'Type',
51
+ 'IP Address',
52
+ 'Status'
53
+ ]
54
+ data = []
55
+ tables = []
56
+ reply_head = "/code Threat Hosts for customer: #{customer_id} \n"
57
+
58
+ hosts['hosts'].each do |host|
59
+ if !host['host']['metadata'].nil?
60
+ ipv4 = host['host']['metadata']['local_ipv4']
61
+ else
62
+ ipv4 = ''
63
+ end
64
+ data << [
65
+ host['host']['name'],
66
+ host['host']['id'],
67
+ host['host']['type'],
68
+ ipv4,
69
+ host['host']['status']['status']
70
+ ]
71
+ if check_msg_size?(build_table(data, headers))
72
+ tables << [data, headers]
73
+ data = []
74
+ end
75
+ end
76
+
77
+ summary = "\nTotal Hosts: #{hosts['total_count']}"
78
+ if tables.length > 0
79
+ reply = [reply_head, tables, summary]
80
+ return reply
81
+ else
82
+ reply = reply_head
83
+ reply << build_table(data, headers)
84
+ reply << summary
85
+ end
86
+ end
87
+ # rubocop:enable Metrics/AbcSize
88
+ # rubocop:enable MethodLength
89
+
90
+ # rubocop:disable Metrics/AbcSize
91
+ def process_protectedhosts(customer_id, phosts)
92
+ phost_list = phosts['protectedhosts']
93
+ reply = "/code Protectedhosts Status for customer: #{customer_id} \n"
94
+ ok = 0
95
+ error = 0
96
+ new = 0
97
+ offline = 0
98
+ total = 0
99
+ other = 0
100
+ headers = %w(OK Error New Offline Unknown)
101
+ data = []
102
+
103
+ phost_list.each do |phost|
104
+ status = phost['protectedhost']['status']['status'].strip
105
+ ok += 1 if status == 'ok'
106
+ error += 1 if status == 'error'
107
+ new += 1 if status == 'new'
108
+ offline += 1 if status == 'offline'
109
+ other += 1 unless %w(ok error new offline).include? status
110
+ total += 1
111
+ end
112
+
113
+ data << [ok, error, new, offline, other]
114
+ reply << build_table(data, headers)
115
+ reply << "\nTotal Protected Hosts: #{total}"
116
+ end
117
+ # rubocop:enable Metrics/AbcSize
118
+
119
+ def search_phost_by_name(key, search_term, phosts)
120
+ phosts['protectedhosts'].each do |phost|
121
+ if search?(key, search_term, phost['protectedhost'])
122
+ return JSON.pretty_generate(phost['protectedhost'])
123
+ end
124
+ end
125
+ end
126
+
127
+ # rubocop:disable MethodLength
128
+ # rubocop:disable Metrics/AbcSize
129
+ # rubocop:disable Metrics/PerceivedComplexity
130
+ def process_protectedhosts_list(customer_id, phosts)
131
+ phost_list = phosts['protectedhosts']
132
+ reply_head = "/code Protectedhosts Status for customer: #{customer_id} \n"
133
+ headers = %w(Name VPC Status)
134
+ data = []
135
+ tables = []
136
+ total = 0
137
+ phost_list.each do |phost|
138
+ total += 1
139
+ if phost['protectedhost'].key?('metadata')
140
+ if phost['protectedhost']['metadata'].key?('ec2_vpc')
141
+ vpc = phost['protectedhost']['metadata']['ec2_vpc'].join(',')
142
+ else
143
+ vpc = 'No VPC found'
144
+ end
145
+ else
146
+ vpc = 'No metadata was found'
147
+ end
148
+ data << [
149
+ phost['protectedhost']['name'].strip,
150
+ vpc,
151
+ phost['protectedhost']['status']['status'].strip
152
+ ]
153
+ if check_msg_size?(build_table(data, headers))
154
+ tables << [data, headers]
155
+ data = []
156
+ end
157
+ end
158
+
159
+ summary = "/code Total Protected Hosts: #{total}"
160
+ if tables.length > 0
161
+ reply = [reply_head, tables, summary]
162
+ reply
163
+ else
164
+ reply = reply_head
165
+ reply << build_table(data, headers)
166
+ reply << summary
167
+ end
168
+ end
169
+ # rubocop:enable MethodLength
170
+ # rubocop:enable Metrics/AbcSize
171
+ # rubocop:enable Metrics/PerceivedComplexity
172
+ end
173
+ end
@@ -0,0 +1,20 @@
1
+ require 'lita'
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join('..', '..', 'locales', '*.yml'), __FILE__
5
+ )]
6
+
7
+ require 'alertlogic_helper/api'
8
+ require 'alertlogic_helper/agents'
9
+ require 'alertlogic_helper/common'
10
+ require 'alertlogic_helper/customer'
11
+ require 'alertlogic_helper/incidents'
12
+ require 'alertlogic_helper/appliances'
13
+ require 'alertlogic_helper/log_manager'
14
+ require 'alertlogic_helper/threat_manager'
15
+
16
+ require 'lita/handlers/alertlogic_customer'
17
+ require 'lita/handlers/alertlogic_incidents'
18
+ require 'lita/handlers/alertlogic_monitoring'
19
+ require 'lita/handlers/alertlogic_log_manager'
20
+ require 'lita/handlers/alertlogic_threat_manager'
@@ -0,0 +1,60 @@
1
+ require 'lita'
2
+ # Lita Module
3
+ module Lita
4
+ # Plugin type Handler
5
+ module Handlers
6
+ # Alert Logic Customer Routes
7
+ class AlertlogicCustomer < Handler
8
+ config :api_auth
9
+ config :customer_api_url
10
+ config :customer_id
11
+ config :http_options, required: false, type: Hash, default: {}
12
+
13
+ namespace 'Alertlogic'
14
+
15
+ include ::AlertlogicHelper::Api
16
+ include ::AlertlogicHelper::Common
17
+ include ::AlertlogicHelper::Customer
18
+
19
+ # Route definitions
20
+ # Customer info route
21
+ route(
22
+ /a(?:lertlogic)? customerinfo( (.+))?/i,
23
+ :customer_info,
24
+ help: {
25
+ t('help.customerinfo.syntax') => t('help.customerinfo.desc')
26
+ }
27
+ )
28
+
29
+ # Customer Info Definition
30
+ def customer_info(response)
31
+ customer = response.match_data[1]
32
+ return response.reply(t('validation.customer_id')) if customer.nil?
33
+ response.reply(t('warn.standby'))
34
+
35
+ customers = []
36
+ customer_id = process_customer_id(customer.strip)
37
+
38
+ if customer_id.is_a? Array
39
+ customer_id.each do |cid|
40
+ params = {
41
+ customer_id: cid,
42
+ type: 'customer'
43
+ }
44
+ customers << api_call(params)
45
+ end
46
+ else
47
+ params = {
48
+ customer_id: customer_id,
49
+ type: 'customer'
50
+ }
51
+ customers = api_call(params)
52
+ end
53
+
54
+ reply_text = process_customers(customers)
55
+ response.reply(reply_text.to_s)
56
+ end
57
+ end
58
+ Lita.register_handler(AlertlogicCustomer)
59
+ end
60
+ end
@@ -0,0 +1,43 @@
1
+ require 'lita'
2
+ # Lita Module
3
+ module Lita
4
+ # Plugin type Handler
5
+ module Handlers
6
+ # Alert Logic Incident routes
7
+ class AlertlogicIncidents < Handler
8
+ config :api_auth
9
+ config :lm_api_url
10
+ config :tm_api_url
11
+ config :customer_api_url
12
+ config :incident_api_url
13
+ config :customer_id
14
+ config :http_options, required: false, type: Hash, default: {}
15
+
16
+ namespace 'Alertlogic'
17
+
18
+ include ::AlertlogicHelper::Api
19
+ include ::AlertlogicHelper::Common
20
+ include ::AlertlogicHelper::Customer
21
+ include ::AlertlogicHelper::Incidents
22
+
23
+ # Route definitions
24
+ # Incidents list route
25
+ route(
26
+ /a(?:lertlogic)? incidents( (.+))?/i,
27
+ :incidents_list,
28
+ help: {
29
+ t('help.incidents.syntax') => t('help.incidents.desc')
30
+ }
31
+ )
32
+
33
+ # Customer Info Definition
34
+ def incidents_list(response)
35
+ customer = response.match_data[1]
36
+ return response.reply(t('validation.customer_id')) if customer.nil?
37
+ customer_id = process_customer_id(customer.strip)
38
+ response.reply get_incidents(customer_id)
39
+ end
40
+ end
41
+ Lita.register_handler(AlertlogicIncidents)
42
+ end
43
+ end