tiny_passport 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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/app/ables/tiny_passport/account_validate_able.rb +24 -0
  3. data/app/ables/tiny_passport/aggrement_term_able.rb +28 -0
  4. data/app/ables/tiny_passport/formable.rb +17 -0
  5. data/app/ables/tiny_passport/query_able.rb +25 -0
  6. data/app/controllers/tiny_passport/application_controller.rb +1 -0
  7. data/app/displays/tiny_passport/account_display.rb +25 -0
  8. data/app/displays/tiny_passport/oauth_login_display.rb +21 -0
  9. data/app/displays/tiny_passport/oauth_token_display.rb +25 -0
  10. data/app/errors/tiny_passport/alert_authorized_error.rb +6 -0
  11. data/app/errors/tiny_passport/unauthorized_error.rb +6 -0
  12. data/app/forms/tiny_passport/account_active_form.rb +83 -0
  13. data/app/forms/tiny_passport/account_form.rb +6 -0
  14. data/app/forms/tiny_passport/confirmation_token_form.rb +58 -0
  15. data/app/forms/tiny_passport/oauth/bind_connect_form.rb +65 -0
  16. data/app/forms/tiny_passport/oauth/bind_disconnect_form.rb +42 -0
  17. data/app/forms/tiny_passport/oauth/callback_form.rb +165 -0
  18. data/app/forms/tiny_passport/oauth/login_connect_form.rb +63 -0
  19. data/app/forms/tiny_passport/registration_form.rb +172 -0
  20. data/app/forms/tiny_passport/remember_token_auth_form.rb +32 -0
  21. data/app/forms/tiny_passport/reset_password_form.rb +95 -0
  22. data/app/forms/tiny_passport/reset_password_token_form.rb +55 -0
  23. data/app/forms/tiny_passport/session_form.rb +116 -0
  24. data/app/forms/tiny_passport/update_password_form.rb +50 -0
  25. data/app/forms/tiny_passport/welcome_email_form.rb +47 -0
  26. data/app/helpers/tiny_passport/application_helper.rb +1 -0
  27. data/app/mailers/tiny_passport/registration_mailer.rb +23 -0
  28. data/app/mailers/tiny_passport/reset_password_mailer.rb +16 -0
  29. data/app/models/concerns/tiny_passport/account_authenticatable.rb +24 -0
  30. data/app/models/tiny_passport/account.rb +41 -0
  31. data/app/models/tiny_passport/avatar.rb +6 -0
  32. data/app/models/tiny_passport/login_email.rb +89 -0
  33. data/app/models/tiny_passport/login_record.rb +69 -0
  34. data/app/models/tiny_passport/oauth_bind.rb +9 -0
  35. data/app/models/tiny_passport/oauth_info.rb +8 -0
  36. data/app/models/tiny_passport/oauth_login.rb +28 -0
  37. data/app/models/tiny_passport/oauth_token.rb +57 -0
  38. data/app/queries/tiny_passport/account_query.rb +45 -0
  39. data/app/services/tiny_passport/account_service.rb +43 -0
  40. data/app/services/tiny_passport/email_send_service.rb +32 -0
  41. data/app/services/tiny_passport/oauth_service.rb +11 -0
  42. data/app/views/layouts/tiny_passport/mailer.html.erb +7 -0
  43. data/app/views/tiny_passport/registration_mailer/send_confirmation_token.html.erb +5 -0
  44. data/app/views/tiny_passport/registration_mailer/welcome.html.erb +5 -0
  45. data/app/views/tiny_passport/reset_password_mailer/send_token.html.erb +5 -0
  46. data/config/locales/en/forms.en.yml +81 -0
  47. data/config/locales/zh-CN/forms.zh-CN.yml +123 -0
  48. data/config/routes.rb +1 -0
  49. data/db/migrate/20131105103853_create_tiny_passport_accounts.rb +23 -0
  50. data/db/migrate/20131105104415_create_tiny_passport_login_records.rb +20 -0
  51. data/db/migrate/20131105104559_create_tiny_passport_oauth_tokens.rb +27 -0
  52. data/db/migrate/20131105104632_create_tiny_passport_oauth_logins.rb +15 -0
  53. data/db/migrate/20131105104702_create_tiny_passport_oauth_binds.rb +16 -0
  54. data/db/migrate/20131105104738_create_tiny_passport_oauth_infos.rb +13 -0
  55. data/db/migrate/20131105104847_create_tiny_passport_avatars.rb +20 -0
  56. data/db/migrate/20131107031935_create_tiny_passport_login_emails.rb +25 -0
  57. data/lib/omniauth/strategies/qq_connect.rb +114 -0
  58. data/lib/tiny_passport/config.rb +72 -0
  59. data/lib/tiny_passport/engine.rb +16 -0
  60. data/lib/tiny_passport/http_authable.rb +50 -0
  61. data/lib/tiny_passport/http_authcenter.rb +138 -0
  62. data/lib/tiny_passport/mailerable.rb +20 -0
  63. data/lib/tiny_passport/omniauth/strategable.rb +21 -0
  64. data/lib/tiny_passport/version.rb +2 -1
  65. data/lib/tiny_passport.rb +13 -0
  66. data/test/dummy/app/controllers/application_controller.rb +1 -0
  67. data/test/dummy/app/helpers/application_helper.rb +1 -0
  68. data/test/dummy/config/application.rb +1 -0
  69. data/test/dummy/config/boot.rb +1 -0
  70. data/test/dummy/config/environment.rb +1 -0
  71. data/test/dummy/config/environments/development.rb +1 -0
  72. data/test/dummy/config/environments/production.rb +1 -0
  73. data/test/dummy/config/environments/test.rb +1 -0
  74. data/test/dummy/config/initializers/backtrace_silencers.rb +1 -0
  75. data/test/dummy/config/initializers/filter_parameter_logging.rb +1 -0
  76. data/test/dummy/config/initializers/inflections.rb +1 -0
  77. data/test/dummy/config/initializers/mime_types.rb +1 -0
  78. data/test/dummy/config/initializers/secret_token.rb +1 -0
  79. data/test/dummy/config/initializers/session_store.rb +1 -0
  80. data/test/dummy/config/initializers/wrap_parameters.rb +1 -0
  81. data/test/dummy/config/routes.rb +1 -0
  82. data/test/dummy/db/schema.rb +138 -0
  83. data/test/dummy/db/test.sqlite3 +0 -0
  84. data/test/dummy/log/test.log +15986 -0
  85. data/test/dummy/tmp/cache/271/2A1/tiny_cache%2Fmodels%2FTinyPassport%3A%3AAccount%2F1%2F1 +0 -0
  86. 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 +1 -0
  87. data/test/fixtures/tiny_passport/avatars.yml +23 -0
  88. data/test/fixtures/tiny_passport/login_emails.yml +23 -0
  89. data/test/fixtures/tiny_passport/login_records.yml +17 -0
  90. data/test/fixtures/tiny_passport/oauth_binds.yml +13 -0
  91. data/test/fixtures/tiny_passport/oauth_infos.yml +9 -0
  92. data/test/fixtures/tiny_passport/oauth_logins.yml +11 -0
  93. data/test/fixtures/tiny_passport/oauth_tokens.yml +21 -0
  94. data/test/fixtures/tiny_passport/users.yml +13 -0
  95. data/test/forms/tiny_passport/oauth/callback_form_test.rb +23 -0
  96. data/test/forms/tiny_passport/registration_form_test.rb +112 -0
  97. data/test/forms/tiny_passport/session_form_test.rb +139 -0
  98. data/test/forms/tiny_passport/update_password_form_test.rb +20 -0
  99. data/test/integration/navigation_test.rb +1 -0
  100. data/test/mailers/tiny_passport/registration_mailer_test.rb +10 -0
  101. data/test/mailers/tiny_passport/reset_password_mailer_test.rb +10 -0
  102. data/test/models/concerns/tiny_passport/configable_test.rb +46 -0
  103. data/test/models/tiny_passport/account_test.rb +8 -0
  104. data/test/models/tiny_passport/avatar_test.rb +10 -0
  105. data/test/models/tiny_passport/login_email_test.rb +10 -0
  106. data/test/models/tiny_passport/login_record_test.rb +10 -0
  107. data/test/models/tiny_passport/oauth_bind_test.rb +10 -0
  108. data/test/models/tiny_passport/oauth_info_test.rb +10 -0
  109. data/test/models/tiny_passport/oauth_login_test.rb +10 -0
  110. data/test/models/tiny_passport/oauth_token_test.rb +10 -0
  111. data/test/support/helpers.rb +66 -0
  112. data/test/test_helper.rb +24 -0
  113. data/test/tiny_passport_test.rb +1 -0
  114. metadata +257 -69
@@ -0,0 +1,89 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class LoginEmail < ActiveRecord::Base
4
+ include ::TinySupport::Configable
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
+ ]
17
+
18
+ belongs_to :account, :class_name => "TinyPassport::Account"
19
+
20
+ attr_accessor :confirmation_token, :reset_password_token
21
+
22
+ attr_accessible :account
23
+
24
+ # confirmation_token ----------------------------------------------
25
+ def generate_encrypted_confirmation_token
26
+ self.confirmation_token = ::SecureRandom.base64
27
+ self.encrypted_confirmation_token = self.class.generate_encrypted_confirmation_token(self.confirmation_token)
28
+ end
29
+
30
+ def valid_confirmation_token?(token)
31
+ self.encrypted_confirmation_token == self.class.generate_encrypted_confirmation_token(token)
32
+ end
33
+
34
+ # 验证是否过期?
35
+ def confirmation_token_expires?
36
+ !!self.confirmation_send_at &&
37
+ self.confirmation_send_at + ::TinyPassport.config.login_email_confirmation_token_expires_in < Time.now
38
+ end
39
+
40
+ # return login_email or nil
41
+ def self.authenticate_from_confirmation_token token=''
42
+ encode_token = self.generate_encrypted_confirmation_token(token)
43
+
44
+ self.find_by_encrypted_confirmation_token(encode_token)
45
+ end
46
+
47
+ def self.generate_encrypted_confirmation_token(token)
48
+ Digest::SHA1.hexdigest("#{token}")
49
+ end
50
+
51
+ # 邮箱状态激活
52
+ 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'
57
+ self.encrypted_confirmation_token = ''
58
+ self.save!
59
+ end
60
+
61
+ # reset_password_token ----------------------------------------------
62
+ def generate_encrypted_reset_password_token
63
+ self.reset_password_token = ::SecureRandom.base64
64
+ self.encrypted_reset_password_token = self.class.generate_encrypted_reset_password_token(self.reset_password_token)
65
+ end
66
+
67
+ def valid_reset_password_token?(token)
68
+ self.encrypted_reset_password_token == self.class.generate_encrypted_reset_password_token(token)
69
+ end
70
+
71
+ # 验证是否过期?
72
+ def reset_password_token_expires?
73
+ !!self.reset_password_token_send_at &&
74
+ self.reset_password_token_send_at + ::TinyPassport.config.login_email_reset_password_token_expires_in < Time.now
75
+ end
76
+
77
+ # return login_email or nil
78
+ def self.authenticate_from_reset_password_token token=''
79
+ encode_token = self.generate_encrypted_reset_password_token(token)
80
+
81
+ self.find_by_encrypted_reset_password_token(encode_token)
82
+ end
83
+
84
+ def self.generate_encrypted_reset_password_token(token)
85
+ Digest::SHA1.hexdigest("#{token}")
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class LoginRecord < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+
6
+ # status_value
7
+ self.tiny_support_config :way, [
8
+ {:key => 'default', :value => 0},
9
+ {:key => 'login_name', :value => 201},
10
+ {:key => 'login_email', :value => 301},
11
+ {:key => 'after_login_email_actived', :value => 302}, # 在邮箱激活之后自动登录
12
+
13
+ # oauth
14
+ {:key => 'oauth_qq_connect', :value => 401},
15
+ {:key => 'oauth_weibo', :value => 402},
16
+ {:key => 'oauth_github', :value => 403},
17
+ {:key => 'oauth_google', :value => 404}
18
+ ]
19
+
20
+ attr_accessor :remember_token
21
+
22
+ belongs_to :account, :class_name => "TinyPassport::Account", :counter_cache => :login_records_count
23
+
24
+ # 创建之前需要确认是否生成记住密码的token
25
+ before_create do |r|
26
+ if r.remembered?
27
+ r.remember_token = ::SecureRandom.hex(64)
28
+ r.encrypted_remember_token = r.class.generate_encrypted_remember_token(r.remember_token)
29
+ r.remember_expires_at = 3.months.from_now
30
+ end
31
+ end
32
+
33
+ after_create do |r|
34
+ if r.account
35
+ r.account.update_columns(
36
+ :last_login_at => r.created_at,
37
+ :last_login_record_id => r.id
38
+ )
39
+ end
40
+ end
41
+
42
+ def remembered?
43
+ !!remembered
44
+ end
45
+
46
+ def available?
47
+ self.remember_sign_out_at.nil? &&
48
+ self.remember_expires_at.is_a?(::Time) &&
49
+ self.remember_expires_at > Time.now
50
+ end
51
+
52
+ # 校验是否符合
53
+ def valid_remember_token?(token)
54
+ self.encrypted_remember_token == self.class.generate_encrypted_remember_token(token)
55
+ end
56
+
57
+ # return login_record or nil
58
+ def self.authenticate_from_remember_token token=''
59
+ encode_token = self.generate_encrypted_remember_token(token)
60
+
61
+ self.find_by_encrypted_remember_token(encode_token)
62
+ end
63
+
64
+ def self.generate_encrypted_remember_token(token)
65
+ Digest::SHA1.hexdigest("#{token}")
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthBind < ActiveRecord::Base
4
+ belongs_to :account, :class_name => "TinyPassport::Account"
5
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
6
+
7
+ attr_accessible :account, :oauth_token
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthInfo < ActiveRecord::Base
4
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
5
+
6
+ attr_accessible :oauth_token
7
+ end
8
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthLogin < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+
6
+ self.acts_as_tiny_cached :version => 1
7
+ self.tiny_support_display
8
+
9
+ belongs_to :account, :class_name => "TinyPassport::Account"
10
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
11
+
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
+ attr_accessible :account, :oauth_token
23
+
24
+ def oauth_token?
25
+ !!oauth_token
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthToken < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+ # 用于登录的
6
+ has_one :oauth_login, :class_name => "TinyPassport::OauthLogin"
7
+
8
+ self.acts_as_tiny_cached :version => 1
9
+ self.tiny_support_display
10
+
11
+ # 长字段信息
12
+ has_one :oauth_info, :class_name => "TinyPassport::OauthInfo"
13
+ # 被绑定的
14
+ has_many :oauth_binds, :class_name => "TinyPassport::OauthBind"
15
+ # 被绑定的账户信息
16
+ has_many :bind_accounts, :class_name => "TinyPassport::Account", :through => :oauth_binds, :source => :account
17
+
18
+ self.tiny_support_config :strategy_type, [
19
+ {:key => 'qq_connect', :value => 1}
20
+ ]
21
+
22
+ attr_accessible :strategy_type_value,
23
+ :strategy_id,
24
+ :access_token,
25
+ :access_secret,
26
+ :expires_at,
27
+ :origin_avatar_url,
28
+ :name,
29
+ :nick_name
30
+
31
+ def strategy_name
32
+ I18n.t("tiny_passport.oauth.providers.#{self.strategy_type_key}.name")
33
+ end
34
+
35
+ # 已经绑定登录帐号了
36
+ def login_account?
37
+ !!(self.login_account)
38
+ end
39
+
40
+ def oauth_login?
41
+ !!(self.oauth_login)
42
+ end
43
+
44
+ def login_account
45
+ self.oauth_login? ? self.oauth_login.account : nil
46
+ end
47
+
48
+ def bind_accounts?
49
+ self.bind_accounts.to_a.any?
50
+ end
51
+
52
+ def not_login_connect_to? key
53
+ key == self.strategy_type_key && !(self.login_account?)
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,45 @@
1
+ module TinyPassport
2
+ class AccountQuery
3
+ include ::TinyPassport::QueryAble
4
+
5
+ attr_reader :account
6
+
7
+ def initialize account
8
+ @account = account
9
+ end
10
+
11
+ # {
12
+ # :oauth_logins => [
13
+ # {
14
+ # :strategy => {:type => :taobao, :id => 'ABCDEFGHIJK'},
15
+ # :nick_name => 'ABCE',
16
+ # :name => 'ABCE',
17
+ # :avatar => {
18
+ # :normal => '',
19
+ # :big => '',
20
+ # :origin => '',
21
+ # },
22
+ # :crated_at => '2013-12-30 23:22:34',
23
+ # :updated_at => '2013-12-30 23:22:34',
24
+ # :expires_at => '2013-12-30 23:22:34',
25
+ # :access_token => '',
26
+ # :access_secret => '',
27
+ # :status => {:value => 1, :key => :default}
28
+ # }
29
+ # ]
30
+ # }
31
+ def oauth_logins_data options={}
32
+ options = query_normalize_options options
33
+
34
+ oauth_logins = self.account.oauth_logins.joins(:oauth_token).page(options[:page] || 1).per(options[:per_page] || 20)
35
+
36
+ result = {}
37
+
38
+ result[:oauth_logins] = oauth_logins.map do |login|
39
+ login.display.basic
40
+ end
41
+
42
+ result
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class AccountService # 用户服务
4
+ include ::TinySupport::Serviceable
5
+
6
+ # TODO: 修改密码
7
+ def update_password_with_params params={}
8
+ form = ::TinyPassport::UpdatePasswordForm.new
9
+ form.submit params
10
+ form
11
+ end
12
+
13
+ # TODO: 重置密码
14
+ def reset_password_with_params params={}
15
+ form = ::TinyPassport::ResetPasswordForm.new
16
+ form.submit params
17
+ form
18
+ end
19
+
20
+ # TODO: 请求激活
21
+ def request_confirmation_token_with_params params={}
22
+ form = ::TinyPassport::ConfirmationTokenForm.new
23
+ form.submit params
24
+ form
25
+ end
26
+
27
+ # 生成一个重置密码的请求
28
+ # TODO:
29
+ def request_reset_password_with_params params={}
30
+ form = ::TinyPassport::ResetPasswordTokenForm.new
31
+ form.submit params
32
+ form
33
+ end
34
+
35
+ # 使用参数激活
36
+ def active_with_params params={}
37
+ form = ::TinyPassport::AccountActiveForm.new
38
+ form.submit params
39
+ form
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,32 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ # 邮箱发送服务
4
+ class EmailSendService
5
+ include ::TinySupport::Serviceable
6
+
7
+ # 用户激活后发送欢迎语
8
+ # TODO:
9
+ def send_welcome_for_active params={}
10
+ form = ::TinyPassport::WelcomeEmailForm.new
11
+ form.submit params
12
+ form
13
+ end
14
+
15
+ # 为login_email, 发送验证码
16
+ def send_confirmation_token_for_active params={}
17
+ form = ::TinyPassport::ConfirmationTokenForm.new
18
+ form.submit params
19
+ form
20
+ end
21
+
22
+ # 为了找回密码,来发送验证码
23
+ def send_confirmation_token_for_reset_password params={}
24
+ form = ::TinyPassport::RequestResetPasswordForm.new
25
+ form.submit params
26
+ form
27
+ end
28
+
29
+ private
30
+
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ # 第三方服务
4
+ class OuathService
5
+ include ::TinySupport::Serviceable
6
+
7
+ def update_oauth_data options={}
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,7 @@
1
+ <h1>TinyPassport</h1>
2
+
3
+ <%= yield %>
4
+
5
+ <div style='padding: 10px;'>
6
+ <%= Time.now.to_s(:db) %>
7
+ </div>
@@ -0,0 +1,5 @@
1
+ <h2>Welcome <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Your Confirmation Token Is <%= @login_email.confirmation_token %>
5
+ </p>
@@ -0,0 +1,5 @@
1
+ <h2>Welcome <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Thanks for Register!
5
+ </p>
@@ -0,0 +1,5 @@
1
+ <h2>Hi <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Welcome to Reset Your Password! Your token is <%= @login_email.reset_password_token %>
5
+ </p>
@@ -0,0 +1,81 @@
1
+ en:
2
+ tiny_passport:
3
+ oauth:
4
+ providers:
5
+ qq_connect:
6
+ name: 'QQ'
7
+
8
+ activemodel:
9
+ models:
10
+ tiny_passport/registration_form: 'Registration Infomation'
11
+ tiny_passport/session_form: 'Session'
12
+ tiny_passport/confirmation_token_form: 'Confirmation Token'
13
+ tiny_passport/reset_password_token_form: 'Reset Password Token'
14
+ attributes:
15
+ tiny_passport/reset_password_token_form:
16
+ login_email_value: Login Email
17
+
18
+ tiny_passport/confirmation_token_form:
19
+ login_email_value: Login Email
20
+
21
+ tiny_passport/session_form:
22
+ input_value: Login Name or Email
23
+
24
+ tiny_passport/registration_form:
25
+ login_email_value: Email
26
+ login_name: Login Name
27
+ password: Password
28
+ password_confirmation: Password Confirmation
29
+ agreement_terms: Agree with our agreement
30
+
31
+ errors:
32
+ models:
33
+ tiny_passport/registration_form:
34
+ attributes:
35
+ agreement_terms:
36
+ not_agree: Please Agree with our agreement
37
+
38
+ tiny_passport/confirmation_token_form:
39
+ attributes:
40
+ login_email_value:
41
+ already_active: 'already active'
42
+ not_found: 'not found'
43
+
44
+ tiny_passport/session_form:
45
+ attributes:
46
+ input_value:
47
+ login_email_not_exists: "email not exists"
48
+ login_name_not_exists: "login name not exists"
49
+ login_email_wrong: "login email wrong"
50
+ login_email_not_active: "email not active"
51
+ password:
52
+ wrong: "wrong"
53
+
54
+ tiny_passport/update_password_form:
55
+ attributes:
56
+ current_password:
57
+ not_matached: 'not match'
58
+ password:
59
+ not_changed: 'not change'
60
+
61
+ tiny_passport/reset_password_token_form:
62
+ attributes:
63
+ login_email_value:
64
+ not_found: 'not found'
65
+ not_active: 'not active'
66
+
67
+ tiny_passport/reset_password_form:
68
+ attributes:
69
+ base:
70
+ invalid: 'invalid'
71
+ reset_password_token:
72
+ not_found: 'not found'
73
+
74
+ tiny_passport/account_active_form:
75
+ attributes:
76
+ base:
77
+ invalid: 'invalid'
78
+ confirmation_token:
79
+ already_active: 'alreay active'
80
+ expired: 'expired'
81
+ not_matched: 'mismatch'
@@ -0,0 +1,123 @@
1
+ zh-CN:
2
+ tiny_passport:
3
+ oauth:
4
+ providers:
5
+ qq_connect:
6
+ name: 'QQ登录'
7
+ weibo:
8
+ name: '新浪微博'
9
+ github:
10
+ name: 'Github'
11
+ google:
12
+ name: 'Google'
13
+
14
+ activemodel:
15
+ models:
16
+ tiny_passport/registration_form: '注册信息'
17
+ tiny_passport/session_form: '登录信息'
18
+ tiny_passport/confirmation_token_form: '激活码'
19
+ tiny_passport/reset_password_token_form: '验证码'
20
+ tiny_passport/reset_password_form: '重置密码'
21
+ attributes:
22
+ tiny_passport/reset_password_token_form:
23
+ login_email_value: '登录邮箱'
24
+
25
+ tiny_passport/confirmation_token_form:
26
+ login_email_value: '登录邮箱'
27
+
28
+ tiny_passport/update_password_form:
29
+ password: '密码'
30
+ current_password: '当前密码'
31
+ password_confirmation: '密码确认'
32
+
33
+ tiny_passport/session_form:
34
+ input_value: '用户名或登录邮箱'
35
+ password: '密码'
36
+ remembered: '记住登录状态'
37
+
38
+ tiny_passport/registration_form:
39
+ login_email_value: '电子邮箱'
40
+ login_name: '用户名'
41
+ password: '密码'
42
+ password_confirmation: '密码确认'
43
+ agreement_terms: '同意我们的协议'
44
+ tiny_captcha: '验证码'
45
+
46
+ tiny_passport/reset_password_form:
47
+ password: '密码'
48
+ password_confirmation: '密码确认'
49
+
50
+
51
+ errors:
52
+ models:
53
+ tiny_passport/registration_form:
54
+ attributes:
55
+ agreement_terms:
56
+ not_agree: '请同意我们的协议'
57
+ login_name:
58
+ invalid: "无效"
59
+ login_email_value:
60
+ invalid: "无效"
61
+ password:
62
+ too_short: "长度不够"
63
+ blank: "不能为空"
64
+ password_confirmation:
65
+ confirmation: "两次输入不一致"
66
+
67
+ tiny_passport/confirmation_token_form:
68
+ attributes:
69
+ login_email_value:
70
+ already_active: '已经激活'
71
+ not_found: '没有找到'
72
+ invalid: '无效'
73
+
74
+ tiny_passport/session_form:
75
+ attributes:
76
+ input_value:
77
+ blank: "不能为空"
78
+ login_email_not_exists: "邮箱不存在"
79
+ login_name_not_exists: "用户名不存在"
80
+ login_email_wrong: "登录邮箱错误"
81
+ login_email_not_active: "登录邮箱没有激活"
82
+ password:
83
+ wrong: "错误"
84
+ blank: "不能为空"
85
+
86
+ tiny_passport/update_password_form:
87
+ attributes:
88
+ current_password:
89
+ not_matached: '不匹配'
90
+ password:
91
+ not_changed: '没有修改'
92
+
93
+ tiny_passport/reset_password_token_form:
94
+ attributes:
95
+ login_email_value:
96
+ not_found: '没有找到'
97
+ not_active: '没有激活'
98
+ invalid: "无效"
99
+ blank: "不能为空"
100
+
101
+ tiny_passport/reset_password_form:
102
+ attributes:
103
+ base:
104
+ invalid: '无效的'
105
+ reset_password_token:
106
+ not_found: '没有找到'
107
+ blank: '不能为空'
108
+ password:
109
+ invalid: '无效'
110
+ blank: '不能为空'
111
+ too_short: '长度不足'
112
+ password_confirmation:
113
+ confirmation: "两次输入不一致"
114
+
115
+ tiny_passport/account_active_form:
116
+ attributes:
117
+ base:
118
+ invalid: '无效的'
119
+ confirmation_token:
120
+ already_active: '已经激活'
121
+ expired: '过期了'
122
+ not_matched: '不匹配'
123
+
data/config/routes.rb CHANGED
@@ -1,2 +1,3 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  TinyPassport::Engine.routes.draw do
2
3
  end
@@ -0,0 +1,23 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class CreateTinyPassportAccounts < ActiveRecord::Migration
3
+ def change
4
+ create_table :tiny_passport_accounts do |t|
5
+ t.string :login_name
6
+ t.integer :avatar_id
7
+ t.string :created_ip, :default => '', :null => false # IP
8
+ t.string :encrypted_password, :default => '', :null => false
9
+ t.string :password_salt, :default => '', :null => false
10
+ t.integer :register_way_value, :default => 0, :null => false
11
+ t.datetime :deleted_at
12
+ t.datetime :last_login_at # 上一次登录时间
13
+ t.integer :login_records_count, :default => 0, :null => false
14
+ t.integer :current_login_failed_count, :default => 0, :null => false
15
+ t.integer :login_failed_count, :default => 0, :null => false
16
+ t.integer :last_login_record_id #上一次登录的记录
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :tiny_passport_accounts, [:login_name], :unique => true
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class CreateTinyPassportLoginRecords < ActiveRecord::Migration
3
+ def change
4
+ create_table :tiny_passport_login_records do |t|
5
+ t.integer :account_id
6
+ t.string :ip, :default => '', :null => false
7
+ t.string :last_remembered_ip, :default => '', :null => false
8
+ t.integer :way_value, :default => 0, :null => false
9
+ t.boolean :remembered, :default => false, :null => false
10
+ t.string :encrypted_remember_token, :default => '', :null => false
11
+ t.datetime :remember_expires_at
12
+ t.integer :remembered_count, :default => 0, :null => false
13
+ t.datetime :remember_sign_out_at # 主动退出时间
14
+
15
+ t.timestamps
16
+ end
17
+
18
+ add_index :tiny_passport_login_records, [:account_id]
19
+ end
20
+ end