jetpack 0.1.0 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/LICENSE +14 -0
- data/README.markdown +35 -6
- data/Rakefile +14 -3
- data/bin/jetpack +39 -6
- data/bin_files/launch.erb +16 -0
- data/gems/bundler-1.1.0.gem +0 -0
- data/jetpack.gemspec +3 -3
- data/jetty_files/etc/fake.crt +31 -0
- data/jetty_files/etc/fake.jceks +0 -0
- data/jetty_files/etc/fake.key +51 -0
- data/jetty_files/etc/fake.pem +89 -0
- data/jetty_files/etc/jetty.xml.erb +53 -25
- data/jetty_files/jetty-init.erb +4 -0
- data/lib/jetpack/settings.rb +24 -10
- data/script/ci +1 -1
- data/spec/bundler_spec.rb +1 -1
- data/spec/filter_spec.rb +59 -0
- data/spec/rack_spec.rb +40 -0
- data/spec/sample_projects/has_gems_via_bundler/config/jetpack.yml +1 -1
- data/spec/sample_projects/has_gems_via_bundler_19/config/jetpack.yml +1 -1
- data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml +1 -1
- data/spec/sample_projects/no_dependencies/config/jetpack.yml +1 -1
- data/spec/sample_projects/rack_19/Gemfile +3 -0
- data/spec/sample_projects/rack_19/Gemfile.lock +11 -0
- data/spec/sample_projects/rack_19/config.ru +8 -0
- data/spec/sample_projects/rack_19/config/jetpack.yml +9 -0
- data/spec/sample_projects/webapp/config/jetpack.yml +8 -5
- data/spec/sample_projects/webapp_filters/Gemfile +3 -0
- data/spec/sample_projects/webapp_filters/Gemfile.lock +88 -0
- data/spec/sample_projects/webapp_filters/app/controllers/application_controller.rb +5 -0
- data/spec/sample_projects/webapp_filters/config.ru +4 -0
- data/spec/sample_projects/webapp_filters/config/application.rb +46 -0
- data/spec/sample_projects/webapp_filters/config/boot.rb +6 -0
- data/spec/sample_projects/webapp_filters/config/environment.rb +5 -0
- data/spec/sample_projects/webapp_filters/config/environments/development.rb +25 -0
- data/spec/sample_projects/webapp_filters/config/environments/test.rb +35 -0
- data/spec/sample_projects/webapp_filters/config/initializers/secret_token.rb +7 -0
- data/spec/sample_projects/webapp_filters/config/jetpack.yml +10 -0
- data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
- data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
- data/spec/sample_projects/webapp_filters/config/routes.rb +60 -0
- data/spec/sample_projects/webapp_filters/public/index.html +239 -0
- data/spec/sample_projects/webapp_filters/script/rails +6 -0
- data/spec/spec_helper.rb +0 -7
- data/spec/web_spec.rb +25 -9
- data/src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java +43 -0
- data/src/java/jetpack/filter/ValidUrlFilter.java +62 -0
- data/web_inf_files/web.xml.erb +46 -4
- metadata +110 -32
- data/gems/bundler-1.0.18.gem +0 -0
- data/gems/bundler-1.1.rc.gem +0 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
package jetpack.filter;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import javax.servlet.Filter;
|
5
|
+
import javax.servlet.FilterChain;
|
6
|
+
import javax.servlet.FilterConfig;
|
7
|
+
import javax.servlet.ServletException;
|
8
|
+
import javax.servlet.ServletRequest;
|
9
|
+
import javax.servlet.ServletResponse;
|
10
|
+
import javax.servlet.http.HttpServletRequest;
|
11
|
+
import javax.servlet.http.HttpServletResponse;
|
12
|
+
|
13
|
+
public class IgnoreUnknownHttpMethodsFilter implements Filter {
|
14
|
+
|
15
|
+
java.util.List<String> allowedMethodList;
|
16
|
+
|
17
|
+
public void init(FilterConfig filterConfig) throws ServletException {
|
18
|
+
allowedMethodList = new java.util.ArrayList<String>();
|
19
|
+
allowedMethodList.add("GET");
|
20
|
+
allowedMethodList.add("PUT");
|
21
|
+
allowedMethodList.add("DELETE");
|
22
|
+
allowedMethodList.add("POST");
|
23
|
+
allowedMethodList.add("HEAD");
|
24
|
+
}
|
25
|
+
|
26
|
+
public void destroy() {
|
27
|
+
allowedMethodList = null;
|
28
|
+
}
|
29
|
+
|
30
|
+
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
31
|
+
throws IOException, ServletException {
|
32
|
+
|
33
|
+
HttpServletRequest req = (HttpServletRequest)request;
|
34
|
+
|
35
|
+
if ( allowedMethodList.contains(req.getMethod()) ) {
|
36
|
+
chain.doFilter(request, response);
|
37
|
+
} else {
|
38
|
+
HttpServletResponse res = (HttpServletResponse)response;
|
39
|
+
res.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
package jetpack.filter;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import java.util.regex.Pattern;
|
5
|
+
import javax.servlet.Filter;
|
6
|
+
import javax.servlet.FilterChain;
|
7
|
+
import javax.servlet.FilterConfig;
|
8
|
+
import javax.servlet.ServletException;
|
9
|
+
import javax.servlet.ServletRequest;
|
10
|
+
import javax.servlet.ServletResponse;
|
11
|
+
import javax.servlet.http.HttpServletRequest;
|
12
|
+
import javax.servlet.http.HttpServletResponse;
|
13
|
+
import org.apache.commons.validator.routines.RegexValidator;
|
14
|
+
import org.apache.commons.validator.routines.UrlValidator;
|
15
|
+
|
16
|
+
public class ValidUrlFilter implements Filter {
|
17
|
+
|
18
|
+
UrlValidator urlValidator;
|
19
|
+
|
20
|
+
public void init(FilterConfig filterConfig) throws ServletException {
|
21
|
+
String[] schemes = {"http","https"};
|
22
|
+
RegexValidator authorityValidator = new RegexValidator("^([\\p{Alnum}\\-\\.]*)(:\\d*)?(.*)?", false);
|
23
|
+
urlValidator = new UrlValidator(schemes, authorityValidator, UrlValidator.ALLOW_LOCAL_URLS);
|
24
|
+
}
|
25
|
+
|
26
|
+
public void destroy() {
|
27
|
+
urlValidator = null;
|
28
|
+
}
|
29
|
+
|
30
|
+
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
31
|
+
throws IOException, ServletException {
|
32
|
+
|
33
|
+
HttpServletRequest req = (HttpServletRequest)request;
|
34
|
+
|
35
|
+
String requestUrl = req.getRequestURL().toString();
|
36
|
+
String queryString = req.getQueryString();
|
37
|
+
if (queryString != null) {
|
38
|
+
requestUrl += "?" + queryString;
|
39
|
+
}
|
40
|
+
|
41
|
+
if (urlValidator.isValid(requestUrl) && isValidQuery(queryString)) {
|
42
|
+
chain.doFilter(request, response);
|
43
|
+
} else {
|
44
|
+
HttpServletResponse res = (HttpServletResponse)response;
|
45
|
+
res.sendError(HttpServletResponse.SC_BAD_REQUEST);
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
// commons validator allows any character in query string, we want to restrict it a bit
|
51
|
+
// and not allow unescaped angle brackets for example.
|
52
|
+
private static final String QUERY_REGEX = "^([-\\w:@&=~+,.!*'%$_;\\(\\)]*)$";
|
53
|
+
private static final Pattern QUERY_PATTERN = Pattern.compile(QUERY_REGEX);
|
54
|
+
|
55
|
+
protected boolean isValidQuery(String query) {
|
56
|
+
if (query == null) {
|
57
|
+
return true;
|
58
|
+
}
|
59
|
+
|
60
|
+
return QUERY_PATTERN.matcher(query).matches();
|
61
|
+
}
|
62
|
+
}
|
data/web_inf_files/web.xml.erb
CHANGED
@@ -11,6 +11,12 @@
|
|
11
11
|
<param-value>1</param-value>
|
12
12
|
</context-param>
|
13
13
|
|
14
|
+
<context-param>
|
15
|
+
<param-name>jruby.compat.version</param-name>
|
16
|
+
<param-value><%= @settings.ruby_version %></param-value>
|
17
|
+
</context-param>
|
18
|
+
|
19
|
+
|
14
20
|
<context-param>
|
15
21
|
<param-name>rails.root</param-name>
|
16
22
|
<param-value>.</param-value>
|
@@ -31,17 +37,53 @@
|
|
31
37
|
<param-value><%= @gem_path %></param-value>
|
32
38
|
</context-param>
|
33
39
|
|
40
|
+
<% if @settings.jetty_filters? %>
|
41
|
+
<filter>
|
42
|
+
<filter-name>IgnoreUnknownHttpMethodsFilter</filter-name>
|
43
|
+
<filter-class>jetpack.filter.IgnoreUnknownHttpMethodsFilter</filter-class>
|
44
|
+
</filter>
|
45
|
+
|
46
|
+
<filter-mapping>
|
47
|
+
<filter-name>IgnoreUnknownHttpMethodsFilter</filter-name>
|
48
|
+
<url-pattern>/*</url-pattern>
|
49
|
+
</filter-mapping>
|
50
|
+
|
34
51
|
<filter>
|
35
|
-
<filter-name>
|
36
|
-
<filter-class>
|
52
|
+
<filter-name>ValidUrlFilter</filter-name>
|
53
|
+
<filter-class>jetpack.filter.ValidUrlFilter</filter-class>
|
37
54
|
</filter>
|
38
55
|
|
39
56
|
<filter-mapping>
|
40
|
-
<filter-name>
|
57
|
+
<filter-name>ValidUrlFilter</filter-name>
|
41
58
|
<url-pattern>/*</url-pattern>
|
42
59
|
</filter-mapping>
|
60
|
+
<% end %>
|
61
|
+
|
62
|
+
<filter>
|
63
|
+
<filter-name>GzipFilter</filter-name>
|
64
|
+
<filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
|
65
|
+
<init-param>
|
66
|
+
<param-name>mimeTypes</param-name>
|
67
|
+
<param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml</param-value>
|
68
|
+
</init-param>
|
69
|
+
</filter>
|
70
|
+
|
71
|
+
<filter-mapping>
|
72
|
+
<filter-name>GzipFilter</filter-name>
|
73
|
+
<url-pattern>/*</url-pattern>
|
74
|
+
</filter-mapping>
|
75
|
+
|
76
|
+
<servlet>
|
77
|
+
<servlet-name>RackServlet</servlet-name>
|
78
|
+
<servlet-class>org.jruby.rack.RackServlet</servlet-class>
|
79
|
+
</servlet>
|
80
|
+
|
81
|
+
<servlet-mapping>
|
82
|
+
<servlet-name>RackServlet</servlet-name>
|
83
|
+
<url-pattern>/*</url-pattern>
|
84
|
+
</servlet-mapping>
|
43
85
|
|
44
86
|
<listener>
|
45
|
-
<listener-class
|
87
|
+
<listener-class><%= @listener %></listener-class>
|
46
88
|
</listener>
|
47
89
|
</web-app>
|
metadata
CHANGED
@@ -1,51 +1,73 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jetpack
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Steve Conover
|
14
|
+
- Xavier Shay
|
15
|
+
- Taylor Phillips
|
16
|
+
- Chris Heisterkamp
|
9
17
|
autorequire:
|
10
18
|
bindir: bin
|
11
19
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
20
|
+
|
21
|
+
date: 2013-01-16 00:00:00 Z
|
22
|
+
dependencies:
|
23
|
+
- !ruby/object:Gem::Dependency
|
15
24
|
name: bundler
|
16
|
-
|
25
|
+
prerelease: false
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
27
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
hash: 3
|
32
|
+
segments:
|
33
|
+
- 0
|
34
|
+
version: "0"
|
22
35
|
type: :development
|
23
|
-
|
24
|
-
version_requirements: *2166391640
|
36
|
+
version_requirements: *id001
|
25
37
|
description:
|
26
|
-
email:
|
38
|
+
email:
|
27
39
|
- steve@squareup.com
|
28
|
-
|
40
|
+
- xavier@squareup.com
|
41
|
+
- taylor@squareup.com
|
42
|
+
- cheister@squareup.com
|
43
|
+
executables:
|
29
44
|
- jetpack
|
30
45
|
extensions: []
|
46
|
+
|
31
47
|
extra_rdoc_files: []
|
32
|
-
|
48
|
+
|
49
|
+
files:
|
33
50
|
- .gitignore
|
34
51
|
- .wrong
|
35
52
|
- Gemfile
|
36
53
|
- Gemfile.lock
|
54
|
+
- LICENSE
|
37
55
|
- README.markdown
|
38
56
|
- Rakefile
|
39
57
|
- bin/jetpack
|
40
58
|
- bin_files/.rake_runner.erb
|
59
|
+
- bin_files/launch.erb
|
41
60
|
- bin_files/rake.erb
|
42
61
|
- bin_files/ruby.erb
|
43
|
-
- gems/bundler-1.0.
|
44
|
-
- gems/bundler-1.1.rc.gem
|
62
|
+
- gems/bundler-1.1.0.gem
|
45
63
|
- gems/jruby-openssl-0.7.4.gem
|
46
64
|
- install_gem.sh
|
47
65
|
- jetpack.gemspec
|
66
|
+
- jetty_files/etc/fake.crt
|
67
|
+
- jetty_files/etc/fake.jceks
|
68
|
+
- jetty_files/etc/fake.key
|
48
69
|
- jetty_files/etc/fake.p12
|
70
|
+
- jetty_files/etc/fake.pem
|
49
71
|
- jetty_files/etc/jetty.xml.erb
|
50
72
|
- jetty_files/jetty-init.erb
|
51
73
|
- jetty_files/run/.gitkeep
|
@@ -55,6 +77,8 @@ files:
|
|
55
77
|
- script/ci
|
56
78
|
- spec/basics_spec.rb
|
57
79
|
- spec/bundler_spec.rb
|
80
|
+
- spec/filter_spec.rb
|
81
|
+
- spec/rack_spec.rb
|
58
82
|
- spec/ruby_19_spec.rb
|
59
83
|
- spec/sample_projects/has_gems_via_bundler/Gemfile
|
60
84
|
- spec/sample_projects/has_gems_via_bundler/Gemfile.lock
|
@@ -70,6 +94,10 @@ files:
|
|
70
94
|
- spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml
|
71
95
|
- spec/sample_projects/no_dependencies/Rakefile
|
72
96
|
- spec/sample_projects/no_dependencies/config/jetpack.yml
|
97
|
+
- spec/sample_projects/rack_19/Gemfile
|
98
|
+
- spec/sample_projects/rack_19/Gemfile.lock
|
99
|
+
- spec/sample_projects/rack_19/config.ru
|
100
|
+
- spec/sample_projects/rack_19/config/jetpack.yml
|
73
101
|
- spec/sample_projects/webapp/Gemfile
|
74
102
|
- spec/sample_projects/webapp/Gemfile.lock
|
75
103
|
- spec/sample_projects/webapp/app/controllers/application_controller.rb
|
@@ -86,37 +114,66 @@ files:
|
|
86
114
|
- spec/sample_projects/webapp/config/routes.rb
|
87
115
|
- spec/sample_projects/webapp/public/index.html
|
88
116
|
- spec/sample_projects/webapp/script/rails
|
117
|
+
- spec/sample_projects/webapp_filters/Gemfile
|
118
|
+
- spec/sample_projects/webapp_filters/Gemfile.lock
|
119
|
+
- spec/sample_projects/webapp_filters/app/controllers/application_controller.rb
|
120
|
+
- spec/sample_projects/webapp_filters/config.ru
|
121
|
+
- spec/sample_projects/webapp_filters/config/application.rb
|
122
|
+
- spec/sample_projects/webapp_filters/config/boot.rb
|
123
|
+
- spec/sample_projects/webapp_filters/config/environment.rb
|
124
|
+
- spec/sample_projects/webapp_filters/config/environments/development.rb
|
125
|
+
- spec/sample_projects/webapp_filters/config/environments/test.rb
|
126
|
+
- spec/sample_projects/webapp_filters/config/initializers/secret_token.rb
|
127
|
+
- spec/sample_projects/webapp_filters/config/jetpack.yml
|
128
|
+
- spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml
|
129
|
+
- spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb
|
130
|
+
- spec/sample_projects/webapp_filters/config/routes.rb
|
131
|
+
- spec/sample_projects/webapp_filters/public/index.html
|
132
|
+
- spec/sample_projects/webapp_filters/script/rails
|
89
133
|
- spec/spec_helper.rb
|
90
134
|
- spec/suite.rb
|
91
135
|
- spec/web_spec.rb
|
136
|
+
- src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java
|
137
|
+
- src/java/jetpack/filter/ValidUrlFilter.java
|
92
138
|
- web_inf_files/web.xml.erb
|
93
139
|
homepage: https://github.com/square/jetpack
|
94
140
|
licenses: []
|
141
|
+
|
95
142
|
post_install_message:
|
96
143
|
rdoc_options: []
|
97
|
-
|
144
|
+
|
145
|
+
require_paths:
|
98
146
|
- lib
|
99
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
148
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
hash: 3
|
153
|
+
segments:
|
154
|
+
- 0
|
155
|
+
version: "0"
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
157
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
hash: 3
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
111
165
|
requirements: []
|
166
|
+
|
112
167
|
rubyforge_project:
|
113
|
-
rubygems_version: 1.8.
|
168
|
+
rubygems_version: 1.8.24
|
114
169
|
signing_key:
|
115
170
|
specification_version: 3
|
116
171
|
summary: Jetpack prepares your jRuby project for jvm deployment.
|
117
|
-
test_files:
|
172
|
+
test_files:
|
118
173
|
- spec/basics_spec.rb
|
119
174
|
- spec/bundler_spec.rb
|
175
|
+
- spec/filter_spec.rb
|
176
|
+
- spec/rack_spec.rb
|
120
177
|
- spec/ruby_19_spec.rb
|
121
178
|
- spec/sample_projects/has_gems_via_bundler/Gemfile
|
122
179
|
- spec/sample_projects/has_gems_via_bundler/Gemfile.lock
|
@@ -132,6 +189,10 @@ test_files:
|
|
132
189
|
- spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml
|
133
190
|
- spec/sample_projects/no_dependencies/Rakefile
|
134
191
|
- spec/sample_projects/no_dependencies/config/jetpack.yml
|
192
|
+
- spec/sample_projects/rack_19/Gemfile
|
193
|
+
- spec/sample_projects/rack_19/Gemfile.lock
|
194
|
+
- spec/sample_projects/rack_19/config.ru
|
195
|
+
- spec/sample_projects/rack_19/config/jetpack.yml
|
135
196
|
- spec/sample_projects/webapp/Gemfile
|
136
197
|
- spec/sample_projects/webapp/Gemfile.lock
|
137
198
|
- spec/sample_projects/webapp/app/controllers/application_controller.rb
|
@@ -148,6 +209,23 @@ test_files:
|
|
148
209
|
- spec/sample_projects/webapp/config/routes.rb
|
149
210
|
- spec/sample_projects/webapp/public/index.html
|
150
211
|
- spec/sample_projects/webapp/script/rails
|
212
|
+
- spec/sample_projects/webapp_filters/Gemfile
|
213
|
+
- spec/sample_projects/webapp_filters/Gemfile.lock
|
214
|
+
- spec/sample_projects/webapp_filters/app/controllers/application_controller.rb
|
215
|
+
- spec/sample_projects/webapp_filters/config.ru
|
216
|
+
- spec/sample_projects/webapp_filters/config/application.rb
|
217
|
+
- spec/sample_projects/webapp_filters/config/boot.rb
|
218
|
+
- spec/sample_projects/webapp_filters/config/environment.rb
|
219
|
+
- spec/sample_projects/webapp_filters/config/environments/development.rb
|
220
|
+
- spec/sample_projects/webapp_filters/config/environments/test.rb
|
221
|
+
- spec/sample_projects/webapp_filters/config/initializers/secret_token.rb
|
222
|
+
- spec/sample_projects/webapp_filters/config/jetpack.yml
|
223
|
+
- spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml
|
224
|
+
- spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb
|
225
|
+
- spec/sample_projects/webapp_filters/config/routes.rb
|
226
|
+
- spec/sample_projects/webapp_filters/public/index.html
|
227
|
+
- spec/sample_projects/webapp_filters/script/rails
|
151
228
|
- spec/spec_helper.rb
|
152
229
|
- spec/suite.rb
|
153
230
|
- spec/web_spec.rb
|
231
|
+
has_rdoc:
|
data/gems/bundler-1.0.18.gem
DELETED
Binary file
|
data/gems/bundler-1.1.rc.gem
DELETED
Binary file
|