jetpack 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +2 -1
  2. data/LICENSE +14 -0
  3. data/README.markdown +35 -6
  4. data/Rakefile +14 -3
  5. data/bin/jetpack +39 -6
  6. data/bin_files/launch.erb +16 -0
  7. data/gems/bundler-1.1.0.gem +0 -0
  8. data/jetpack.gemspec +3 -3
  9. data/jetty_files/etc/fake.crt +31 -0
  10. data/jetty_files/etc/fake.jceks +0 -0
  11. data/jetty_files/etc/fake.key +51 -0
  12. data/jetty_files/etc/fake.pem +89 -0
  13. data/jetty_files/etc/jetty.xml.erb +53 -25
  14. data/jetty_files/jetty-init.erb +4 -0
  15. data/lib/jetpack/settings.rb +24 -10
  16. data/script/ci +1 -1
  17. data/spec/bundler_spec.rb +1 -1
  18. data/spec/filter_spec.rb +59 -0
  19. data/spec/rack_spec.rb +40 -0
  20. data/spec/sample_projects/has_gems_via_bundler/config/jetpack.yml +1 -1
  21. data/spec/sample_projects/has_gems_via_bundler_19/config/jetpack.yml +1 -1
  22. data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml +1 -1
  23. data/spec/sample_projects/no_dependencies/config/jetpack.yml +1 -1
  24. data/spec/sample_projects/rack_19/Gemfile +3 -0
  25. data/spec/sample_projects/rack_19/Gemfile.lock +11 -0
  26. data/spec/sample_projects/rack_19/config.ru +8 -0
  27. data/spec/sample_projects/rack_19/config/jetpack.yml +9 -0
  28. data/spec/sample_projects/webapp/config/jetpack.yml +8 -5
  29. data/spec/sample_projects/webapp_filters/Gemfile +3 -0
  30. data/spec/sample_projects/webapp_filters/Gemfile.lock +88 -0
  31. data/spec/sample_projects/webapp_filters/app/controllers/application_controller.rb +5 -0
  32. data/spec/sample_projects/webapp_filters/config.ru +4 -0
  33. data/spec/sample_projects/webapp_filters/config/application.rb +46 -0
  34. data/spec/sample_projects/webapp_filters/config/boot.rb +6 -0
  35. data/spec/sample_projects/webapp_filters/config/environment.rb +5 -0
  36. data/spec/sample_projects/webapp_filters/config/environments/development.rb +25 -0
  37. data/spec/sample_projects/webapp_filters/config/environments/test.rb +35 -0
  38. data/spec/sample_projects/webapp_filters/config/initializers/secret_token.rb +7 -0
  39. data/spec/sample_projects/webapp_filters/config/jetpack.yml +10 -0
  40. data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
  41. data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
  42. data/spec/sample_projects/webapp_filters/config/routes.rb +60 -0
  43. data/spec/sample_projects/webapp_filters/public/index.html +239 -0
  44. data/spec/sample_projects/webapp_filters/script/rails +6 -0
  45. data/spec/spec_helper.rb +0 -7
  46. data/spec/web_spec.rb +25 -9
  47. data/src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java +43 -0
  48. data/src/java/jetpack/filter/ValidUrlFilter.java +62 -0
  49. data/web_inf_files/web.xml.erb +46 -4
  50. metadata +110 -32
  51. data/gems/bundler-1.0.18.gem +0 -0
  52. 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
+ }
@@ -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>RackFilter</filter-name>
36
- <filter-class>org.jruby.rack.RackFilter</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>RackFilter</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>org.jruby.rack.rails.RailsServletContextListener</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
- version: 0.1.0
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
- date: 2012-01-19 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
20
+
21
+ date: 2013-01-16 00:00:00 Z
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
15
24
  name: bundler
16
- requirement: &2166391640 !ruby/object:Gem::Requirement
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
17
27
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ hash: 3
32
+ segments:
33
+ - 0
34
+ version: "0"
22
35
  type: :development
23
- prerelease: false
24
- version_requirements: *2166391640
36
+ version_requirements: *id001
25
37
  description:
26
- email:
38
+ email:
27
39
  - steve@squareup.com
28
- executables:
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
- files:
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.18.gem
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
- require_paths:
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
- version: '0'
105
- required_rubygems_version: !ruby/object:Gem::Requirement
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
- version: '0'
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.10
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:
Binary file
Binary file