haveapi 0.29.1 → 0.29.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a287637726ecc5f44dc8c9f282b3ad68c0f1cdce4089d46eb218a0b0c7460ff1
4
- data.tar.gz: f7b90d1523a79ad5b60df33afc3919f6620ebc29e616f3ff7f495f68a78dbb25
3
+ metadata.gz: 885ac3cc2e4b40ee6595f9beadad79e75f371d607dd0d49d02f67a01cece7d7f
4
+ data.tar.gz: 8c8b186ae1299655f952bedf5cd857042df97b060a0fda7e43ef6b9bc0ec6393
5
5
  SHA512:
6
- metadata.gz: 6d55e32c20305fdca03ed9deb317b9a4ae0c873f0db3adfe30e85339f5560d42d9699c12dbbec61f9ff27100ce5e7b666d3818e216d657b407d29c4d3fd48a1e
7
- data.tar.gz: 6c6b5b2b66a5f62f1013d972811a6df834a134c5238c920d6f4157442e3cb4b3aee67eb7a42864752b4bdda252a5295177dba77f26837df5c8f160e3521e21f6
6
+ metadata.gz: 8b3cd3b9dabb84f88119dde487b150ea6694ab76450d24df1c8f7ff9309b5fcb91638d58f4794db0236de5d8a81c01693c3a5adfc9665200bdb24915599d131e
7
+ data.tar.gz: c738c43d4cc3437124e9af50cd1ae70c84d3f5a91cb93f4c6d1b0966257e011f438f8ecf36639ba0da5044b0b06aa5c8b6072dce4793d4546df424ebdc50a1a9
data/README.md CHANGED
@@ -328,6 +328,27 @@ cs:
328
328
  label: "Hostname"
329
329
  ```
330
330
 
331
+ Choice labels declared through the `choices`/`include` validator use the same
332
+ parameter metadata path with `choices.<value>.label` appended. If choices were
333
+ declared as a value-to-label map, the declared label is used as the English
334
+ fallback. If choices were declared as an array, untranslated self-description
335
+ keeps the array form; a locale that supplies labels is returned as the existing
336
+ HaveAPI `{value: label}` map form.
337
+
338
+ ```yaml
339
+ cs:
340
+ my_api:
341
+ resources:
342
+ vps:
343
+ attributes:
344
+ state:
345
+ choices:
346
+ running:
347
+ label: "bezi"
348
+ stopped:
349
+ label: "vypnuto"
350
+ ```
351
+
331
352
  Metadata parameters fall back through resource and global metadata keys:
332
353
 
333
354
  ```yaml
data/haveapi.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.required_ruby_version = ">= #{File.read('../../.ruby-version').strip}"
16
16
 
17
17
  s.add_dependency 'activesupport', '>= 7.1'
18
- s.add_dependency 'haveapi-client', '~> 0.29.1'
18
+ s.add_dependency 'haveapi-client', '~> 0.29.3'
19
19
  s.add_dependency 'i18n', '>= 1.6', '< 2'
20
20
  s.add_dependency 'json'
21
21
  s.add_dependency 'mail'
@@ -38,8 +38,7 @@ module HaveAPI::Authentication
38
38
 
39
39
  def describe
40
40
  {
41
- description: 'Authentication using HTTP basic. Username and password is passed ' \
42
- 'via HTTP header. Its use is forbidden from web browsers.'
41
+ description: HaveAPI.message('haveapi.authentication.basic.description')
43
42
  }
44
43
  end
45
44
 
@@ -54,7 +54,7 @@ module HaveAPI::Authentication
54
54
  return ret unless @instances[context.version]
55
55
 
56
56
  @instances[context.version].each do |provider|
57
- ret[provider.name] = provider.describe
57
+ ret[provider.name] = HaveAPI.localize(provider.describe)
58
58
 
59
59
  next unless provider.resource_module
60
60
 
@@ -150,24 +150,8 @@ module HaveAPI::Authentication
150
150
  end
151
151
 
