vxod 0.0.1 → 0.0.2

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +23 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +16 -0
  6. data/Gemfile +14 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +77 -0
  9. data/Rakefile +21 -0
  10. data/example/app.rb +44 -0
  11. data/example/config.ru +3 -0
  12. data/example/config_app.rb +27 -0
  13. data/example/mongoid.yml +85 -0
  14. data/lib/vxod.rb +15 -0
  15. data/lib/vxod/api.rb +56 -0
  16. data/lib/vxod/api_static.rb +11 -0
  17. data/lib/vxod/app.rb +68 -0
  18. data/lib/vxod/assets/css/bootstrap.css +5785 -0
  19. data/lib/vxod/assets/css/common.sass +54 -0
  20. data/lib/vxod/assets/img/.gitkeep +0 -0
  21. data/lib/vxod/assets/js/bootstrap.js +1951 -0
  22. data/lib/vxod/assets/js/jquery.js +9111 -0
  23. data/lib/vxod/assets/js/prefixfree.min.js +5 -0
  24. data/lib/vxod/back_path.rb +27 -0
  25. data/lib/vxod/config.rb +12 -0
  26. data/lib/vxod/db.rb +24 -0
  27. data/lib/vxod/db/mongoid.rb +47 -0
  28. data/lib/vxod/email.rb +7 -0
  29. data/lib/vxod/login_with_openid.rb +78 -0
  30. data/lib/vxod/middleware.rb +67 -0
  31. data/lib/vxod/omni_auth_provider.rb +40 -0
  32. data/lib/vxod/public/vxod/font-awesome/css/font-awesome.css +4 -0
  33. data/lib/vxod/public/vxod/font-awesome/fonts/FontAwesome.otf +0 -0
  34. data/lib/vxod/public/vxod/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  35. data/lib/vxod/public/vxod/font-awesome/fonts/fontawesome-webfont.svg +414 -0
  36. data/lib/vxod/public/vxod/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  37. data/lib/vxod/public/vxod/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  38. data/lib/vxod/version.rb +3 -0
  39. data/lib/vxod/views/fill_user_data.slim +28 -0
  40. data/lib/vxod/views/login.slim +48 -0
  41. data/lib/vxod/views/parts/head.slim +10 -0
  42. data/lib/vxod/views/parts/nav.slim +3 -0
  43. data/spec/features/login_with_openid_spec.rb +27 -0
  44. data/spec/lib/api_spec.rb +45 -0
  45. data/spec/lib/app_spec.rb +43 -0
  46. data/spec/lib/back_path_spec.rb +21 -0
  47. data/spec/lib/config_spec.rb +11 -0
  48. data/spec/lib/db_spec.rb +27 -0
  49. data/spec/lib/login_with_openid_spec.rb +157 -0
  50. data/spec/lib/middleware_spec.rb +4 -0
  51. data/spec/lib/vxod_spec.rb +12 -0
  52. data/spec/spec_helper.rb +45 -0
  53. data/spec/support/random.rb +16 -0
  54. data/vxod.gemspec +47 -0
  55. metadata +343 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84dbcc2c6095ad15b11d1f1bea3d48bc7dd1d192
4
- data.tar.gz: 569502dec522de57df1c3fdc19f294b60c39582e
3
+ metadata.gz: 008aab422391d21d786d637e7722ec0131c8a775
4
+ data.tar.gz: 8da28065880c08f5d822a016019cc9a38463be31
5
5
  SHA512:
6
- metadata.gz: ef1f277a8d4dfe3a2a62fc0dc276a24d614ecf3d7845eb5381c1e46af4134e779a0cc0b5bef62ded49e3681770f39a9e29053d2d4f06ea9fa6cb1c69a637d94c
7
- data.tar.gz: d6a4ef1805e63fee49087eeeb913ec331370d82fedb1bd7c2c49a5e1a7e38cb1d6fbe5a226509705f1b07f00d82fa1e2945670dc73dc039de5b0b44fd915f49b
6
+ metadata.gz: edcbc89295904c86953c8290fc4d1378f81747deab0f98fcfa9f8ee9898452b5735e835efb30e9c37e423b73b84ddfec63c150fd234ade6b263c80a19941785f
7
+ data.tar.gz: 4abbf46e19d202846411063f92df7f8ce3be40e61dbf976125e053a51c58a65a7e425583d64d6cffdb1dfbebac2287508b0eece6fa62903e6828c6d871886945
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+ .DS_Store
20
+ .sass-cache
21
+
22
+ config_env.rb
23
+ capybara-*.html
@@ -0,0 +1 @@
1
+ vxod
@@ -0,0 +1 @@
1
+ ruby-2.1
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+ bundler_args: --without debug
3
+ rvm:
4
+ - 2.1.0
5
+ - 2.0.0
6
+ - jruby-head
7
+ - ruby-head
8
+ - rbx
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: jruby-head
12
+ - rvm: ruby-head
13
+ - rvm: rbx
14
+
15
+ services:
16
+ - mongodb
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'rake'
5
+ end
6
+
7
+ platforms :rbx do
8
+ gem 'racc'
9
+ gem 'rubysl', '~> 2.0'
10
+ gem 'psych'
11
+ end
12
+
13
+ # Specify your gem's dependencies in vxod.gemspec
14
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Sergey Makridenkov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,77 @@
1
+ # Vxod
2
+
3
+ Social and password authorization solution
4
+
5
+ [![Build Status](https://travis-ci.org/SergXIIIth/vxod.svg?branch=master)](https://travis-ci.org/SergXIIIth/vxod)
6
+ [![Code Climate](https://codeclimate.com/github/SergXIIIth/vxod.png)](https://codeclimate.com/github/SergXIIIth/vxod)
7
+ [![Dependency Status](https://gemnasium.com/SergXIIIth/vxod.svg)](https://gemnasium.com/SergXIIIth/vxod)
8
+ [![Gem Version](https://badge.fury.io/rb/vxod.png)](http://badge.fury.io/rb/vxod)
9
+
10
+ # Features
11
+
12
+ - + social registration/login
13
+ - password base registration/login,
14
+ - checkbox auto-generated password send to email
15
+ - optional require email in social registration
16
+ - reset password
17
+
18
+ Future
19
+
20
+ - profile with password reset, link other social servises to user
21
+ - adminka for user management
22
+ - support Sinatra, Mongoid, Rails, ActiveRecord, any Rack app, any DB
23
+
24
+
25
+ # Installation
26
+
27
+ - gem 'vxod'
28
+ - configure email
29
+ - provide key for open auth
30
+ - provide layout to inject views
31
+
32
+ ## Config OmniAuth
33
+
34
+ Gems
35
+
36
+ gem 'omniauth'
37
+ gem 'omniauth-twitter'
38
+ gem 'omniauth-vkontakte'
39
+ gem 'omniauth-facebook'
40
+ gem 'omniauth-google_oauth2'
41
+ gem 'omniauth-github'
42
+
43
+ App
44
+
45
+ enable :sessions
46
+ set :sessions, secret: ENV['secret_secret']
47
+
48
+ use OmniAuth::Builder do
49
+ provider :twitter, ENV['omniauth.twitter'], ENV['omniauth.twitter_x']
50
+ provider :vkontakte, ENV['omniauth.vkontakte'], ENV['omniauth.vkontakte_x']
51
+ provider :facebook, ENV['omniauth.facebook'], ENV['omniauth.facebook_x']
52
+ provider :google_oauth2, ENV['omniauth.google'], ENV['omniauth.google_x']
53
+ provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
54
+ end
55
+
56
+ use Vxod::Middleware # put it after use OmniAuth
57
+
58
+ ## Config Db
59
+
60
+ require 'vxod/db/mongoid'
61
+
62
+ Vxod::Db.identity = Vxod::Db::Mongoid::Identity
63
+ Vxod::Db.user = Vxod::Db::Mongoid::User
64
+
65
+
66
+
67
+ # Usage
68
+
69
+ TODO: Write usage instructions here
70
+
71
+ # Contributing
72
+
73
+ 1. Fork it
74
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
75
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
76
+ 4. Push to the branch (`git push origin my-new-feature`)
77
+ 5. Create new Pull Request
@@ -0,0 +1,21 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ desc 'Run web server for example app'
4
+ task 'web' do
5
+ system "bundle exec rerun --pattern '{**/*.rb}' -c 'puma -p 3000 --dir example'"
6
+ end
7
+
8
+ desc 'Console'
9
+ task 'console' do
10
+ system "bundle exec irb -r ./example/app.rb"
11
+ end
12
+
13
+ desc 'Rub tests'
14
+ task 'test' do
15
+ system %Q(bundle exec rerun --pattern '{**/*.rb}' -cx rspec -t ~feature)
16
+ end
17
+
18
+ # for CI
19
+ require 'rspec/core/rake_task'
20
+ RSpec::Core::RakeTask.new(:spec)
21
+ task :default => :spec
@@ -0,0 +1,44 @@
1
+ require 'sinatra'
2
+ require 'vxod'
3
+ require 'slim'
4
+ require 'sass'
5
+ require 'config_env'
6
+ require 'mongoid'
7
+ require 'omniauth'
8
+ require 'omniauth-twitter'
9
+ require 'omniauth-vkontakte'
10
+ require 'omniauth-facebook'
11
+ require 'omniauth-google-oauth2'
12
+ require 'omniauth-github'
13
+
14
+
15
+ config_env = "#{__dir__}/config_env.rb"
16
+ require config_env if File.exists?(config_env)
17
+
18
+ require_relative 'config_app'
19
+
20
+ helpers do
21
+ def vxod
22
+ @vxod = Vxod.api(self)
23
+ end
24
+ end
25
+
26
+ get '/' do
27
+ 'Hello please try protected page at <a id="secret" href="/secret">/secret</a>'
28
+ end
29
+
30
+ get '/secret' do
31
+ vxod.required
32
+ slim :secret
33
+ end
34
+
35
+ template :secret do
36
+ %q(
37
+
38
+ p
39
+ | I am secret page for
40
+ strong = vxod.user.email
41
+ p: a id='logout' href='/logout' Logout
42
+
43
+ )
44
+ end
@@ -0,0 +1,3 @@
1
+ require './app'
2
+
3
+ run Sinatra::Application
@@ -0,0 +1,27 @@
1
+ # Mongoid
2
+
3
+ Mongoid.load!(__dir__ + '/mongoid.yml')
4
+
5
+
6
+ # OmniAuth
7
+
8
+ enable :sessions
9
+ set :sessions, secret: ENV['secret_secret']
10
+
11
+ use OmniAuth::Builder do
12
+ provider :twitter, ENV['omniauth.twitter'], ENV['omniauth.twitter_x']
13
+ provider :vkontakte, ENV['omniauth.vkontakte'], ENV['omniauth.vkontakte_x']
14
+ provider :facebook, ENV['omniauth.facebook'], ENV['omniauth.facebook_x']
15
+ provider :google_oauth2, ENV['omniauth.google'], ENV['omniauth.google_x']
16
+ provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
17
+ end
18
+
19
+ use Vxod::Middleware
20
+
21
+
22
+ # Db
23
+
24
+ require 'vxod/db/mongoid'
25
+
26
+ Vxod::Db.identity = Vxod::Db::Mongoid::Identity
27
+ Vxod::Db.user = Vxod::Db::Mongoid::User
@@ -0,0 +1,85 @@
1
+ development:
2
+ # Configure available database sessions. (required)
3
+ sessions:
4
+ # Defines the default session. (required)
5
+ default:
6
+ # Defines the name of the default database that Mongoid can connect to.
7
+ # (required).
8
+ database: redsi_development
9
+ # Provides the hosts the default session can connect to. Must be an array
10
+ # of host:port pairs. (required)
11
+ hosts:
12
+ - 127.0.0.1:27017
13
+ options:
14
+ # Change whether the session persists in safe mode by default.
15
+ # (default: false)
16
+ # safe: false
17
+
18
+ # Change the default consistency model to :eventual or :strong.
19
+ # :eventual will send reads to secondaries, :strong sends everything
20
+ # to master. (default: :eventual)
21
+ # consistency: :eventual
22
+
23
+ # How many times Moped should attempt to retry an operation after
24
+ # failure. (default: 30)
25
+ # max_retries: 30
26
+
27
+ # The time in seconds that Moped should wait before retrying an
28
+ # operation on failure. (default: 1)
29
+ # retry_interval: 1
30
+ # Configure Mongoid specific options. (optional)
31
+ options:
32
+ # Configuration for whether or not to allow access to fields that do
33
+ # not have a field definition on the model. (default: true)
34
+ # allow_dynamic_fields: true
35
+
36
+ # Enable the identity map, needed for eager loading. (default: false)
37
+ # identity_map_enabled: false
38
+
39
+ # Includes the root model name in json serialization. (default: false)
40
+ # include_root_in_json: false
41
+
42
+ # Include the _type field in serializaion. (default: false)
43
+ # include_type_for_serialization: false
44
+
45
+ # Preload all models in development, needed when models use
46
+ # inheritance. (default: false)
47
+ # preload_models: false
48
+
49
+ # Protect id and type from mass assignment. (default: true)
50
+ # protect_sensitive_fields: true
51
+
52
+ # Raise an error when performing a #find and the document is not found.
53
+ # (default: true)
54
+ # raise_not_found_error: true
55
+
56
+ # Raise an error when defining a scope with the same name as an
57
+ # existing method. (default: false)
58
+ # scope_overwrite_exception: false
59
+
60
+ # Skip the database version check, used when connecting to a db without
61
+ # admin access. (default: false)
62
+ # skip_version_check: false
63
+
64
+ # User Active Support's time zone in conversions. (default: true)
65
+ # use_activesupport_time_zone: true
66
+
67
+ # Ensure all times are UTC in the app side. (default: false)
68
+ # use_utc: false
69
+ test:
70
+ sessions:
71
+ default:
72
+ database: redsi_test
73
+ hosts:
74
+ - 127.0.0.1:27017
75
+ options:
76
+ consistency: :strong
77
+ # In the test environment we lower the retries and retry interval to
78
+ # low amounts for fast failures.
79
+ max_retries: 1
80
+ retry_interval: 0
81
+ production:
82
+ sessions:
83
+ default:
84
+ uri: <%= ENV['MONGO_URI'] %>
85
+ options:
@@ -0,0 +1,15 @@
1
+ require 'sinatra/base'
2
+ require 'vxod/version'
3
+
4
+ module Vxod
5
+ autoload :Db, 'vxod/db'
6
+ autoload :Email, 'vxod/email'
7
+ autoload :BackPath, 'vxod/back_path'
8
+ autoload :Config, 'vxod/config'
9
+ autoload :App, 'vxod/app'
10
+ autoload :Api, 'vxod/api'
11
+ autoload :LoginWithOpenid, 'vxod/login_with_openid'
12
+ require 'vxod/api_static'
13
+ autoload :OmniAuthProvider, 'vxod/omni_auth_provider'
14
+ autoload :Middleware, 'vxod/middleware'
15
+ end
@@ -0,0 +1,56 @@
1
+ module Vxod
2
+ class Api
3
+ def initialize(rack_app)
4
+ @rack_app = rack_app
5
+ end
6
+
7
+ attr_reader :rack_app
8
+
9
+ # Authorize user right to make action on object
10
+ #
11
+ # Check that user login and have right to make 'action' on 'object'
12
+ # If not it redirects to login page
13
+ def required(action = nil, object = nil)
14
+ if user.nil?
15
+ BackPath.new(rack_app).save(app.request_path)
16
+ app.redirect(Vxod.config.login_path)
17
+ else
18
+ true
19
+ end
20
+ end
21
+
22
+ def login_with_openid
23
+ openid.login
24
+ end
25
+
26
+ def logout
27
+ app.detele_auth_key
28
+ app.redirect(Vxod.config.after_login_default_path)
29
+ end
30
+
31
+ # Save missing user data after openid registration
32
+ def openid_save_user_data
33
+ openid.save_user_data
34
+ end
35
+
36
+ # Return user for fill user data page
37
+ def user_to_fill_data
38
+ @user_to_fill_data ||= Db.user.find_by_auth_key(app.auth_key_for_fill_user_data)
39
+ end
40
+
41
+ # Current user
42
+ def user
43
+ @user ||= Db.user.find_by_auth_key(app.auth_key)
44
+ end
45
+
46
+ private
47
+
48
+ def openid
49
+ @openid ||= LoginWithOpenid.new(app)
50
+ end
51
+
52
+ def app
53
+ @app ||= Vxod::App.new(rack_app)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+ module Vxod
2
+ class << self
3
+ def api(rack_app)
4
+ Vxod::Api.new(rack_app)
5
+ end
6
+
7
+ def config
8
+ @config ||= Vxod::Config.new
9
+ end
10
+ end
11
+ end