wafoo 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 389e1e059550b65a7de49ce7942d5602b8273fbb0e38c085b32103a553f8ea53
4
- data.tar.gz: 265b3fdcc17f39d2284dd3140fc97da336d90350d44127a6b28761ff803fc54b
3
+ metadata.gz: 04bbceda52de1c7aa38f36b757a193a844b9802b8191ad22b415db138a67ca16
4
+ data.tar.gz: df50354e02a1255441f08d332294d1e34c4d53f2b8a50cfe8ce1e6e6a0073ea7
5
5
  SHA512:
6
- metadata.gz: 8cfae73a5c1b9f3851a73c495df0a1fd7d498c368ff0ce39fe01ea826d60fffc5c45ff65d109acc91934cd275f2083393c43bcc6bc063c45d9c31e72e80ee3e0
7
- data.tar.gz: 308255e4c605c56fa438f52329130f25f8bac0b73c464c43b6b5bd4c9a603fa8d5751bfeeb314446cbfd9ffff03e218db30fe0e834d9786c6eea801cb9d38efd
6
+ metadata.gz: 2d2de679881fbd0702c776c5d9f37ce9c8eb4dbe08251a8a6be7643fee70ccaad19817f0c3612f8d5fc893f6eac2ec9385b30d0bd755b4d48cb681473303a843
7
+ data.tar.gz: e35f3262542c095e87f8b7d4899f96e2ea92d8a7479e2e0dccf8c8bc60b13d87268ce3434402c148a6c0ebaec4366bd4ef5e44d7039106a7a9d5feb0041e1002
data/.travis.yml CHANGED
@@ -1,5 +1,10 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ env:
4
+ global:
5
+ AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
6
+ AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7
+ AWS_REGION=ap-northeast-1
3
8
  rvm:
4
9
  - 2.5.1
5
10
  - 2.4.3
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # wafoo [![Build Status](https://travis-ci.org/inokappa/wafoo.svg?branch=master)](https://travis-ci.org/inokappa/wafoo) [![Gem Version](https://badge.fury.io/rb/wafoo.svg)](https://badge.fury.io/rb/wafoo)
2
2
 