152
152
  def describe
153
- desc = <<-END
154
- OAuth2 authorization provider. While OAuth2 support in HaveAPI clients
155
- is limited, it is possible to use your API as an authentication source
156
- and to use OAuth2 tokens to access the API.
157
-
158
- HaveAPI partially implements RFC 6749: authorization response type "code"
159
- and token grant types "authorization_code" and "refresh_token". Other
160
- response and grant types are not supported at this time.
161
-
162
- The access token can be passed as bearer token according to RFC 6750,
163
- or using a custom HTTP header when the Authorization header is not
164
- practical.
165
-
166
- The access and refresh tokens can be revoked as per RFC 7009.
167
- END
168
-
169
153
  {
170
- description: desc,
154
+ description: HaveAPI.message('haveapi.authentication.oauth2.description'),
171
155
  http_header: config.http_header,
172
156
  authorize_url: @authorize_url,
173
157
  authorize_path: @authorize_path,
@@ -185,7 +185,7 @@ module HaveAPI::Authentication
185
185
  {
186
186
  http_header: config.class.http_header,
187
187
  query_parameter: config.class.query_parameter,
188
- description: 'The client authenticates with credentials, usually username and password, and gets a token. From this point, the credentials can be forgotten and the token is used instead. Tokens can have different lifetimes, can be renewed and revoked. The token is passed either via HTTP header or query parameter.'
188
+ description: HaveAPI.message('haveapi.authentication.token.description')
189
189
  }
190
190
  end
191
191
 
@@ -203,12 +203,16 @@ module HaveAPI::Authentication
203
203
  provider = self
204
204
 
205
205
  HaveAPI::Resource.define_resource(:Token) do
206
+ desc HaveAPI.message('haveapi.authentication.token.resource.description')
207
+
206
208
  define_singleton_method(:token_instance) { provider }
207
209
 
208
210
  auth false
209
211
  version :all
210
212
 
211
213
  define_action(:Request) do
214
+ desc HaveAPI.message('haveapi.authentication.token.actions.request.description')
215
+
212
216
  route ''
213
217
  http_method :post
214
218
 
@@ -275,6 +279,8 @@ module HaveAPI::Authentication
275
279
  end
276
280
 
277
281
  define_action(:Revoke) do
282
+ desc HaveAPI.message('haveapi.authentication.token.actions.revoke.description')
283
+
278
284
  http_method :post
279
285
  auth true
280
286
 
@@ -318,6 +324,8 @@ module HaveAPI::Authentication
318
324
  end
319
325
 
320
326
  define_action(:Renew) do
327
+ desc HaveAPI.message('haveapi.authentication.token.actions.renew.description')
328
+
321
329
  http_method :post
322
330
  auth true
323
331
 
@@ -5,33 +5,57 @@
5
5
  cs:
6
6
  haveapi:
7
7
  action_state:
8
- cancellation_failed: zrušení selhalo
9
- not_found: stav akce nebyl nalezen
10
- timeout_max: timeout může být nejvýše %{max}
8
+ cancellation_failed: Zrušení akce se nezdařilo
9
+ not_found: Stav akce nebyl nalezen
10
+ timeout_max: Časový limit může být nejvýše %{max}
11
11
  authentication:
12
- failed: přihlášení selhalo
13
- invalid_credentials: neplatné přihlašovací údaje
14
- multiple_oauth2_tokens: Bylo poskytnuto více OAuth2 tokenů
15
- multiple_tokens: Bylo poskytnuto více ověřovacích tokenů
16
- renew_failed: obnovení selhalo
17
- required: Akce vyžaduje přihlášení uživatele
18
- revoke_failed: zrušení selhalo
19
- token_required: Akce vyžaduje přihlášení uživatele tokenem
12
+ basic:
13
+ description: |-
14
+ Autentizace pomocí HTTP Basic. Uživatelské jméno a heslo se předávají v HTTP hlavičce.
15
+ Tato metoda se nesmí používat z webových prohlížečů.
16
+ failed: Přihlášení se nezdařilo
17
+ invalid_credentials: Neplatné přihlašovací údaje
18
+ multiple_oauth2_tokens: Bylo zadáno více OAuth2 tokenů
19
+ multiple_tokens: Bylo zadáno více autentizačních tokenů
20
+ oauth2:
21
+ description: |-
22
+ OAuth2 autorizační provider.
23
+ Podpora OAuth2 v klientech HaveAPI je omezená, ale API lze použít jako zdroj autentizace a k přístupu k API lze používat OAuth2 tokeny. HaveAPI částečně implementuje RFC 6749: autorizační response type "code" a token grant types "authorization_code" a "refresh_token". Ostatní response a grant types momentálně nejsou podporovány. Přístupový token lze předat jako bearer token podle RFC 6750 nebo vlastní HTTP hlavičkou, pokud není praktické použít hlavičku Authorization.
24
+ Přístupové a refresh tokeny lze zneplatnit podle RFC 7009.
25
+ renew_failed: Obnovení tokenu se nezdařilo
26
+ required: Tato akce vyžaduje přihlášení
27
+ revoke_failed: Zneplatnění tokenu se nezdařilo
28
+ token:
29
+ actions:
30
+ renew:
31
+ description: Obnovit aktuální autentizační token
32
+ request:
33
+ description: Vyžádat autentizační token
34
+ revoke:
35
+ description: Zneplatnit aktuální autentizační token
36
+ description: Klient se autentizuje přihlašovacími údaji, obvykle uživatelským
37
+ jménem a heslem, a získá token. Od té chvíle už přihlašovací údaje nepotřebuje
38
+ a používá místo nich token. Tokeny mohou mít různou dobu platnosti a lze
39
+ je obnovovat nebo zneplatňovat. Token se předává buď v HTTP hlavičce, nebo
40
+ jako parametr dotazu.
41
+ resource:
42
+ description: Spravovat autentizační tokeny
43
+ token_required: Tato akce vyžaduje autentizaci tokenem
20
44
  authorization:
21
45
  insufficient_permissions: Přístup odepřen. Nedostatečná oprávnění.
22
46
  errors:
23
47
  action_not_found: Akce nebyla nalezena
24
- bad_accept_header: Chybná hlavička Accept
25
- bad_json_syntax: Chybná syntaxe JSON
26
- json_body_object: Tělo JSON musí být objekt
48
+ bad_accept_header: Neplatná hlavička Accept
49
+ bad_json_syntax: Neplatná syntaxe JSON
50
+ json_body_object: Tělo JSON požadavku musí být objekt
27
51
  server_error: Došlo k chybě serveru
28
- unsupported_content_type: Nepodporovaný Content-Type
52
+ unsupported_content_type: Nepodporovaná hlavička Content-Type
29
53
  pagination:
30
- limit_max: limit může být nejvýše %{max}
54
+ limit_max: Limit může být nejvýše %{max}
31
55
  parameters:
32
56
  action_state:
33
57
  can_cancel:
34
- description: Je-li true, spuštění této akce lze zrušit
58
+ description: Je-li hodnota true, lze běh této akce zrušit
35
59
  label: Lze zrušit
36
60
  created_at:
37
61
  label: Vytvořeno
@@ -43,98 +67,111 @@ cs:
43
67
  label: Popisek
44
68
  poll:
45
69
  current:
46
- description: průběh, se kterým se porovnává při nastaveném update_in
70
+ description: Aktuální průběh pro porovnání, je-li nastaveno update_in
47
71
  status:
48
- description: stav, se kterým se porovnává při nastaveném update_in
72
+ description: Stav pro porovnání, je-li nastaveno update_in
49
73
  timeout:
50
- description: v sekundách
74
+ description: Časový limit v sekundách
51
75
  label: Časový limit
52
76
  total:
53
- description: průběh, se kterým se porovnává při nastaveném update_in
77
+ description: Celkový průběh pro porovnání, je-li nastaveno update_in
54
78
  update_in:
55
- description: počet sekund, po kterém se stav vrátí, pokud se průběh změnil
56
- label: Průběh
79
+ description: Vrátit stav dříve, pokud se změní status, current nebo total;
80
+ hodnota se předává implementacím pollingu v API
81
+ label: Čekat na změnu
57
82
  status:
58
- description: Určuje, zda akce probíhá nebo selhává
83
+ description: Určuje, zda akce probíhá úspěšně nebo selhala
59
84
  label: Stav
60
85
  total:
61
- description: Akce je dokončena, když se aktuální průběh rovná celkovému
86
+ description: Akce je dokončena, když aktuální průběh dosáhne celkového
62
87
  label: Celkem
63
88
  unit:
64
- description: Jednotka aktuálního a celkového průběhu
89
+ description: Jednotka hodnot current a total
65
90
  label: Jednotka
66
91
  updated_at:
67
- description: Kdy byl průběh naposledy aktualizován
92
+ description: Čas poslední aktualizace průběhu
68
93
  label: Aktualizováno
69
94
  action_state_id:
70
- description: ID objektu ActionState pro dotazování stavu. Pokud je null, akce
71
- není pro aktuální volání blokující.
95
+ description: |-
96
+ ID objektu ActionState pro dotazování na stav.
97
+ Pokud je hodnota null, akce v aktuálním volání neblokuje.
72
98
  label: ID stavu akce
73
99
  active_record:
74
100
  includes:
75
- description: |-
76
- Seznam názvů asociovaných prostředků oddělených čárkou.
77
- Vnořené asociace se zapisují pomocí '__' mezi názvy prostředků.
78
- Například 'user,node' přeloží tyto dvě asociace.
79
- Pro přeložení dalších asociací uzlu použijte např. 'user,node__location',
80
- pro ještě hlubší úroveň např. 'user,node__location__environment'.
101
+ description: Seznam názvů asociovaných zdrojů oddělených čárkou. Vnořené
102
+ asociace se zapisují pomocí '__' mezi názvy zdrojů. Například 'user,node'
103
+ načte tyto dvě asociace. Pro načtení dalších asociací zdroje node použijte
104
+ např. 'user,node__location'; pro ještě hlubší úroveň např. 'user,node__location__environment'.
81
105
  label: Zahrnuté asociace
82
106
  path_params:
83
- description: Pole parametrů potřebných k přeložení URL na tento objekt
107
+ description: Pole parametrů potřebných k sestavení URL k tomuto objektu
84
108
  label: Parametry URL
85
109
  resolved:
86
- description: True, pokud je asociace přeložena
87
- label: Přeloženo
110
+ description: True, pokud je asociace načtena
111
+ label: Načteno
88
112
  authentication:
89
113
  token:
90
114
  interval:
91
- description: Jak dlouho bude požadovaný token platný, v sekundách.
115
+ description: Doba platnosti požadovaného tokenu v sekundách.
92
116
  label: Interval
93
117
  lifetime:
94
118
  description: |-
95
119
  fixed - token má pevnou dobu platnosti a nelze ho obnovit
96
- renewable_manual - token lze obnovit, ale musí se obnovit ručně akcí renew
97
- renewable_auto - token se při každém použití automaticky obnoví na now+interval
98
- permanent - token bude platný navždy, dokud nebude smazán
120
+ renewable_manual - platnost tokenu lze prodloužit, ale pouze ručně akcí renew
121
+ renewable_auto - platnost tokenu se při každém použití automaticky prodlouží na now + interval
122
+ permanent - token je platný trvale, dokud není smazán
99
123
  label: Životnost
100
124
  password:
101
125
  label: Heslo
102
126
  scope:
103
- label: Rozsah
127
+ label: Scope
104
128
  user:
105
129
  label: Uživatel
106
130
  default:
107
131
  count:
108
- label: Vrátit počet všech položek
132
+ label: Vrátit celkový počet položek
109
133
  total_count:
110
- label: Celkový počet všech položek
134
+ label: Celkový počet položek
111
135
  metadata:
112
136
  'no':
113
- label: Zakázat metadata
137
+ label: Vypnout metadata
114
138
  paginable:
115
139
  from_id:
116
- description: Vypsat objekty s větším/menším ID
140
+ description: Vypsat objekty s ID větším/menším než zadaná hodnota
117
141
  label: Od ID
118
142
  limit:
119
143
  description: Počet objektů k načtení
120
144
  label: Limit
145
+ resources:
146
+ action_state:
147
+ actions:
148
+ cancel:
149
+ description: Zrušit čekající akci
150
+ index:
151
+ description: Vypsat stavy čekajících akcí
152
+ poll:
153
+ description: Vrátit stav po dokončení akce, změně průběhu nebo vypršení
154
+ časového limitu
155
+ show:
156
+ description: Zobrazit stav čekající akce
157
+ description: Procházet stavy blokujících akcí
121
158
  types:
122
- invalid_boolean: neplatná pravdivostní hodnota %{value}
123
- invalid_datetime: není ve formátu ISO 8601 '%{value}'
124
- invalid_float: neplatné desetinné číslo %{value}
125
- invalid_integer: neplatné celé číslo %{value}
126
- invalid_string: neplatný řetězec %{value}
159
+ invalid_boolean: 'není platná pravdivostní hodnota: %{value}'
160
+ invalid_datetime: 'není ve formátu ISO 8601: ''%{value}'''
161
+ invalid_float: 'není platné desetinné číslo: %{value}'
162
+ invalid_integer: 'není platné celé číslo: %{value}'
163
+ invalid_string: 'není platný řetězec: %{value}'
127
164
  validation:
128
165
  cannot_be_null: nesmí být null
129
166
  includes_only_strings: includes musí obsahovat jen řetězce
130
167
  includes_string_or_array: includes musí být řetězec nebo pole
131
- input_parameters_not_valid: vstupní parametry nejsou platné
132
- invalid_id: neplatné ID %{value}
168
+ input_parameters_not_valid: vstupní parametry jsou neplatné
169
+ invalid_id: 'není platné ID: %{value}'
133
170
  invalid_input_layout: neplatná struktura vstupu
134
171
  invalid_path_parameter_encoding: neplatné kódování parametru cesty
135
172
  invalid_string_encoding: neplatné kódování řetězce
136
- required_parameter_missing: povinný parametr chybí
137
- resource_not_found: prostředek nebyl nalezen
173
+ required_parameter_missing: chybí povinný parametr
174
+ resource_not_found: zdroj nebyl nalezen
138
175
  validators:
139
176
  acceptance:
140
177
  accepted: musí být %{value}
@@ -149,19 +186,19 @@ cs:
149
186
  included: "%{value} nelze použít"
150
187
  length:
151
188
  equals: délka musí být %{equals}
152
- max: délka může být nejvýše %{max}
189
+ max: délka musí být nejvýše %{max}
153
190
  min: délka musí být alespoň %{min}
154
- range: délka musí být v rozsahu <%{min}, %{max}>
191
+ range: délka musí být v rozsahu %{min}–%{max}
155
192
  numericality:
156
193
  composite: "%{requirements}"
157
- even: sudé číslo
194
+ even: musí být sudé číslo
158
195
  max: musí být nejvýše %{max}
159
196
  min: musí být alespoň %{min}
160
197
  mod: zbytek po dělení %{mod} musí být nula
161
198
  number: musí být číslo
162
- odd: liché číslo
163
- range: musí být v rozsahu <%{min}, %{max}>
164
- step: v krocích po %{step}
199
+ odd: musí být liché číslo
200
+ range: musí být v rozsahu %{min}–%{max}
201
+ step: musí být v krocích po %{step}
165
202
  presence:
166
- non_empty: musí být vyplněno a neprázdné
203
+ non_empty: musí být vyplněno a nesmí být prázdné
167
204
  present: musí být vyplněno