shibboleths_lil_helper 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -10,15 +10,7 @@ Shibboleth's Lil Helper (slh) is a tool that automates the generation of Apache/
10
10
 
11
11
  * __Providing conceptually simple linear process__ that distills the main steps associated with Shibboleth integration.
12
12
 
13
- * Verifying metadata consistency across sites & hosts associated with
14
- particular Shibboletht SP entity_id.
15
-
16
- DISCLAIMER
17
- -------------------------
18
- All you see here on Github is the readme, no code yet.
19
-
20
- This is released as a RubyGem right now, we hope to push the source up
21
- here once things stabilize further
13
+ * __Verifying metadata consistency__ across sites & hosts associated with particular Shibboletht SP entity_id.
22
14
 
23
15
  Why another tool?
24
16
  -----------------
@@ -32,83 +24,152 @@ configuration consistently with minimal manual work for:
32
24
  * each running the Apache/IIS Native Service Provider
33
25
 
34
26
  Installation
35
- ============
36
- * Pre-requisites:
27
+ ------------
28
+ * Pre-requisites
29
+ * Ruby: http://www.ruby-lang.org/en/downloads/
37
30
  * Rubygems: http://rubygems.org/pages/download
38
31
 
39
32
  * Via Ruby Gems:
40
- * gem install shibboleths_lil_helper
33
+ * `gem install shibboleths_lil_helper`
41
34
  * Then type `slh` -- this provides more detailed/actionable
42
35
  documentation
43
36
 
37
+ * Via Git: (requires bundler gem)
38
+ * this is how developers/contributors should install the tool
39
+ * `git clone ...git://thisrepo... slh`
40
+ * `cd slh`
41
+ * `bundle install`
42
+ * then add a symlink to bin/slh (something like below)
43
+ * `ln -s bin/slh ~/slh`
44
+ * make sure the slh binary is the right one (not a gem one)
45
+ * `which slh`
46
+
47
+ * Install notes:
48
+ * Tool requires nokogiri gem which in-turn requires libxml2, you may
49
+ run into difficulties there: See http://nokogiri.org/tutorials/installing_nokogiri.html if you have problems.
50
+
51
+ Before using this tool
52
+ ----------------------
53
+ For each host you want to integrate with Shibboleth, do the following and have answers for the questions below.
54
+
55
+ __Don't try to use this tool until you have followed these instructions for at least one host.__
56
+
57
+ For each host:
58
+
59
+ * __Install Shibboleth Native Service Provider Apache/IIS__
60
+ https://wiki.shibboleth.net/confluence/display/SHIB2/Installation
61
+ Ideally, you should be able to hit a URL like "Shibboleth.ss/Metadata" for each site
62
+ on the host and have it cough out some XML goo. (not a strict
63
+ requirement, slh will help you with this later too)
64
+
65
+ * What web server is it? IIS or Apache
66
+
67
+ * If IIS, what is the site ID?
68
+ You can find this my clicking "Websites" in IIS and looking at the "Identifier" column for myshinynewwebsite.umn.edu.
69
+
70
+ * What is the host name of the computer? (e.g. somehost.com)
71
+
72
+ * What is the site name? (e.g. myshinynewwebsite.umn.edu)
73
+
74
+ * Is authentication required for the entire site or particular directories?
75
+
76
+ * Is this URL available for your site? myshinynewwebsite.umn.edu/Shibboleth.sso/Metadata
77
+
78
+ * What is the error support contact email?
79
+
80
+ * What is the Service Provider entity ID you'd like to use?
81
+ A simple convention is to have a dev entity for "development" or "staging" apps and one for production stuff.
82
+ You might consider https://YOUR_ORG.umn.edu/shibboleth/dev_default or https://YOUR_ORG.umn.edu/shibboleth/prod_default
83
+
84
+
44
85
  Assumptions
