rack_warden 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,15 +5,17 @@ module RackWarden
5
5
  class App < Sinatra::Base
6
6
  enable :sessions
7
7
  register Sinatra::Flash
8
-
8
+
9
9
  set :config_files, [ENV['RACK_WARDEN_CONFIG_FILE'], 'rack_warden.yml', 'config/rack_warden.yml'].compact.uniq
10
10
  set :layout, :'rw_layout.html'
11
11
  set :default_route, '/'
12
12
  set :database_config => nil #, "sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db"
13
+ set :database_default => "sqlite3::memory:" #"sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db"
13
14
  set :recaptcha, Hash.new
14
15
  set :require_login, nil
15
16
  set :allow_public_signup, false
16
17
  set :log_path, File.join(Dir.pwd, 'log', 'rack_warden.log')
18
+ set :user_table_name, nil
17
19
 
18
20
  # Load config from file, if any exist.
19
21
  Hash.new.tap do |hash|
@@ -34,7 +36,7 @@ module RackWarden
34
36
  #
35
37
  def initialize(parent_app_instance=nil, *args, &block)
36
38
  initialization_args = args.dup
37
- puts "INITIALIZE middleware instance [parent_app_instance, self, args, block]: #{[parent_app_instance, self, args, block]}"
39
+ puts "RW INITIALIZE middleware instance [parent_app_instance, self, args, block]: #{[parent_app_instance, self, args, block]}"
38
40
  # extract options.
39
41
  opts = args.last.is_a?(Hash) ? args.pop : {}
40
42
  rack_warden_app_class = self.class
@@ -42,7 +44,8 @@ module RackWarden
42
44
  puts "RW has parent: #{parent_app_instance}"
43
45
 
44
46
  # Save original views from opts.
45
- rack_warden_app_class.set(:original_views, opts.has_key?(:views) ? rack_warden_app_class.views : nil)
47
+ #rack_warden_app_class.set(:original_views, opts.has_key?(:views) ? rack_warden_app_class.views : nil)
48
+ rack_warden_app_class.set(:original_views, rack_warden_app_class.views)
46
49
 
47
50
  # Set app settings with remainder of opts.
48
51
  rack_warden_app_class.set opts if opts.any?
@@ -52,24 +55,40 @@ module RackWarden
52
55
 
53
56
  # Do framework setup.
54
57
  framework_module = Frameworks::Base.select_framework(binding)
58
+ puts "RW framework_module #{framework_module}"
55
59
  if framework_module
56
60
  framework_module.setup_framework
57
61
 
58
62
  # Manipulate views
59
63
  new_views = []
60
- original_views = self.class.original_views
64
+ #original_views = self.class.original_views
61
65
  # append parent rails views folder unless opts.has_key?(:views)
62
- #new_views << default_parent_views unless opts.has_key?(:views)
63
- new_views << framework_module.views_path unless opts.has_key?(:views)
66
+ #new_views << framework_module.views_path unless opts[:views]==false #opts.has_key?(:views)
64
67
  # append original_views, if original_views
65
- new_views << original_views if original_views
66
- self.class.set(:views => [new_views, Array(self.class.views)].flatten.compact.uniq) if new_views.any?
68
+ #new_views << original_views if original_views
69
+ #self.class.set(:views => [new_views, Array(self.class.views)].flatten.compact.uniq) if new_views.any?
70
+
71
+ new_views.unshift rack_warden_app_class.original_views
72
+ new_views.unshift framework_module.views_path unless rack_warden_app_class.views==false
73
+ new_views.unshift rack_warden_app_class.views
74
+ rack_warden_app_class.set :views, new_views.flatten.compact.uniq
75
+
67
76
  puts "RW views: #{self.class.views}"
68
77
  end
69
78
  end
70
79
  # finally, send parent app to super, but don't send the use-block (thus the empty proc)
71
80
  super(parent_app_instance, &Proc.new{})
72
81
  end
82
+
83
+ # For testing interception of request.
84
+ # This might be breaking older rails installations
85
+ # if development?
86
+ # def call(env={})
87
+ # puts "RW instance.app #{app}"
88
+ # puts "RW instance.call(env) #{env.to_yaml}"
89
+ # super(env)
90
+ # end
91
+ # end
73
92
 
74
93
  use Warden::Manager do |config|
75
94
  # Tell Warden how to save our User info into a session.
@@ -83,11 +102,11 @@ module RackWarden
83
102
  config.scope_defaults :default,
84
103
  # "strategies" is an array of named methods with which to
85
104
  # attempt authentication. We have to define this later.
86
- strategies: [:password],
105
+ :strategies => [:password],
87
106
  # The action is a route to send the user to when
