card-mod-account 0.11.1 → 0.11.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8c86e418e23551b4e344d47073a5cea56789cab7a091d0ece4d6b7488bfe4fe
4
- data.tar.gz: 1a18cfb82d88f0bcca51ec77b99237bbe4c5527db7bb527fbcaeff0d87338863
3
+ metadata.gz: 9366a4fa955baf4cf7d35163b31fd5b073ad3ec0135860b873dccb40e7df8843
4
+ data.tar.gz: 947b792020398b341f5bd572af35337fa2532fbf9d2b8fd5b95f6741d24278d4
5
5
  SHA512:
6
- metadata.gz: c7103bb8aea180221f488ed16dfce14862f7d4d7228110177a9d9b0423144220c383c1c4ec7b1651f07f997b5440cf49c5378cc377df8497ba6240ca38c44548
7
- data.tar.gz: 04bc2d61a8f17c24f2d6d1aa06eb7aa978afd78a70593007e27a25bfeb247e869f43f4bccd46d203ebbe93cfa08f2377864bdb7bb2c04e285e2a30a08bd32d9c
6
+ metadata.gz: 51499759046adc71388bab41aeb0625747a53e6be2b952f87e9840f46d2d13f60039bbd7a35ec1014def6f5a203fc41594ce8df15b41cb5b5c8ba587b8666b0c
7
+ data.tar.gz: 0f48f8e8d654aa558ee0c14c85d4ae1b24be67fc5cfd0d470732430c3f0f5b242185b57aa0ac61bf0e56506e086aab747f9cc1033ceb31f87d348df1f751bb84
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <!--
2
- # @title README: account mod
2
+ # @title README - mod: account
3
3
  -->
4
4
  # account
5
5
 
@@ -1,3 +1,8 @@
1
+ delegate :accounted, to: :account_card
2
+
3
+ def account_card
4
+ left
5
+ end
1
6
 
2
7
  # allow account owner to update account field content
3
8
  def ok_to_update
@@ -38,7 +38,11 @@ format :html do
38
38
  { path: { slot: { hide: %i[help_link bridge_link] } } }],
39
39
  ["Roles", :roles,
40
40
  { path: { view: :content_with_edit_button } }],
41
- ["Notifications", :follow]
41
+ ["Notifications", :follow],
42
+ ["API", :account,
43
+ { path: { view: :api_key,
44
+ items: { view: :content },
45
+ slot: { hide: %i[help_link bridge_link] } } }]
42
46
  ]
43
47
  end
44
48
 
data/set/all/account.rb CHANGED
@@ -39,6 +39,7 @@ def fetch_read_rules
39
39
 
40
40
  ([AnyoneID] + parties).each_with_object([]) do |party_id, rule_ids|
41
41
  next unless (cache = Card::Rule.read_rule_cache[party_id])
42
+
42
43
  rule_ids.concat cache
43
44
  end
44
45
  end
@@ -48,10 +49,16 @@ def clear_roles
48
49
  end
49
50
 
50
51
  def with_clear_roles
51
- a, b, c, d = @parties, @all_roles, @all_active_roles, @read_rules
52
+ a = @parties
53
+ b = @all_roles
54
+ c = @all_active_roles
55
+ d = @read_rules
52
56
  yield
53
57
  ensure
54
- @parties, @all_roles, @all_active_roles, @read_rules = a, b, c, d
58
+ @parties = a
59
+ @all_roles = b
60
+ @all_active_roles = c
61
+ @read_rules = d
55
62
  end
56
63
 
57
64
  def all_enabled_roles
data/set/right/account.rb CHANGED
@@ -4,7 +4,6 @@ card_accessor :email
4
4
  card_accessor :password
5
5
  card_accessor :salt
6
6
  card_accessor :status
7
- card_accessor :api_key
8
7
 
9
8
  require_field :email
10
9
 
@@ -17,7 +16,7 @@ def accounted_id
17
16
  end
18
17
 
19
18
  def ok_to_read
20
- own_account? ? true : super
19
+ own_account? || super
21
20
  end
22
21
 
