izanami 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmFiMDJhNDIzZGM5ZjNhNGIwYzMyMjZiZjgxYWNjZmU1MzUzMDNiMg==
4
+ NmFiZWJjZDIxNDNkMzI2ZmUwNjg3NDRhYzA4ZWE2MjE3YWQ3NzM4MQ==
5
5
  data.tar.gz: !binary |-
6
- NzM2N2FjODYzMmI4NzhmMTJkYWMwMzEyZTY3ZWQzMTYyYThkNmQ5Ng==
6
+ NWE3NjI5Nzc0NGJiMTU1NDA2M2I5OTE3YzA1MDAzMDNhMTQzZmIwMg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OTIyM2NhOTUyMDQzZTY0YjcwOGRkZWVmY2NlOWZkN2Q0YzIzOWU2YmY1MWI2
10
- MWJmODcxZWU4Mjg3ZTZjZjcyN2U1NjJlM2VkZDM3Y2ViY2E0N2E2ZTkxMTBj
11
- NDA0NGFmYWUzNzkyODU3MDU2NjA1NDQ2OWM5ZDgyYzBhZTE1ZDc=
9
+ Njc2OWJhMmNlNGVmM2QzNGE0MGQ2M2YyZTA3OGY4ZTE5M2EwOThkMzM4ZGEy
10
+ NzA3NDZmNjAxMWFlZTc2YTc3MmY4YzVjNjRlOTJhOTIxNzI4Mzc4ZjYwZTgy
11
+ YmExOTM1ODA0NzQ1MjYwZWFhMWRjZWM0ZGU4ZTcyODBhM2M0Mzc=
12
12
  data.tar.gz: !binary |-
13
- OTNjZjFjOGM4YmY3YmQ2OWYzMjUwNGE2MjFlMmEzODdiZTVkNzg2YThiZGNk
14
- MzUxOWQxMzJkOTA0YzhiYzc5ZjRjZGNmZDJlMjg2MzVhNjI3Y2U0Mzk2Mzcx
15
- YzBhNDc1NWQ2NjZmMjg1OGZiMmFhN2FlMDYzOGQxNjE5N2ZiOWI=
13
+ ZDZjYmU3NTAyMTcxZjk1OGM3YTNhOGFmMjA0YTYyMWRlOTA2NGM4MzVkMjdh
14
+ ZWZkNGQ2ZTdjMzdmZGE4N2QwOTg1NzRhNjBhZTIwODJhM2MzYmViZTQwNDE2
15
+ ZDc2M2RiZDgyZjRlMTAwM2ZlYTdlNWE2MWEyZGU5MWY1YzEzMGI=
data/README.md CHANGED
@@ -52,8 +52,9 @@ Izanami configuration is handled via environment variables:
52
52
 
53
53
  * `RACK_ENV`: App environment (e.g: `development`, `production`, `test`. Defaults to `development`).
54
54
  * `IZANAMI_PORT`: Web app port (defaults to `4567`).
55
- * `IZANAMI_USER`: User for the HTTP Basic Authentication (e.g: `izanami`).
56
- * `IZANAMI_PASSWORD`: Password for the HTTP Basic Authentication (e.g: `$3cr3t`).
55
+ * `IZANAMI_AUTH`: Check if the app should use the built in basic auth module. Pass `disable` or `disabled` to skip it (is `enabled` by default).
56
+ * `IZANAMI_USER`: User for the HTTP Basic Authentication, if `IZANAMI_AUTH` is enabled (e.g: `izanami`).
57
+ * `IZANAMI_PASSWORD`: Password for the HTTP Basic Authentication, if `IZANAMI_AUTH` is enabled (e.g: `$3cr3t`).
57
58
  * `IZANAMI_REDIS_URL`: Redis configuration in URL format (defaults to `redis://127.0.0.1:6379/0`).
58
59
  * `IZANAMI_SANDBOX`: Path to the directory with the capistrano recipes.
59
60
  * `IZANAMI_WATCHDOG_SLEEP_TIME`: The time the watchdog sleeps before update the sandbox git repository (default to 300 seconds).
@@ -62,8 +63,12 @@ Izanami configuration is handled via environment variables:
62
63
 
63
64
  Izanami runs with `thin` by default. You can start the app with:
64
65
 
66
+ # With HTTP Basic Authentication
65
67
  $ IZANAMI_USER=izanami IZANAMI_PASSWORD=izanami IZANAMI_SANDBOX=/path/to/recipes izanami app
66
68
 
69
+ # Without HTTP Basic Authentication
70
+ $ IZANAMI_AUTH=disable IZANAMI_SANDBOX=/path/to/recipes izanami app
71
+
67
72
  But Izanami is a simple Sinatra app, so you can run it with any ruby server that handles a `config.ru` file:
68
73
 
