puppet-validator 0.0.6 → 0.0.7
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 +4 -4
- data/README.md +6 -0
- data/lib/puppet-validator.rb +31 -2
- data/public/scripts.js +1 -1
- data/views/index.erb +1 -0
- metadata +29 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3dc256dd81faa824703173a618ee04e5744afa2
|
4
|
+
data.tar.gz: 6beb62e29d7b8b49bb2441b0e9414cdae0dd3760
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9270323f2c725c7389883ca0f2c180132b4074b9fee02401b9a64a0bae35fd9e2bc2753b1700aecc3b0e3b1fcc564b6e15f06107e146c30d96683fc07fbfc646
|
7
|
+
data.tar.gz: 728b48f8044fe6e9703212eeb79a997543e1b49d339da39887f810598e4aba28a735bd5f107497422e1f1b5355489dd7acd05a710122ea9bceaca6a4d0c3e86c
|
data/README.md
CHANGED
@@ -259,3 +259,9 @@ A simple `systemd` init script might look something like:
|
|
259
259
|
|
260
260
|
Customize the command line as needed. You might include a `--theme` or `--port`
|
261
261
|
argument, or you might provide the full path to an `rvm` installed gem.
|
262
|
+
|
263
|
+
### Bookmarklet
|
264
|
+
|
265
|
+
If you just want to validate Puppet code you see on a website, follow the
|
266
|
+
instructions on http://binford2k.com/content/2016/06/puppetlinter-dot-com
|
267
|
+
|
data/lib/puppet-validator.rb
CHANGED
@@ -5,6 +5,9 @@ require 'puppet'
|
|
5
5
|
require 'puppet/parser'
|
6
6
|
require 'puppet-lint'
|
7
7
|
|
8
|
+
require 'nokogiri'
|
9
|
+
require 'cgi'
|
10
|
+
|
8
11
|
# something like 3,000 lines of code
|
9
12
|
MAXSIZE = 100000
|
10
13
|
CONTEXT = 3
|
@@ -13,9 +16,17 @@ class PuppetValidator < Sinatra::Base
|
|
13
16
|
set :logging, true
|
14
17
|
set :strict, true
|
15
18
|
|
16
|
-
|
19
|
+
enable :sessions
|
20
|
+
|
21
|
+
before do
|
17
22
|
env["rack.logger"] = settings.logger if settings.logger
|
18
|
-
|
23
|
+
|
24
|
+
session[:csrf] ||= SecureRandom.hex(32)
|
25
|
+
response.set_cookie 'authenticity_token', {
|
26
|
+
:value => session[:csrf],
|
27
|
+
:expires => Time.now + (60 * 60 * 24),
|
28
|
+
}
|
29
|
+
end
|
19
30
|
|
20
31
|
def initialize(app=nil)
|
21
32
|
super(app)
|
@@ -68,6 +79,15 @@ class PuppetValidator < Sinatra::Base
|
|
68
79
|
logger.info "Validating code from #{request.ip}."
|
69
80
|
logger.debug "validating #{request.ip}: #{params['code']}"
|
70
81
|
|
82
|
+
halt 403, 'Request validation failed.' unless safe?
|
83
|
+
|
84
|
+
frag = Nokogiri::HTML.fragment(params['code'])
|
85
|
+
unless frag.elements.empty?
|
86
|
+
logger.warn 'HTML code found in validation string'
|
87
|
+
frag.elements.each { |elem| logger.debug "HTML: #{elem.to_s}" }
|
88
|
+
params['code'] = CGI.escapeHTML(params['code'])
|
89
|
+
end
|
90
|
+
|
71
91
|
if request.body.size <= MAXSIZE
|
72
92
|
result = validate params['code']
|
73
93
|
lint = lint(params['code'], params['checks']) if params['lint'] == 'on'
|
@@ -109,6 +129,15 @@ class PuppetValidator < Sinatra::Base
|
|
109
129
|
|
110
130
|
helpers do
|
111
131
|
|
132
|
+
def safe?
|
133
|
+
if session[:csrf] == params['_csrf'] && session[:csrf] == request.cookies['authenticity_token']
|
134
|
+
true
|
135
|
+
else
|
136
|
+
logger.warn 'CSRF attempt detected.'
|
137
|
+
false
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
112
141
|
def validate(data)
|
113
142
|
begin
|
114
143
|
Puppet.settings[:app_management] = true if Gem::Version.new(Puppet.version) >= Gem::Version.new('4.3.2')
|
data/public/scripts.js
CHANGED
data/views/index.erb
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
<h1>Puppet Code Validator</h1>
|
11
11
|
<p>Paste Puppet code into the following textbox and check it for validity.</p>
|
12
12
|
<form action="/validate" method="post">
|
13
|
+
<input name="_csrf", type="hidden" value="<%= session[:csrf] %>" />
|
13
14
|
<div class="entry">
|
14
15
|
<textarea name="code" id="code" cols="65" rows="25"></textarea>
|
15
16
|
<input type="submit" value="Validate" id="validate">
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Ford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -58,6 +58,26 @@ dependencies:
|
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.1'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: nokogiri
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.6'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.6.5
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.6'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.6.5
|
61
81
|
description: |2
|
62
82
|
Puppet Validator is a simple web service that accepts arbitrary code submissions and
|
63
83
|
validates it the way `puppet parser validate` would. It can optionally also
|
@@ -68,13 +88,11 @@ executables:
|
|
68
88
|
extensions: []
|
69
89
|
extra_rdoc_files: []
|
70
90
|
files:
|
71
|
-
- README.md
|
72
91
|
- LICENSE
|
73
|
-
-
|
92
|
+
- README.md
|
74
93
|
- bin/puppet-validator
|
94
|
+
- config.ru
|
75
95
|
- lib/puppet-validator.rb
|
76
|
-
- views/index.erb
|
77
|
-
- views/result.erb
|
78
96
|
- public/gist.png
|
79
97
|
- public/info.png
|
80
98
|
- public/prism-default.css
|
@@ -82,8 +100,11 @@ files:
|
|
82
100
|
- public/scripts.js
|
83
101
|
- public/styles.css
|
84
102
|
- public/testing.html
|
103
|
+
- views/index.erb
|
104
|
+
- views/result.erb
|
85
105
|
homepage: https://github.com/puppetlabs/puppet-validator/
|
86
|
-
licenses:
|
106
|
+
licenses:
|
107
|
+
- Apache-2.0
|
87
108
|
metadata: {}
|
88
109
|
post_install_message:
|
89
110
|
rdoc_options: []
|
@@ -101,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
122
|
version: '0'
|
102
123
|
requirements: []
|
103
124
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.
|
125
|
+
rubygems_version: 2.6.10
|
105
126
|
signing_key:
|
106
127
|
specification_version: 4
|
107
128
|
summary: Puppet code validator as a service
|