ronin-web 0.3.0.rc1 → 1.0.0.beta2
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 +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +31 -0
- data/.gitignore +13 -0
- data/.mailmap +1 -0
- data/.ruby-version +1 -0
- data/COPYING.txt +3 -3
- data/ChangeLog.md +115 -70
- data/Gemfile +42 -37
- data/README.md +160 -145
- data/Rakefile +12 -3
- data/bin/ronin-web +9 -17
- data/data/new/nokogiri.rb.erb +12 -0
- data/data/new/server.rb.erb +22 -0
- data/data/new/spider.rb.erb +26 -0
- data/data/new/webapp/.gitignore +15 -0
- data/data/new/webapp/.ruby-version.erb +1 -0
- data/data/new/webapp/Dockerfile.erb +11 -0
- data/data/new/webapp/Gemfile +6 -0
- data/data/new/webapp/app.rb.erb +15 -0
- data/data/new/webapp/config.ru +4 -0
- data/data/new/webapp/docker-compose.yml.erb +9 -0
- data/gemspec.yml +38 -16
- data/lib/ronin/web/cli/command.rb +36 -0
- data/lib/ronin/web/cli/commands/diff.rb +106 -0
- data/lib/ronin/web/cli/commands/html.rb +174 -0
- data/lib/ronin/web/cli/commands/irb.rb +56 -0
- data/lib/ronin/web/cli/commands/new/nokogiri.rb +85 -0
- data/lib/ronin/web/cli/commands/new/server.rb +96 -0
- data/lib/ronin/web/cli/commands/new/spider.rb +315 -0
- data/lib/ronin/web/cli/commands/new/webapp.rb +123 -0
- data/lib/ronin/web/cli/commands/new.rb +64 -0
- data/lib/ronin/web/cli/commands/reverse_proxy.rb +215 -0
- data/lib/ronin/web/cli/commands/server.rb +155 -0
- data/lib/ronin/web/cli/commands/spider.rb +822 -0
- data/lib/ronin/web/cli/ruby_shell.rb +50 -0
- data/lib/ronin/web/cli.rb +49 -0
- data/lib/ronin/web/html.rb +85 -0
- data/lib/ronin/web/mechanize.rb +34 -36
- data/lib/ronin/web/root.rb +27 -0
- data/lib/ronin/web/version.rb +7 -10
- data/lib/ronin/web/xml.rb +85 -0
- data/lib/ronin/web.rb +372 -13
- data/man/ronin-web-diff.1 +41 -0
- data/man/ronin-web-diff.1.md +30 -0
- data/man/ronin-web-html.1 +89 -0
- data/man/ronin-web-html.1.md +66 -0
- data/man/ronin-web-irb.1 +31 -0
- data/man/ronin-web-irb.1.md +22 -0
- data/man/ronin-web-new-nokogiri.1 +41 -0
- data/man/ronin-web-new-nokogiri.1.md +30 -0
- data/man/ronin-web-new-server.1 +45 -0
- data/man/ronin-web-new-server.1.md +33 -0
- data/man/ronin-web-new-spider.1 +173 -0
- data/man/ronin-web-new-spider.1.md +129 -0
- data/man/ronin-web-new-webapp.1 +53 -0
- data/man/ronin-web-new-webapp.1.md +39 -0
- data/man/ronin-web-new.1 +59 -0
- data/man/ronin-web-new.1.md +44 -0
- data/man/ronin-web-reverse-proxy.1 +63 -0
- data/man/ronin-web-reverse-proxy.1.md +47 -0
- data/man/ronin-web-server.1 +59 -0
- data/man/ronin-web-server.1.md +43 -0
- data/man/ronin-web-spider.1 +225 -0
- data/man/ronin-web-spider.1.md +168 -0
- data/man/ronin-web.1 +41 -0
- data/man/ronin-web.1.md +30 -0
- data/ronin-web.gemspec +39 -109
- data/spec/cli/ruby_shell_spec.rb +14 -0
- data/spec/html_spec.rb +43 -0
- data/spec/mechanize_spec.rb +72 -0
- data/spec/spec_helper.rb +5 -3
- data/spec/web_spec.rb +97 -0
- data/spec/xml_spec.rb +42 -0
- metadata +236 -224
- data/.gemtest +0 -0
- data/data/ronin/web/user_agents.yml +0 -247
- data/lib/ronin/network/mixins/web.rb +0 -258
- data/lib/ronin/web/config.rb +0 -34
- data/lib/ronin/web/extensions/nokogiri/xml/attr.rb +0 -47
- data/lib/ronin/web/extensions/nokogiri/xml/document.rb +0 -48
- data/lib/ronin/web/extensions/nokogiri/xml/element.rb +0 -57
- data/lib/ronin/web/extensions/nokogiri/xml/node.rb +0 -86
- data/lib/ronin/web/extensions/nokogiri/xml/text.rb +0 -47
- data/lib/ronin/web/extensions/nokogiri/xml.rb +0 -27
- data/lib/ronin/web/extensions/nokogiri.rb +0 -23
- data/lib/ronin/web/extensions.rb +0 -23
- data/lib/ronin/web/middleware/base.rb +0 -144
- data/lib/ronin/web/middleware/directories.rb +0 -179
- data/lib/ronin/web/middleware/files.rb +0 -144
- data/lib/ronin/web/middleware/filters/campaign_filter.rb +0 -77
- data/lib/ronin/web/middleware/filters/ip_filter.rb +0 -73
- data/lib/ronin/web/middleware/filters/path_filter.rb +0 -73
- data/lib/ronin/web/middleware/filters/referer_filter.rb +0 -71
- data/lib/ronin/web/middleware/filters/user_agent_filter.rb +0 -71
- data/lib/ronin/web/middleware/filters/vhost_filter.rb +0 -71
- data/lib/ronin/web/middleware/filters.rb +0 -28
- data/lib/ronin/web/middleware/helpers.rb +0 -145
- data/lib/ronin/web/middleware/proxy.rb +0 -265
- data/lib/ronin/web/middleware/proxy_request.rb +0 -262
- data/lib/ronin/web/middleware/request.rb +0 -79
- data/lib/ronin/web/middleware/response.rb +0 -33
- data/lib/ronin/web/middleware/router.rb +0 -167
- data/lib/ronin/web/middleware/rule.rb +0 -103
- data/lib/ronin/web/middleware.rb +0 -27
- data/lib/ronin/web/proxy/app.rb +0 -32
- data/lib/ronin/web/proxy/base.rb +0 -46
- data/lib/ronin/web/proxy/web.rb +0 -46
- data/lib/ronin/web/proxy.rb +0 -25
- data/lib/ronin/web/server/app.rb +0 -32
- data/lib/ronin/web/server/base.rb +0 -461
- data/lib/ronin/web/server/web.rb +0 -66
- data/lib/ronin/web/server.rb +0 -25
- data/lib/ronin/web/spider.rb +0 -120
- data/lib/ronin/web/user_agents.rb +0 -196
- data/lib/ronin/web/web.rb +0 -560
- data/spec/helpers/output.rb +0 -3
- data/spec/web/extensions/nokogiri_spec.rb +0 -38
- data/spec/web/helpers/rack_app.rb +0 -24
- data/spec/web/helpers/root/test1/index.html +0 -1
- data/spec/web/helpers/root/test1/test1.txt +0 -1
- data/spec/web/helpers/root/test1.txt +0 -1
- data/spec/web/helpers/root/test2/test2.txt +0 -1
- data/spec/web/helpers/root/test2.txt +0 -1
- data/spec/web/helpers/root/test3/test3.txt +0 -1
- data/spec/web/helpers/root/test3.txt +0 -1
- data/spec/web/helpers/root.rb +0 -15
- data/spec/web/mechanize_spec.rb +0 -62
- data/spec/web/middleware/directories_spec.rb +0 -86
- data/spec/web/middleware/files_spec.rb +0 -57
- data/spec/web/middleware/filters/campaign_filter_spec.rb +0 -30
- data/spec/web/middleware/filters/ip_filter_spec.rb +0 -25
- data/spec/web/middleware/filters/path_filter_spec.rb +0 -29
- data/spec/web/middleware/filters/referer_filter_spec.rb +0 -25
- data/spec/web/middleware/filters/user_agent_filter_spec.rb +0 -25
- data/spec/web/middleware/filters/vhost_filter_spec.rb +0 -23
- data/spec/web/middleware/proxy_spec.rb +0 -67
- data/spec/web/middleware/response_spec.rb +0 -20
- data/spec/web/middleware/router_spec.rb +0 -65
- data/spec/web/middleware/rule_spec.rb +0 -37
- data/spec/web/proxy/base_spec.rb +0 -8
- data/spec/web/server/base_spec.rb +0 -77
- data/spec/web/server/classes/public1/static1.txt +0 -1
- data/spec/web/server/classes/public2/static2.txt +0 -1
- data/spec/web/server/classes/sub_app.rb +0 -13
- data/spec/web/server/classes/test_app.rb +0 -20
- data/spec/web/user_agents_spec.rb +0 -56
- data/spec/web/web_spec.rb +0 -101
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-web is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-web is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with ronin-web. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/web/cli/command'
|
|
20
|
+
require 'ronin/web/root'
|
|
21
|
+
|
|
22
|
+
require 'ronin/core/cli/generator'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Web
|
|
26
|
+
class CLI
|
|
27
|
+
module Commands
|
|
28
|
+
class New < Command
|
|
29
|
+
#
|
|
30
|
+
# Creates a new [ronin-web-spider] script.
|
|
31
|
+
#
|
|
32
|
+
# [ronin-web-spider]: https://github.com/ronin-rb/ronin-web-spider#readme
|
|
33
|
+
#
|
|
34
|
+
# ## Usage
|
|
35
|
+
#
|
|
36
|
+
# ronin-web spider [options] {--host[=HOST] | --domain[=DOMAIN] | --site[=URL]} FILE
|
|
37
|
+
#
|
|
38
|
+
# ## Options
|
|
39
|
+
#
|
|
40
|
+
# --host[=[HOST]] Spiders a host
|
|
41
|
+
# --domain[=[DOMAIN]] Spiders a domain
|
|
42
|
+
# --site[=[URL]] Spiders a site
|
|
43
|
+
# --every-link Adds a callback for every link
|
|
44
|
+
# --every-url Adds a callback for every URL
|
|
45
|
+
# --every-failed-url Adds a callback for every failed URL
|
|
46
|
+
# --every-url-like /REGEXP/ Adds a callback for every URL that matches the regexp
|
|
47
|
+
# --all-headers Adds a callback for all HTTP Headers
|
|
48
|
+
# --every-page Adds a callback for every page
|
|
49
|
+
# --every-ok-page Adds a callback for every HTTP 200 page
|
|
50
|
+
# --every-redirect-page Adds a callback for every redirect page
|
|
51
|
+
# --every-timedout-page Adds a callback for every timedout page
|
|
52
|
+
# --every-bad-request-page Adds a callback for every bad request page
|
|
53
|
+
# --every-unauthorized-page Adds a callback for every unauthorized page
|
|
54
|
+
# --every-forbidden-page Adds a callback for every forbidden page
|
|
55
|
+
# --every-missing-page Adds a callback for every missing page
|
|
56
|
+
# --every-internal-server-error-page
|
|
57
|
+
# Adds a callback for every internal server error page
|
|
58
|
+
# --every-txt-page Adds a callback for every TXT page
|
|
59
|
+
# --every-html-page Adds a callback for every HTML page
|
|
60
|
+
# --every-xml-page Adds a callback for every XML page
|
|
61
|
+
# --every-xsl-page Adds a callback for every XSL page
|
|
62
|
+
# --every-javascript-page Adds a callback for every JavaScript page
|
|
63
|
+
# --every-css-page Adds a callback for every CSS page
|
|
64
|
+
# --every-rss-page Adds a callback for every RSS page
|
|
65
|
+
# --every-atom-page Adds a callback for every Atom page
|
|
66
|
+
# --every-ms-word-page Adds a callback for every MS Wod page
|
|
67
|
+
# --every-pdf-page Adds a callback for every PDF page
|
|
68
|
+
# --every-zip-page Adds a callback for every ZIP page
|
|
69
|
+
# --every-doc Adds a callback for every HTML/XML document
|
|
70
|
+
# --every-html-doc Adds a callback for every HTML document
|
|
71
|
+
# --every-xml-doc Adds a callback for every XML document
|
|
72
|
+
# --every-xsl-doc Adds a callback for every XSL document
|
|
73
|
+
# --every-rss-doc Adds a callback for every RSS document
|
|
74
|
+
# --every-atom-doc Adds a callback for every Atom document
|
|
75
|
+
# -h, --help Print help information
|
|
76
|
+
#
|
|
77
|
+
# ## Arguments
|
|
78
|
+
#
|
|
79
|
+
# FILE The file to create
|
|
80
|
+
#
|
|
81
|
+
class Spider < Command
|
|
82
|
+
|
|
83
|
+
include Core::CLI::Generator
|
|
84
|
+
|
|
85
|
+
template_dir File.join(ROOT,'data','new')
|
|
86
|
+
|
|
87
|
+
usage '[options] {--host[=HOST] | --domain[=DOMAIN] | --site[=URL]} FILE'
|
|
88
|
+
|
|
89
|
+
option :host, equals: true,
|
|
90
|
+
value: {
|
|
91
|
+
type: String,
|
|
92
|
+
usage: 'HOST',
|
|
93
|
+
required: false
|
|
94
|
+
},
|
|
95
|
+
desc: 'Spiders a host' do |value|
|
|
96
|
+
@entry_point_method = :host
|
|
97
|
+
@entry_point_argument = value
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
option :domain, equals: true,
|
|
101
|
+
value: {
|
|
102
|
+
type: String,
|
|
103
|
+
usage: 'DOMAIN',
|
|
104
|
+
required: false
|
|
105
|
+
},
|
|
106
|
+
desc: 'Spiders a domain' do |value|
|
|
107
|
+
@entry_point_method = :domain
|
|
108
|
+
@entry_point_argument = value
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
option :site, equals: true,
|
|
113
|
+
value: {
|
|
114
|
+
type: String,
|
|
115
|
+
usage: 'URL',
|
|
116
|
+
required: false
|
|
117
|
+
},
|
|
118
|
+
desc: 'Spiders a site' do |value|
|
|
119
|
+
@entry_point_method = :site
|
|
120
|
+
@entry_point_argument = value
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
option :every_link, desc: 'Adds a callback for every link' do
|
|
124
|
+
@callbacks << [:every_link, [], :link]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
option :every_url, desc: 'Adds a callback for every URL' do
|
|
128
|
+
@callbacks << [:every_url, [], :url]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
option :every_failed_url, desc: 'Adds a callback for every failed URL' do
|
|
132
|
+
@callbacks << [:every_failed_url, [], :url]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
option :every_url_like, value: {
|
|
136
|
+
type: Regexp,
|
|
137
|
+
usage: '/REGEXP/'
|
|
138
|
+
},
|
|
139
|
+
desc: 'Adds a callback for every URL that matches the regexp' do |regexp|
|
|
140
|
+
@callbacks << [:every_url_like, [regexp], :url]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
option :all_headers, desc: 'Adds a callback for all HTTP Headers' do
|
|
144
|
+
@callbacks << [:all_headers, [], :headers]
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
option :every_page, desc: 'Adds a callback for every page' do
|
|
148
|
+
@callbacks << [:every_page, [], :page]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
option :every_ok_page, desc: 'Adds a callback for every HTTP 200 page' do
|
|
152
|
+
@callbacks << [:every_ok_page, [], :page]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
option :every_redirect_page, desc: 'Adds a callback for every redirect page' do
|
|
156
|
+
@callbacks << [:every_redirect_page, [], :page]
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
option :every_timedout_page, desc: 'Adds a callback for every timedout page' do
|
|
160
|
+
@callbacks << [:every_timedout_page, [], :page]
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
option :every_bad_request_page, desc: 'Adds a callback for every bad request page' do
|
|
164
|
+
@callbacks << [:every_bad_request_page, [], :page]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
option :every_unauthorized_page, desc: 'Adds a callback for every unauthorized page' do
|
|
168
|
+
@callbacks << [:every_unauthorized_page, [], :page]
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
option :every_forbidden_page, desc: 'Adds a callback for every forbidden page' do
|
|
172
|
+
@callbacks << [:every_forbidden_page, [], :page]
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
option :every_missing_page, desc: 'Adds a callback for every missing page' do
|
|
176
|
+
@callbacks << [:every_missing_page, [], :page]
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
option :every_internal_server_error_page, desc: 'Adds a callback for every internal server error page' do
|
|
180
|
+
@callbacks << [:every_internal_server_error_page, [], :page]
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
option :every_txt_page, desc: 'Adds a callback for every TXT page' do
|
|
184
|
+
@callbacks << [:every_txt_page, [], :page]
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
option :every_html_page, desc: 'Adds a callback for every HTML page' do
|
|
188
|
+
@callbacks << [:every_html_page, [], :page]
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
option :every_xml_page, desc: 'Adds a callback for every XML page' do
|
|
192
|
+
@callbacks << [:every_xml_page, [], :page]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
option :every_xsl_page, desc: 'Adds a callback for every XSL page' do
|
|
196
|
+
@callbacks << [:every_xsl_page, [], :page]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
option :every_javascript_page, desc: 'Adds a callback for every JavaScript page' do
|
|
200
|
+
@callbacks << [:every_javascript_page, [], :page]
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
option :every_css_page, desc: 'Adds a callback for every CSS page' do
|
|
204
|
+
@callbacks << [:every_css_page, [], :page]
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
option :every_rss_page, desc: 'Adds a callback for every RSS page' do
|
|
208
|
+
@callbacks << [:every_rss_page, [], :page]
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
option :every_atom_page, desc: 'Adds a callback for every Atom page' do
|
|
212
|
+
@callbacks << [:every_atom_page, [], :page]
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
option :every_ms_word_page, desc: 'Adds a callback for every MS Wod page' do
|
|
216
|
+
@callbacks << [:every_ms_wod_page, [], :page]
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
option :every_pdf_page, desc: 'Adds a callback for every PDF page' do
|
|
220
|
+
@callbacks << [:every_pdf_page, [], :page]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
option :every_zip_page, desc: 'Adds a callback for every ZIP page' do
|
|
224
|
+
@callbacks << [:every_zip_page, [], :page]
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
option :every_doc, desc: 'Adds a callback for every HTML/XML document' do
|
|
228
|
+
@callbacks << [:every_doc, [], :doc]
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
option :every_html_doc, desc: 'Adds a callback for every HTML document' do
|
|
232
|
+
@callbacks << [:every_html_doc, [], :doc]
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
option :every_xml_doc, desc: 'Adds a callback for every XML document' do
|
|
236
|
+
@callbacks << [:every_xml_doc, [], :doc]
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
option :every_xsl_doc, desc: 'Adds a callback for every XSL document' do
|
|
240
|
+
@callbacks << [:every_xsl_doc, [], :doc]
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
option :every_rss_doc, desc: 'Adds a callback for every RSS document' do
|
|
244
|
+
@callbacks << [:every_rss_doc, [], :doc]
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
option :every_atom_doc, desc: 'Adds a callback for every Atom document' do
|
|
248
|
+
@callbacks << [:every_atom_doc, [], :doc]
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
argument :file, required: true,
|
|
252
|
+
desc: 'The file to create'
|
|
253
|
+
|
|
254
|
+
description 'Creates a new ronin-web-spider script'
|
|
255
|
+
|
|
256
|
+
man_page 'ronin-web-new-spider.1'
|
|
257
|
+
|
|
258
|
+
# The entry point method for the web spider agent.
|
|
259
|
+
#
|
|
260
|
+
# @return [Symbol, nil]
|
|
261
|
+
attr_reader :entry_point_method
|
|
262
|
+
|
|
263
|
+
# The callbacks for the web spider agent.
|
|
264
|
+
#
|
|
265
|
+
# @return [Array<(Symbol, Array, Symbol)>]
|
|
266
|
+
attr_reader :callbacks
|
|
267
|
+
|
|
268
|
+
#
|
|
269
|
+
# Initializes the command.
|
|
270
|
+
#
|
|
271
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
272
|
+
# Additional keyword arguments for the command.
|
|
273
|
+
#
|
|
274
|
+
def initialize(**kwargs)
|
|
275
|
+
super(**kwargs)
|
|
276
|
+
|
|
277
|
+
@callbacks = []
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
#
|
|
281
|
+
# Runs the `ronin-web new spider` command.
|
|
282
|
+
#
|
|
283
|
+
# @param [String] path
|
|
284
|
+
# The path to the new script file to create.
|
|
285
|
+
#
|
|
286
|
+
def run(path)
|
|
287
|
+
unless @entry_point_method
|
|
288
|
+
print_error "must specify --host, --domain, or --site"
|
|
289
|
+
exit(-1)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
erb 'spider.rb.erb', path
|
|
293
|
+
chmod '+x', path
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
#
|
|
297
|
+
# The entry method's argument.
|
|
298
|
+
#
|
|
299
|
+
# @return [String]
|
|
300
|
+
# The escaped entry point method argument or `ARGV[0]`.
|
|
301
|
+
#
|
|
302
|
+
def entry_point_argument
|
|
303
|
+
if @entry_point_argument
|
|
304
|
+
@entry_point_argument.inspect
|
|
305
|
+
else
|
|
306
|
+
'ARGV[0]'
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-web is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-web is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with ronin-web. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/web/cli/command'
|
|
20
|
+
require 'ronin/web/root'
|
|
21
|
+
|
|
22
|
+
require 'ronin/core/cli/generator'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Web
|
|
26
|
+
class CLI
|
|
27
|
+
module Commands
|
|
28
|
+
class New < Command
|
|
29
|
+
#
|
|
30
|
+
# Generate a new ronin-web-server based webapp.
|
|
31
|
+
#
|
|
32
|
+
# ## Usage
|
|
33
|
+
#
|
|
34
|
+
# ronin-web new webapp [options] DIR
|
|
35
|
+
#
|
|
36
|
+
# ## Options
|
|
37
|
+
#
|
|
38
|
+
# --port PORT The port the webpp will listen on by default (Default: 3000)
|
|
39
|
+
# --ruby-version VERSION The desired ruby version for the project (Default: 3.1.3)
|
|
40
|
+
# --git Initializes a git repo
|
|
41
|
+
# -D, --dockerfile Adds a Dockerfile to the new project
|
|
42
|
+
# -h, --help Print help information
|
|
43
|
+
#
|
|
44
|
+
# ## Arguments
|
|
45
|
+
#
|
|
46
|
+
# DIR The directory to create
|
|
47
|
+
#
|
|
48
|
+
class Webapp < Command
|
|
49
|
+
|
|
50
|
+
include Core::CLI::Generator
|
|
51
|
+
|
|
52
|
+
template_dir File.join(ROOT,'data','new','webapp')
|
|
53
|
+
|
|
54
|
+
usage '[options] DIR'
|
|
55
|
+
|
|
56
|
+
option :port, value: {
|
|
57
|
+
type: Integer,
|
|
58
|
+
usage: 'PORT',
|
|
59
|
+
default: 3000
|
|
60
|
+
},
|
|
61
|
+
desc: 'The port the webpp will listen on by default'
|
|
62
|
+
|
|
63
|
+
option :ruby_version, value: {
|
|
64
|
+
type: String,
|
|
65
|
+
usage: 'VERSION',
|
|
66
|
+
default: RUBY_VERSION
|
|
67
|
+
},
|
|
68
|
+
desc: 'The desired ruby version for the project'
|
|
69
|
+
|
|
70
|
+
option :git, desc: 'Initializes a git repo'
|
|
71
|
+
|
|
72
|
+
option :dockerfile, short: '-D',
|
|
73
|
+
desc: 'Adds a Dockerfile to the new project'
|
|
74
|
+
|
|
75
|
+
argument :dir, required: true,
|
|
76
|
+
desc: 'The directory to create'
|
|
77
|
+
|
|
78
|
+
description 'Generate a new ronin-web-server based webapp'
|
|
79
|
+
|
|
80
|
+
man_page 'ronin-web-new-webapp.1'
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# Runs the `ronin-web new webapp` command.
|
|
84
|
+
#
|
|
85
|
+
# @param [String] path
|
|
86
|
+
# The path to the new project directory to create.
|
|
87
|
+
#
|
|
88
|
+
def run(path)
|
|
89
|
+
@ruby_version = options[:ruby_version]
|
|
90
|
+
@port = options[:port]
|
|
91
|
+
|
|
92
|
+
mkdir path
|
|
93
|
+
mkdir File.join(path,'lib')
|
|
94
|
+
mkdir File.join(path,'views')
|
|
95
|
+
mkdir File.join(path,'public')
|
|
96
|
+
|
|
97
|
+
erb '.ruby-version.erb', File.join(path,'.ruby-version')
|
|
98
|
+
cp 'Gemfile', path
|
|
99
|
+
erb 'app.rb.erb', File.join(path,'app.rb')
|
|
100
|
+
cp 'config.ru', path
|
|
101
|
+
|
|
102
|
+
if options[:dockerfile]
|
|
103
|
+
erb 'Dockerfile.erb', File.join(path,'Dockerfile')
|
|
104
|
+
erb 'docker-compose.yml.erb', File.join(path,'docker-compose.yml')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
if options[:git]
|
|
108
|
+
cp '.gitignore', path
|
|
109
|
+
|
|
110
|
+
Dir.chdir(path) do
|
|
111
|
+
sh 'git', 'init', '-q', '-b', 'main'
|
|
112
|
+
sh 'git', 'add', '.'
|
|
113
|
+
sh 'git', 'commit', '-q', '-m', 'Initial commit.'
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-web is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-web is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with ronin-web. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/web/cli/command'
|
|
20
|
+
require 'command_kit/commands/auto_load'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Web
|
|
24
|
+
class CLI
|
|
25
|
+
module Commands
|
|
26
|
+
#
|
|
27
|
+
# Creates new projects or scripts.
|
|
28
|
+
#
|
|
29
|
+
# ## Usage
|
|
30
|
+
#
|
|
31
|
+
# ronin-web new {nokogiri | server | spider | webapp}
|
|
32
|
+
#
|
|
33
|
+
# ## Options
|
|
34
|
+
#
|
|
35
|
+
# -h, --help Print help information
|
|
36
|
+
#
|
|
37
|
+
# ## Arguments
|
|
38
|
+
#
|
|
39
|
+
#
|
|
40
|
+
# [COMMAND] The command name to run
|
|
41
|
+
# [ARGS ...] Additional arguments for the command
|
|
42
|
+
#
|
|
43
|
+
# ## Commands
|
|
44
|
+
#
|
|
45
|
+
# help
|
|
46
|
+
# nokogiri
|
|
47
|
+
# server
|
|
48
|
+
# spider
|
|
49
|
+
# webapp
|
|
50
|
+
#
|
|
51
|
+
class New < Command
|
|
52
|
+
|
|
53
|
+
include CommandKit::Commands::AutoLoad.new(
|
|
54
|
+
dir: "#{__dir__}/new",
|
|
55
|
+
namespace: "#{self}"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
man_page 'ronin-web-new.1'
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|