23
22
  # allow account owner to update account field content
@@ -43,16 +42,12 @@ def send_account_email email_template
43
42
  ecard.deliver self, to: email
44
43
  end
45
44
 
46
- def validate_api_key! api_key
47
- api_key_card.validate! api_key
48
- end
49
-
50
45
  def method_missing method, *args
51
- super unless args.empty? && (matches = method.match(/^(?<status>.*)\?$/))
46
+ return super unless args.empty? && (matches = method.match(/^(?<status>.*)\?$/))
52
47
 
53
48
  status == matches[:status]
54
49
  end
55
50
 
56
51
  def respond_to_missing? method, _include_private=false
57
- method.match?(/\?/) ? true : super
52
+ method.match?(/\?$/) ? true : super
58
53
  end
@@ -44,7 +44,7 @@ def activatable
44
44
  yield
45
45
  end
46
46
 
47
- # note: this only works in the context of an action.
47
+ # NOTE: this only works in the context of an action.
48
48
  # if run independently, it will not activate an account
49
49
  event :activate_account do
50
50
  add_subfield :status, content: "active"
@@ -95,5 +95,5 @@ end
95
95
 
96
96
  def reset_password_failure error_message
97
97
  Auth.as_bot { send_password_reset_email }
98
- errors.add :content, tr(:sorry_email_reset, error_msg: error_message)
98
+ errors.add :content, t(:account_sorry_email_reset, error_msg: error_message)
99
99
  end
data/set/right/email.rb CHANGED
@@ -8,7 +8,7 @@ event :validate_email, :validate, on: :save do
8
8
  self.content = content.strip
9
9
  return if content.match?(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
10
10
 
11
- errors.add :content, tr(:error_invalid_address)
11
+ errors.add :content, t(:account_error_invalid_address)
12
12
  end
13
13
 
14
14
  event :validate_unique_email, after: :validate_email, on: :save do
@@ -16,9 +16,9 @@ event :validate_unique_email, after: :validate_email, on: :save do
16
16
  Auth.as_bot do
17
17
  cql = { right_id: EmailID, eq: content, return: :id }
18
18
  cql[:not] = { id: id } if id
19
- cql_comment = tr(:search_email_duplicate, content: content)
19
+ cql_comment = t(:account_search_email_duplicate, content: content)
20
20
  if Card.search(cql, cql_comment).first
21
- errors.add :content, tr(:error_not_unique)
21
+ errors.add :content, t(:account_error_not_unique)
22
22
  end
23
23
  end
24
24
  end
@@ -26,6 +26,7 @@ end
26
26
 
27
27
  event :downcase_email, :prepare_to_validate, on: :save do
28
28
  return if !content || content == content.downcase
29
+
29
30
  self.content = content.downcase
30
31
  end
31
32
 
@@ -37,7 +38,7 @@ def ok_to_read
37
38
  if own_email? || Auth.always_ok?
38
39
  true
39
40
  else
40
- deny_because tr(:deny_email_restricted)
41
+ deny_because t(:account_deny_email_restricted)
41
42
  end
42
43
  end
43
44
 
@@ -5,7 +5,7 @@ def history?
5
5
  end
6
6
 
7
7
  def ok_to_read
8
- own_account? ? true : super
8
+ own_account? || super
9
9
  end
10
10
 
11
11
  event :encrypt_password, :store,
@@ -23,7 +23,7 @@ end
23
23
  event :validate_password, :validate, on: :save do
24
24
  return if content.length > 3
25
25
 
26
- errors.add :password, tr(:password_length)
26
+ errors.add :password, t(:account_password_length)
27
27
  end
28
28
 
29
29
  event :validate_password_present, :prepare_to_validate, on: :update do
@@ -31,7 +31,7 @@ event :validate_password_present, :prepare_to_validate, on: :update do
31
31
  end
32
32
 
33
33
  view :raw do
34
- tr :encrypted
34
+ t :account_encrypted
35
35
  end
36
36
 
37
37
  format :html do
@@ -46,6 +46,7 @@ format :html do
46
46
 
47
47
  def autocomplete?
48
48
  return "on" if @parent && @parent.card.name == "*signin+*account" # HACK
49
+
49
50
  "off"
50
51
  end
51
52
  end
data/set/right/roles.rb CHANGED
@@ -9,8 +9,8 @@ end
9
9
  def forbidden_roles
10
10
  # restore old roles for permission check
11
11
  with_old_role_permissions do |new_roles|
12
- new_roles.select do |card|
13
- !Card.fetch(card, "*members").ok? :update
12
+ new_roles.reject do |card|
13
+ Card.fetch(card, "*members").ok? :update
14
14
  end
15
15
  end
16
16
  end
data/set/right/salt.rb CHANGED
@@ -9,5 +9,5 @@ def history?
9
9
  end
10
10
 
11
11
  view :raw do
12
- tr :private_data
12
+ t :account_private_data
13
13
  end
data/set/right/status.rb CHANGED
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  def ok_to_update
13
13
  if own_account? && !Auth.always_ok?
14
- deny_because you_cant(tr(:deny_not_change_own_account))
14
+ deny_because you_cant(t(:account_deny_not_change_own_account))
15
15
  else
16
16
  super
17
17
  end
data/set/self/signin.rb CHANGED
@@ -47,10 +47,6 @@ def recaptcha_on?
47
47
  false
48
48
  end
49
49
 
50
- def i18n_signin key
51
- I18n.t key, scope: "mod.card-mod-account.set.self.signin"
52
- end
53
-
54
50
  def authenticate_or_abort email, pword
55
51
  abort_unless email, :email_missing
56
52
  abort_unless pword, :password_missing
@@ -69,19 +65,15 @@ def failed_signin email
69
65
  end
70
66
 
71
67
  def abort_unless value, error_key
72
- abort :failure, i18n_signin(error_key) unless value
68
+ abort :failure, t("account_#{error_key}") unless value
73
69
  end
74
70
 
75
71
  def signin_error_message account
76
- case
77
- when account.nil? then i18n_signin(:error_unknown_email)
78
- when !account.active? then i18n_signin(:error_not_active)
79
- else i18n_signin(:error_wrong_password)
80
- end
72
+ t "account_#{signin_error_key account}"
81
73
  end
82
74
 
83
75
  def error_on field, error_key
84
- errors.add field, i18n_signin(error_key)
76
+ errors.add field, t("account_#{error_key}")
85
77
  end
86
78
 
87
79
  def account_for email
@@ -114,6 +106,16 @@ def reset_password_fail account
114
106
  end
115
107
  end
116
108
 
109
+ private
110
+
111
+ def signin_error_key account
112
+ case
113
+ when account.nil? then :error_unknown_email
114
+ when !account.active? then :error_not_active
115
+ else :error_wrong_password
116
+ end
117
+ end
118
+
117
119
  format :html do
118
120
  view :core, cache: :never do
119
121
  voo.edit_structure = [signin_field(:email), signin_field(:password)]
@@ -135,7 +137,7 @@ format :html do
135
137
 
136
138
  # FIXME: need a generic solution for this
137
139
  view :title do
138
- voo.title ||= I18n.t(:sign_in_title, scope: "mod.card-mod-account.set.self.signin")
140
+ voo.title ||= t(:account_sign_in_title)
139
141
  super()
140
142
  end
141
143
 
@@ -150,7 +152,7 @@ format :html do
150
152
 
151
153
  view :reset_password_success do
152
154
  # 'Check your email for a link to reset your password'
153
- frame { I18n.t(:check_email, scope: "mod.card-mod-account.set.self.signin") }
155
+ frame { t :account_check_email }
154
156
  end
155
157
 
156
158
  view :signin_buttons do
@@ -166,33 +168,31 @@ format :html do
166
168
  end
167
169
 
168
170
  def reset_password_voo
169
- voo.title ||= card.i18n_signin(:forgot_password)
171
+ voo.title ||= t :account_forgot_password
170
172
  voo.edit_structure = [signin_field(:email)]
171
173
  voo.hide :help
172
174
  end
173
175
 
174
176
  view :edit_buttons do
175
- text = I18n.t :reset_my_password, scope: "mod.card-mod-account.set.self.signin"
176
- button_tag text, situation: "primary", class: "_close-modal-on-success"
177
+ button_tag t(:account_reset_my_password),
178
+ situation: "primary", class: "_close-modal-on-success"
177
179
  end
178
180
 
179
181
  def signin_success
180
- "REDIRECT: #{Env.interrupted_action || '*previous'}"
182
+ { redirect: true, mark: (Env.interrupted_action || "*previous") }
181
183
  end
182
184
 
183
185
  def signin_button
184
- text = I18n.t :sign_in, scope: "mod.card-mod-account.set.self.signin"
185
- button_tag text, situation: "primary"
186
+ button_tag t(:account_sign_in), situation: "primary"
186
187
  end
187
188
 
188
189
  def signup_link
189
- text = I18n.t :or_sign_up, scope: "mod.card-mod-account.set.self.signin"
190
- subformat(Card[:account_links]).render! :sign_up, title: text
190
+ subformat(Card[:account_links]).render! :sign_up, title: t(:account_or_sign_up)
191
191
  end
192
192
 
193
193
  def reset_password_link
194
- text = I18n.t :reset_password, scope: "mod.card-mod-account.set.self.signin"
195
- link = link_to_view :edit, text, path: { slot: { hide: :bridge_link } }
194
+ link = link_to_view :edit, t(:account_reset_password),
195
+ path: { slot: { hide: :bridge_link } }
196
196
  # FIXME: inline styling
197
197
  raw("<div style='float:right'>#{link}</div>")
198
198
  end
@@ -4,7 +4,7 @@ format :html do
4
4
  end
5
5
 
6
6
  view :new do
7
- voo.title = invitation? ? tr(:invite) : tr(:sign_up)
7
+ voo.title = invitation? ? t(:account_invite) : t(:account_sign_up)
8
8
  super()
9
9
  end
10
10
 
@@ -20,6 +20,7 @@ format :html do
20
20
 
21
21
  def invite_button
22
22
  return unless invitation?
23
+
23
24
  button_tag "Send Invitation", situation: "primary"
24
25
  end
25
26
 
@@ -46,7 +47,7 @@ format :html do
46
47
  if card.account
47
48
  verification_lines
48
49
  else
49
- [tr(:missing_account)]
50
+ [t(:account_missing_account)]
50
51
  end
51
52
  end
52
53
 
@@ -57,12 +58,14 @@ format :html do
57
58
  def verification_sent_line
58
59
  account = card.account
59
60
  return unless account.email_card.ok?(:read)
61
+
60
62
  "A verification email has been sent to #{account.email}"
61
63
  end
62
64
 
63
65
  def verification_link_line
64
66
  links = verification_links
65
67
  return if links.empty?
68
+
66
69
  links.join " "
67
70
  end
68
71
 
@@ -81,6 +84,7 @@ format :html do
81
84
 
82
85
  def approval_link text, with_or_without
83
86
  return unless card.can_approve?
87
+
84
88
  link_to_card card, text,
85
89
  path: { action: :update,
86
90
  card: { trigger: "approve_#{with_or_without}_verification" } }
@@ -88,6 +92,7 @@ format :html do
88
92
 
89
93
  def deny_link
90
94
  return unless card.ok? :delete
95
+
91
96
  link_to_card card, "Deny and delete", path: { action: :delete }
92
97
  end
93
98
  end
data/set/type/user.rb CHANGED
@@ -35,7 +35,7 @@ format :html do
35
35
  def setup_hidden_fields
36
36
  hidden_tags(
37
37
  setup: true,
38
- success: "REDIRECT: #{path mark: ''}",
38
+ success: { redirect: true, mark: path(mark: "") },
39
39
  "card[type_id]" => Card.default_accounted_type_id
40
40
  )
41
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-account
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-03-02 00:00:00.000000000 Z
13
+ date: 2021-05-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,56 +18,56 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.101.1
21
+ version: 1.101.6
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.101.1
28
+ version: 1.101.6
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: card-mod-email
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.11.1
35
+ version: 0.11.6
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.11.1
42
+ version: 0.11.6
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: card-mod-permissions
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - '='
48
48
  - !ruby/object:Gem::Version
49
- version: 0.11.1
49
+ version: 0.11.6
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - '='
55
55
  - !ruby/object:Gem::Version
56
- version: 0.11.1
56
+ version: 0.11.6
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: card-mod-list
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.11.1
63
+ version: 0.11.6
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.11.1
70
+ version: 0.11.6
71
71
  description: ''
72
72
  email:
73
73
  - info@decko.org
@@ -82,13 +82,11 @@ files:
82
82
  - set/right/account.rb
83
83
  - set/right/account/events.rb
84
84
  - set/right/account/views.rb
85
- - set/right/api_key.rb
86
85
  - set/right/email.rb
87
86
  - set/right/password.rb
88
87
  - set/right/roles.rb
89
88
  - set/right/salt.rb
90
89
  - set/right/status.rb
91
- - set/self/captcha.rb
92
90
  - set/self/signin.rb
93
91
  - set/type/role.rb
94
92
  - set/type/signup.rb
@@ -97,10 +95,15 @@ files:
97
95
  - set/type/user.rb
98
96
  - set/type/user/setup_help.haml
99
97
  - set/type_plus_right/user/email.rb
100
- homepage: http://decko.org
98
+ homepage: https://decko.org
101
99
  licenses:
102
100
  - GPL-3.0
103
101
  metadata:
102
+ source_code_uri: https://github.com/decko-commons/decko
103
+ homepage_uri: https://decko.org
104
+ bug_tracker_uri: https://github.com/decko-commons/decko/issues
105
+ wiki_uri: https://decko.org
106
+ documentation_url: http://docs.decko.org/
104
107
  card-mod: account
105
108
  post_install_message:
106
109
  rdoc_options: []
@@ -117,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
120
  - !ruby/object:Gem::Version
118
121
  version: '0'
119
122
  requirements: []
120
- rubygems_version: 3.0.3
123
+ rubygems_version: 3.1.4
121
124
  signing_key:
122
125
  specification_version: 4
123
126
  summary: Email-based account handling for decko cards
data/set/right/api_key.rb DELETED
@@ -1,48 +0,0 @@
1
- include_set Abstract::AccountField
2
-
3
- # DURATIONS = "second|minute|hour|day|week|month|year".freeze
4
-
5
- def history?
6
- false
7
- end
8
-
9
- view :raw do
10
- tr :private_data
11
- end
12
-
13
- def validate! api_key
14
- error =
15
- case
16
- when !real? then [:token_not_found, tr(:error_token_not_found)]
17
- # when expired? then [:token_expired, tr(:error_token_expired)]
18
- when content != api_key then [:incorrect_token, tr(:error_incorrect_token)]
19
- end
20
- errors.add(*error) if error
21
- error.nil?
22
- end
23
-
24
- # def expired?
25
- # !permanent? && updated_at <= term.ago
26
- # end
27
- #
28
- # def permanent?
29
- # term == "permanent"
30
- # end
31
-
32
- # def term
33
- # @term ||=
34
- # if expiration.present?
35
- # term_from_string expiration
36
- # else
37
- # Card.config.token_expiry
38
- # end
39
- # end
40
-
41
- # def term_from_string string
42
- # string.strip!
43
- # return "permanent" if string == "none"
44
- # re_match = /^(\d+)[\.\s]*(#{DURATIONS})s?$/.match(string)
45
- # number, unit = re_match.captures if re_match
46
- # raise Card::Open::Error, tr(:exception_bad_expiration, example: '2 days') unless unit
47
- # number.to_i.send unit
48
- # end
data/set/self/captcha.rb DELETED
@@ -1,5 +0,0 @@
1
- setting_opts group: :permission,
2
- position: 5,
3
- help_text: "Anti-spam setting. Requires non-signed-in users to complete a "\
4
- "[[http://decko.org/captcha|captcha]] before adding or editing "\
5
- "cards (where permitted)."