card-mod-api_key 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
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: []