45
- ===========
46
- * Shibboleth Native Service Provider Apache/IIS is already installed on your target web servers.
47
- * The X509Certificate (sp-cert.pem, sp-key.pem) keys are in their default locations along-side shibboleth2.xml.
48
- * The Shibboleth apache module is loaded globally for all vHosts.
49
- * You are integrating with a single Identity Provider.
86
+ -----------
87
+ * Each host integrates with a single Identity Provider, not multiple.
88
+ * (for Apache) The Shibboleth apache module is loaded globally for all vHosts.
50
89
 
51
90
  Concept
52
- =======
91
+ -------
53
92
 
54
- All configuration and authentication specs for all Shibboleth SP instances are specified in a single ruby parseable "shibboleths_lil_helper/config.rb" file. From these specs, slh is capable of generating all of the required XML files you will need to integrate with a Shibboleth Identify Provider (Idp).
93
+ All configuration and authentication specs for all Shibboleth SP instances are specified in a single ruby parseable `shibboleths_lil_helper/config.rb` file. From these specs, slh is capable of generating all of the required XML files you will need to integrate with a Shibboleth Identify Provider (Idp). The following breaks down the essential steps.
55
94
 
56
- The generation of these XML files happens through a command line tool
57
- called "slh". Each particular task is broken into sub-commands such as
58
- "initialize", "generate", "verify_metadata", or "generate_metadata" that perform various tasks.
59
95
 
60
- * It all starts with:
96
+ ### Initialization
97
+ It all starts with
61
98
 
62
99
  mkdir shibboleth_deployer
63
100
  cd shibboleth_deployer
64
101
  slh initialize
65
102
 
66
- This creates a config file with example code you'll need to change to work.
103
+ This creates a config file with example code you'll need to change to work.
104
+
105
+ ### SP configuration
106
+ Edit `shibboleths_lil_helper/config.rb` to reflect your setup:
67
107
 
68
- * Go in and edit shibboleths_lil_helper/config.rb to reflect your setup,
69
- adding
70
108
  * entity id
71
109
  * idp metadata url
72
110
  * hosts, sites, and paths to protect for each for each site
73
111
 
74
-
75
- * From here you type:
112
+ From here you type:
76
113
 
77
114
  slh generate
78
115
 
79
- which will generate shibboleth2.xml and a couple others
80
- Now--you go put these files on the hosts they have been generated for.
116
+ This creates:
117
+
118
+ * shibboleth2.xml
119
+ * idp_metadata.xml
120
+ * shib_apache.conf (if using apache)
81
121
 
82
- * The generated shibboleth2.xml will have RequestMap specs that restrict
83
- access to specified paths you have
122
+ for each host for each entity_id. shibboleth2.xml contains RequestMap, AssertionConsumer server "endpoints" and other goo needed to integrate with an Shib IDP.
84
123
 
124
+ Go deploy these config files to you hosts. (the tool provides more details)
85
125
 
86
- * Once you've copied the shibboleth2.xml up to your target hosts, you
87
- can type:
126
+ ### Metadata verification
127
+ Verify your metadata data across all hosts:
88
128
 
89
129
  slh verify_metadata
90
130
 
91
- which will tell some of the things that are probably incorrect with
92
- your setup and how to fix it. (like copying the sp-key.pem and sp-cert.pem keys associated with the :is_key_originator site to all of the other hosts)
131
+ Which will tell some of the things that are probably incorrect with
132
+ your setup and how to fix it. (like copying the sp-key.pem and sp-cert.pem keys associated with the `:is_key_originator` site to all of the other hosts)
93
133
 
94
- * Then, once verify_metadata is showing all green:
134
+ ### Metadata generation
135
+ Once verify_metadata is showing all green:
95
136
 
96
137
  slh generate_metadata
97
138
 
98
- which generates a metadata file for each strategy/entity id you have
139
+ which generates a metadata file for each strategy/entity id you have
99
140
  that you can give you your IDP.
100
141
 
101
- Real World Example
102
- ==================
103
- The following describes how we integrate this tool's generated output
104
- into a deployment automation tool called Capistrano.
142
+ Once the IDP has added your metadata, then each site should be able to
143
+ respond to
144
+
145
+ Shibboleth.sso/Login
146
+
147
+ and be happily prompted for login.
148
+
149
+
150
+ Deployment automation
151
+ ---------------------
152
+ Once you have the basic stuff working, you may want to automate
153
+ deployment:
154
+
155
+ slh capistrano_deploy
156
+
157
+ will create a config/deploy.rb
158
+
159
+ See https://github.com/capistrano/capistrano/wiki/ for more details
105
160
 