69
74
  ```ruby
data/lib/izanami/app.rb CHANGED
@@ -13,10 +13,6 @@ module Izanami
13
13
  # handle PUT and DELETE actions
14
14
  use Rack::MethodOverride
15
15
 
16
- use Rack::Auth::Basic do |user, password|
17
- user == ENV['IZANAMI_USER'] && password == ENV['IZANAMI_PASSWORD']
18
- end
19
-
20
16
  configure :development, :test do
21
17
  set :stylesheets, ['/css/bootstrap.css', '/css/app.css']
22
18
  end
@@ -162,5 +158,22 @@ module Izanami
162
158
  out.close
163
159
  end
164
160
  end
161
+
162
+ # Sinatra overrides
163
+ # =====================
164
+
165
+ def self.new(*)
166
+ protect(super)
167
+ end
168
+
169
+ def self.protect(app)
170
+ if ENV['IZANAMI_AUTH'].to_s.match(/disabled?/i)
171
+ app
172
+ else
173
+ Rack::Auth::Basic.new(app) do |user, password|
174
+ user == ENV['IZANAMI_USER'] && password == ENV['IZANAMI_PASSWORD']
175
+ end
176
+ end
177
+ end
165
178
  end
166
179
  end
@@ -1,3 +1,3 @@
1
1
  module Izanami
2
- VERSION = "0.17.0"
2
+ VERSION = "0.18.0"
3
3
  end
data/spec/helper.rb CHANGED
@@ -1,8 +1,9 @@
1
- ENV['RACK_ENV'] ||= 'test'
2
- ENV['IZANAMI_USER'] = 'spec'
3
- ENV['IZANAMI_PASSWORD'] = 'spec'
4
- ENV['IZANAMI_SANDBOX'] = File.expand_path('..', __FILE__) + '/sandbox'
5
- ENV['IZANAMI_REDIS_URL'] ||= 'redis://127.0.0.1:6379/0'
1
+ # Set configuration for specs.
2
+ ENV['RACK_ENV'] ||= 'test'
3
+ ENV['IZANAMI_USER'] = 'spec'
4
+ ENV['IZANAMI_PASSWORD'] = 'spec'
5
+ ENV['IZANAMI_SANDBOX'] = File.expand_path('..', __FILE__) + '/sandbox'
6
+ ENV['IZANAMI_REDIS_URL'] ||= 'redis://127.0.0.1:6379/0'
6
7
 
7
8
  require 'bundler'
8
9
  Bundler.setup(:default, :test)
@@ -1,48 +1,7 @@
1
1
  require_relative '../helper'
2
2
  require 'izanami/app'
3
3
 
4
- describe Izanami::App do
5
- include Rack::Test::Methods
6
-
7
- def app
8
- Izanami::App
9
- end
10
-
11
- def worker
12
- fork { yield }
13
- end
14
-
15
- # Simulate Worker::Command
16
- def publish(redis_url, id)
17
- redis = Redis.new(url: redis_url)
18
-
19
- # wait for a subscriber to connect to a channel
20
- loop do
21
- subscribers = redis.info['pubsub_channels']
22
- break if subscribers != '0'
23
- end
24
-
25
- key = "izanami:commands:#{id}"
26
- channel = "izanami:commands:#{id}:channel"
27
- output = 'PONG'
28
- status = 'success'
29
-
30
- redis.publish channel, output
31
- redis.multi do
32
- redis.publish channel, '--EOC--'
33
- redis.hset key, 'status', status
34
- redis.hset key, 'output', output
35
- end
36
- end
37
-
38
- def save_commands(redis, commands)
39
- commands.each do |command|
40
- # set all the values in redis in one step
41
- redis.hmset "izanami:commands:#{command['id']}", *command.to_a.flatten
42
- redis.sadd "izanami:commands:ids", command['id']
43
- end
44
- end
45
-
4
+ shared_examples 'web app' do
46
5
  let!(:redis_url) { ENV['IZANAMI_REDIS_URL'] }
47
6
  let(:redis) { Redis.new(url: redis_url) }
48
7
 
@@ -64,10 +23,6 @@ describe Izanami::App do
64
23
  end
65
24
 
66
25
  let(:commands) { [command_a, command_b] }
67
- let(:user) { ENV['IZANAMI_USER'] }
68
- let(:password) { ENV['IZANAMI_PASSWORD'] }
69
-
70
- before { authorize(user, password) }
71
26
 
72
27
  after { redis.flushdb }
73
28
 
@@ -193,3 +148,61 @@ describe Izanami::App do
193
148
  end
194
149
  end
195
150
  end
151
+
152
+ describe Izanami::App do
153
+ include Rack::Test::Methods
154
+
155
+ def app
156
+ Izanami::App.new
157
+ end
158
+
159
+ def worker
160
+ fork { yield }
161
+ end
162
+
163
+ # Simulate Worker::Command
164
+ def publish(redis_url, id)
165
+ redis = Redis.new(url: redis_url)
166
+
167
+ # wait for a subscriber to connect to a channel
168
+ loop do
169
+ subscribers = redis.info['pubsub_channels']
170
+ break if subscribers != '0'
171
+ end
172
+
173
+ key = "izanami:commands:#{id}"
174
+ channel = "izanami:commands:#{id}:channel"
175
+ output = 'PONG'
176
+ status = 'success'
177
+
178
+ redis.publish channel, output
179
+ redis.multi do
180
+ redis.publish channel, '--EOC--'
181
+ redis.hset key, 'status', status
182
+ redis.hset key, 'output', output
183
+ end
184
+ end
185
+
186
+ def save_commands(redis, commands)
187
+ commands.each do |command|
188
+ # set all the values in redis in one step
189
+ redis.hmset "izanami:commands:#{command['id']}", *command.to_a.flatten
190
+ redis.sadd "izanami:commands:ids", command['id']
191
+ end
192
+ end
193
+
194
+ context 'with authorization enabled' do
195
+ let(:user) { ENV['IZANAMI_USER'] }
196
+ let(:password) { ENV['IZANAMI_PASSWORD'] }
197
+
198
+ before { authorize(user, password) }
199
+
200
+ it_should_behave_like 'web app'
201
+ end
202
+
203
+ context 'with authorization disabled' do
204
+ before { ENV['IZANAMI_AUTH'] = 'disabled' }
205
+
206
+ it_should_behave_like 'web app'
207
+ end
208
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: izanami
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Hernández
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-26 00:00:00.000000000 Z
11
+ date: 2013-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler