api_guardian 0.1.0.pre

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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +125 -0
  4. data/Rakefile +30 -0
  5. data/app/controllers/api_guardian/api_controller.rb +112 -0
  6. data/app/controllers/api_guardian/application_controller.rb +11 -0
  7. data/app/controllers/api_guardian/permissions_controller.rb +7 -0
  8. data/app/controllers/api_guardian/registration_controller.rb +38 -0
  9. data/app/controllers/api_guardian/roles_controller.rb +19 -0
  10. data/app/controllers/api_guardian/users_controller.rb +20 -0
  11. data/app/models/api_guardian/permission.rb +14 -0
  12. data/app/models/api_guardian/role.rb +97 -0
  13. data/app/models/api_guardian/role_permission.rb +8 -0
  14. data/app/models/api_guardian/user.rb +23 -0
  15. data/app/serializers/api_guardian/permission_serializer.rb +7 -0
  16. data/app/serializers/api_guardian/role_serializer.rb +7 -0
  17. data/app/serializers/api_guardian/user_serializer.rb +10 -0
  18. data/config/initializers/api_guardian.rb +10 -0
  19. data/config/initializers/doorkeeper.rb +143 -0
  20. data/config/routes.rb +20 -0
  21. data/db/migrate/20151117191338_api_guardian_enable_uuid_extension.rb +5 -0
  22. data/db/migrate/20151117191911_create_api_guardian_roles.rb +9 -0
  23. data/db/migrate/20151117195618_create_api_guardian_users.rb +25 -0
  24. data/db/migrate/20151117212826_create_api_guardian_permissions.rb +10 -0
  25. data/db/migrate/20151117213145_create_api_guardian_role_permissions.rb +11 -0
  26. data/db/migrate/20151117225238_create_doorkeeper_tables.rb +42 -0
  27. data/db/seeds.rb +32 -0
  28. data/lib/api_guardian.rb +80 -0
  29. data/lib/api_guardian/concerns/api_errors/handler.rb +145 -0
  30. data/lib/api_guardian/concerns/api_errors/renderer.rb +45 -0
  31. data/lib/api_guardian/concerns/api_request/validator.rb +66 -0
  32. data/lib/api_guardian/configuration.rb +171 -0
  33. data/lib/api_guardian/engine.rb +23 -0
  34. data/lib/api_guardian/errors/invalid_content_type_error.rb +6 -0
  35. data/lib/api_guardian/errors/invalid_permission_name_error.rb +6 -0
  36. data/lib/api_guardian/errors/invalid_request_body_error.rb +6 -0
  37. data/lib/api_guardian/errors/invalid_request_resource_id_error.rb +6 -0
  38. data/lib/api_guardian/errors/invalid_request_resource_type_error.rb +6 -0
  39. data/lib/api_guardian/errors/invalid_update_action_error.rb +6 -0
  40. data/lib/api_guardian/errors/reset_token_expired_error.rb +6 -0
  41. data/lib/api_guardian/errors/reset_token_user_mismatch_error.rb +6 -0
  42. data/lib/api_guardian/policies/application_policy.rb +65 -0
  43. data/lib/api_guardian/policies/permission_policy.rb +15 -0
  44. data/lib/api_guardian/policies/role_policy.rb +15 -0
  45. data/lib/api_guardian/policies/user_policy.rb +23 -0
  46. data/lib/api_guardian/stores/base.rb +53 -0
  47. data/lib/api_guardian/stores/permission_store.rb +6 -0
  48. data/lib/api_guardian/stores/role_store.rb +9 -0
  49. data/lib/api_guardian/stores/user_store.rb +86 -0
  50. data/lib/api_guardian/version.rb +3 -0
  51. data/lib/generators/api_guardian/install/USAGE +8 -0
  52. data/lib/generators/api_guardian/install/install_generator.rb +19 -0
  53. data/lib/generators/api_guardian/install/templates/README +1 -0
  54. data/lib/generators/api_guardian/install/templates/api_guardian.rb +5 -0
  55. data/lib/tasks/api_guardian_tasks.rake +4 -0
  56. data/spec/concerns/api_errors/handler_spec.rb +114 -0
  57. data/spec/concerns/api_request/validator_spec.rb +102 -0
  58. data/spec/dummy/README.rdoc +28 -0
  59. data/spec/dummy/Rakefile +6 -0
  60. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  61. data/spec/dummy/bin/bundle +3 -0
  62. data/spec/dummy/bin/rails +4 -0
  63. data/spec/dummy/bin/rake +4 -0
  64. data/spec/dummy/bin/setup +29 -0
  65. data/spec/dummy/config.ru +4 -0
  66. data/spec/dummy/config/application.rb +25 -0
  67. data/spec/dummy/config/boot.rb +5 -0
  68. data/spec/dummy/config/database.yml +13 -0
  69. data/spec/dummy/config/environment.rb +5 -0
  70. data/spec/dummy/config/environments/development.rb +41 -0
  71. data/spec/dummy/config/environments/production.rb +79 -0
  72. data/spec/dummy/config/environments/test.rb +42 -0
  73. data/spec/dummy/config/initializers/assets.rb +11 -0
  74. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  75. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  76. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  77. data/spec/dummy/config/initializers/inflections.rb +16 -0
  78. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  79. data/spec/dummy/config/initializers/session_store.rb +3 -0
  80. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  81. data/spec/dummy/config/locales/en.yml +23 -0
  82. data/spec/dummy/config/routes.rb +3 -0
  83. data/spec/dummy/config/secrets.yml +22 -0
  84. data/spec/dummy/db/schema.rb +104 -0
  85. data/spec/dummy/log/test.log +5031 -0
  86. data/spec/dummy/public/404.html +67 -0
  87. data/spec/dummy/public/422.html +67 -0
  88. data/spec/dummy/public/500.html +66 -0
  89. data/spec/dummy/public/favicon.ico +0 -0
  90. data/spec/factories/permissions.rb +6 -0
  91. data/spec/factories/role_permissions.rb +6 -0
  92. data/spec/factories/roles.rb +24 -0
  93. data/spec/factories/users.rb +11 -0
  94. data/spec/models/permission_spec.rb +28 -0
  95. data/spec/models/role_permission_spec.rb +27 -0
  96. data/spec/models/role_spec.rb +209 -0
  97. data/spec/models/user_spec.rb +44 -0
  98. data/spec/policies/application_policy_spec.rb +118 -0
  99. data/spec/policies/permission_policy_spec.rb +28 -0
  100. data/spec/policies/role_policy_spec.rb +28 -0
  101. data/spec/policies/user_policy_spec.rb +29 -0
  102. data/spec/requests/permissions_controller_spec.rb +19 -0
  103. data/spec/requests/registration_controller_spec.rb +151 -0
  104. data/spec/requests/roles_controller_spec.rb +75 -0
  105. data/spec/requests/users_controller_spec.rb +75 -0
  106. data/spec/spec_helper.rb +138 -0
  107. data/spec/stores/base_spec.rb +113 -0
  108. data/spec/stores/permission_store_spec.rb +2 -0
  109. data/spec/stores/role_store_spec.rb +12 -0
  110. data/spec/stores/user_store_spec.rb +144 -0
  111. data/spec/support/controller_concern_test_helpers.rb +21 -0
  112. data/spec/support/matchers.rb +37 -0
  113. data/spec/support/request_helpers.rb +111 -0
  114. metadata +508 -0
@@ -0,0 +1,8 @@
1
+ module ApiGuardian
2
+ class RolePermission < ActiveRecord::Base
3
+ belongs_to :role, class_name: ApiGuardian.role_class.to_s
4
+ belongs_to :permission, class_name: ApiGuardian.permission_class.to_s
5
+
6
+ validates :role_id, uniqueness: { scope: :permission_id, message: 'Permission combination already exists!' }
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module ApiGuardian
2
+ class User < ActiveRecord::Base
3
+ acts_as_paranoid
4
+ has_secure_password
5
+
6
+ belongs_to :role, class_name: ApiGuardian.role_class.to_s
7
+
8
+ delegate :can?, :cannot?, to: :role
9
+
10
+ validates :email, presence: true, uniqueness: true
11
+ validates :password, length: { minimum: 8 }, if: :password
12
+
13
+ # Class Methods
14
+ def self.policy_class
15
+ ApiGuardian::Policies::UserPolicy
16
+ end
17
+
18
+ # Instance Methods
19
+ def reset_password_token_valid?
20
+ !reset_password_sent_at.nil? && 24.hours.ago <= reset_password_sent_at
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module ApiGuardian
2
+ class PermissionSerializer < ActiveModel::Serializer
3
+ type 'permissions'
4
+
5
+ attributes :id, :name, :desc
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module ApiGuardian
2
+ class RoleSerializer < ActiveModel::Serializer
3
+ type 'roles'
4
+
5
+ attributes :id, :name, :permissions, :created_at, :updated_at
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module ApiGuardian
2
+ class UserSerializer < ActiveModel::Serializer
3
+ type 'users'
4
+
5
+ attributes :id, :first_name, :last_name, :email, :email_confirmed_at,
6
+ :phone_number, :phone_number_confirmed_at, :created_at, :updated_at
7
+
8
+ belongs_to :role
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ ActiveModel::Serializer.config.adapter = :json_api
2
+
3
+ api_mime_types = %w(
4
+ application/vnd.api+json
5
+ text/x-json
6
+ application/json
7
+ )
8
+
9
+ Mime::Type.unregister :json
10
+ Mime::Type.register 'application/json', :json, api_mime_types
@@ -0,0 +1,143 @@
1
+ ::Doorkeeper.configure do
2
+ # Change the ORM that doorkeeper will use (needs plugins)
3
+ orm :active_record
4
+
5
+ # This block will be called to check whether the resource owner is authenticated or not.
6
+ resource_owner_from_credentials do
7
+ u = ApiGuardian.user_class.find_by(email: params[:email])
8
+ u if u && u.try(:authenticate, params[:password])
9
+ end
10
+
11
+ # If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below.
12
+ # admin_authenticator do
13
+ # # Put your admin authentication logic here.
14
+ # # Example implementation:
15
+ # Admin.find_by_id(session[:admin_id]) || redirect_to(new_admin_session_url)
16
+ # end
17
+
18
+ # Authorization Code expiration time (default 10 minutes).
19
+ # authorization_code_expires_in 10.minutes
20
+
21
+ # Access token expiration time (default 2 hours).
22
+ # If you want to disable expiration, set this to nil.
23
+ # access_token_expires_in 2.hours
24
+
25
+ # Assign a custom TTL for implicit grants.
26
+ # custom_access_token_expires_in do |oauth_client|
27
+ # oauth_client.application.additional_settings.implicit_oauth_expiration
28
+ # end
29
+
30
+ # Use a custom class for generating the access token.
31
+ # https://github.com/doorkeeper-gem/doorkeeper#custom-access-token-generator
32
+ access_token_generator '::Doorkeeper::JWT'
33
+
34
+ # Reuse access token for the same resource owner within an application (disabled by default)
35
+ # Rationale: https://github.com/doorkeeper-gem/doorkeeper/issues/383
36
+ # reuse_access_token
37
+
38
+ # Issue access tokens with refresh token (disabled by default)
39
+ use_refresh_token
40
+
41
+ # Provide support for an owner to be assigned to each registered application (disabled by default)
42
+ # Optional parameter :confirmation => true (default false) if you want to enforce ownership of
43
+ # a registered application
44
+ # Note: you must also run the rails g doorkeeper:application_owner generator to provide the necessary support
45
+ # enable_application_owner :confirmation => false
46
+
47
+ # Define access token scopes for your provider
48
+ # For more information go to
49
+ # https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes
50
+ # default_scopes :public
51
+ # optional_scopes :write, :update
52
+
53
+ # Change the way client credentials are retrieved from the request object.
54
+ # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
55
+ # falls back to the `:client_id` and `:client_secret` params from the `params` object.
56
+ # Check out the wiki for more information on customization
57
+ # client_credentials :from_basic, :from_params
58
+
59
+ # Change the way access token is authenticated from the request object.
60
+ # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
61
+ # falls back to the `:access_token` or `:bearer_token` params from the `params` object.
62
+ # Check out the wiki for more information on customization
63
+ # access_token_methods :from_bearer_authorization, :from_access_token_param, :from_bearer_param
64
+
65
+ # Change the native redirect uri for client apps
66
+ # When clients register with the following redirect uri, they won't be redirected to any server and the authorization code will be displayed within the provider
67
+ # The value can be any string. Use nil to disable this feature. When disabled, clients must provide a valid URL
68
+ # (Similar behaviour: https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi)
69
+ #
70
+ # native_redirect_uri 'urn:ietf:wg:oauth:2.0:oob'
71
+
72
+ # Forces the usage of the HTTPS protocol in non-native redirect uris (enabled
73
+ # by default in non-development environments). OAuth2 delegates security in
74
+ # communication to the HTTPS protocol so it is wise to keep this enabled.
75
+ #
76
+ # force_ssl_in_redirect_uri !Rails.env.development?
77
+
78
+ # Specify what grant flows are enabled in array of Strings. The valid
79
+ # strings and the flows they enable are:
80
+ #
81
+ # "authorization_code" => Authorization Code Grant Flow
82
+ # "implicit" => Implicit Grant Flow
83
+ # "password" => Resource Owner Password Credentials Grant Flow
84
+ # "client_credentials" => Client Credentials Grant Flow
85
+ #
86
+ # If not specified, Doorkeeper enables authorization_code and
87
+ # client_credentials.
88
+ #
89
+ # implicit and password grant flows have risks that you should understand
90
+ # before enabling:
91
+ # http://tools.ietf.org/html/rfc6819#section-4.4.2
92
+ # http://tools.ietf.org/html/rfc6819#section-4.4.3
93
+ #
94
+ grant_flows %w(password)
95
+
96
+ # Under some circumstances you might want to have applications auto-approved,
97
+ # so that the user skips the authorization step.
98
+ # For example if dealing with a trusted application.
99
+ # skip_authorization do |resource_owner, client|
100
+ # client.superapp? or resource_owner.admin?
101
+ # end
102
+
103
+ # WWW-Authenticate Realm (default "Doorkeeper").
104
+ # realm "Doorkeeper"
105
+ end
106
+
107
+ ::Doorkeeper::JWT.configure do
108
+ # Set the payload for the JWT token. This should contain unique information
109
+ # about the user.
110
+ # Defaults to a randomly generated token in a hash
111
+ # { token: "RANDOM-TOKEN" }
112
+ token_payload do |opts|
113
+ user = ApiGuardian.user_class.find(opts[:resource_owner_id])
114
+ iat = DateTime.current.utc.to_i
115
+ {
116
+ iss: 'guideon:washington',
117
+ iat: iat,
118
+ exp: iat + opts[:expires_in],
119
+ jti: Digest::MD5.hexdigest([SecureRandom.hex, iat].join(':')),
120
+ sub: user.id,
121
+ user: {
122
+ id: user.id,
123
+ email: user.email
124
+ },
125
+ permissions: user.role.permissions
126
+ }
127
+ end
128
+
129
+ # Set the encryption secret. This would be shared with any other applications
130
+ # that should be able to read the payload of the token.
131
+ # Defaults to "secret"
132
+ secret_key 'MY-SECRET'
133
+
134
+ # If you want to use RS* encoding specify the path to the RSA key
135
+ # to use for signing.
136
+ # If you specify a secret_key_path it will be used instead of secret_key
137
+ # secret_key_path 'path/to/file.pem'
138
+
139
+ # Specify encryption type. Supports any algorithim in
140
+ # https://github.com/progrium/ruby-jwt
141
+ # defaults to nil
142
+ encryption_method :hs256
143
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,20 @@
1
+ ApiGuardian::Engine.routes.draw do
2
+ # Registration
3
+ post '/register' => 'registration#create'
4
+ post '/reset-password' => 'registration#reset_password'
5
+ post '/complete-reset-password' => 'registration#complete_reset_password'
6
+
7
+ # API v1
8
+ use_doorkeeper scope: 'auth' do
9
+ skip_controllers :applications, :authorized_applications
10
+ end
11
+
12
+ resources :users, except: [:new, :edit] do
13
+ get 'permissions', on: :member
14
+ end
15
+
16
+ resources :roles, except: [:new, :edit]
17
+ resources :permissions, only: [:index]
18
+
19
+ match '*unmatched_route', to: 'application#not_found', via: :all
20
+ end
@@ -0,0 +1,5 @@
1
+ class ApiGuardianEnableUuidExtension < ActiveRecord::Migration
2
+ def change
3
+ enable_extension 'uuid-ossp'
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class CreateApiGuardianRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :api_guardian_roles, id: :uuid do |t|
4
+ t.string :name
5
+ t.boolean :default, default: false
6
+ t.timestamps null: false
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ class CreateApiGuardianUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :api_guardian_users, id: :uuid do |t|
4
+ t.string :first_name
5
+ t.string :last_name
6
+ t.string :email
7
+ t.datetime :email_confirmed_at
8
+ t.string :phone_number
9
+ t.datetime :phone_number_confirmed_at
10
+ t.string :password_digest, null: false
11
+ t.boolean :active, default: false
12
+ t.uuid :role_id, null: false
13
+ t.string :reset_password_token
14
+ t.datetime :reset_password_sent_at
15
+ t.datetime :deleted_at
16
+
17
+ t.timestamps null: false
18
+ end
19
+
20
+ add_index 'api_guardian_users', ['deleted_at'], name: 'index_api_guardian_users_on_deleted_at', using: :btree
21
+ add_index 'api_guardian_users', ['email'], name: 'index_api_guardian_users_on_email', unique: true, using: :btree
22
+ add_index 'api_guardian_users', ['reset_password_token'], name: 'index_api_guardian_users_on_reset_password_token', unique: true, using: :btree
23
+ add_index 'api_guardian_users', ['role_id'], name: 'index_api_guardian_users_on_role_id', using: :btree
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ class CreateApiGuardianPermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :api_guardian_permissions, id: :uuid do |t|
4
+ t.string :name
5
+ t.string :desc
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateApiGuardianRolePermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :api_guardian_role_permissions, id: :uuid do |t|
4
+ t.uuid :role_id
5
+ t.uuid :permission_id
6
+ t.boolean :granted, default: false
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,42 @@
1
+ class CreateDoorkeeperTables < ActiveRecord::Migration
2
+ def change
3
+ create_table :oauth_applications, id: :uuid do |t|
4
+ t.string :name, null: false
5
+ t.string :uid, null: false
6
+ t.string :secret, null: false
7
+ t.text :redirect_uri, null: false
8
+ t.string :scopes, null: false, default: ''
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :oauth_applications, :uid, unique: true
13
+
14
+ create_table :oauth_access_grants, id: :uuid do |t|
15
+ t.uuid :resource_owner_id, null: false
16
+ t.uuid :application_id, null: false
17
+ t.string :token, null: false
18
+ t.integer :expires_in, null: false
19
+ t.text :redirect_uri, null: false
20
+ t.datetime :created_at, null: false
21
+ t.datetime :revoked_at
22
+ t.string :scopes
23
+ end
24
+
25
+ add_index :oauth_access_grants, :token, unique: true
26
+
27
+ create_table :oauth_access_tokens, id: :uuid do |t|
28
+ t.uuid :resource_owner_id
29
+ t.uuid :application_id
30
+ t.text :token, null: false
31
+ t.string :refresh_token
32
+ t.integer :expires_in
33
+ t.datetime :revoked_at
34
+ t.datetime :created_at, null: false
35
+ t.string :scopes
36
+ end
37
+
38
+ add_index :oauth_access_tokens, :token, unique: true
39
+ add_index :oauth_access_tokens, :resource_owner_id
40
+ add_index :oauth_access_tokens, :refresh_token, unique: true
41
+ end
42
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,32 @@
1
+ # Roles
2
+ admin_role = ApiGuardian.role_class.create!(name: 'Super Admin')
3
+ user_role = ApiGuardian.role_class.create!(name: 'User', default: true)
4
+
5
+ # Permissions
6
+ ApiGuardian.permission_class.create!(name: 'user:create', desc: 'Ability to create User resource.')
7
+ ApiGuardian.permission_class.create!(name: 'user:read', desc: 'Ability to read User resource.')
8
+ ApiGuardian.permission_class.create!(name: 'user:update', desc: 'Ability to update User resource.')
9
+ ApiGuardian.permission_class.create!(name: 'user:delete', desc: 'Ability to delete User resource.')
10
+ ApiGuardian.permission_class.create!(name: 'user:manage', desc: 'Ability to manage User resource.')
11
+
12
+ ApiGuardian.permission_class.create!(name: 'role:create', desc: 'Ability to create Role resource.')
13
+ ApiGuardian.permission_class.create!(name: 'role:read', desc: 'Ability to read Role resource.')
14
+ ApiGuardian.permission_class.create!(name: 'role:update', desc: 'Ability to update Role resource.')
15
+ ApiGuardian.permission_class.create!(name: 'role:delete', desc: 'Ability to delete Role resource.')
16
+ ApiGuardian.permission_class.create!(name: 'role:manage', desc: 'Ability to manage Role resource.')
17
+
18
+ ApiGuardian.permission_class.create!(name: 'permission:create', desc: 'Ability to create Permission resource.')
19
+ ApiGuardian.permission_class.create!(name: 'permission:read', desc: 'Ability to read Permission resource.')
20
+ ApiGuardian.permission_class.create!(name: 'permission:update', desc: 'Ability to update Permission resource.')
21
+ ApiGuardian.permission_class.create!(name: 'permission:delete', desc: 'Ability to delete Permission resource.')
22
+ ApiGuardian.permission_class.create!(name: 'permission:manage', desc: 'Ability to manage Permission resource.')
23
+
24
+ admin_role.create_default_permissions true
25
+ user_role.create_default_permissions false
26
+
27
+ # User
28
+ ApiGuardian.user_class.create!(
29
+ first_name: 'Travis', last_name: 'Vignon', email: 'travis@lookitsatravis.com',
30
+ password: 'password', password_confirmation: 'password', role: admin_role,
31
+ active: true, email_confirmed_at: DateTime.now.utc
32
+ )
@@ -0,0 +1,80 @@
1
+ require 'rails-api'
2
+ require 'doorkeeper'
3
+ require 'doorkeeper-jwt'
4
+ require 'pundit'
5
+ require 'paranoia'
6
+ require 'rack/cors'
7
+ require 'kaminari'
8
+ require 'active_model_serializers'
9
+ require 'api_guardian/configuration'
10
+ require "api_guardian/engine"
11
+
12
+ module ApiGuardian
13
+ module Concerns
14
+ module ApiErrors
15
+ autoload :Handler, 'api_guardian/concerns/api_errors/handler'
16
+ autoload :Renderer, 'api_guardian/concerns/api_errors/renderer'
17
+ end
18
+
19
+ module ApiRequest
20
+ autoload :Validator, 'api_guardian/concerns/api_request/validator'
21
+ end
22
+ end
23
+
24
+ module Errors
25
+ autoload :InvalidContentTypeError, 'api_guardian/errors/invalid_content_type_error'
26
+ autoload :InvalidPermissionNameError, 'api_guardian/errors/invalid_permission_name_error'
27
+ autoload :InvalidRequestBodyError, 'api_guardian/errors/invalid_request_body_error'
28
+ autoload :InvalidRequestResourceIdError, 'api_guardian/errors/invalid_request_resource_id_error'
29
+ autoload :InvalidRequestResourceTypeError, 'api_guardian/errors/invalid_request_resource_type_error'
30
+ autoload :InvalidUpdateActionError, 'api_guardian/errors/invalid_update_action_error'
31
+ autoload :ResetTokenExpiredError, 'api_guardian/errors/reset_token_expired_error'
32
+ autoload :ResetTokenUserMismatchError, 'api_guardian/errors/reset_token_user_mismatch_error'
33
+ end
34
+
35
+ module Stores
36
+ autoload :Base, 'api_guardian/stores/base'
37
+ autoload :UserStore, 'api_guardian/stores/user_store'
38
+ autoload :RoleStore, 'api_guardian/stores/role_store'
39
+ autoload :PermissionStore, 'api_guardian/stores/permission_store'
40
+ end
41
+
42
+ module Policies
43
+ autoload :ApplicationPolicy, 'api_guardian/policies/application_policy'
44
+ autoload :PermissionPolicy, 'api_guardian/policies/permission_policy'
45
+ autoload :RolePolicy, 'api_guardian/policies/role_policy'
46
+ autoload :UserPolicy, 'api_guardian/policies/user_policy'
47
+ end
48
+
49
+ mattr_accessor :user_class
50
+ @@user_class = 'ApiGuardian::User'
51
+
52
+ mattr_accessor :role_class
53
+ @@role_class = 'ApiGuardian::Role'
54
+
55
+ mattr_accessor :permission_class
56
+ @@permission_class = 'ApiGuardian::Permission'
57
+
58
+ mattr_accessor :role_permission_class
59
+ @@role_permission_class = 'ApiGuardian::RolePermission'
60
+
61
+ def self.user_class
62
+ @@user_class.constantize
63
+ end
64
+
65
+ def self.role_class
66
+ @@role_class.constantize
67
+ end
68
+
69
+ def self.permission_class
70
+ @@permission_class.constantize
71
+ end
72
+
73
+ def self.role_permission_class
74
+ @@role_permission_class.constantize
75
+ end
76
+
77
+ def self.setup
78
+ yield self
79
+ end
80
+ end