card-mod-api_key 0.11.5 → 0.13.0
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 +4 -4
- data/README.md +55 -0
- data/lib/card/auth/api_key.rb +5 -5
- data/lib/card_controller/api_key.rb +12 -0
- data/set/right/api_key.rb +10 -2
- data/set/right/api_key/core.haml +1 -1
- metadata +8 -8
- data/config/initializers/api_key.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9822f719c1166831d0eec0ead0b1403845839a4eaade9758686ae47906347fd
|
4
|
+
data.tar.gz: 52517786e557d599c767dccb91986056e4df9395ea9fc29483e4830dcdba5a47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 813c5cd3ca3f865eae51c66e8f5d5548cfb7ee0d4c6e2c66212475e03fe8ffdc687e1cad722ca982e1702327845ba7bb077093f4db700f1e17421d4c4d32a40b
|
7
|
+
data.tar.gz: c7aa1dd2d13e3e793d91883df8a5a27f7d5bda29117d37b2eb8640596c7b52fff484e2298867fc77b81198957a42964da0c95b3c72fe8328202c64b5d2b65d80
|
data/README.md
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
<!--
|
2
|
+
# @title README - mod: API key
|
3
|
+
-->
|
4
|
+
|
5
|
+
# API key Mod
|
6
|
+
Enable Decko users to perform authorized web requests associated with their account
|
7
|
+
without a session.
|
8
|
+
|
9
|
+
## Cards with codenames
|
10
|
+
|
11
|
+
| codename | default name | purpose |
|
12
|
+
|:--------:|:------------:|:-------:|
|
13
|
+
| :api_key | *api key | key for authenticating/authorizing API usage |
|
14
|
+
|
15
|
+
## Sets with code rules
|
16
|
+
|
17
|
+
### {Card::Set::Right::ApiKey [account card]+:api_key}
|
18
|
+
This is where the API key is stored. By default it is visible to and editable by
|
19
|
+
the account holder and to users with the "Help Desk" role.
|
20
|
+
|
21
|
+
#### Events
|
22
|
+
|
23
|
+
| event name | when | purpose |
|
24
|
+
|:---------:|:------:|:-------:|
|
25
|
+
| generate_api_key | triggered | creates a new, random key |
|
26
|
+
| validate_api_key | on save | ensures content is comprised of 20+ alphanumerics (only) |
|
27
|
+
|
28
|
+
#### Views
|
29
|
+
|
30
|
+
| view name | format | purpose |
|
31
|
+
|:---------:|:------:|:-------:|
|
32
|
+
| core | HTML | show key to permitted user and provide form to generate new one |
|
33
|
+
| generate_button | HTML | button for generating new API Key |
|
34
|
+
| token_link | HTML | links to json view returning a JWT token |
|
35
|
+
| token | JSON | return a JWT token for rapid authentication |
|
36
|
+
|
37
|
+
### {Card::Set::Right::Account [accounted card]+:account}
|
38
|
+
|
39
|
+
#### Views
|
40
|
+
|
41
|
+
| view name | format | purpose |
|
42
|
+
|:---------:|:------:|:-------:|
|
43
|
+
| api_key | HTML | nests api_key card |
|
44
|
+
|
45
|
+
## Card::Auth
|
46
|
+
|
47
|
+
Extends `Card::Auth.signin_with` to accept `api_key: myapikey`
|
48
|
+
|
49
|
+
## API Usage
|
50
|
+
|
51
|
+
API users can add the api_key param to query strings or to request headers. Or, for
|
52
|
+
faster authentication, they can use their api key to get a JWT token. Card sharks can
|
53
|
+
provide a link for this token with the `token_link` view (see above). The token can
|
54
|
+
then be passed via the token param. By default tokens last for two days. This can be
|
55
|
+
configured in application.rb or environment config files using `config.token_expiry`.
|
data/lib/card/auth/api_key.rb
CHANGED
@@ -4,11 +4,11 @@ class Card
|
|
4
4
|
module Auth
|
5
5
|
# methods for setting current account
|
6
6
|
module ApiKey
|
7
|
-
def signin_with
|
8
|
-
if
|
9
|
-
signin_with_token
|
10
|
-
elsif
|
11
|
-
signin_with_api_key
|
7
|
+
def signin_with token: nil, api_key: nil
|
8
|
+
if token
|
9
|
+
signin_with_token token
|
10
|
+
elsif api_key
|
11
|
+
signin_with_api_key api_key
|
12
12
|
else
|
13
13
|
signin_with_session
|
14
14
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CardController
|
2
|
+
# add support for passing api key through header using X-API-Key
|
3
|
+
module ApiKey
|
4
|
+
def authenticators
|
5
|
+
super.merge api_key: api_key_from_header || params[:api_key]
|
6
|
+
end
|
7
|
+
|
8
|
+
def api_key_from_header
|
9
|
+
request.headers["X-API-Key"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/set/right/api_key.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
include_set Abstract::AccountField
|
2
2
|
|
3
|
+
# triggerable event to generate new API Key
|
3
4
|
event :generate_api_key, :prepare_to_validate, trigger: :required do
|
4
5
|
generate
|
5
6
|
end
|
6
7
|
|
7
|
-
event :validate_api_key, :validate do
|
8
|
+
event :validate_api_key, :validate, on: :save, changed: :content do
|
8
9
|
errors.add :content, t(:api_key_invalid) unless content.match?(/^\w{20,}$/)
|
9
10
|
errors.add :content, t(:api_key_taken) if api_key_taken?
|
10
11
|
end
|
11
12
|
|
13
|
+
# checks availability of API key
|
12
14
|
def api_key_taken?
|
13
15
|
return false unless (acct = Card::Auth.find_account_by_api_key content)
|
14
16
|
|
15
|
-
acct.id
|
17
|
+
acct.id != left_id
|
16
18
|
end
|
17
19
|
|
18
20
|
def history?
|
@@ -27,6 +29,7 @@ def ok_to_create
|
|
27
29
|
own_account? || super
|
28
30
|
end
|
29
31
|
|
32
|
+
# @return [True/False] checks whether key matches content
|
30
33
|
def authenticate_api_key api_key
|
31
34
|
return true unless (error = api_key_validation_error api_key)
|
32
35
|
|
@@ -65,6 +68,7 @@ end
|
|
65
68
|
|
66
69
|
format :html do
|
67
70
|
view :core, unknown: true, template: :haml
|
71
|
+
view(:content, unknown: true) { super() }
|
68
72
|
|
69
73
|
%i[titled titled_content].each do |viewname|
|
70
74
|
view(viewname, unknown: true) { super() }
|
@@ -83,4 +87,8 @@ format :html do
|
|
83
87
|
]
|
84
88
|
end
|
85
89
|
end
|
90
|
+
|
91
|
+
def input_type
|
92
|
+
:text_field
|
93
|
+
end
|
86
94
|
end
|
data/set/right/api_key/core.haml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card-mod-api_key
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
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-
|
13
|
+
date: 2021-08-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: card
|
@@ -18,28 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
21
|
+
version: 1.103.0
|
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.
|
28
|
+
version: 1.103.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: card-mod-account
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.
|
35
|
+
version: 0.13.0
|
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.
|
42
|
+
version: 0.13.0
|
43
43
|
description: ''
|
44
44
|
email:
|
45
45
|
- info@decko.org
|
@@ -48,8 +48,8 @@ extensions: []
|
|
48
48
|
extra_rdoc_files: []
|
49
49
|
files:
|
50
50
|
- README.md
|
51
|
-
- config/initializers/api_key.rb
|
52
51
|
- lib/card/auth/api_key.rb
|
52
|
+
- lib/card_controller/api_key.rb
|
53
53
|
- set/right/account.rb
|
54
54
|
- set/right/api_key.rb
|
55
55
|
- set/right/api_key/core.haml
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '0'
|
80
80
|
requirements: []
|
81
|
-
rubygems_version: 3.1.
|
81
|
+
rubygems_version: 3.1.6
|
82
82
|
signing_key:
|
83
83
|
specification_version: 4
|
84
84
|
summary: API Keys and JWT Tokens for Decko
|
@@ -1 +0,0 @@
|
|
1
|
-
Card::Auth.extend Card::Auth::ApiKey
|