106
- We have a private repo called shibboleth_deployer that includes the shibboleths_lil_helper generated config files and uses Capistrano to push these files out target servers and restarts shibd and httpd. It's usage looks like:
161
+ This requires some initial setup per host and only works well if your
162
+ target hosts run SSH (aka default not-IIS setup)
163
+
164
+ deployment automation example
165
+ -----------------------------
166
+ We have a private repo called shibboleth\_deployer that includes the shibboleths\_lil\_helper generated config files and uses Capistrano to push these files out target servers and restarts shibd and httpd. It's usage looks like:
107
167
 
108
168
  cap deploy HOST=asr-web-dev4.oit.umn.edu
109
169
 
170
+ ### Initial setup
110
171
  For each of our target servers we setup Capistrano to have a clone of
111
- this shibboleth_deployer repo structured in the standard way, e.g:
172
+ this shibboleth\_deployer repo structured in the standard way:
112
173
 
113
174
  ls /etc/shibboleth_deployer
114
175
  current
@@ -116,33 +177,49 @@ this shibboleth_deployer repo structured in the standard way, e.g:
116
177
  shared
117
178
 
118
179
  Setup symlinks to the appropriate config files within
119
- shibboleth_deployer from the places the Native Shibboleth SP expects
180
+ shibboleth\_deployer from the places the Native Shibboleth SP expects
120
181
  files to be, e.g:
121
182
 
122
- (from the /etc/shibboleth dir)
183
+ from the /etc/shibboleth dir
184
+
123
185
  ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shibboleth2.xml shibboleth2.xml
124
186
 
125
187
  ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/idp_metadata.xml idp_metadata.xml
126
188
 
127
- (from the /etc/httpd/conf.d dir)
128
- ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shib_apache.conf shib_apache.conf
189
+ from the /etc/httpd/conf.d dir
129
190
 
130
- Additional Docs
131
- ===============
132
- * See the stuff in /doc in this project
191
+ ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shib_apache.conf shib_apache.conf
133
192
 
134
193
  How to Help
135
- ======================
194
+ -----------
195
+ * Let us know the issues you are having with the tool via Github Issues.
136
196
 
137
- Email Us
197
+ * Improve the documentation! The whole purpose of this tool is to
198
+ provide a straight-forward path to setting up a Shibboleth SP.
199
+
200
+ How to contribute
138
201
  ----------------------
139
- * Let us know you are interested in using the tool.
202
+ * Fork, implement, issue a pull request for small changes.
140
203
 
141
- * Voice your ideas about questions you have and features you'd like to see.
204
+ * Email us for big ideas or API changes--we'd like to keep this tool
205
+ stable and want to collaborate to identify the right way of
206
+ accommodating new features while maintaining backward compatibility.
142
207
 
143
- Authors
144
- =======
208
+ Contributors
209
+ ------------
145
210
  * Joe Goggins, Academic Support Resources, goggins@umn.edu
146
211
  * Chris Dinger, Academic Support Resources, ding0057@umn.edu
147
212
 
148
- Copyright (c) 2011 University of Minnesota
213
+ Acknowledgements
214
+ ----------------
215
+ Thanks to these folks for providing feedback and willingness to pilot
216
+ the tool.
217
+
218
+ * David Peterson, Office of Institutional Research
219
+ * Debbie Gillespie, Computer Science and Engineering
220
+ * Eva Young, Office of Institional Compliance
221
+ * Josh Buysse, CLA Office of Information Technology
222
+ * Aaron Zirbes, Environmental Health Sciences
223
+
224
+
225
+ Copyright (c) Regents of the University of Minnesota
data/TODOS.txt CHANGED
@@ -1,7 +1,14 @@
1
- * Release as gem
1
+ TODOS
2
+
3
+
2
4
 
3
5
 
4
6
  DONE
7
+ * Added note in readme: Broke because of libxml2 lacking http://nokogiri.org/tutorials/installing_nokogiri.html
8
+ * after slh generate, tell the user exactly where they should put the files.
9
+ * Blowup gracefully when no protect statements
10
+ * config.rb.erb: specify what must be specified and what is optional
11
+ * Release as gem
5
12
  * Incorporate FAQ stuff somehow https://www.pivotaltracker.com/story/show/19256223
6
13
  * Add something that warns LOUDLY to use slh with source control
7
14
  * Rejigger the default config.rb.erb--simplify and reference documentation
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
data/lib/slh/cli.rb CHANGED
@@ -107,7 +107,7 @@ OTHER DOCUMENTATION SOURCES (not just this tool)
107
107
  when 'verify_metadata'
108
108
  klass = [Slh::Cli::FetchMetadata, Slh::Cli::CompareMetadata, Slh::Cli::VerifyMetadataEncryption]
109
109
  when 'generate_metadata'
110
- klass = [Slh::Cli::FetchMetadata, Slh::Cli::CompareMetadata,Slh::Cli::VerifyMetadataEncryption, Slh::Cli::GenerateMetadata]
110
+ klass = Slh::Cli::GenerateMetadata
111
111
  when "generate_capistrano"
112
112
  klass = Slh::Cli::GenerateCapistranoDeploy
113
113
  when "copy_templates_to_override"
@@ -12,9 +12,23 @@ class Slh::Cli::Generate < Slh::Cli::HostFilterableBase
12
12
  FileUtils.mkdir_p(host.config_dir)
13
13
  File.open(strategy.config_file_path(cf,host), 'w') {|f| f.write(strategy.generate_config_file_content(cf,host)) }
14
14
  Slh::Cli.instance.output " Wrote #{strategy.config_file_path(cf,host)}"
15
+ if cf == 'shib_apache.conf'
16
+ Slh::Cli.instance.output " copy this into /etc/httpd/conf.d or somewhere apache can read it are target host", :highlight => :green
17
+ else
18
+ if host.shib_prefix.nil?
19
+ Slh::Cli.instance.output " copy this into /etc/shibboleth for this host on target host", :highlight => :green
20
+ else
21
+ Slh::Cli.instance.output " copy this into #{host.prefixed_filepath_for(cf)} on target host", :highlight => :green
22
+ end
23
+ end
15
24
  end
16
25
  end
26
+
27
+ originator_host = strategy.key_originator_site.parent_host
28
+ Slh::Cli.instance.output "\ncopy sp-key.pem sp-cert.pem from host #{originator_host.name} to ALL target hosts.", :highlight => :green
29
+ Slh::Cli.instance.output " This makes the X509Certificate stuff in all metadata for all sites associated with an entity_id match"
17
30
  end
31
+
18
32
  Slh::Cli.instance.output "You MUST deploy these files your web servers and restart httpd and shibd for subsequent commands to work", :highlight => true
19
33
  end
20
34
  end
@@ -28,6 +28,9 @@ class Slh::Models::Site < Slh::Models::Base
28
28
  if block_given?
29
29
  self.instance_eval(&block)
30
30
  end
31
+ if self.paths.empty?
32
+ raise "No protect statements for site #{site_name}, you must protect at least 1 path for every site. Adding a \"protect\" statement should make this error go away"
33
+ end
31
34
  end
32
35
 
33
36
  def metadata
@@ -1,40 +1,96 @@
1
+ # ABOUT
2
+ # =====
3
+ # This file is the basis for your shibboleth config for
4
+ # all entities, hosts, sites, and url paths you want to protect for your organization.
5
+ #
6
+ # All slh commands utilize this file to do its thing.
7
+ #
8
+ # To get started:
9
+ # * fill in the REQUIRED items
10
+ # * run slh generate
11
+ # * deploy the files our to your server to the appropriate place
12
+ # * fight with your server to get somesite.com/Shibboleth.sso/Metadata spitting out XML
13
+ # for each host
14
+ #
15
+ # Then:
16
+ # * run slh verify_metadata
17
+ # * copy sp-key, sp-cert, etc
18
+ # * re-run command until you aren't seeing any errors
19
+ # Then:
20
+ # * run slh generate_metadata
21
+ # * give the metadata to your IDP folks
22
+ #
23
+ # Verify:
24
+ # * Goto somesite.com/Shibboleth.sso/Login
25
+ # * You should be prompted to login
26
+ #
27
+ # A strategy
28
+ # has one entity
29
+ # has a metadata url
30
+ # has many hosts
31
+ # a host has many sites
32
+ # a site has many protected paths
33
+ # a protected path can require auth, optionally use auth, or restrict to a
34
+ # particular set of users
35
+ #
1
36
  Slh.for_strategy :test_idp do
2
- set :sp_entity_id, 'YOUR_ENTITY_ID'
3
- set :idp_metadata_url, 'YOUR_IDP_METADATA_URL'
4
- set :error_support_contact, 'YOUR_ERROR_SUPPORT_EMAIL_ADDRESS'
37
+ set :sp_entity_id, 'YOUR_ENTITY_ID' # REQUIRED, https://yourorg.umn.edu/shibboleth/default
5
38
 
6
- for_apache_host 'SOMEHOSTNAME.COM' do
7
- # UNCOMMENT THIS IF YOUR SHIB STUFF LIVES IN A NON-STANDARD LOCATION
8
- # set :shib_prefix, '/swadm/etc/shibboleth'
9
- for_site 'SOMESITENAME1.COM' do
39
+ set :idp_metadata_url, 'YOUR_IDP_METADATA_URL' # REQUIRED, https://idp-test.shib.umn.edu/metadata.xml
40
+ set :error_support_contact, 'YOUR_ERROR_SUPPORT_EMAIL_ADDRESS' # OPTIONAL
41
+
42
+ # Can be either
43
+ # for_apache_host
44
+ # or
45
+ # for_iis_host
46
+ for_apache_host 'SOMEHOSTNAME.COM' do # REQUIRED
47
+ # uncomment if your shib stuff lives in a non-standard location
48
+ # set :shib_prefix, '/swadm/etc/shibboleth' # OPTIONAL
49
+
50
+ # uncomment if and fill-in if you are using IIS
51
+ # set :site_id, "YOU_MUST_SET_THE_SITE_ID_HERE" # REQUIRED if for_iis_host
52
+ #
53
+ # replace with the host name of your server
54
+ for_site 'SOMESITENAME1.COM' do # REQUIRED
10
55
  # Each strategy must set this for exactly one site
11
56
  # its used as the authoritative source to from which all other
12
57
  # sites metadata's X509Certificate should match
13
58
  # the sp-key.pem and sp-cert.pem files from this host should be
14
59
  # copied to all other hosts underneath the strategy
15
- #
16
- set :is_key_originator, true
17
- protect 'SOME_PATH_YOU_WANT_TO_REQUIRE_AUTH'
18
- end
19
- for_site 'SOMESITENAME2.COM' do
20
- protect 'SOME_PATH_YOU_WANT_OPTIONAL_AUTH' do
21
- set :flavor, :authentication_optional
60
+ set :is_key_originator, true # REQUIRED, see instructions
61
+ protect '/' do # REQUIRED
62
+ # delete this line if you want to require auth for the whole site
63
+ set :flavor, :authentication_optional # OPTIONAL
64
+ # There are three "flavors":
65
+ # authentication_required: defaults to this if unspecified
66
+ # i.e. (no do-end block required)
67
+ # protect 'secure'
68
+ #
69
+ # authentication_optional: Makes it possible for
70
+ # the app layer to redirect to Shibboleth.sso/Login
71
+ # i.e.
72
+ # protect 'lazy_auth' do
73
+ # set :flavor, :authentication_optional
74
+ # end
75
+ # authentication_required_for_specific_users: Require auth and restrict to
76
+ # a particular set of users (not-tested extensively)
77
+ # i.e.
78
+ # protect 'specific_users' do
79
+ # set :flavor, :authentication_required_for_specific_users
80
+ # set :specific_users, %w(SOMEUSER@SOME.DOMAIN.COM ANOTHERUSER@SOME.DOMAIN.COM)
81
+ # end
22
82
  end
