authentasaurus 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +173 -0
  3. data/TODO +4 -0
  4. data/app/controllers/areas_controller.rb +4 -0
  5. data/app/controllers/groups_controller.rb +4 -0
  6. data/app/controllers/permissions_controller.rb +4 -0
  7. data/app/controllers/recoveries_controller.rb +2 -0
  8. data/app/controllers/registrations_controller.rb +2 -0
  9. data/app/controllers/sessions_controller.rb +2 -0
  10. data/app/controllers/user_invitations_controller.rb +4 -0
  11. data/app/controllers/users_controller.rb +4 -0
  12. data/app/controllers/validations_controller.rb +2 -0
  13. data/app/models/area.rb +2 -0
  14. data/app/models/authentasaurus_emailer.rb +2 -0
  15. data/app/models/group.rb +2 -0
  16. data/app/models/permission.rb +2 -0
  17. data/app/models/recovery.rb +2 -0
  18. data/app/models/session.rb +2 -0
  19. data/app/models/user.rb +3 -0
  20. data/app/models/user_invitation.rb +2 -0
  21. data/app/models/user_sync.rb +3 -0
  22. data/app/models/validation.rb +2 -0
  23. data/app/views/areas/edit.html.erb +7 -0
  24. data/app/views/areas/index.html.erb +11 -0
  25. data/app/views/areas/new.html.erb +7 -0
  26. data/app/views/areas/show.html.erb +7 -0
  27. data/app/views/authentasaurus_emailer/invitation_mail.html.erb +4 -0
  28. data/app/views/authentasaurus_emailer/recovery_mail.html.erb +7 -0
  29. data/app/views/authentasaurus_emailer/validation_mail.html.erb +6 -0
  30. data/app/views/groups/edit.html.erb +7 -0
  31. data/app/views/groups/index.html.erb +11 -0
  32. data/app/views/groups/new.html.erb +7 -0
  33. data/app/views/groups/show.html.erb +7 -0
  34. data/app/views/permissions/edit.html.erb +19 -0
  35. data/app/views/permissions/index.html.erb +17 -0
  36. data/app/views/permissions/new.html.erb +19 -0
  37. data/app/views/permissions/show.html.erb +7 -0
  38. data/app/views/recoveries/edit.html.erb +24 -0
  39. data/app/views/recoveries/new.html.erb +15 -0
  40. data/app/views/registrations/new.html.erb +21 -0
  41. data/app/views/sessions/new.html.erb +41 -0
  42. data/app/views/sessions/no_access.html.erb +1 -0
  43. data/app/views/user_invitations/index.html.erb +14 -0
  44. data/app/views/user_invitations/new.html.erb +9 -0
  45. data/app/views/users/edit.html.erb +27 -0
  46. data/app/views/users/index.html.erb +19 -0
  47. data/app/views/users/new.html.erb +27 -0
  48. data/app/views/users/show.html.erb +11 -0
  49. data/app/views/validations/activate.html.erb +6 -0
  50. data/app/views/validations/resend_validation_email.html.erb +6 -0
  51. data/config/locales/en.yml +34 -0
  52. data/generators/authentasaurus/USAGE +2 -0
  53. data/generators/authentasaurus/authentasaurus_generator.rb +9 -0
  54. data/generators/authentasaurus/templates/authentasaurus_tasks.rake +48 -0
  55. data/generators/authentasaurus/templates/defaults.yml +51 -0
  56. data/generators/authentasaurus/templates/initializer.rb +3 -0
  57. data/generators/authentasaurus_views/USAGE +12 -0
  58. data/generators/authentasaurus_views/authentasaurus_views_generator.rb +87 -0
  59. data/generators/authentasaurus_views/templates/views/areas/edit.html.erb +7 -0
  60. data/generators/authentasaurus_views/templates/views/areas/index.html.erb +11 -0
  61. data/generators/authentasaurus_views/templates/views/areas/new.html.erb +7 -0
  62. data/generators/authentasaurus_views/templates/views/areas/show.html.erb +7 -0
  63. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/invitation_mail.html.erb +4 -0
  64. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/recovery_mail.html.erb +7 -0
  65. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/validation_mail.html.erb +6 -0
  66. data/generators/authentasaurus_views/templates/views/groups/edit.html.erb +7 -0
  67. data/generators/authentasaurus_views/templates/views/groups/index.html.erb +11 -0
  68. data/generators/authentasaurus_views/templates/views/groups/new.html.erb +7 -0
  69. data/generators/authentasaurus_views/templates/views/groups/show.html.erb +7 -0
  70. data/generators/authentasaurus_views/templates/views/permissions/edit.html.erb +19 -0
  71. data/generators/authentasaurus_views/templates/views/permissions/index.html.erb +17 -0
  72. data/generators/authentasaurus_views/templates/views/permissions/new.html.erb +19 -0
  73. data/generators/authentasaurus_views/templates/views/permissions/show.html.erb +7 -0
  74. data/generators/authentasaurus_views/templates/views/recoveries/edit.html.erb +24 -0
  75. data/generators/authentasaurus_views/templates/views/recoveries/new.html.erb +15 -0
  76. data/generators/authentasaurus_views/templates/views/registrations/new.html.erb +21 -0
  77. data/generators/authentasaurus_views/templates/views/sessions/new.html.erb +41 -0
  78. data/generators/authentasaurus_views/templates/views/sessions/no_access.html.erb +1 -0
  79. data/generators/authentasaurus_views/templates/views/user_invitations/index.html.erb +14 -0
  80. data/generators/authentasaurus_views/templates/views/user_invitations/new.html.erb +9 -0
  81. data/generators/authentasaurus_views/templates/views/users/edit.html.erb +27 -0
  82. data/generators/authentasaurus_views/templates/views/users/index.html.erb +19 -0
  83. data/generators/authentasaurus_views/templates/views/users/new.html.erb +27 -0
  84. data/generators/authentasaurus_views/templates/views/users/show.html.erb +11 -0
  85. data/generators/authentasaurus_views/templates/views/validations/activate.html.erb +6 -0
  86. data/generators/authentasaurus_views/templates/views/validations/resend_validation_email.html.erb +6 -0
  87. data/lib/action_controller/authorization.rb +215 -0
  88. data/lib/action_view/authorization.rb +123 -0
  89. data/lib/active_record/acts_as_authenticatable.rb +80 -0
  90. data/lib/active_record/acts_as_authenticatable_validatable.rb +32 -0
  91. data/lib/active_record/authenticatable.rb +56 -0
  92. data/lib/active_resource/acts_as_authenticatable.rb +42 -0
  93. data/lib/active_resource/authenticatable.rb +22 -0
  94. data/lib/authentasaurus.rb +21 -0
  95. data/lib/authentasaurus/areas_controller.rb +71 -0
  96. data/lib/authentasaurus/authentasaurus_controller.rb +2 -0
  97. data/lib/authentasaurus/groups_controller.rb +73 -0
  98. data/lib/authentasaurus/models/area.rb +8 -0
  99. data/lib/authentasaurus/models/authentasaurus_emailer.rb +31 -0
  100. data/lib/authentasaurus/models/group.rb +8 -0
  101. data/lib/authentasaurus/models/permission.rb +9 -0
  102. data/lib/authentasaurus/models/recovery.rb +23 -0
  103. data/lib/authentasaurus/models/session.rb +63 -0
  104. data/lib/authentasaurus/models/user_invitation.rb +21 -0
  105. data/lib/authentasaurus/models/validation.rb +18 -0
  106. data/lib/authentasaurus/permissions_controller.rb +71 -0
  107. data/lib/authentasaurus/recoveries_controller.rb +59 -0
  108. data/lib/authentasaurus/registrations_controller.rb +32 -0
  109. data/lib/authentasaurus/sessions_controller.rb +45 -0
  110. data/lib/authentasaurus/user_invitations_controller.rb +39 -0
  111. data/lib/authentasaurus/users_controller.rb +71 -0
  112. data/lib/authentasaurus/validations_controller.rb +34 -0
  113. data/lib/helpers/migrations.rb +171 -0
  114. data/lib/helpers/routing.rb +90 -0
  115. data/rails/init.rb +37 -0
  116. metadata +188 -0
@@ -0,0 +1,39 @@
1
+ class Authentasaurus::UserInvitationsController < Authentasaurus::AuthentasaurusController
2
+
3
+ def index
4
+ @invitations = UserInvitation.find :all
5
+
6
+ respond_to do |format|
7
+ format.html
8
+ end
9
+ end
10
+
11
+ def new
12
+ @invitation = UserInvitation.new
13
+
14
+ respond_to do |format|
15
+ format.html
16
+ end
17
+ end
18
+
19
+ def create
20
+ @invitation = UserInvitation.new params[:user_invitation]
21
+
22
+ respond_to do |format|
23
+ if @invitation.save
24
+ format.html { redirect_to :action => :index }
25
+ else
26
+ format.html {render :new}
27
+ end
28
+ end
29
+ end
30
+
31
+ def destroy
32
+ invitation = UserInvitation.find params[:id]
33
+ invitation.destroy
34
+
35
+ respond_to do |format|
36
+ format.html { redirect_to :action => :index }
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,71 @@
1
+ class Authentasaurus::UsersController < Authentasaurus::AuthentasaurusController
2
+
3
+ def index
4
+ @users = User.all
5
+
6
+ respond_to do |format|
7
+ format.html
8
+ end
9
+ end
10
+
11
+ def show
12
+ @user = User.find(params[:id])
13
+
14
+ respond_to do |format|
15
+ format.html
16
+ end
17
+ end
18
+
19
+ def new
20
+ @user = User.new
21
+
22
+ respond_to do |format|
23
+ format.html
24
+ end
25
+ end
26
+
27
+ def create
28
+ @user = User.new params[:user]
29
+
30
+ respond_to do |format|
31
+ if @user.save
32
+ flash.now[:notice] = "User saved successfully"
33
+ format.html { redirect_to :action=>:index }
34
+ else
35
+ flash.now[:notice] = "Error saving user"
36
+ format.html { render :new }
37
+ end
38
+ end
39
+ end
40
+
41
+ def edit
42
+ @user = User.find params[:id]
43
+
44
+ respond_to do |format|
45
+ format.html
46
+ end
47
+ end
48
+
49
+ def update
50
+ @user = User.find params[:id]
51
+
52
+ respond_to do |format|
53
+ if @user.update_attributes(params[:user])
54
+ flash.now[:notice] = "User updated"
55
+ format.html { redirect_to @user }
56
+ else
57
+ flash.now[:notice] = "Error updating user"
58
+ format.html { render :edit }
59
+ end
60
+ end
61
+ end
62
+
63
+ def destroy
64
+ @user = User.find params[:id]
65
+ @user.destroy
66
+
67
+ respond_to do |format|
68
+ format.html { redirect_to :action=>:index }
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,34 @@
1
+ class Authentasaurus::ValidationsController < Authentasaurus::AuthentasaurusController
2
+ def validate
3
+ respond_to do |format|
4
+ validation = Validation.find_by_validation_code(params[:vcode])
5
+ if validation
6
+ validation.user.activate
7
+ validation.destroy
8
+ format.html { redirect_to login_url, :notice => I18n.t(:validation_successful, :scope => [:authentasaurus, :messages, :validations])}
9
+ else
10
+ self.alert = I18n.t(:validation_failed, :scope => [:authentasaurus, :messages, :validations])
11
+ format.html
12
+ end
13
+ end
14
+ end
15
+
16
+ def resend_validation_email
17
+ respond_to do |format|
18
+ format.html
19
+ end
20
+ end
21
+
22
+ def do_resend_validation_email
23
+ validation = Validation.find_by_email params[:email]
24
+
25
+ respond_to do |format|
26
+ unless validation.nil?
27
+ validation.send_validation
28
+ format.html {redirect_to login_url, :notice => I18n.t(:validation_email_sent, :scope => [:authentasaurus, :messages, :validations])}
29
+ else
30
+ format.html {render :resend_validation_email, :alert => I18n.t(:validation_email_invalid, :scope => [:authentasaurus, :messages, :validations], :email => params[:email])}
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,171 @@
1
+ module Helpers::Migrations
2
+ # Extends ActiveRecord::ConnectionAdapters::SchemaStatements
3
+ module Tables
4
+ def self.included(base) # :nodoc:
5
+ base.send :include, InstanceMethods
6
+ end
7
+
8
+ module InstanceMethods
9
+ # creates all tables
10
+ def authentasaurus_tables
11
+ authentasaurus_user :authorizable
12
+ authentasaurus_group
13
+ authentasaurus_area
14
+ authentasaurus_permission
15
+ authentasaurus_validation
16
+ authentasaurus_user_invitation
17
+ authentasaurus_recovery
18
+ end
19
+
20
+ # creates users table
21
+ def authentasaurus_user(*opts)
22
+ create_table :users do |t|
23
+ t.string :username, :null => false
24
+ t.string :hashed_password, :null => false
25
+ t.string :password_seed, :null => false
26
+ t.string :name, :null => false
27
+ t.string :email, :null => false
28
+ t.boolean :active, :null => false, :default => false
29
+ t.string :remember_me_token
30
+
31
+ if opts.include?(:authorizable) || opts.include?("authorizable")
32
+ t.integer :group_id, :null => false
33
+ end
34
+
35
+ t.timestamps
36
+ end
37
+ end
38
+
39
+ # creates groups table
40
+ def authentasaurus_group
41
+ create_table :groups do |t|
42
+ t.string :name, :null => false
43
+
44
+ t.timestamps
45
+ end
46
+ end
47
+
48
+ # creates areas table
49
+ def authentasaurus_area
50
+ create_table :areas do |t|
51
+ t.string :name, :null => false
52
+
53
+ t.timestamps
54
+ end
55
+ end
56
+
57
+ # creates permissions table
58
+ def authentasaurus_permission
59
+ create_table :permissions do |t|
60
+ t.integer :group_id, :null => false
61
+ t.integer :area_id, :null => false
62
+ t.boolean :read, :null => false
63
+ t.boolean :write, :null => false
64
+
65
+ t.timestamps
66
+ end
67
+ end
68
+
69
+ # creates validations table
70
+ def authentasaurus_validation
71
+ create_table :validations do |t|
72
+ t.integer :user_id, :null => false
73
+ t.string :user_type, :null => false
74
+ t.string :email, :null => false
75
+ t.string :validation_code, :null => false
76
+
77
+ t.timestamps
78
+ end
79
+ end
80
+
81
+ # creates user_invitations table
82
+ def authentasaurus_user_invitation
83
+ create_table :user_invitations do |t|
84
+ t.string :token, :null => false, :unique => true
85
+ t.string :email
86
+
87
+ t.timestamps
88
+ end
89
+ end
90
+
91
+ # creates recoveries table
92
+ def authentasaurus_recovery
93
+ create_table :recoveries do |t|
94
+ t.integer :user_id, :null => false
95
+ t.string :email, :null => false
96
+ t.string :token, :null => false, :unique => true
97
+
98
+ t.timestamps
99
+ end
100
+ end
101
+
102
+ # drops all tables
103
+ def authentasaurus_drop_tables
104
+ authentasaurus_drop_user
105
+ authentasaurus_drop_group
106
+ authentasaurus_drop_area
107
+ authentasaurus_drop_permission
108
+ authentasaurus_drop_validation
109
+ authentasaurus_drop_user_invitation
110
+ authentasaurus_drop_recovery
111
+ end
112
+
113
+ # drops users table
114
+ def authentasaurus_drop_user
115
+ drop_table :users
116
+ end
117
+
118
+ # drops groups table
119
+ def authentasaurus_drop_group
120
+ drop_table :groups
121
+ end
122
+
123
+ # drops areas table
124
+ def authentasaurus_drop_area
125
+ drop_table :areas
126
+ end
127
+
128
+ # drops permissions table
129
+ def authentasaurus_drop_permission
130
+ drop_table :permissions
131
+ end
132
+
133
+ # drops validations table
134
+ def authentasaurus_drop_validation
135
+ drop_table :validations
136
+ end
137
+
138
+ # drops user_invitations table
139
+ def authentasaurus_drop_user_invitation
140
+ drop_table :user_invitations
141
+ end
142
+
143
+ # drops recoveries table
144
+ def authentasaurus_drop_recovery
145
+ drop_table :recoveries
146
+ end
147
+ end
148
+ end
149
+
150
+ # Extends ActiveRecord::ConnectionAdapters::TableDefinition
151
+ module Columns
152
+ def self.included(base) # :nodoc:
153
+ base.send :include, InstanceMethods
154
+ end
155
+
156
+ module InstanceMethods
157
+ def user
158
+ string :username, :null => false
159
+ string :hashed_password, :null => false
160
+ string :password_seed, :null => false
161
+ string :name, :null => false
162
+ string :email, :null => false
163
+ string :remember_me_token
164
+ boolean :active, :null => false, :default => false
165
+ if opts.include?(:authorizable)
166
+ t.integer :group_id, :null => false
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,90 @@
1
+ ## Authentasaurus routes helper
2
+ module Helpers::Routing
3
+ def self.included(base) # :nodoc:
4
+ base.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ # TODO: add documentation here
9
+ def authentasaurus_routes(*opts)
10
+ options = opts.extract_options!
11
+
12
+ # Authenticatable
13
+ authentasaurus_sessions options.dup
14
+ authentasaurus_users options.dup
15
+ # Recoverable
16
+ authentasaurus_recoverable options.dup
17
+
18
+ # Authorizable
19
+ if opts.include?(:authorizable)
20
+ authentasaurus_authorizable options.dup
21
+ end
22
+
23
+ # Validatable
24
+ if opts.include?(:validatable)
25
+ authentasaurus_validatable options.dup
26
+ end
27
+
28
+ # Invitable
29
+ if opts.include?(:invitable)
30
+ authentasaurus_invitable options.dup
31
+ authentasaurus_invitable_public
32
+ end
33
+ end
34
+
35
+ # TODO: add documentation here
36
+ def authentasaurus_sessions(*opts)
37
+ options = opts.extract_options!
38
+
39
+ resources :sessions, options.dup.merge({:except => [:index, :show, :edit, :update], :path_names => {:new => 'sign-in'}, :member => {:no_access => :get}})
40
+ end
41
+
42
+ # TODO: add documentation here
43
+ def authentasaurus_users(*opts)
44
+ options = opts.extract_options!
45
+
46
+ resources :users, options.dup
47
+ end
48
+
49
+ # TODO: add documentation here
50
+ def authentasaurus_authorizable(*opts)
51
+ options = opts.extract_options!
52
+
53
+ resources :groups, options.dup
54
+ resources :areas, options.dup
55
+ resources :permissions, options.dup
56
+ end
57
+
58
+ # TODO: add documentation here
59
+ def authentasaurus_validatable(*opts)
60
+ options = opts.extract_options!
61
+
62
+ validate "/validate", options.dup.merge({:controller => :validations, :action => :activate})
63
+ resend_validation_email "/resend-validation", options.dup.merge({:controller => :validations, :action => :resend_validation_email, :conditions => {:method => :get}})
64
+ do_resend_validation_email "/resend-validation", options.dup.merge({:controller => :validations, :action => :do_resend_validation_email, :conditions => {:method => :post}})
65
+ end
66
+
67
+ # TODO: add documentation here
68
+ def authentasaurus_invitable(*opts)
69
+ options = opts.extract_options!
70
+
71
+ resources :user_invitations, options.dup.merge({:except => [:show, :edit, :update]})
72
+ end
73
+
74
+ def authentasaurus_invitable_public(*opts)
75
+ options = opts.extract_options!
76
+
77
+ resources :registrations, :only => [:new, :create], :path_prefix => "/:token", :requirements => {:token => /[0-9a-zA-Z]+/}
78
+ end
79
+
80
+ # TODO: add documentation here
81
+ def authentasaurus_recoverable(*opts)
82
+ options = opts.extract_options!
83
+
84
+ forgot_password "/forgot-password", options.dup.merge({ :controller => :recoveries, :action => :new, :conditions => { :method => :get } })
85
+ do_forgot_password "/forgot-password", options.dup.merge({ :controller => :recoveries, :action => :create, :conditions => { :method => :post } })
86
+ recover_password "/recover-password/:token", options.dup.merge({ :controller => :recoveries, :action => :edit, :conditions => { :method => :get } })
87
+ do_recover_password "/recover-password/:token", options.dup.merge({ :controller => :recoveries, :action => :destroy, :conditions => { :method => :delete } })
88
+ end
89
+ end
90
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'action_controller/authorization'
2
+ require 'action_view/authorization'
3
+ require 'active_record/authenticatable'
4
+ require 'active_resource/authenticatable'
5
+ require 'helpers/routing'
6
+ require 'helpers/migrations'
7
+
8
+ if defined? ActionController
9
+ class ActionController::Base
10
+ include ActionController::Authorization
11
+ end
12
+
13
+ class ActionView::Base
14
+ include ActionView::Authorization
15
+ end
16
+
17
+ class ActionController::Routing::RouteSet::Mapper
18
+ include Helpers::Routing
19
+ end
20
+ end
21
+
22
+ if defined? ActiveRecord
23
+ class ActiveRecord::Base
24
+ include ActiveRecord::Authenticatable
25
+ end
26
+
27
+ class ActiveRecord::ConnectionAdapters::AbstractAdapter
28
+ include Helpers::Migrations::Tables
29
+ end
30
+ end
31
+
32
+ if defined? ActiveResource
33
+ class ActiveResource::Base
34
+ class_inheritable_accessor :sync, :sync_to
35
+ include ActiveResource::Authenticatable
36
+ end
37
+ end