tiny_passport 0.0.2 → 0.0.3

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/ables/tiny_passport/account_validate_able.rb +1 -0
  3. data/app/ables/tiny_passport/aggrement_term_able.rb +1 -0
  4. data/app/assets/images/tiny_passport/loading-mini.gif +0 -0
  5. data/app/assets/images/tiny_passport/oauth-icons.gif +0 -0
  6. data/app/assets/images/tiny_passport/oauth-icons.png +0 -0
  7. data/app/assets/stylesheets/tiny_passport/application.css.scss +20 -0
  8. data/app/displays/tiny_passport/account_display.rb +4 -6
  9. data/app/displays/tiny_passport/login_email_display.rb +19 -0
  10. data/app/displays/tiny_passport/oauth_login_display.rb +2 -0
  11. data/app/displays/tiny_passport/oauth_token_display.rb +2 -0
  12. data/app/forms/tiny_passport/account_active_form.rb +14 -7
  13. data/app/forms/tiny_passport/confirmation_token_form.rb +17 -8
  14. data/app/forms/tiny_passport/oauth/bind_connect_form.rb +4 -8
  15. data/app/forms/tiny_passport/oauth/bind_disconnect_form.rb +11 -3
  16. data/app/forms/tiny_passport/oauth/callback_form.rb +11 -8
  17. data/app/forms/tiny_passport/oauth/login_connect_form.rb +5 -12
  18. data/app/forms/tiny_passport/oauth/login_disconnect_form.rb +50 -0
  19. data/app/forms/tiny_passport/registration_form.rb +46 -35
  20. data/app/forms/tiny_passport/remember_token_auth_form.rb +2 -2
  21. data/app/forms/tiny_passport/reset_password_form.rb +4 -4
  22. data/app/forms/tiny_passport/session_form.rb +12 -11
  23. data/app/forms/tiny_passport/update_login_email_form.rb +68 -0
  24. data/app/forms/tiny_passport/update_password_form.rb +1 -1
  25. data/app/mailers/tiny_passport/registration_mailer.rb +1 -1
  26. data/app/models/concerns/tiny_passport/basic_status_able.rb +28 -0
  27. data/app/models/tiny_passport/account.rb +0 -1
  28. data/app/models/tiny_passport/login_email.rb +26 -16
  29. data/app/models/tiny_passport/oauth_login.rb +1 -12
  30. data/app/models/tiny_passport/oauth_token.rb +8 -2
  31. data/app/queries/tiny_passport/account_query.rb +4 -1
  32. data/config/locales/en/forms.en.yml +13 -0
  33. data/config/locales/zh-CN/forms.zh-CN.yml +44 -5
  34. data/db/migrate/20131105104415_create_tiny_passport_login_records.rb +1 -0
  35. data/lib/omniauth/strategies/github.rb +58 -0
  36. data/lib/omniauth/strategies/qq_connect.rb +1 -1
  37. data/lib/omniauth/strategies/weibo.rb +93 -0
  38. data/lib/tiny_passport/engine.rb +3 -3
  39. data/lib/tiny_passport/http_authcenter.rb +7 -2
  40. data/lib/tiny_passport/omniauth/strategable.rb +1 -0
  41. data/lib/tiny_passport/version.rb +1 -1
  42. data/test/dummy/db/schema.rb +2 -1
  43. data/test/dummy/db/test.sqlite3 +0 -0
  44. data/test/dummy/log/test.log +8973 -0
  45. data/test/forms/tiny_passport/oauth/callback_form_test.rb +2 -2
  46. data/test/forms/tiny_passport/session_form_test.rb +0 -2
  47. metadata +13 -12
  48. data/app/assets/stylesheets/tiny_passport/application.css +0 -13
  49. data/app/forms/tiny_passport/welcome_email_form.rb +0 -47
  50. data/app/services/tiny_passport/account_service.rb +0 -43
  51. data/app/services/tiny_passport/email_send_service.rb +0 -32
  52. data/app/services/tiny_passport/oauth_service.rb +0 -11
  53. data/test/dummy/tmp/cache/271/2A1/tiny_cache%2Fmodels%2FTinyPassport%3A%3AAccount%2F1%2F1 +0 -0
  54. data/test/dummy/tmp/cache/EDF/4C1/tiny_cache%2Fmodel_uniq_keys%2FTinyPassport%3A%3ALoginEmail%2F%5B%5B%22account_id%22%2C+1%5D%5D +0 -1
@@ -6,9 +6,11 @@ module TinyPassport
6
6
  include ::TinyPassport::AccountValidateAble
7
7
  include ::TinyPassport::AggrementTermAble
8
8
 
9
- delegate :login_name, :login_name=, :created_ip, :created_ip=, :to => :account
10
-
11
- attr_accessor :password, :password_confirmation, :login_email_value
9
+ attr_reader :password, :password_confirmation, :login_email_value,
10
+ :auto_login, :user_agent_value,
11
+ :login_record,
12
+ :login_name,
13
+ :created_ip
12
14
 
13
15
  # 取出用户名与邮箱的前后的空格
14
16
  self.support_strip_values!(:login_name, :login_email_value)
@@ -38,17 +40,8 @@ module TinyPassport
38
40
  @account ||= ::TinyPassport::Account.new
39
41
  end
40
42
 
41
- def login_record
42
- if self.account
43
- return @login_record if defined?(@login_record)
44
-
45
- ::ActiveRecord::Base.transaction do
46
- @login_record ||= ::TinyPassport::LoginRecord.new
47
- @login_record.account = self.account
48
- @login_record.save!
49
- @login_record
50
- end
51
- end
43
+ def auto_login?
44
+ [1, '1', true, 'true'].include?(self.auto_login)
52
45
  end
53
46
 
54
47
  def login_email
@@ -67,6 +60,7 @@ module TinyPassport
67
60
  # :created_ip 当前的IP
68
61
  # :captcha_key 验证码的KEY
69
62
  # :captcha 验证码的值
63
+ # :auto_login 自动登录 true/false 默认false
70
64
  #
71
65
  # Usage:
72
66
  # form = ::TinyPassport::RegistrationForm.new
@@ -78,11 +72,14 @@ module TinyPassport
78
72
  self.submit_valid?(params) do
79
73
  if save_objects
80
74
  if self.login_email_required?
75
+ confirmation_token_form = ::TinyPassport::ConfirmationTokenForm.new
76
+
81
77
  # 为login_email发送验证码
82
- self.email_send_service.send_confirmation_token_for_active(
78
+ confirmation_token_form.submit(
83
79
  :login_email_value => self.login_email.value,
84
- :active_way => 'login_email'
80
+ :active_way => 'login_email'
85
81
  )
82
+
86
83
  end
87
84
 
88
85
  @result = {
@@ -98,12 +95,14 @@ module TinyPassport
98
95
  end
99
96
 
100
97
  def submit_valid?(params={}, &block)
101
- self.agreement_terms = params[:agreement_terms]
102
- self.login_name = params[:login_name]
103
- self.login_email_value = params[:login_email_value]
104
- self.password = params[:password]
105
- self.password_confirmation = params[:password_confirmation]
106
- self.created_ip = params[:created_ip]
98
+ @agreement_terms = params[:agreement_terms]
99
+ @login_name = params[:login_name]
100
+ @login_email_value = params[:login_email_value]
101
+ @password = params[:password]
102
+ @password_confirmation = params[:password_confirmation]
103
+ @created_ip = params[:created_ip]
104
+ @user_agent_value = params[:user_agent_value]
105
+ @auto_login = params[:auto_login]
107
106
 
108
107
  # 验证码
109
108
  self.captcha_key = params[:captcha_key]
@@ -144,24 +143,36 @@ module TinyPassport
144
143
  end
145
144
  end
146
145
 
147
- def email_send_service
148
- @email_send_service ||= ::TinyPassport::EmailSendService.new
149
- end
150
-
151
146
  private
152
147
 
153
148
  # 保存对象
154
149
  def save_objects
155
150
  ::ActiveRecord::Base.transaction do
156
- self.account.register_way_key = 'basic'
157
-
158
- if self.login_email_required?
159
- self.login_email.account = self.account
160
- self.login_email.save!
161
- end
162
-
163
- self.account.login_email = self.login_email
164
- self.account.save!
151
+ self.account.register_way_key = 'basic'
152
+ self.account.login_name = self.login_name
153
+ self.account.created_ip = self.created_ip
154
+
155
+ if self.login_email_required?
156
+ self.login_email.account = self.account
157
+ self.login_email.save!
158
+ end
159
+
160
+ self.account.login_email = self.login_email
161
+ self.account.save!
162
+
163
+ if self.auto_login?
164
+ @login_record ||= ::TinyPassport::LoginRecord.new
165
+ @login_record.ip = self.created_ip
166
+ @login_record.last_remembered_ip = self.created_ip
167
+ @login_record.remembered = true
168
+ @login_record.user_agent_value = self.user_agent_value
169
+ @login_record.way_key = 'after_login_email_actived'
170
+ @login_record.account = self.account
171
+
172
+ @login_record.save!
173
+ end
174
+
175
+ true
165
176
  end
166
177
  rescue
167
178
  self.errors.add :base, :service_error
@@ -4,7 +4,7 @@ module TinyPassport
4
4
  include ::TinyPassport::Formable
5
5
 
6
6
  attr_reader :login_record
7
- attr_accessor :remember_token
7
+ attr_reader :remember_token
8
8
 
9
9
  validates_presence_of :remember_token
10
10
 
@@ -12,7 +12,7 @@ module TinyPassport
12
12
  @remember_token = params[:remember_token]
13
13
 
14
14
  if self.valid? && self.success?
15
- @login_record = ::TinyPassport::LoginRecord.authenticate_from_remember_token(remember_token)
15
+ @login_record = ::TinyPassport::LoginRecord.authenticate_from_remember_token(self.remember_token)
16
16
 
17
17
  if self.login_record && self.login_record.available? && self.login_record.account
18
18
  self.login_record.last_remembered_ip = params[:last_remembered_ip].to_s
@@ -73,10 +73,10 @@ module TinyPassport
73
73
  # - reset_password_token
74
74
  #
75
75
  def submit_valid? params={}, &block
76
- @password ||= params[:password]
77
- @password_confirmation ||= params[:password_confirmation]
78
- @reset_password_token ||= params[:reset_password_token]
79
- @reset_way ||= params[:reset_way]
76
+ @password = params[:password]
77
+ @password_confirmation = params[:password_confirmation]
78
+ @reset_password_token = params[:reset_password_token]
79
+ @reset_way = params[:reset_way]
80
80
 
81
81
  # 基本验证
82
82
  if self.valid? && self.success?
@@ -3,7 +3,7 @@ module TinyPassport
3
3
  class SessionForm
4
4
  include ::TinyPassport::Formable
5
5
 
6
- attr_accessor :input_value, :password, :remembered, :ip
6
+ attr_reader :input_value, :password, :remembered, :ip, :user_agent_value, :login_record
7
7
 
8
8
  validates_presence_of :input_value
9
9
  validates_presence_of :password
@@ -14,10 +14,6 @@ module TinyPassport
14
14
  @remembered = true
15
15
  end
16
16
 
17
- def login_record
18
- @login_record ||= ::TinyPassport::LoginRecord.new
19
- end
20
-
21
17
  def remembered?
22
18
  [true, 'true', '1'].include?(self.remembered)
23
19
  end
@@ -30,15 +26,20 @@ module TinyPassport
30
26
  # :remembered
31
27
  #
32
28
  def submit params={}
33
- self.input_value = params[:input_value]
34
- self.password = params[:password]
35
- self.ip = params[:ip].to_s
36
- self.remembered = params[:remembered]
29
+ @input_value = params[:input_value]
30
+ @password = params[:password]
31
+ @ip = params[:ip].to_s
32
+ @remembered = params[:remembered]
33
+ @user_agent_value = params[:user_agent_value].to_s
34
+
35
+
36
+ @login_record = ::TinyPassport::LoginRecord.new
37
37
 
38
38
  #######
39
- self.login_record.ip = self.ip
39
+ self.login_record.ip = self.ip
40
40
  self.login_record.last_remembered_ip = self.ip
41
- self.login_record.remembered = self.remembered?
41
+ self.login_record.user_agent_value = self.user_agent_value
42
+ self.login_record.remembered = self.remembered?
42
43
 
43
44
  if self.valid?
44
45
  if self.success?
@@ -0,0 +1,68 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ # 登录邮箱表单
4
+ class UpdateLoginEmailForm
5
+ include ::TinyPassport::Formable
6
+
7
+ attr_reader :current_password, :account, :login_email_value
8
+
9
+ validates_presence_of :current_password
10
+
11
+ self.support_strip_values!(:login_email_value)
12
+
13
+ self.email_validates_of :login_email_value
14
+
15
+ validate :verify_uniques
16
+
17
+ # 如果两者都为不为空,则判断, 是否一致
18
+ def password_confirmation_required?
19
+ self.password.present? || self.password_confirmation.present?
20
+ end
21
+
22
+ def login_email
23
+ @login_email = self.account.login_email || ::TinyPassport::LoginEmail.new(:account => self.account)
24
+ end
25
+
26
+ def submit params={}
27
+ @current_password = params[:current_password]
28
+ @account = params[:account]
29
+ @login_email_value = params[:login_email_value]
30
+
31
+ if self.valid? && self.success?
32
+ if self.account
33
+ if self.account.valid_password?(self.current_password)
34
+ save_objects and return true
35
+ else
36
+ self.errors.add :current_password, :wrong # 密码错误
37
+ end
38
+ else
39
+ self.errors.add :account, :required # 密码错误
40
+ end
41
+ end
42
+
43
+ false
44
+ end
45
+
46
+ private
47
+
48
+ def verify_uniques
49
+ if self.login_email_value.present?
50
+ if self.login_email_value == self.login_email.value
51
+ self.errors.add :login_email_value, :not_changed
52
+ end
53
+
54
+ if ::TinyPassport::LoginEmail.exists?(:value => self.login_email_value)
55
+ self.errors.add :login_email_value, :taken
56
+ end
57
+ end
58
+ end
59
+
60
+ def save_objects
61
+ ::ActiveRecord::Base.transaction do
62
+ self.login_email.value = self.login_email_value
63
+ self.login_email.account = self.account
64
+ self.login_email.save_with_send_confirmation_token!(true)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -3,7 +3,7 @@ module TinyPassport
3
3
  class UpdatePasswordForm
4
4
  include ::TinyPassport::Formable
5
5
 
6
- attr_accessor :password, :password_confirmation, :current_password, :account
6
+ attr_reader :password, :password_confirmation, :current_password, :account
7
7
 
8
8
  validates_presence_of :password
9
9
  validates_presence_of :current_password
@@ -13,7 +13,7 @@ module TinyPassport
13
13
 
14
14
  def send_confirmation_token(login_email)
15
15
  @login_email = login_email
16
- @account = login_email.account
16
+ @account = login_email.account
17
17
 
18
18
  mail(:to => @account.login_email_value_to, :subject => "Welcome Confirm To TinyPassport") do |format|
19
19
  format.html
@@ -0,0 +1,28 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Concerns
3
+ module TinyPassport
4
+ module BasicStatusAble
5
+ extend ::ActiveSupport::Concern
6
+
7
+ included do
8
+ include ::TinySupport::Configable
9
+
10
+ # 邮箱的激活情况
11
+ self.tiny_support_config :status, [
12
+ {:key => 'default', :value => 0}, # 初始状态
13
+ {:key => 'pending', :value => 1}, # 需激活状态
14
+ {:key => 'active', :value => 2}, # 激活状态
15
+ {:key => 'lock', :value => 3}, # 已经锁定,需要邮箱激活
16
+ {:key => 'block', :value => 4}, # 已经被屏蔽
17
+ {:key => 'deleted', :value => -1} # 已经删除
18
+ ]
19
+ end
20
+
21
+ def status_desc
22
+ I18n.t("tiny_passport.basic_status.#{self.status_key}")
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+
@@ -36,6 +36,5 @@ module TinyPassport
36
36
  def login_email_value_to
37
37
  "#{self.login_name} <#{self.login_email.value}>"
38
38
  end
39
-
40
39
  end
41
40
  end
@@ -1,19 +1,9 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module TinyPassport
3
3
  class LoginEmail < ActiveRecord::Base
4
- include ::TinySupport::Configable
4
+ self.tiny_support_display
5
5
 
6
- self.acts_as_tiny_cached :version => 1
7
-
8
- # 邮箱的激活情况
9
- self.tiny_support_config :status, [
10
- {:key => 'default', :value => 0}, # 初始状态
11
- {:key => 'pending', :value => 1}, # 需要验证
12
- {:key => 'active', :value => 2}, # 激活状态
13
- {:key => 'lock', :value => 3}, # 已经锁定,需要邮箱激活
14
- {:key => 'block', :value => 4}, # 已经被屏蔽
15
- {:key => 'deleted', :value => -1} # 已经删除
16
- ]
6
+ include ::Concerns::TinyPassport::BasicStatusAble
17
7
 
18
8
  belongs_to :account, :class_name => "TinyPassport::Account"
19
9
 
@@ -50,14 +40,34 @@ module TinyPassport
50
40
 
51
41
  # 邮箱状态激活
52
42
  def status_active_verify!
53
- self.confirmation_token = nil
54
- self.confirmed_at = Time.now
55
- self.confirmation_send_at = nil
56
- self.status_key = 'active'
43
+ self.confirmation_token = nil
44
+ self.confirmed_at = Time.now
45
+ self.confirmation_send_at = nil
46
+ self.status_key = 'active'
57
47
  self.encrypted_confirmation_token = ''
58
48
  self.save!
59
49
  end
60
50
 
51
+ # 发送邮件
52
+ def save_with_send_confirmation_token!(token_refresh=false)
53
+ # 如果验证码已经过期了
54
+ if self.confirmation_token_expires? || token_refresh
55
+ self.generate_encrypted_confirmation_token
56
+ end
57
+
58
+ self.confirmation_send_at = ::Time.now
59
+ self.status_key = 'default'
60
+
61
+ if self.save!
62
+ # TODO
63
+ ::TinyPassport::RegistrationMailer.send_confirmation_token(self).deliver
64
+ end
65
+ end
66
+
67
+ def await_confirm?
68
+ ['default', 'pending'].include?(self.status_key)
69
+ end
70
+
61
71
  # reset_password_token ----------------------------------------------
62
72
  def generate_encrypted_reset_password_token
63
73
  self.reset_password_token = ::SecureRandom.base64
@@ -1,24 +1,13 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module TinyPassport
3
3
  class OauthLogin < ActiveRecord::Base
4
- include ::TinySupport::Configable
4
+ include ::Concerns::TinyPassport::BasicStatusAble
5
5
 
6
- self.acts_as_tiny_cached :version => 1
7
6
  self.tiny_support_display
8
7
 
9
8
  belongs_to :account, :class_name => "TinyPassport::Account"
10
9
  belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
11
10
 
12
- # 邮箱的激活情况
13
- self.tiny_support_config :status, [
14
- {:key => 'default', :value => 0 }, # 初始状态
15
- {:key => 'pending', :value => 1 }, # 需要验证
16
- {:key => 'active', :value => 2 }, # 激活状态
17
- {:key => 'lock', :value => 3 }, # 已经锁定,需要邮箱激活
18
- {:key => 'block', :value => 4 }, # 已经被屏蔽
19
- {:key => 'deleted', :value => -1 } # 已经删除
20
- ]
21
-
22
11
  attr_accessible :account, :oauth_token
23
12
 
24
13
  def oauth_token?
@@ -5,7 +5,6 @@ module TinyPassport
5
5
  # 用于登录的
6
6
  has_one :oauth_login, :class_name => "TinyPassport::OauthLogin"
7
7
 
8
- self.acts_as_tiny_cached :version => 1
9
8
  self.tiny_support_display
10
9
 
11
10
  # 长字段信息
@@ -16,7 +15,10 @@ module TinyPassport
16
15
  has_many :bind_accounts, :class_name => "TinyPassport::Account", :through => :oauth_binds, :source => :account
17
16
 
18
17
  self.tiny_support_config :strategy_type, [
19
- {:key => 'qq_connect', :value => 1}
18
+ {:key => 'qq_connect', :value => 1},
19
+ {:key => 'github', :value => 2},
20
+ {:key => 'google', :value => 3},
21
+ {:key => 'weibo', :value => 4}
20
22
  ]
21
23
 
22
24
  attr_accessible :strategy_type_value,
@@ -32,6 +34,10 @@ module TinyPassport
32
34
  I18n.t("tiny_passport.oauth.providers.#{self.strategy_type_key}.name")
33
35
  end
34
36
 
37
+ def expires_at?
38
+ self.expires_at.present?
39
+ end
40
+
35
41
  # 已经绑定登录帐号了
36
42
  def login_account?
37
43
  !!(self.login_account)