83
+ # ... for each protected dir for this site ...
23
84
  end
24
- for_site 'SOMESITENAME3.COM' do
25
- protect 'SOME_PATH_YOU_WANT_TO_RESTRICTED_TO_PARTICULAR_USERS' do
26
- set :flavor, :authentication_required_for_specific_users
27
- set :specific_users, %w(SOMEUSER@SOME.DOMAIN.COM ANOTHERUSER@SOME.DOMAIN.COM)
28
- end
29
- end
30
- end
31
- for_iis_host 'SOMEIISHOSTNAME.COM' do
32
- for_site 'SOMEIISSITENAME1.COM' do
33
- set :site_id, "YOU_MUST_SET_THE_SITE_ID_HERE"
34
- protect 'SOME_PATH_YOU_WANT_TO_REQUIRE_AUTH'
35
- end
85
+ # ... for each site on this host ...
36
86
  end
87
+ # ... for each host within this strategy (using this entity_id)
37
88
  end
38
- Slh.clone_strategy_for_new_idp :test_idp,
39
- :production_idp,
40
- 'THE_PRODUCTION_IDP_METADATA_URL'
89
+ # ... for each strategy/aka entity_id ...
90
+ #
91
+ # Uncomment this line if you want to create a new strategy that is identical
92
+ # an existing one but points at a different IDP entity URL
93
+ #
94
+ # Slh.clone_strategy_for_new_idp :test_idp, # OPTIONAL
95
+ # :production_idp,
96
+ # 'THE_PRODUCTION_IDP_METADATA_URL'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{shibboleths_lil_helper}
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joe Goggins"]
12
- s.date = %q{2011-11-02}
12
+ s.date = %q{2011-11-08}
13
13
  s.default_executable = %q{slh}
14
14
  s.description = %q{See the summary text.}
15
15
  s.email = %q{goggins@umn.edu}
@@ -2,14 +2,14 @@
2
2
  # Slh.define_idp_meta_data :default, 'https://idp-test.shib.umn.edu/metadata.xml'
3
3
  # Slh.define_error_support_contact :default, 'goggins@umn.edu'
4
4
  #
5
- Slh.define_strategy :dummy1,
5
+ Slh.for_strategy :dummy1,
6
6
  :sp_entity_id => 'https://shib-local-vm1.asr.umn.edu/rhel5_sp1',
7
7
  :idp_metadata_url => 'https://idp-test.shib.umn.edu/metadata.xml',
8
8
  :error_support_contact => 'goggins@umn.edu' do
9
9
  for_host 'shib-local-vm1.asr.umn.edu' do
10
- for_app 'https://shib-local-vm1.asr.umn.edu' do
11
- protect_location '/secure'
12
- protect_location '/lazy', :with => :lazy_authentication
10
+ for_site 'https://shib-local-vm1.asr.umn.edu' do
11
+ protect '/secure'
12
+ protect '/lazy', :flavor => :authentication_optional
13
13
  end
14
14
  end
15
15
  end
@@ -1,17 +1,9 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestShibbolethsLilHelper < Test::Unit::TestCase
4
- # should "have a Slh namespace that will contain all classes contained" do
5
- # assert Slh.class == Module
6
- # end
7
- # should "provides class representing core shibboleth model-ish ideas" do
8
- # assert Slh::Models::App.class == Class
9
- # assert Slh::Models::Host.class == Class
10
- # # TODO add more
11
- # end
12
- # should "provide some top level methods for using the tool" do
13
- # # TODO add more
14
- # end
4
+ should "have a Slh namespace that will contain all classes contained" do
5
+ assert Slh.class == Module
6
+ end
15
7
 
16
8
  # context "with :dummy1 strategy" do
17
9
  # setup do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 2
9
- version: 1.0.2
8
+ - 3
9
+ version: 1.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joe Goggins
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-11-02 00:00:00 -05:00
17
+ date: 2011-11-08 00:00:00 -06:00
18
18
  default_executable: slh
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency