rockauth 0.0.1.pre2

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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +30 -0
  4. data/app/admin/authentication.rb +37 -0
  5. data/app/admin/provider_authentications.rb +24 -0
  6. data/app/admin/resource_owner.rb +79 -0
  7. data/app/controllers/rockauth/authentications_controller.rb +48 -0
  8. data/app/controllers/rockauth/me_controller.rb +93 -0
  9. data/app/controllers/rockauth/provider_authentications_controller.rb +72 -0
  10. data/app/helpers/rockauth/application_helper.rb +4 -0
  11. data/app/models/rockauth/authentication.rb +6 -0
  12. data/app/models/rockauth/provider_authentication.rb +9 -0
  13. data/app/models/rockauth/user.rb +10 -0
  14. data/app/serializers/rockauth/authentication_serializer.rb +24 -0
  15. data/app/serializers/rockauth/base_serializer.rb +6 -0
  16. data/app/serializers/rockauth/error_serializer.rb +5 -0
  17. data/app/serializers/rockauth/provider_authentication_serializer.rb +5 -0
  18. data/app/serializers/rockauth/user_serializer.rb +23 -0
  19. data/app/views/layouts/rockauth/application.html.erb +14 -0
  20. data/config/locales/en.yml +12 -0
  21. data/config/routes.rb +9 -0
  22. data/db/migrate/20150709065335_create_rockauth_users.rb +16 -0
  23. data/db/migrate/20150709071113_create_rockauth_provider_authentications.rb +16 -0
  24. data/db/migrate/20150709084233_create_rockauth_authentications.rb +23 -0
  25. data/lib/generators/rockauth/client_generator.rb +33 -0
  26. data/lib/generators/rockauth/install_generator.rb +59 -0
  27. data/lib/generators/rockauth/migrations_generator.rb +9 -0
  28. data/lib/generators/rockauth/models_generator.rb +11 -0
  29. data/lib/generators/templates/authentication.rb +4 -0
  30. data/lib/generators/templates/provider_authentication.rb +5 -0
  31. data/lib/generators/templates/rockauth_clients.yml +9 -0
  32. data/lib/generators/templates/rockauth_full_initializer.rb +41 -0
  33. data/lib/generators/templates/rockauth_providers.json +50 -0
  34. data/lib/generators/templates/user.rb +7 -0
  35. data/lib/rockauth.rb +15 -0
  36. data/lib/rockauth/authenticator.rb +51 -0
  37. data/lib/rockauth/authenticator/response.rb +32 -0
  38. data/lib/rockauth/client.rb +4 -0
  39. data/lib/rockauth/configuration.rb +51 -0
  40. data/lib/rockauth/controllers.rb +5 -0
  41. data/lib/rockauth/controllers/authentication.rb +36 -0
  42. data/lib/rockauth/engine.rb +15 -0
  43. data/lib/rockauth/errors.rb +18 -0
  44. data/lib/rockauth/models.rb +9 -0
  45. data/lib/rockauth/models/authentication.rb +151 -0
  46. data/lib/rockauth/models/provider_authentication.rb +59 -0
  47. data/lib/rockauth/models/provider_validation.rb +61 -0
  48. data/lib/rockauth/models/resource_owner.rb +31 -0
  49. data/lib/rockauth/models/user.rb +25 -0
  50. data/lib/rockauth/provider_user_information.rb +103 -0
  51. data/lib/rockauth/version.rb +3 -0
  52. data/lib/tasks/rockauth_tasks.rake +9 -0
  53. metadata +361 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 31e30da292055c2bc8aa2a92d48d19161dd1cede
4
+ data.tar.gz: 472cacd4d60479a7e303461bf45a96c6307a893d
5
+ SHA512:
6
+ metadata.gz: 622b00715c2f6bfb1181e52e5ff3d6ff7a6fdd5306bfde468b00187cad4e929e47d93e66b1d328ceef29d5612a2904cb53ffdbac04d4e7be4a04807e3bc7c86b
7
+ data.tar.gz: d4533658991b8abbe39a5dc747b436d6df9bc349594ddac4d8a9e3722c338878e55f8930b3fce095f1c9a845a35b522f62f45165c726b2bbe547d8fbc095a04d
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Daniel Evans
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,30 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Rockauth'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+
19
+ load 'rails/tasks/engine.rake'
20
+
21
+ Bundler::GemHelper.install_tasks
22
+
23
+ require 'rake'
24
+ require 'rspec/core/rake_task'
25
+
26
+ desc "Run all examples"
27
+ RSpec::Core::RakeTask.new(:spec) do |t|
28
+ end
29
+
30
+ task default: %i(spec)
@@ -0,0 +1,37 @@
1
+ ActiveAdmin.register Rockauth::Configuration.resource_owner_class.reflections['authentications'].klass, as: "Authentication" do
2
+ menu parent: Rockauth::Configuration.active_admin_menu_name
3
+
4
+ actions :all, except: %i(new create edit update)
5
+
6
+ index do
7
+ id_column
8
+ column :auth_type
9
+ column :client
10
+ column :device_os
11
+
12
+ column :expiration do |r|
13
+ Time.at(r.expiration).to_formatted_s(:rfc822) if r.expiration.present?
14
+ end
15
+
16
+ column :issued_at do |r|
17
+ Time.at(r.issued_at).to_formatted_s(:rfc822) if r.issued_at.present?
18
+ end
19
+ actions
20
+ end
21
+
22
+ show do
23
+ attributes_table do
24
+ row :expiration do |r|
25
+ Time.at(r.expiration).to_formatted_s(:rfc822) if r.expiration.present?
26
+ end
27
+
28
+ row :issued_at do |r|
29
+ Time.at(r.issued_at).to_formatted_s(:rfc822) if r.issued_at.present?
30
+ end
31
+ (resource.attribute_names.map(&:to_sym) - %i(hashed_token_id expiration issued_at)).each do |key|
32
+ row key
33
+ end
34
+ end
35
+ active_admin_comments
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ ActiveAdmin.register Rockauth::Configuration.resource_owner_class.reflections['provider_authentications'].klass, as: "ProviderAuthentication" do
2
+ menu parent: Rockauth::Configuration.active_admin_menu_name
3
+
4
+ actions :all, except: %i(new create edit update)
5
+
6
+
7
+ index do
8
+ id_column
9
+ column :resource_owner
10
+ column :provider
11
+ column :provider_user_id
12
+ column :created_at
13
+ actions
14
+ end
15
+
16
+ show do
17
+ attributes_table do
18
+ (resource.attribute_names.map(&:to_sym) - %i(provider_access_token provider_access_token_secret)).each do |key|
19
+ row key
20
+ end
21
+ end
22
+ active_admin_comments
23
+ end
24
+ end
@@ -0,0 +1,79 @@
1
+ ActiveAdmin.register Rockauth::Configuration.resource_owner_class, as: "User" do
2
+ menu parent: Rockauth::Configuration.active_admin_menu_name
3
+
4
+ controller do
5
+ helper_method :attribute_list
6
+ def attribute_list
7
+ (Rockauth::Configuration.resource_owner_class.attribute_names.map(&:to_sym) - %i(id password_digest created_at updated_at))
8
+ end
9
+ end
10
+
11
+ permit_params do
12
+ (attribute_list + %i(password))
13
+ end
14
+
15
+ index do
16
+ id_column
17
+ ((attribute_list & %i(email)) + %i(created_at)).each do |key|
18
+ column key
19
+ end
20
+ actions
21
+ end
22
+
23
+ show do
24
+ attributes_table do
25
+ (attribute_list + %i{created_at updated_at}).each do |key|
26
+ row key
27
+ end
28
+ end
29
+
30
+ panel "Authentications" do
31
+ table_for resource.authentications do
32
+ column :id do |r|
33
+ link_to r.id, admin_user_path(r)
34
+ end
35
+ column :auth_type
36
+ column :client
37
+ column :device_os
38
+
39
+ column :expiration do |r|
40
+ Time.at(r.expiration).to_formatted_s(:rfc822) if r.expiration.present?
41
+ end
42
+
43
+ column :issued_at do |r|
44
+ Time.at(r.issued_at).to_formatted_s(:rfc822) if r.issued_at.present?
45
+ end
46
+
47
+ column do |r|
48
+ text_node link_to('View', admin_authentication_path(r), class: 'member_link')
49
+ text_node link_to('Destroy', admin_authentication_path(r), method: :delete, data: { confirm: 'Are you sure?' }, class: 'member_link')
50
+ end
51
+ end
52
+ end
53
+
54
+
55
+ panel "Provider Authentications (social authorizations)" do
56
+ table_for resource.provider_authentications do
57
+ column :id do |r|
58
+ link_to r.id # link_to r.id, [:admin, r]
59
+ end
60
+ column :provider
61
+ column :provider_user_id
62
+ column :created_at
63
+
64
+ column do |r|
65
+ text_node link_to('View', admin_provider_authentication_path(r), class: 'member_link')
66
+ text_node link_to('Destroy', admin_provider_authentication_path(r), method: :delete, data: { confirm: 'Are you sure?' }, class: 'member_link')
67
+ end
68
+ end
69
+ end
70
+
71
+ active_admin_comments
72
+ end
73
+
74
+ form do |f|
75
+ f.semantic_errors
76
+ f.inputs (attribute_list + %i(password))
77
+ f.actions
78
+ end
79
+ end
@@ -0,0 +1,48 @@
1
+ require 'rails-api'
2
+ require 'active_model_serializers'
3
+
4
+ module Rockauth
5
+ class AuthenticationsController < ActionController::API
6
+ include ActionController::Helpers
7
+ include ActionController::Serialization
8
+
9
+ serialization_scope :view_context
10
+
11
+ before_filter :authenticate_resource_owner!, except: [:authenticate]
12
+
13
+ def index
14
+ @authentications = current_resource_owner.authentications
15
+ render json: @authentications
16
+ end
17
+
18
+ def authenticate
19
+ @auth_response = Authenticator.authentication_request(request, self)
20
+ if @auth_response.success
21
+ @current_resource_owner = @auth_response.resource_owner
22
+ end
23
+ render @auth_response.render
24
+ end
25
+
26
+ def destroy
27
+ record = current_authentication
28
+ record = current_resource_owner.authentications.find(params[:id]) if params[:id].present?
29
+ if record.destroy
30
+ render nothing: true, status: 200
31
+ else
32
+ render_error 409, I18n.t("rockauth.errors.destroy_error", resource: "Authentication")
33
+ end
34
+ end
35
+
36
+ def resource
37
+ @authentication
38
+ end
39
+
40
+ def authentication_options
41
+ {}
42
+ end
43
+
44
+ def resource_owner_class
45
+ Rockauth::Configuration.resource_owner_class
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,93 @@
1
+ require 'rails-api'
2
+ require 'active_model_serializers'
3
+
4
+ module Rockauth
5
+ class MeController < ActionController::API
6
+ include ActionController::Helpers
7
+ include ActionController::Serialization
8
+
9
+ before_filter :authenticate_resource_owner!, except: [:create]
10
+
11
+ helper_method :include_authentication?
12
+
13
+ serialization_scope :view_context
14
+
15
+ def create
16
+ build_resource
17
+
18
+ # Makes the UserSerializer work properly and display all probative data.
19
+ @current_resource_owner = resource
20
+ @current_authentication = resource.try(:authentication)
21
+
22
+ render_resource_or_error resource.save
23
+ end
24
+
25
+ def show
26
+ render_resource
27
+ end
28
+
29
+ def update
30
+ resource.assign_attributes permitted_params.fetch(:user, {})
31
+ render_resource_or_error resource.save
32
+ end
33
+
34
+ def destroy
35
+ if resource.destroy
36
+ render nothing: true, status: 200
37
+ else
38
+ render_action_error 409
39
+ end
40
+ end
41
+
42
+ def render_resource
43
+ render json: resource, status: 200
44
+ end
45
+
46
+ def render_action_error error_status=400
47
+ render_error error_status, I18n.t("rockauth.errors.#{action_name}_error", resource: resource.class.model_name.human), resource.errors
48
+ end
49
+
50
+ def render_resource_or_error successful, error_status: 400
51
+ if successful
52
+ render_resource
53
+ else
54
+ render_action_error error_status
55
+ end
56
+ end
57
+
58
+ protected
59
+
60
+ def resource
61
+ @user ||= current_resource_owner
62
+ end
63
+
64
+ def permitted_params
65
+ permitted = params.permit(user: [*%i(email password first_name last_name),
66
+ provider_authentications: [:provider, :provider_access_token, :provider_access_token_secret],
67
+ authentication: [*%i(auth_type client_id client_secret client_version device_identifier device_description device_os device_os_version)]]).to_h.with_indifferent_access
68
+ user_params = permitted[:user] || {}
69
+
70
+ if action_name == 'update'
71
+ user_params.delete :authentication
72
+ else
73
+ user_params[:authentications_attributes] = [(user_params.delete(:authentication) || {}).merge(auth_type: 'registration')]
74
+ end
75
+
76
+ if user_params.has_key? :provider_authentications
77
+ user_params[:provider_authentications_attributes] = user_params.delete(:provider_authentications)
78
+ end
79
+
80
+ permitted
81
+ end
82
+
83
+ def build_resource
84
+ @user = User.new.tap do |user|
85
+ user.assign_attributes permitted_params[:user]
86
+ end
87
+ end
88
+
89
+ def include_authentication?
90
+ action_name == 'create'
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,72 @@
1
+ require 'rails-api'
2
+ require 'active_model_serializers'
3
+
4
+ module Rockauth
5
+ class ProviderAuthenticationsController < ActionController::API
6
+ include ActionController::Helpers
7
+ include ActionController::Serialization
8
+
9
+ before_filter :authenticate_resource_owner!
10
+ serialization_scope :view_context
11
+
12
+ def index
13
+ render json: collection
14
+ end
15
+
16
+ def create
17
+ build_resource
18
+ render_resource_or_error resource.save
19
+ end
20
+
21
+ def show
22
+ render_resource
23
+ end
24
+
25
+ def update
26
+ resource.assign_attributes permitted_params[:provider_authentication]
27
+ render_resource_or_error resource.save
28
+ end
29
+
30
+ def destroy
31
+ if resource.destroy
32
+ render nothing: true, status: 200
33
+ else
34
+ render_action_error 409
35
+ end
36
+ end
37
+
38
+ def render_resource
39
+ render json: resource, status: 200
40
+ end
41
+
42
+ def render_action_error error_status=400
43
+ render_error error_status, I18n.t("rockauth.errors.#{action_name}_error", resource: resource.class.model_name.human), resource.errors
44
+ end
45
+
46
+ def render_resource_or_error successful, error_status: 400
47
+ if successful
48
+ render_resource
49
+ else
50
+ render_action_error error_status
51
+ end
52
+ end
53
+
54
+ protected
55
+
56
+ def resource
57
+ @provider_authentication ||= current_resource_owner.provider_authentications.find(params[:id])
58
+ end
59
+
60
+ def collection
61
+ @provider_authentications ||= current_resource_owner.provider_authentications
62
+ end
63
+
64
+ def permitted_params
65
+ params.permit(provider_authentication: %i{provider provider_access_token})
66
+ end
67
+
68
+ def build_resource
69
+ @provider_authentication ||= current_resource_owner.provider_authentications.build permitted_params[:provider_authentication]
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,4 @@
1
+ module Rockauth
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Rockauth
2
+ class Authentication < ActiveRecord::Base
3
+ include Models::Authentication
4
+ rockauth_authentication
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_record'
2
+
3
+ module Rockauth
4
+ class ProviderAuthentication < ActiveRecord::Base
5
+ include Models::ProviderValidation
6
+ include Models::ProviderAuthentication
7
+ provider_authentication
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Rockauth
2
+ class User < ActiveRecord::Base
3
+ self.table_name = 'users'
4
+ include Models::ResourceOwner
5
+
6
+ resource_owner
7
+
8
+ include Models::User
9
+ end
10
+ end