88
107
  # warden.authenticate! returns a false answer. We'll show
89
108
  # this route below.
90
- action: 'auth/unauthenticated'
109
+ :action => 'auth/unauthenticated'
91
110
  # When a user tries to log in and cannot, this specifies the
92
111
  # app to send the user to.
93
112
  config.failure_app = self
@@ -7,7 +7,8 @@ module RackWarden
7
7
  # Select the framework of the parent app.
8
8
  def select_framework(env)
9
9
  puts "RW framework constants: #{Frameworks.constants}"
10
- Frameworks.constants.dup.tap{|_constants| _constants.delete(Base)}.each do |c|
10
+ Frameworks.constants.dup.tap{|_constants| _constants.delete(:Base)}.each do |c|
11
+ puts "RW framework constant #{c}"
11
12
  r = Frameworks.const_get(c).framework_selector(env) #rescue nil
12
13
  return r if r
13
14
  end
@@ -23,7 +24,7 @@ module RackWarden
23
24
 
24
25
  ### Methods extended into framework module ###
25
26
 
26
- attr_accessor :parent_app_instance, :parent_app_class, :rack_warden_app_instance, :rack_warden_app_class
27
+ attr_accessor :parent_app_instance, :parent_app_class, :parent_app, :rack_warden_app_instance, :rack_warden_app_class
27
28
 
28
29
  # Sets framework module with variables from env (the scope of the parent app's initializer),
29
30
  # and runs the framework selector logic.
@@ -33,6 +34,7 @@ module RackWarden
33
34
  @initialization_args = env.eval 'initialization_args'
34
35
  @parent_app_instance = env.eval 'parent_app_instance'
35
36
  @parent_app_class = @parent_app_instance.class
37
+ @parent_app = @parent_app_instance.is_a?(Class) ? @parent_app_instance : @parent_app_class
36
38
  @rack_warden_app_instance = env.eval 'self'
37
39
  @rack_warden_app_class = @rack_warden_app_instance.class
38
40
  selector && self
@@ -5,8 +5,8 @@ module RackWarden
5
5
  extend Base
6
6
 
7
7
  def selector
8
- puts "RW Rails.selector"
9
- parent_app_class.parents.find{|x| x.to_s=='ActionDispatch'}
8
+ puts "RW Rails.selector parent_app.ancestors #{parent_app.ancestors}"
9
+ parent_app.ancestors.find{|x| x.to_s[/Rails|ActionDispatch/]} #{|x| x.to_s=='ActionDispatch'}
10
10
  end
11
11
 
12
12
  def views_path
@@ -14,7 +14,7 @@ module RackWarden
14
14
  end
15
15
 
16
16
  def setup_framework
17
- puts "RW Rails.setup_framework parent_app_class #{parent_app_class}"
17
+ puts "RW Rails.setup_framework parent_app #{parent_app}"
18
18
  ApplicationController.send(:include, RackWarden::App::RackWardenHelpers)
19
19
 
20
20
  # Define class method 'require_login' on framework controller.
@@ -5,27 +5,29 @@ module RackWarden
5
5
  extend Base
6
6
 
7
7
  def selector
8
- puts "RW Sinatra.selector"
9
- parent_app_class.ancestors.find{|x| x.to_s=='Sinatra::Base'}
8
+ puts "RW Sinatra.selector parent_app.ancestors #{parent_app.ancestors}"
9
+ parent_app.ancestors.find{|x| x.to_s=='Sinatra::Base'}
10
10
  end
11
11
 
12
12
  def views_path
13
- [File.join(Dir.pwd, "views/rack_warden"), File.join(Dir.pwd,"views")
13
+ [File.join(Dir.pwd, "views/rack_warden"), File.join(Dir.pwd,"views")]
14
14
  end
15
15
 
16
16
  def setup_framework
17
- puts "RW Sinatra.setup_framework parent_app_class #{parent_app_class}"
18
- parent_app_class.helpers(RackWarden::App::RackWardenHelpers)
17
+ puts "RW Sinatra.setup_framework parent_app #{parent_app}"
18
+ parent_app.helpers(RackWarden::App::RackWardenHelpers)
19
19
 
20
20
  # Define class method 'require_login' on framework controller.
21
- parent_app_class.instance_eval do
21
+ parent_app.instance_eval do
22
22
  def self.require_login(*args)
23
+ puts "RW class #{self}.require_login #{args}"
23
24
  before(*args) do
25
+ puts "RW instance #{self}.require_login #{request.path_info}"
24
26
  require_login
25
27
  end
26
28
  end
27
29
  end
28
- parent_app_class.require_login(rack_warden_app_class.require_login) if rack_warden_app_class.require_login != false
30
+ parent_app.require_login(rack_warden_app_class.require_login) if rack_warden_app_class.require_login != false
29
31
  end
30
32
 
31
33
  end # Sinatra
@@ -1,13 +1,16 @@
1
-
1
+ # Setup the database connection, schema, etc.
2
2
  module RackWarden
3
3
 
4
4
  # Best guess at framework database settings.
5
5
  def self.get_database_config
6
- App.database_config ||
7
- (App.database_config == false && "sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db") ||
8
- (ActiveRecord::Base.connection_config rescue nil) ||
9
- (DataMapper.repository(:default).adapter[:options] rescue nil) ||
10
- "sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db"
6
+ case
7
+ when App.database_config.to_s.downcase == 'auto';
8
+ (ActiveRecord::Base.connection_config rescue nil) ||
9
+ (DataMapper.repository(:default).adapter[:options] rescue nil) ||
10
+ App.database_default
11
+ when App.database_config; App.database_config
12
+ else App.database_default
13
+ end
11
14
  end
12
15
 
13
16
  puts "RW DataMapper using log_path #{App.log_path}"
@@ -20,7 +23,7 @@ module RackWarden
20
23
  puts "RW requiring model files in #{File.join(File.dirname(__FILE__), 'models/*')}"
21
24
  Dir.glob(File.join(File.dirname(__FILE__), 'models/*')).each {|f| puts f; require f}
22
25
 
23
- puts "RW finalizing"
26
+ puts "RW DataMapper.finalize"
24
27
  # Tell DataMapper the models are done being defined
25
28
  DataMapper.finalize
26
29
 
@@ -4,10 +4,12 @@ module RackWarden
4
4
  class User
5
5
  include DataMapper::Resource
6
6
  include BCrypt
7
+
8
+ storage_names[:default] = App.user_table_name if App.user_table_name
7
9
 
8
- property :id, Serial, key: true
9
- property :username, String, length: 128, unique: true, required: true, default: lambda {|r,v| r.instance_variable_get :@email}
10
- property :email, String, length: 128, unique: true, required: true #, default: 'error'
10
+ property :id, Serial, :key => true
11
+ property :username, String, :length => 128, :unique => true, :required => true, :default => lambda {|r,v| r.instance_variable_get :@email}
12
+ property :email, String, :length => 128, :unique => true, :required => true #, :default => 'error'
11
13
 
12
14
  property :password, BCryptHash
13
15
 
@@ -30,7 +32,7 @@ module RackWarden
30
32
 
31
33
  # # Create a test User
32
34
  # if User.count == 0
33
- # @user = User.create(username: "admin")
35
+ # @user = User.create(:username => "admin")
34
36
  # @user.password = "admin"
35
37
  # @user.save
36
38
  # end
@@ -1,3 +1,3 @@
1
1
  module RackWarden
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -1,3 +1,9 @@
1
1
  <p>
2
2
  <h2>Protected Page Example</h2>
3
+ </p>
4
+
5
+ <p>
6
+ <%= DataMapper.repository.adapter.to_yaml.gsub(/\n|\r/, '<br>') %>
7
+ <%= DataMapper.repository.adapter.select('select * from SQLITE_MASTER').to_yaml.gsub(/\n|\r/, '<br>').gsub(/ /, '&nbsp;&nbsp;') %>
8
+
3
9
  </p>
metadata CHANGED
@@ -1,163 +1,174 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack_warden
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.6
3
+ version: !ruby/object:Gem::Version
4
+ hash: 17
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 7
10
+ version: 0.0.7
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - William Richardson
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2015-01-05 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
+
18
+ date: 2015-01-07 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
17
24
  - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.7'
20
- type: :development
25
+ - !ruby/object:Gem::Version
26
+ hash: 1
27
+ segments:
28
+ - 1
29
+ - 7
30
+ version: "1.7"
21
31
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
32
+ requirement: *id001
33
+ name: bundler
34
+ type: :development
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
24
39
  - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.7'
27
- - !ruby/object:Gem::Dependency
40
+ - !ruby/object:Gem::Version
41
+ hash: 35
42
+ segments:
43
+ - 10
44
+ - 0
45
+ version: "10.0"
46
+ prerelease: false
47
+ requirement: *id002
28
48
  name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ~>
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
49
  type: :development
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
35
60
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
61
+ requirement: *id003
42
62
  name: tux
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
63
  type: :development
64
+ - !ruby/object:Gem::Dependency
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
49
74
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
75
+ requirement: *id004
56
76
  name: thin
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
77
  type: :development
78
+ - !ruby/object:Gem::Dependency
79
+ version_requirements: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
63
88
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ! '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
89
+ requirement: *id005
70
90
  name: sinatra
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ! '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
91
  type: :runtime
92
+ - !ruby/object:Gem::Dependency
93
+ version_requirements: &id006 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
77
102
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ! '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
103
+ requirement: *id006
84
104
  name: sinatra-flash
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
105
  type: :runtime
106
+ - !ruby/object:Gem::Dependency
107
+ version_requirements: &id007 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
91
116
  prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ! '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
117
+ requirement: *id007
98
118
  name: bcrypt
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
119
  type: :runtime
120
+ - !ruby/object:Gem::Dependency
121
+ version_requirements: &id008 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ hash: 3
127
+ segments:
128
+ - 0
129
+ version: "0"
105
130
  prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
131
+ requirement: *id008
112
132
  name: data_mapper
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
133
  type: :runtime
134
+ - !ruby/object:Gem::Dependency
135
+ version_requirements: &id009 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
119
144
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ! '>='
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
145
+ requirement: *id009
126
146
  name: dm-sqlite-adapter
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
147
  type: :runtime
148
+ - !ruby/object:Gem::Dependency
149
+ version_requirements: &id010 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
156
+ - 0
157
+ version: "0"
133
158
  prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ! '>='
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
159
+ requirement: *id010
140
160
  name: warden
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ! '>='
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
161
  type: :runtime
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ! '>='
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- description: A warden/sinatra mini-app providing authentication and user management
154
- for any rack-based app.
155
- email:
162
+ description: A warden/sinatra mini-app providing authentication and user management for any rack-based app.
163
+ email:
156
164
  - wbr@mac.com
157
165
  executables: []
166
+
158
167
  extensions: []
168
+
159
169
  extra_rdoc_files: []
160
- files:
170
+
171
+ files:
161
172
  - .gitignore
162
173
  - Gemfile
163
174
  - LICENSE.txt
@@ -179,29 +190,38 @@ files:
179
190
  - lib/rack_warden/views/rw_new_user.html.erb
180
191
  - lib/rack_warden/views/rw_protected.html.erb
181
192
  - rack_warden.gemspec
182
- homepage: ''
183
- licenses:
193
+ homepage: ""
194
+ licenses:
184
195
  - MIT
185
- metadata: {}
186
196
  post_install_message:
187
197
  rdoc_options: []
188
- require_paths:
198
+
199
+ require_paths:
189
200
  - lib
190
- required_ruby_version: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ! '>='
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- required_rubygems_version: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - ! '>='
198
- - !ruby/object:Gem::Version
199
- version: '0'
201
+ required_ruby_version: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ hash: 3
207
+ segments:
208
+ - 0
209
+ version: "0"
210
+ required_rubygems_version: !ruby/object:Gem::Requirement
211
+ none: false
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ hash: 3
216
+ segments:
217
+ - 0
218
+ version: "0"
200
219
  requirements: []
220
+
201
221
  rubyforge_project:
202
- rubygems_version: 2.2.2
222
+ rubygems_version: 1.8.30
203
223
  signing_key:
204
- specification_version: 4
205
- summary: A warden/sinatra mini-app providing authentication and user management for
206
- any rack-based app
224
+ specification_version: 3
225
+ summary: A warden/sinatra mini-app providing authentication and user management for any rack-based app
207
226
  test_files: []
227
+
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NDMyOGMzYTQzNmVlODAwMTRjMDIxZGE4ZmQyNmJjNDRmNDIxNGUwZA==
5
- data.tar.gz: !binary |-
6
- NzIwMTkzZWNhMmFkYjk5MmE4MGRhYzMxODE3MTA1MjMwZWFlMmI4MA==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- YmUzYWRkMDZjZWI4MTBiZmYxZGMyZGE1M2ZmMGI3ZTU0ZDA4NDZkYzAzOThm
10
- YjE3NTI1ZmViNDZmMmJkNDBmMTAxZGU4NTUyYWJhNDY0YzRkYzkxODJlYWI5
11
- MDA4MTJlNTM0YTk1MDc0NzlmNTQ3YTdhMTk4M2MwNTY2M2E3Njk=
12
- data.tar.gz: !binary |-
13
- ZjMyZjgwNzlmYWZkOTllODA2OTVhNDZmMzM4ZjU2ZTlhYzA1ZmIzZTVkMDdl
14
- MjMzODU4ZTVjOWYyNGEwNmFmYzY2NGI0ZWVhNjY0MjZmOTlhZTQ0OTAyODYz
15
- YTEwMjZkYzdkZDM1M2ZlOTMxZjBiMzBmNjdjMjQyOTM0NTllNDI=