card-mod-api_key 0.11.4

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1fcb9c135c5326571c3b819a9ec738cb8eee20df645d43b5d168c3ba65d18b32
4
+ data.tar.gz: f1ecbaa490b2f226b82ffe8c515b863320cc11e9232c6d6bce6c43c71e1ea05a
5
+ SHA512:
6
+ metadata.gz: 0c3b0c73e799123380e7fd8af851d87a60e0e248e1bacf4acbead02404914faffdace23eaedd518f13720e98fea7df055f61d8e81a90bec1990ad411c3cf8dd7
7
+ data.tar.gz: 60d90897d2282a579262490346489f41421b13527a6c2b183114a766e1e6f039219f1322c6c5662965565dc3df5a2dbe9cf455c8f88df06f5bb827a78b83442b
data/README.md ADDED
File without changes
@@ -0,0 +1 @@
1
+ Card::Auth.extend Card::Auth::ApiKey
@@ -0,0 +1,35 @@
1
+ require "jwt"
2
+
3
+ class Card
4
+ module Auth
5
+ # methods for setting current account
6
+ module ApiKey
7
+ def signin_with opts={}
8
+ if opts[:token]
9
+ signin_with_token opts[:token]
10
+ elsif opts[:api_key]
11
+ signin_with_api_key opts[:api_key]
12
+ else
13
+ signin_with_session
14
+ end
15
+ end
16
+
17
+ # set the current user based on api_key
18
+ def signin_with_api_key api_key
19
+ account = find_account_by_api_key api_key
20
+ unless account&.authenticate_api_key api_key
21
+ raise Card::Error::PermissionDenied, "API key authentication failed"
22
+ end
23
+
24
+ signin account.left_id
25
+ end
26
+
27
+ # find +\*account card by +\*api card
28
+ # @param api_key [String]
29
+ # @return [+*account card, nil]
30
+ def find_account_by_api_key api_key
31
+ find_account_by :api_key, api_key.strip
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,9 @@
1
+ card_accessor :api_key
2
+
3
+ delegate :authenticate_api_key, to: :api_key_card
4
+
5
+ format :html do
6
+ view :api_key do
7
+ field_nest :api_key
8
+ end
9
+ end
@@ -0,0 +1,85 @@
1
+ include_set Abstract::AccountField
2
+
3
+ event :generate_api_key, :prepare_to_validate, trigger: :required do
4
+ generate
5
+ end
6
+
7
+ event :validate_api_key, :validate do
8
+ errors.add :content, t(:api_key_invalid) unless content.match?(/^\w{20,}$/)
9
+ errors.add :content, t(:api_key_taken) if api_key_taken?
10
+ end
11
+
12
+ def api_key_taken?
13
+ return false unless (acct = Card::Auth.find_account_by_api_key content)
14
+ acct.id == left_id
15
+ end
16
+
17
+ def history?
18
+ false
19
+ end
20
+
21
+ def ok_to_read
22
+ own_account? || super
23
+ end
24
+
25
+ def ok_to_create
26
+ own_account? || super
27
+ end
28
+
29
+ def authenticate_api_key api_key
30
+ return true unless (error = api_key_validation_error api_key)
31
+
32
+ errors.add error, t(error)
33
+ false
34
+ end
35
+
36
+ def generate
37
+ self.content = SecureRandom.base64.tr "+/=", "Qrt"
38
+ end
39
+
40
+ def generate!
41
+ generate.tap { save! }
42
+ end
43
+
44
+ def simple_token
45
+ Card::Auth::Token.encode accounted.id
46
+ end
47
+
48
+ private
49
+
50
+ def api_key_validation_error api_key
51
+ case
52
+ when !real?
53
+ :api_key_not_found
54
+ when content != api_key
55
+ :api_key_incorrect
56
+ end
57
+ end
58
+
59
+ format :json do
60
+ view :token do
61
+ { token: card.simple_token }
62
+ end
63
+ end
64
+
65
+ format :html do
66
+ view :core, unknown: true, template: :haml
67
+
68
+ %i[titled titled_content].each do |viewname|
69
+ view(viewname, unknown: true) { super() }
70
+ end
71
+
72
+ view :token_link do
73
+ link_to t(:api_key_get_jwt_token), path: { format: :json, view: :token }
74
+ end
75
+
76
+ view :generate_button, perms: :update, unknown: true do
77
+ text = card.content.present? ? t(:api_key_regenerate) : t(:api_key_generate)
78
+ card_form :update do
79
+ [
80
+ hidden_tags(card: { trigger: :generate_api_key }),
81
+ submit_button(text: text, disable_with: t(:api_key_generating))
82
+ ]
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,11 @@
1
+ .api-key-core
2
+ .current-api-key
3
+ - if card.content.present?
4
+ %label{ for: :current_api_key }
5
+ = t :api_key_label
6
+
7
+ = text_field_tag :current_api_key, card.content, readonly: true
8
+ - else
9
+ %em No key.
10
+ .api-key-generate-button
11
+ = render_generate_button
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: card-mod-api_key
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.11.4
5
+ platform: ruby
6
+ authors:
7
+ - Ethan McCutchen
8
+ - Philipp Kühl
9
+ - Gerry Gleason
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2021-05-05 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: card
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.101.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.101.4
29
+ - !ruby/object:Gem::Dependency
30
+ name: card-mod-account
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 0.11.4
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 0.11.4
43
+ description: ''
44
+ email:
45
+ - info@decko.org
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - README.md
51
+ - config/initializers/api_key.rb
52
+ - lib/card/auth/api_key.rb
53
+ - set/right/account.rb
54
+ - set/right/api_key.rb
55
+ - set/right/api_key/core.haml
56
+ homepage: https://decko.org
57
+ licenses:
58
+ - GPL-3.0
59
+ metadata:
60
+ source_code_uri: https://github.com/decko-commons/decko
61
+ homepage_uri: https://decko.org
62
+ bug_tracker_uri: https://github.com/decko-commons/decko/issues
63
+ wiki_uri: https://decko.org
64
+ documentation_url: http://docs.decko.org/
65
+ card-mod: api_key
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '2.5'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubygems_version: 3.1.4
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: API Keys and JWT Tokens for Decko
85
+ test_files: []