rack-staging 0.1.0
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.
- data/README.textile +18 -0
- data/lib/rack-staging.rb +52 -0
- data/lib/rack-staging/index.html +15 -0
- data/lib/rack-staging/version.rb +5 -0
- metadata +90 -0
data/README.textile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
h1. Staging Gem
|
2
|
+
|
3
|
+
Staging rack application purpose to protect you Rails application from anonymous and prying.
|
4
|
+
|
5
|
+
h1. Usage
|
6
|
+
|
7
|
+
h2. Examples
|
8
|
+
|
9
|
+
h3. In you Rails initializer
|
10
|
+
|
11
|
+
<pre><code>config.middleware.use 'Rack::Staging', :code => 'Hfgo_JHg+47'</code></pre>
|
12
|
+
|
13
|
+
<pre><code>config.middleware.use 'Rack::Staging',
|
14
|
+
:code => 'Hfgo_JHg+47',
|
15
|
+
:template_path => "#{Rails.root}/app/views/staging/index.html" # custom template</code></pre>
|
16
|
+
|
17
|
+
h3. … and now you are ready to protected staging!
|
18
|
+
|
data/lib/rack-staging.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Hi! I'am rack middleware!
|
2
|
+
# I was born for protect you staging application from anonymous and prying
|
3
|
+
|
4
|
+
# My author's name was Aleksandr Koss. Mail him at kossnocorp@gmail.com
|
5
|
+
# Nice to MIT you!
|
6
|
+
|
7
|
+
module Rack
|
8
|
+
class Staging
|
9
|
+
|
10
|
+
def initialize(app, options = {})
|
11
|
+
@app = app
|
12
|
+
@options = options
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
request = Rack::Request.new(env)
|
17
|
+
|
18
|
+
# Check code in session and return Rails call if is valid
|
19
|
+
return @app.call(env) if already_auth?(request)
|
20
|
+
|
21
|
+
# If post method check :code_param value
|
22
|
+
if request.post? and code_valid?(request.params["staging_code"])
|
23
|
+
request.session[:staging_code] = request.params["staging_code"]
|
24
|
+
[301, {'Location' => '/'}, ''] # Redirect if code is valid
|
25
|
+
else
|
26
|
+
render_staging
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
# Render staging html file
|
32
|
+
def render_staging
|
33
|
+
[200, {'Content-Type' => 'text/html'}, [
|
34
|
+
::File.open(html_template, 'rb').read
|
35
|
+
]]
|
36
|
+
end
|
37
|
+
|
38
|
+
def html_template
|
39
|
+
@options[:template_path] || ::File.expand_path('../rack-staging/index.html', __FILE__)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Validate code
|
43
|
+
def code_valid?(code)
|
44
|
+
@options[:code] == code
|
45
|
+
end
|
46
|
+
|
47
|
+
def already_auth?(request)
|
48
|
+
code_valid?(request.session[:staging_code])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Staging protection</title>
|
5
|
+
</head>
|
6
|
+
<body onLoad='document.forms[0].elements[0].focus();' style='text-align: center; margin-top:100px'>
|
7
|
+
<form action="/" method="post">
|
8
|
+
<label>
|
9
|
+
<h1>Staging code</h1>
|
10
|
+
<input type="password" name="staging_code" />
|
11
|
+
</label>
|
12
|
+
<input type="submit" />
|
13
|
+
</form>
|
14
|
+
</body>
|
15
|
+
</html>
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rack-staging
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Aleksandr Koss
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-08-31 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: bundler
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15424063
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
- rc
|
35
|
+
- 5
|
36
|
+
version: 1.0.0.rc.5
|
37
|
+
type: :development
|
38
|
+
version_requirements: *id001
|
39
|
+
description: Staging rack application purpose to protect you Rails application from anonymous and prying.
|
40
|
+
email:
|
41
|
+
- kossnocorp@gmail.com
|
42
|
+
executables: []
|
43
|
+
|
44
|
+
extensions: []
|
45
|
+
|
46
|
+
extra_rdoc_files: []
|
47
|
+
|
48
|
+
files:
|
49
|
+
- lib/rack-staging/index.html
|
50
|
+
- lib/rack-staging/version.rb
|
51
|
+
- lib/rack-staging.rb
|
52
|
+
- README.textile
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: http://github.com/kossnocorp/staging
|
55
|
+
licenses: []
|
56
|
+
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
hash: 3
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 23
|
77
|
+
segments:
|
78
|
+
- 1
|
79
|
+
- 3
|
80
|
+
- 6
|
81
|
+
version: 1.3.6
|
82
|
+
requirements: []
|
83
|
+
|
84
|
+
rubyforge_project: rack-staging
|
85
|
+
rubygems_version: 1.3.7
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: Protect you Rails application from anonymous and prying.
|
89
|
+
test_files: []
|
90
|
+
|