3
+ ![](https://raw.githubusercontent.com/inokappa/wafoo/master/docs/images/teisyoku_haizen.png)
4
+
3
5
  ## これなに
4
6
 
5
- * AWS WAF の IP Sets に登録されている IP リストを操作するツールです
7
+ * AWS WAF の IP Set に登録されている IP リストを操作するツールです
6
8
  * ツッコミどころが満載です
7
9
 
8
10
  ## Install
@@ -42,7 +44,7 @@ export AWS_REGION=ap-northeast-1
42
44
  $ bundle exec wafoo list
43
45
  ```
44
46
 
45
- ### Step 2: Export IPSets details
47
+ ### Step 2: Export IPSet details
46
48
 
47
49
  ```sh
48
50
  $ bundle exec wafoo export --ip-set-id=${IPSet ID}
@@ -50,7 +52,7 @@ $ bundle exec wafoo export --ip-set-id=${IPSet ID}
50
52
 
51
53
  The IP list is exported to the current directory. (The file name is IPSet ID.)
52
54
 
53
- ### Step 3: Modify IPSets details
55
+ ### Step 3: Modify IPSet details
54
56
 
55
57
  ```sh
56
58
  $ vim ${IPSet ID}
Binary file
data/lib/wafoo.rb CHANGED
@@ -7,6 +7,7 @@ require 'terminal-table'
7
7
 
8
8
  require 'wafoo/version'
9
9
  require 'wafoo/cli'
10
+ require 'wafoo/ext'
10
11
  require 'wafoo/helper'
11
12
  require 'wafoo/run'
12
13
 
data/lib/wafoo/cli.rb CHANGED
@@ -2,6 +2,8 @@ require 'wafoo'
2
2
 
3
3
  module Wafoo
4
4
  class CLI < Thor
5
+ Awsecrets.load
6
+
5
7
  default_command :version
6
8
  class_option :profile
7
9
  class_option :region
@@ -20,19 +22,27 @@ module Wafoo
20
22
 
21
23
  desc 'export', 'Export IP address list of specified IPSet ID'
22
24
  option :ip_set_id, type: :string, aliases: '-i', desc: 'Specify IPset ID.'
23
- option :regional, type: :boolean, default: true, desc: 'Specify the option when the target is CloudFront.'
25
+ option :regional, type: :boolean, default: false, desc: 'Specify when enabling Regional.'
24
26
  def export
25
27
  wafoo = Wafoo::Run.new(options)
26
- wafoo.export_ipsets(options[:ip_set_id])
28
+ wafoo.export_ipset(options[:ip_set_id])
27
29
  end
28
30
 
29
31
  desc 'apply', 'Apply the specified IPSet ID'
30
32
  option :ip_set_id, type: :string, aliases: '-i', desc: 'Specify IPset ID.'
31
33
  option :dry_run, type: :boolean, aliases: '-d', desc: 'Dryrun.'
32
- option :regional, type: :boolean, default: true, desc: 'Specify the option when the target is CloudFront.'
34
+ option :regional, type: :boolean, default: false, desc: 'Specify when enabling Regional.'
33
35
  def apply
34
36
  wafoo = Wafoo::Run.new(options)
35
- wafoo.update_ipsets(options[:ip_set_id], options[:dry_run])
37
+ wafoo.update_ipset(options[:ip_set_id], options[:dry_run])
38
+ end
39
+
40
+ desc 'create', 'Create IPSet'
41
+ option :ip_set_name, type: :string, aliases: '-n', desc: 'Specify IPset Name.'
42
+ option :regional, type: :boolean, default: false, desc: 'Specify when enabling Regional.'
43
+ def create
44
+ wafoo = Wafoo::Run.new(options)
45
+ wafoo.create_ipset(options[:ip_set_name])
36
46
  end
37
47
  end
38
48
  end
data/lib/wafoo/ext.rb ADDED
@@ -0,0 +1 @@
1
+ require 'wafoo/ext/string'
@@ -0,0 +1,13 @@
1
+ class String
2
+ def to_ok_message
3
+ "\e[32m" + self + "\e[0m"
4
+ end
5
+
6
+ def to_error_message
7
+ "\e[31m" + self + "\e[0m"
8
+ end
9
+
10
+ def to_info_message
11
+ "\e[36m" + self + "\e[0m"
12
+ end
13
+ end
data/lib/wafoo/run.rb CHANGED
@@ -10,7 +10,7 @@ module Wafoo
10
10
  @regional = options[:regional] unless options.nil?
11
11
  end
12
12
 
13
- def read_ipsets_from_api(ip_set_id)
13
+ def read_ipset_from_api(ip_set_id)
14
14
  waf = @regional ? @waf_regional : @waf
15
15
  resp = waf.get_ip_set({
16
16
  ip_set_id: ip_set_id
@@ -24,7 +24,7 @@ module Wafoo
24
24
  ipsets
25
25
  end
26
26
 
27
- def read_ipsets_from_file(ip_set_id)
27
+ def read_ipset_from_file(ip_set_id)
28
28
  ipsets = []
29
29
  File.open(ip_set_id, 'r') do |file|
30
30
  file.read.split("\n").each do |ipset|
@@ -55,9 +55,14 @@ module Wafoo
55
55
  output_table(ip_sets)
56
56
  end
57
57
 
58
- def export_ipsets(ip_set_id)
59
- ipsets = read_ipsets_from_api(ip_set_id)
58
+ def export_ipset(ip_set_id)
60
59
  puts 'Exporting IP List...'
60
+ begin
61
+ ipsets = read_ipset_from_api(ip_set_id)
62
+ rescue => ex
63
+ puts error_print(ex.message)
64
+ exit 1
65
+ end
61
66
  ipsets.sort.each { |ipset| puts info_print(ipset) }
62
67
  File.open(ip_set_id, 'w') do |f|
63
68
  ipsets.sort.each { |ipset| f.puts(ipset) }
@@ -65,7 +70,7 @@ module Wafoo
65
70
  puts 'Exported to ' + added_print(ip_set_id)
66
71
  end
67
72
 
68
- def apply_ipsets(ipsets, ip_set_id)
73
+ def apply_ipset(ipsets, ip_set_id)
69
74
  waf = @regional ? @waf_regional : @waf
70
75
  puts 'Applying IP List...'
71
76
  change_token = waf.get_change_token.change_token
@@ -83,72 +88,50 @@ module Wafoo
83
88
  end
84
89
  end
85
90
 
91
+ def create_ipset(ip_set_name)
92
+ waf = @regional ? @waf_regional : @waf
93
+ puts 'Creating IPSet...'
94
+ change_token = waf.get_change_token.change_token
95
+ begin
96
+ waf.create_ip_set(
97
+ name: ip_set_name,
98
+ change_token: change_token,
99
+ )
100
+ puts 'Create Finished.'
101
+ exit 0
102
+ rescue => ex
103
+ puts error_print(ex.message)
104
+ exit 1
105
+ end
106
+ end
107
+
86
108
  def generate_delete_hash(ipset)
87
109
  ipset.slice!(0)
88
- # p ipset
89
- h = {
90
- action: 'DELETE',
91
- ip_set_descriptor: {
92
- type: 'IPV4',
93
- value: ipset
94
- }
95
- }
96
-
97
- # unless %w(8 16 24 33).include?(ipset.split('/').last)
98
- # ips = split_cidr(ipset)
99
- # ipsets_array = []
100
- # ips.each do |ip|
101
- # ipsets_array << {
102
- # action: 'DELETE',
103
- # ip_set_descriptor: {
104
- # type: 'IPV4',
105
- # value: ip + '/32'
106
- # }
107
- # }
108
- # end
109
- # return ipsets_array
110
- # end
111
-
112
- ipsets_hash = {
110
+ ipset_hash = {
113
111
  action: 'DELETE',
114
112
  ip_set_descriptor: {
115
113
  type: 'IPV4',
116
114
  value: ipset
117
115
  }
118
- }
119
- ipsets_hash
116
+ }
117
+ ipset_hash
120
118
  end
121
119
 
122
120
  def generate_insert_hash(ipset)
123
121
  ipset.slice!(0)
124
- # unless %w(8 16 24 33).include?(ipset.split('/').last)
125
- # ips = split_cidr(ipset)
126
- # ipsets_array = []
127
- # ips.each do |ip|
128
- # ipsets_array << {
129
- # action: 'INSERT',
130
- # ip_set_descriptor: {
131
- # type: 'IPV4',
132
- # value: ip + '/32'
133
- # }
134
- # }
135
- # end
136
- # return ipsets_array
137
- # end
138
-
139
- ipsets_hash = {
122
+ ipset_hash = {
140
123
  action: 'INSERT',
141
124
  ip_set_descriptor: {
142
125
  type: 'IPV4',
143
126
  value: ipset
144
127
  }
145
- }
146
- ipsets_hash
128
+ }
129
+ ipset_hash
147
130
  end
148
131
 
149
- def update_ipsets(ip_set_id, dry_run)
150
- _old = read_ipsets_from_api(ip_set_id).join("\n")
151
- _new = read_ipsets_from_file(ip_set_id).join("\n")
132
+ def update_ipset(ip_set_id, dry_run)
133
+ _old = read_ipset_from_api(ip_set_id).join("\n")
134
+ _new = read_ipset_from_file(ip_set_id).join("\n")
152
135
  ipsets = []
153
136
  Diffy::Diff.new(_old, _new).each do |line|
154
137
  case line
@@ -162,8 +145,8 @@ module Wafoo
162
145
  end
163
146
 
164
147
  if !dry_run and ipsets.length > 0 then
165
- apply_ipsets(ipsets.flatten, ip_set_id)
166
- export_ipsets(ip_set_id)
148
+ apply_ipset(ipsets.flatten, ip_set_id)
149
+ export_ipset(ip_set_id)
167
150
  elsif dry_run and ipsets.length > 0 then
168
151
  puts 'Above IP list will be changed.'
169
152
  exit 0
data/lib/wafoo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Wafoo
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
data/wafoo.gemspec CHANGED
@@ -26,16 +26,15 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.add_development_dependency "bundler", "~> 1.16"
30
- spec.add_development_dependency "rake", "~> 10.0"
31
- spec.add_development_dependency "rspec", "~> 3.0"
32
- spec.add_development_dependency "octorelease"
29
+ spec.add_development_dependency 'bundler', '~> 1.16'
30
+ spec.add_development_dependency 'octorelease'
31
+ spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rspec', '~> 3.0'
33
33
 
34
- spec.add_dependency 'thor'
35
34
  spec.add_dependency 'aws-sdk'
36
35
  spec.add_dependency 'awsecrets'
37
36
  spec.add_dependency 'diffy'
38
37
  spec.add_dependency 'netaddr', '1.5.1'
39
38
  spec.add_dependency 'terminal-table'
40
-
39
+ spec.add_dependency 'thor'
41
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wafoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - inokappa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-27 00:00:00.000000000 Z
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: octorelease
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,13 +67,13 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: octorelease
70
+ name: aws-sdk
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
- type: :development
76
+ type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: thor
84
+ name: awsecrets
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: aws-sdk
98
+ name: diffy
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,21 +109,21 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: awsecrets
112
+ name: netaddr
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ">="
115
+ - - '='
102
116
  - !ruby/object:Gem::Version
103
- version: '0'
117
+ version: 1.5.1
104
118
  type: :runtime
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ">="
122
+ - - '='
109
123
  - !ruby/object:Gem::Version
110
- version: '0'
124
+ version: 1.5.1
111
125
  - !ruby/object:Gem::Dependency
112
- name: diffy
126
+ name: terminal-table
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -123,21 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: netaddr
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - '='
130
- - !ruby/object:Gem::Version
131
- version: 1.5.1
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - '='
137
- - !ruby/object:Gem::Version
138
- version: 1.5.1
139
- - !ruby/object:Gem::Dependency
140
- name: terminal-table
140
+ name: thor
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -165,9 +165,12 @@ files:
165
165
  - Rakefile
166
166
  - bin/console
167
167
  - bin/setup
168
+ - docs/images/teisyoku_haizen.png
168
169
  - exe/wafoo
169
170
  - lib/wafoo.rb
170
171
  - lib/wafoo/cli.rb
172
+ - lib/wafoo/ext.rb
173
+ - lib/wafoo/ext/string.rb
171
174
  - lib/wafoo/helper.rb
172
175
  - lib/wafoo/run.rb
173
176
  - lib/wafoo/version.rb