sinatra-redis-auth 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,28 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem "rainbows"
7
+ gem "sinatra", "~> 1.2.6"
8
+ gem 'redis-model-extension', "~> 0.2.0"
9
+
10
+ gem "rake"
11
+ gem "rack", "~> 1.3.0"
12
+ gem "rack-flash"
13
+ gem "tilt", "~> 1.3.2"
14
+ gem 'redis-rack'
15
+ gem "mail"
16
+
17
+ group :development do
18
+ gem "shoulda", ">= 0"
19
+ gem 'shoulda-context'
20
+ gem "rdoc", "~> 3.12"
21
+ gem "bundler", "~> 1.0.0"
22
+ gem "jeweler", "~> 1.8.3"
23
+ gem "turn", "~> 0.8.2"
24
+ gem "minitest"
25
+ gem "ansi", "~> 1.2.5"
26
+ gem "thin"
27
+ gem "shotgun"
28
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Ondrej Bartas
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
1
+ = redis-auth
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to redis-auth
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2012 Ondrej Bartas. See LICENSE.txt for
18
+ further details.
19
+
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "sinatra-redis-auth"
18
+ gem.homepage = "http://github.com/ondrejbartas/sinatra-redis-auth"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Sinatra authentification with saving user data to redis}
21
+ gem.description = %Q{Sinatra authentification with saving user data to redis}
22
+ gem.email = "ondrej@bartas.cz"
23
+ gem.authors = ["Ondrej Bartas"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ task :default => :test
36
+
37
+ namespace :'sinatra-redis-auth' do
38
+ task :install do
39
+ FileUtils.mkdir_p('config') unless File.exists?('config')
40
+ ["redis_config.yml", "sinatra_mailer.rb"].each do |name|
41
+ unless File.exists?("config/#{name}")
42
+ puts "created config file: 'config/#{name}'"
43
+ FileUtils.cp(File.join(File.dirname(__FILE__),"../config/#{name}.example"), "config/#{name}")
44
+ end
45
+ end
46
+ end
47
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ Mailer.delivery_method[:type] = :sendmail
4
+
5
+ Mailer.credentials[:from] = 'ondrej@bartas.cz'
6
+ Mailer.credentials[:subject] = "Password reset"
7
+ Mailer.credentials[:body] = "Someone hopefully you, requested password rest"
@@ -0,0 +1,20 @@
1
+ test:
2
+ host: "127.0.0.1"
3
+ port: 6379
4
+ db: 3
5
+ session_db:5
6
+ development:
7
+ host: "127.0.0.1"
8
+ port: 6379
9
+ db: 0
10
+ session_db:1
11
+ stage:
12
+ host: "127.0.0.1"
13
+ port: 6379
14
+ db: 0
15
+ session_db:1
16
+ production:
17
+ host: "127.0.0.1"
18
+ port: 6379
19
+ db: 0
20
+ session_db:1
@@ -0,0 +1,6 @@
1
+ # config.ru
2
+ require './example_app.rb'
3
+
4
+ # Map applications
5
+ run Rack::URLMap.new \
6
+ "/" => ExampleApp.new
@@ -0,0 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ Mailer.delivery_method[:type] = :sendmail
4
+
5
+ Mailer.credentials[:from] = 'ondrej@bartas.cz'
6
+ Mailer.credentials[:subject] = "Password reset"
7
+ Mailer.credentials[:body] = "Someone hopefully you, requested password rest"
@@ -0,0 +1,20 @@
1
+ test:
2
+ host: "127.0.0.1"
3
+ port: 6379
4
+ db: 3
5
+ session_db: 5
6
+ development:
7
+ host: "127.0.0.1"
8
+ port: 6379
9
+ db: 0
10
+ session_db: 1
11
+ stage:
12
+ host: "127.0.0.1"
13
+ port: 6379
14
+ db: 0
15
+ session_db: 1
16
+ production:
17
+ host: "127.0.0.1"
18
+ port: 6379
19
+ db: 0
20
+ session_db: 1
@@ -0,0 +1,22 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'sinatra'
3
+ require 'sinatra/base'
4
+ require 'erb'
5
+ require 'yaml'
6
+ require '../lib/sinatra-redis-auth'
7
+ require './user'
8
+
9
+ class ExampleApp < Sinatra::Base
10
+ register Sinatra::SinatraRedisAuth
11
+ set :views, File.dirname(__FILE__) + '/views'
12
+
13
+ get "/" do
14
+ erb :index
15
+ end
16
+
17
+ get "/protected_page" do
18
+ login_required
19
+ erb :protected_page
20
+ end
21
+
22
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class User
3
+ REDIS_MODEL_CONF = {
4
+ :fields => {
5
+ :email => :to_s,
6
+ :password => :to_s,
7
+ :salt => :to_s,
8
+ :reset_token => :to_s,
9
+ },
10
+ :required => [:email,:password],
11
+ :redis_key => [:email],
12
+ :redis_aliases => {
13
+ :reset_token => [:reset_token]
14
+ }
15
+ }
16
+ include RedisModel
17
+ initialize_redis_model_methods REDIS_MODEL_CONF
18
+ include UserAuthModel
19
+
20
+ end
@@ -0,0 +1,3 @@
1
+ <h1>Index page of Example Auth App</h1>
2
+
3
+ <a href="/protected_page">Protected page</a>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Example sinatra auth app</title>
6
+ <body>
7
+ <% if @current_user %>
8
+ <%= @current_user.email %> | <a href="/sign_out"> Sign Out </a>
9
+ <% else %>
10
+ <a href="/sign_in"> Sign In </a> | <a href="/sign_up"> Sign Up </a>
11
+ <% end %>
12
+ <% if flash[:notice] %>
13
+ <i><%= flash[:notice] %></i>
14
+ <% end %>
15
+ <% if flash[:error] %>
16
+ <b><%= flash[:error] %></b>
17
+ <% end %>
18
+
19
+ <%= yield %>
20
+ </body>
21
+ </html>
@@ -0,0 +1 @@
1
+ <h1>Protected page of Example Auth App</h1>
@@ -0,0 +1,32 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ class Mailer
4
+
5
+ def self.delivery_method
6
+ @delivery_method ||= {:type => :sendmail, :options => {} }
7
+ end
8
+
9
+ def self.credentials
10
+ @credentials ||= {:from => 'ondrej@bartas.cz', :subject => "Password reset", :body => "Someone hopefully you, requested password rest"}
11
+ end
12
+
13
+ def self.send_mail args = {}
14
+ mail = Mail.new do
15
+ from Mailer.credentials[:from]
16
+ to args[:to]
17
+ subject Mailer.credentials[:subject]
18
+
19
+ text_part do
20
+ body Mailer.credentials[:body]+'\n'+args[:link]
21
+ end
22
+
23
+ html_part do
24
+ content_type 'text/html; charset=UTF-8'
25
+ body Mailer.credentials[:body].gsub(/\n/, '<br />')+"<br /><a href='#{args[:link]}'>#{args[:link]}</a>"
26
+ end
27
+ end
28
+ mail.delivery_method Mailer.delivery_method[:type], Mailer.delivery_method[:options]
29
+ mail.deliver if ENV['RACK_ENV'] != "test"
30
+ end
31
+
32
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module SessionDatabase
3
+
4
+ def self.config_session
5
+ if File.exists?('config/redis_config.yml')
6
+ conf = YAML.load_file('config/redis_config.yml')[ENV['RACK_ENV'] || 'development'].symbolize_keys
7
+ conf[:db] = conf[:session_db]
8
+ conf
9
+ else
10
+ FileUtils.mkdir_p('config') unless File.exists?('config')
11
+ FileUtils.cp(File.join(File.dirname(__FILE__),"../config/redis_config.yml.example"), 'config/redis_config.yml.example')
12
+ raise ArgumentError, "Redis configuration file does not exists -> 'config/redis_config.yml', please provide it! I have created example file in config directory..."
13
+ end
14
+ end
15
+
16
+ def self.url
17
+ conf = self.config_session
18
+ "redis://#{conf[:host]}:#{conf[:port]}/#{conf[:db]}"
19
+ end
20
+
21
+ end
@@ -0,0 +1,190 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'sinatra/base'
3
+ require 'redis-model-extension'
4
+ require 'rack'
5
+ require 'rack/session/redis'
6
+ require 'rack/flash'
7
+ require 'mail'
8
+ require File.expand_path("../session_database", __FILE__)
9
+ require File.expand_path("../mailer", __FILE__)
10
+ require File.expand_path("../user_auth_model", __FILE__)
11
+ require './config/mail_config'
12
+
13
+ module Sinatra
14
+ module SinatraRedisAuth
15
+ def self.registered(app)
16
+ app.use Rack::Session::Redis
17
+ app.use Rack::Flash, :accessorize => [:notice, :error]
18
+ app.set :sinatra_redis_auth_views, File.expand_path('../views/', __FILE__)
19
+
20
+ app.before do
21
+ if session[:user]
22
+ @current_user = User.get(:email => session[:user])
23
+ else
24
+ @current_user = nil
25
+ end
26
+ end
27
+
28
+ app.get '/sign_in' do
29
+ if session[:user]
30
+ redirect '/'
31
+ else
32
+ erb get_view_as_string("sign_in"), :layout => use_layout?
33
+ end
34
+ end
35
+
36
+ app.post '/sign_in' do
37
+ if user = User.authenticate(params[:email], params[:password])
38
+ pp user.email
39
+ session[:user] = user.email
40
+
41
+ if Rack.const_defined?('Flash')
42
+ flash[:notice] = "Login successful."
43
+ end
44
+
45
+ if session[:return_to]
46
+ redirect_url = session[:return_to]
47
+ session[:return_to] = false
48
+ redirect redirect_url
49
+ else
50
+ redirect '/'
51
+ end
52
+ else
53
+ if Rack.const_defined?('Flash')
54
+ flash[:error] = "The email or password you entered is incorrect."
55
+ end
56
+ redirect '/sign_in'
57
+ end
58
+ end
59
+
60
+ app.get '/sign_out' do
61
+ session[:user] = nil
62
+ if Rack.const_defined?('Flash')
63
+ flash[:notice] = "Logout successful."
64
+ end
65
+ redirect '/'
66
+ end
67
+
68
+ app.get '/sign_up' do
69
+ if session[:user]
70
+ redirect '/'
71
+ else
72
+ erb get_view_as_string("sign_up"), :layout => use_layout?
73
+ end
74
+ end
75
+
76
+ app.post '/sign_up' do
77
+ @user = User.new(params)
78
+ if @user.save
79
+ session[:user] = @user.email
80
+ if Rack.const_defined?('Flash')
81
+ flash[:notice] = "Account created."
82
+ end
83
+ if session[:return_to]
84
+ redirect_url = session[:return_to]
85
+ session[:return_to] = false
86
+ redirect session[:return_to]
87
+ else
88
+ redirect "/"
89
+ end
90
+ else
91
+ if Rack.const_defined?('Flash')
92
+ flash[:error] = "There were some problems creating your account: #{@user.errors}."
93
+ end
94
+ redirect '/sign_up?' + hash_to_query_string(params['email'])
95
+ end
96
+ end
97
+ app.get '/password/reset' do
98
+ if session[:user]
99
+ redirect '/'
100
+ else
101
+ erb get_view_as_string("password_reset"), :layout => use_layout?
102
+ end
103
+ end
104
+ app.post '/password/reset' do
105
+ if user = User.get(:email => params[:email])
106
+ user.forgot_password
107
+ flash[:notice] = "We send information for password reset to your email."
108
+ Mailer.send_mail :to => user.email, :link => "http://#{request.host}/password/change/#{user.reset_token}"
109
+ redirect '/sign_in'
110
+ else
111
+ if Rack.const_defined?('Flash')
112
+ flash[:error] = "Email you entered isn't valid."
113
+ end
114
+ erb get_view_as_string("password_reset"), :layout => use_layout?
115
+ end
116
+ end
117
+ app.get '/password/change/:reset_token' do
118
+ if user = User.get_by_alias(:reset_token, params)
119
+ session[:reset_token] = user.reset_token
120
+ erb get_view_as_string("password_change"), :layout => use_layout?
121
+ else
122
+ flash[:error] = "Link is not valid!"
123
+ redirect "/"
124
+ end
125
+ end
126
+ app.post '/password/change' do
127
+ if session[:reset_token]
128
+ if user = User.get_by_alias(:reset_token, :reset_token => session[:reset_token])
129
+ user.change_password params[:password_new]
130
+ user.reset_token = ""
131
+ user.save
132
+ session[:reset_token] = false
133
+ session[:user] = user.email
134
+ flash[:notice] = "Password sucesfully changed."
135
+ redirect "/"
136
+ else
137
+ flash[:error] = "Link is not valid!"
138
+ redirect "/"
139
+ end
140
+ else
141
+ flash[:error] = "Link is not valid!"
142
+ redirect "/"
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ module Helpers
149
+ def hash_to_query_string(hash)
150
+ hash.collect {|k,v| "#{k}=#{v}"}.join('&')
151
+ end
152
+
153
+ def login_required
154
+ if @current_user
155
+ return true
156
+ else
157
+ session[:return_to] = request.fullpath
158
+ redirect '/sign_in'
159
+ return false
160
+ end
161
+ end
162
+
163
+ def current_user
164
+ if session[:user]
165
+ User.get(:email => session[:user])
166
+ end
167
+ end
168
+
169
+ def logged_in?
170
+ !!session[:user]
171
+ end
172
+
173
+ def use_layout?
174
+ !request.xhr?
175
+ end
176
+
177
+ def get_view_as_string(filename)
178
+ view = File.join(options.sinatra_redis_auth_views, "#{filename}.erb")
179
+ data = ""
180
+ f = File.open(view, "r")
181
+ f.each_line do |line|
182
+ data += line
183
+ end
184
+ return data
185
+ end
186
+
187
+ end
188
+
189
+ register SinatraRedisAuth
190
+ end
@@ -0,0 +1,61 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module UserAuthModel
4
+
5
+ def self.included(base)
6
+ base.send :extend, ClassMethods
7
+ base.send :include, InstanceMethods
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ def authenticate(email, password)
13
+ user = self.get(:email => email)
14
+ if user && user.encrypt(password) == user.password
15
+ user
16
+ else
17
+ nil
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ module InstanceMethods
24
+
25
+ def initialize(args = {})
26
+ args.symbolize_keys!
27
+ args[:salt] = random_string(10) if !args[:salt] && args[:password_new]
28
+ args[:password] = encrypt(args[:password_new], args[:salt]) if args[:password_new]
29
+ super(args)
30
+ end
31
+
32
+ def forgot_password
33
+ self.reset_token = random_string(30)
34
+ save
35
+ end
36
+
37
+ def change_password password_new
38
+ pp self
39
+ pp self.args[:salt]
40
+ self.args[:password] = encrypt(password_new, self.salt)
41
+ end
42
+
43
+ def encrypt(password, salt = nil)
44
+ if salt
45
+ Digest::SHA1.hexdigest(password+salt)
46
+ else
47
+ Digest::SHA1.hexdigest(password+self.salt)
48
+ end
49
+ end
50
+
51
+ def random_string(len)
52
+ #generate a random password consisting of strings and digits
53
+ chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
54
+ newpass = ""
55
+ 1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
56
+ return newpass
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,5 @@
1
+ <h1>Password Change</h1>
2
+ <form method="post" action="/password/change">
3
+ <input type="password" name="password_new" placeholder="password" />
4
+ <input type="submit" name="action" value="Change password">
5
+ </form>
@@ -0,0 +1,5 @@
1
+ <h1>Password Reset</h1>
2
+ <form method="post" action="/password/reset">
3
+ <input type="text" name="email" placeholder="email" />
4
+ <input type="submit" name="action" value="Reset password">
5
+ </form>
@@ -0,0 +1,7 @@
1
+ <h1>Sign In</h1>
2
+ <form method="post" action="/sign_in">
3
+ <input type="text" name="email" placeholder="email" />
4
+ <input type="password" name="password" placeholder="password" />
5
+ <input type="submit" name="action" value="Sign in">
6
+ </form>
7
+ <a href="/password/reset">Forgot password?</a>
@@ -0,0 +1,6 @@
1
+ <h1>Sign Up</h1>
2
+ <form method="post" action="/sign_up">
3
+ <input type="text" name="email" placeholder="email" />
4
+ <input type="password" name="password_new" placeholder="password" />
5
+ <input type="submit" name="action" value="Sign up">
6
+ </form>
@@ -0,0 +1,120 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "sinatra-redis-auth"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ondrej Bartas"]
12
+ s.date = "2012-03-06"
13
+ s.description = "Sinatra authentification with saving user data to redis"
14
+ s.email = "ondrej@bartas.cz"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "LICENSE.txt",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "config/mail_config.rb.example",
27
+ "config/redis_config.yml.example",
28
+ "example/config.ru",
29
+ "example/config/mail_config.rb",
30
+ "example/config/redis_config.yml",
31
+ "example/example_app.rb",
32
+ "example/user.rb",
33
+ "example/views/index.erb",
34
+ "example/views/layout.erb",
35
+ "example/views/protected_page.erb",
36
+ "lib/mailer.rb",
37
+ "lib/session_database.rb",
38
+ "lib/sinatra-redis-auth.rb",
39
+ "lib/user_auth_model.rb",
40
+ "lib/views/password_change.erb",
41
+ "lib/views/password_reset.erb",
42
+ "lib/views/sign_in.erb",
43
+ "lib/views/sign_up.erb",
44
+ "sinatra-redis-auth.gemspec",
45
+ "test/helper.rb",
46
+ "test/test_sinatra-redis-auth.rb"
47
+ ]
48
+ s.homepage = "http://github.com/ondrejbartas/sinatra-redis-auth"
49
+ s.licenses = ["MIT"]
50
+ s.require_paths = ["lib"]
51
+ s.rubygems_version = "1.8.10"
52
+ s.summary = "Sinatra authentification with saving user data to redis"
53
+
54
+ if s.respond_to? :specification_version then
55
+ s.specification_version = 3
56
+
57
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
+ s.add_runtime_dependency(%q<rainbows>, [">= 0"])
59
+ s.add_runtime_dependency(%q<sinatra>, ["~> 1.2.6"])
60
+ s.add_runtime_dependency(%q<redis-model-extension>, ["~> 0.2.0"])
61
+ s.add_runtime_dependency(%q<rake>, [">= 0"])
62
+ s.add_runtime_dependency(%q<rack>, ["~> 1.3.0"])
63
+ s.add_runtime_dependency(%q<rack-flash>, [">= 0"])
64
+ s.add_runtime_dependency(%q<tilt>, ["~> 1.3.2"])
65
+ s.add_runtime_dependency(%q<redis-rack>, [">= 0"])
66
+ s.add_runtime_dependency(%q<mail>, [">= 0"])
67
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
68
+ s.add_development_dependency(%q<shoulda-context>, [">= 0"])
69
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
70
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
72
+ s.add_development_dependency(%q<turn>, ["~> 0.8.2"])
73
+ s.add_development_dependency(%q<minitest>, [">= 0"])
74
+ s.add_development_dependency(%q<ansi>, ["~> 1.2.5"])
75
+ s.add_development_dependency(%q<thin>, [">= 0"])
76
+ s.add_development_dependency(%q<shotgun>, [">= 0"])
77
+ else
78
+ s.add_dependency(%q<rainbows>, [">= 0"])
79
+ s.add_dependency(%q<sinatra>, ["~> 1.2.6"])
80
+ s.add_dependency(%q<redis-model-extension>, ["~> 0.2.0"])
81
+ s.add_dependency(%q<rake>, [">= 0"])
82
+ s.add_dependency(%q<rack>, ["~> 1.3.0"])
83
+ s.add_dependency(%q<rack-flash>, [">= 0"])
84
+ s.add_dependency(%q<tilt>, ["~> 1.3.2"])
85
+ s.add_dependency(%q<redis-rack>, [">= 0"])
86
+ s.add_dependency(%q<mail>, [">= 0"])
87
+ s.add_dependency(%q<shoulda>, [">= 0"])
88
+ s.add_dependency(%q<shoulda-context>, [">= 0"])
89
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
90
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
91
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
92
+ s.add_dependency(%q<turn>, ["~> 0.8.2"])
93
+ s.add_dependency(%q<minitest>, [">= 0"])
94
+ s.add_dependency(%q<ansi>, ["~> 1.2.5"])
95
+ s.add_dependency(%q<thin>, [">= 0"])
96
+ s.add_dependency(%q<shotgun>, [">= 0"])
97
+ end
98
+ else
99
+ s.add_dependency(%q<rainbows>, [">= 0"])
100
+ s.add_dependency(%q<sinatra>, ["~> 1.2.6"])
101
+ s.add_dependency(%q<redis-model-extension>, ["~> 0.2.0"])
102
+ s.add_dependency(%q<rake>, [">= 0"])
103
+ s.add_dependency(%q<rack>, ["~> 1.3.0"])
104
+ s.add_dependency(%q<rack-flash>, [">= 0"])
105
+ s.add_dependency(%q<tilt>, ["~> 1.3.2"])
106
+ s.add_dependency(%q<redis-rack>, [">= 0"])
107
+ s.add_dependency(%q<mail>, [">= 0"])
108
+ s.add_dependency(%q<shoulda>, [">= 0"])
109
+ s.add_dependency(%q<shoulda-context>, [">= 0"])
110
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
111
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
112
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
113
+ s.add_dependency(%q<turn>, ["~> 0.8.2"])
114
+ s.add_dependency(%q<minitest>, [">= 0"])
115
+ s.add_dependency(%q<ansi>, ["~> 1.2.5"])
116
+ s.add_dependency(%q<thin>, [">= 0"])
117
+ s.add_dependency(%q<shotgun>, [">= 0"])
118
+ end
119
+ end
120
+
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'turn'
12
+ require 'shoulda-context'
13
+
14
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
16
+ require 'sinatra-redis-auth'
17
+
18
+ class Test::Unit::TestCase
19
+ end
@@ -0,0 +1,11 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class SinatraRedisAuthTest < Test::Unit::TestCase
4
+ context "RedisModel" do
5
+ setup do
6
+ end
7
+ should "Test" do
8
+ assert true
9
+ end
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,286 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-redis-auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ondrej Bartas
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rainbows
16
+ requirement: &70173755422200 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70173755422200
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra
27
+ requirement: &70173755456820 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.6
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70173755456820
36
+ - !ruby/object:Gem::Dependency
37
+ name: redis-model-extension
38
+ requirement: &70173755454860 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.2.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70173755454860
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70173755452960 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70173755452960
58
+ - !ruby/object:Gem::Dependency
59
+ name: rack
60
+ requirement: &70173755451380 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.3.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70173755451380
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-flash
71
+ requirement: &70173755449240 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70173755449240
80
+ - !ruby/object:Gem::Dependency
81
+ name: tilt
82
+ requirement: &70173755461100 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.3.2
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70173755461100
91
+ - !ruby/object:Gem::Dependency
92
+ name: redis-rack
93
+ requirement: &70173755459500 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70173755459500
102
+ - !ruby/object:Gem::Dependency
103
+ name: mail
104
+ requirement: &70173755457460 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70173755457460
113
+ - !ruby/object:Gem::Dependency
114
+ name: shoulda
115
+ requirement: &70173755493800 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70173755493800
124
+ - !ruby/object:Gem::Dependency
125
+ name: shoulda-context
126
+ requirement: &70173755492060 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70173755492060
135
+ - !ruby/object:Gem::Dependency
136
+ name: rdoc
137
+ requirement: &70173755490840 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: '3.12'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70173755490840
146
+ - !ruby/object:Gem::Dependency
147
+ name: bundler
148
+ requirement: &70173755488240 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: 1.0.0
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *70173755488240
157
+ - !ruby/object:Gem::Dependency
158
+ name: jeweler
159
+ requirement: &70173755499140 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ~>
163
+ - !ruby/object:Gem::Version
164
+ version: 1.8.3
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *70173755499140
168
+ - !ruby/object:Gem::Dependency
169
+ name: turn
170
+ requirement: &70173755497160 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ~>
174
+ - !ruby/object:Gem::Version
175
+ version: 0.8.2
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: *70173755497160
179
+ - !ruby/object:Gem::Dependency
180
+ name: minitest
181
+ requirement: &70173755495500 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: *70173755495500
190
+ - !ruby/object:Gem::Dependency
191
+ name: ansi
192
+ requirement: &70173755558700 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 1.2.5
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: *70173755558700
201
+ - !ruby/object:Gem::Dependency
202
+ name: thin
203
+ requirement: &70173755555940 !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ type: :development
210
+ prerelease: false
211
+ version_requirements: *70173755555940
212
+ - !ruby/object:Gem::Dependency
213
+ name: shotgun
214
+ requirement: &70173755510060 !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: *70173755510060
223
+ description: Sinatra authentification with saving user data to redis
224
+ email: ondrej@bartas.cz
225
+ executables: []
226
+ extensions: []
227
+ extra_rdoc_files:
228
+ - LICENSE.txt
229
+ - README.rdoc
230
+ files:
231
+ - .document
232
+ - Gemfile
233
+ - LICENSE.txt
234
+ - README.rdoc
235
+ - Rakefile
236
+ - VERSION
237
+ - config/mail_config.rb.example
238
+ - config/redis_config.yml.example
239
+ - example/config.ru
240
+ - example/config/mail_config.rb
241
+ - example/config/redis_config.yml
242
+ - example/example_app.rb
243
+ - example/user.rb
244
+ - example/views/index.erb
245
+ - example/views/layout.erb
246
+ - example/views/protected_page.erb
247
+ - lib/mailer.rb
248
+ - lib/session_database.rb
249
+ - lib/sinatra-redis-auth.rb
250
+ - lib/user_auth_model.rb
251
+ - lib/views/password_change.erb
252
+ - lib/views/password_reset.erb
253
+ - lib/views/sign_in.erb
254
+ - lib/views/sign_up.erb
255
+ - sinatra-redis-auth.gemspec
256
+ - test/helper.rb
257
+ - test/test_sinatra-redis-auth.rb
258
+ homepage: http://github.com/ondrejbartas/sinatra-redis-auth
259
+ licenses:
260
+ - MIT
261
+ post_install_message:
262
+ rdoc_options: []
263
+ require_paths:
264
+ - lib
265
+ required_ruby_version: !ruby/object:Gem::Requirement
266
+ none: false
267
+ requirements:
268
+ - - ! '>='
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ segments:
272
+ - 0
273
+ hash: -130070318527536566
274
+ required_rubygems_version: !ruby/object:Gem::Requirement
275
+ none: false
276
+ requirements:
277
+ - - ! '>='
278
+ - !ruby/object:Gem::Version
279
+ version: '0'
280
+ requirements: []
281
+ rubyforge_project:
282
+ rubygems_version: 1.8.10
283
+ signing_key:
284
+ specification_version: 3
285
+ summary: Sinatra authentification with saving user data to redis
286
+ test_files: []