katalyst-koi 5.8.3 → 5.10.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/katalyst/koi.esm.js +2 -15
  3. data/app/assets/builds/katalyst/koi.js +2 -15
  4. data/app/assets/builds/katalyst/koi.min.js +1 -1
  5. data/app/assets/builds/katalyst/koi.min.js.map +1 -1
  6. data/app/assets/stylesheets/koi/blocks/button.css +4 -2
  7. data/app/assets/stylesheets/koi/blocks/clipboard.css +43 -16
  8. data/app/assets/stylesheets/koi/blocks/index.css +1 -0
  9. data/app/assets/stylesheets/koi/forms/file-upload.css +259 -0
  10. data/app/assets/stylesheets/koi/forms/index.css +0 -2
  11. data/app/controllers/admin/admin_roles_controller.rb +49 -0
  12. data/app/controllers/admin/background_jobs_controller.rb +13 -2
  13. data/app/controllers/admin/device_authorizations_controller.rb +1 -1
  14. data/app/controllers/admin/recurring_tasks_controller.rb +1 -2
  15. data/app/controllers/admin/sessions/tokens_controller.rb +45 -0
  16. data/app/controllers/admin/tokens_controller.rb +25 -26
  17. data/app/controllers/concerns/koi/controller.rb +22 -0
  18. data/app/javascript/koi/application.js +0 -14
  19. data/app/javascript/koi/controllers/index.js +2 -2
  20. data/app/models/admin/device_authorization.rb +66 -18
  21. data/app/models/admin/role.rb +41 -0
  22. data/app/models/background_job.rb +10 -1
  23. data/app/models/koi/current.rb +10 -0
  24. data/app/models/koi/identity/assertion.rb +78 -0
  25. data/app/models/koi/identity/member.rb +30 -0
  26. data/app/models/koi/identity/principal.rb +40 -0
  27. data/app/models/koi/identity/provider.rb +151 -0
  28. data/app/models/koi/identity.rb +70 -0
  29. data/app/models/recurring_task.rb +16 -0
  30. data/app/views/admin/admin_roles/index.html.erb +14 -0
  31. data/app/views/admin/admin_roles/show.html.erb +41 -0
  32. data/app/views/admin/sessions/password.html.erb +0 -3
  33. data/app/views/admin/{tokens → sessions/tokens}/create.turbo_stream.erb +2 -2
  34. data/config/routes.rb +5 -3
  35. data/db/migrate/20260721000001_create_admin_roles.rb +12 -0
  36. data/db/migrate/20260721000002_add_admin_role_to_admin_device_authorizations.rb +25 -0
  37. data/db/migrate/20260721000003_add_principal_to_admin_device_authorizations.rb +7 -0
  38. data/lib/generators/koi/helpers/attribute_helpers.rb +6 -0
  39. data/lib/koi/config.rb +32 -0
  40. data/lib/koi/engine.rb +12 -0
  41. data/lib/koi/extensions/object_rendering.rb +11 -11
  42. data/lib/koi/form/builder.rb +14 -4
  43. data/lib/koi/middleware/admin_authentication.rb +2 -2
  44. data/spec/factories/admin_device_authorizations.rb +18 -0
  45. data/spec/factories/admin_roles.rb +7 -0
  46. metadata +32 -13
  47. data/app/assets/stylesheets/koi/forms/document-field.css +0 -84
  48. data/app/assets/stylesheets/koi/forms/image-field.css +0 -96
  49. data/app/controllers/admin/device_tokens_controller.rb +0 -18
  50. /data/app/views/admin/{tokens → sessions/tokens}/show.html.erb +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-koi
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.8.3
4
+ version: 5.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
@@ -79,6 +79,20 @@ dependencies:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: jwt
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
82
96
  - !ruby/object:Gem::Dependency
83
97
  name: rotp
84
98
  requirement: !ruby/object:Gem::Requirement
@@ -196,9 +210,6 @@ dependencies:
196
210
  requirement: !ruby/object:Gem::Requirement
197
211
  requirements:
198
212
  - - ">="
199
- - !ruby/object:Gem::Version
200
- version: 1.28.0
201
- - - "<"
202
213
  - !ruby/object:Gem::Version
203
214
  version: '2'
204
215
  type: :runtime
@@ -206,9 +217,6 @@ dependencies:
206
217
  version_requirements: !ruby/object:Gem::Requirement
207
218
  requirements:
208
219
  - - ">="
209
- - !ruby/object:Gem::Version
210
- version: 1.28.0
211
- - - "<"
212
220
  - !ruby/object:Gem::Version
213
221
  version: '2'
214
222
  - !ruby/object:Gem::Dependency
@@ -330,13 +338,11 @@ files:
330
338
  - app/assets/stylesheets/koi/forms/checkboxes.css
331
339
  - app/assets/stylesheets/koi/forms/combobox.css
332
340
  - app/assets/stylesheets/koi/forms/date-input.css
333
- - app/assets/stylesheets/koi/forms/document-field.css
334
341
  - app/assets/stylesheets/koi/forms/errors.css
335
342
  - app/assets/stylesheets/koi/forms/fieldset.css
336
343
  - app/assets/stylesheets/koi/forms/file-upload.css
337
344
  - app/assets/stylesheets/koi/forms/form-group.css
338
345
  - app/assets/stylesheets/koi/forms/hint.css
339
- - app/assets/stylesheets/koi/forms/image-field.css
340
346
  - app/assets/stylesheets/koi/forms/index.css
341
347
  - app/assets/stylesheets/koi/forms/input.css
342
348
  - app/assets/stylesheets/koi/forms/label.css
@@ -373,6 +379,7 @@ files:
373
379
  - app/components/koi/tables/cells/link_component.rb
374
380
  - app/components/koi/tables/table_component.rb
375
381
  - app/controllers/admin/active_storage/direct_uploads_controller.rb
382
+ - app/controllers/admin/admin_roles_controller.rb
376
383
  - app/controllers/admin/admin_users_controller.rb
377
384
  - app/controllers/admin/application_controller.rb
378
385
  - app/controllers/admin/background_jobs_controller.rb
@@ -380,11 +387,11 @@ files:
380
387
  - app/controllers/admin/credentials_controller.rb
381
388
  - app/controllers/admin/dashboards_controller.rb
382
389
  - app/controllers/admin/device_authorizations_controller.rb
383
- - app/controllers/admin/device_tokens_controller.rb
384
390
  - app/controllers/admin/feature_flags_controller.rb
385
391
  - app/controllers/admin/otps_controller.rb
386
392
  - app/controllers/admin/profiles_controller.rb
387
393
  - app/controllers/admin/recurring_tasks_controller.rb
394
+ - app/controllers/admin/sessions/tokens_controller.rb
388
395
  - app/controllers/admin/sessions_controller.rb
389
396
  - app/controllers/admin/tokens_controller.rb
390
397
  - app/controllers/admin/url_rewrites_controller.rb
@@ -425,6 +432,7 @@ files:
425
432
  - app/models/admin/collection.rb
426
433
  - app/models/admin/credential.rb
427
434
  - app/models/admin/device_authorization.rb
435
+ - app/models/admin/role.rb
428
436
  - app/models/admin/session.rb
429
437
  - app/models/admin/user.rb
430
438
  - app/models/application_record.rb
@@ -433,9 +441,16 @@ files:
433
441
  - app/models/concerns/koi/model/otp.rb
434
442
  - app/models/feature_flag.rb
435
443
  - app/models/koi/current.rb
444
+ - app/models/koi/identity.rb
445
+ - app/models/koi/identity/assertion.rb
446
+ - app/models/koi/identity/member.rb
447
+ - app/models/koi/identity/principal.rb
448
+ - app/models/koi/identity/provider.rb
436
449
  - app/models/recurring_task.rb
437
450
  - app/models/url_rewrite.rb
438
451
  - app/models/well_known.rb
452
+ - app/views/admin/admin_roles/index.html.erb
453
+ - app/views/admin/admin_roles/show.html.erb
439
454
  - app/views/admin/admin_users/_form.html.erb
440
455
  - app/views/admin/admin_users/archived.html.erb
441
456
  - app/views/admin/admin_users/edit.html.erb
@@ -469,12 +484,12 @@ files:
469
484
  - app/views/admin/sessions/new.html.erb
470
485
  - app/views/admin/sessions/otp.html.erb
471
486
  - app/views/admin/sessions/password.html.erb
487
+ - app/views/admin/sessions/tokens/create.turbo_stream.erb
488
+ - app/views/admin/sessions/tokens/show.html.erb
472
489
  - app/views/admin/shared/icons/_close.html.erb
473
490
  - app/views/admin/shared/icons/_cross.html.erb
474
491
  - app/views/admin/shared/icons/_menu.html.erb
475
492
  - app/views/admin/shared/icons/_refresh.html.erb
476
- - app/views/admin/tokens/create.turbo_stream.erb
477
- - app/views/admin/tokens/show.html.erb
478
493
  - app/views/admin/url_rewrites/_form.html.erb
479
494
  - app/views/admin/url_rewrites/edit.html.erb
480
495
  - app/views/admin/url_rewrites/index.html.erb
@@ -521,6 +536,9 @@ files:
521
536
  - db/migrate/20260501000000_add_last_sign_out_at_to_admin_users.rb
522
537
  - db/migrate/20260525041029_create_admin_sessions.rb
523
538
  - db/migrate/20260525111759_clean_up_admin_user_timestamps.rb
539
+ - db/migrate/20260721000001_create_admin_roles.rb
540
+ - db/migrate/20260721000002_add_admin_role_to_admin_device_authorizations.rb
541
+ - db/migrate/20260721000003_add_principal_to_admin_device_authorizations.rb
524
542
  - db/seeds.rb
525
543
  - lib/generators/koi/admin/USAGE
526
544
  - lib/generators/koi/admin/admin_generator.rb
@@ -558,6 +576,7 @@ files:
558
576
  - lib/koi/middleware/url_redirect.rb
559
577
  - lib/koi/release.rb
560
578
  - spec/factories/admin_device_authorizations.rb
579
+ - spec/factories/admin_roles.rb
561
580
  - spec/factories/admin_sessions.rb
562
581
  - spec/factories/admins.rb
563
582
  - spec/factories/url_rewrites.rb
@@ -581,7 +600,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
581
600
  - !ruby/object:Gem::Version
582
601
  version: '0'
583
602
  requirements: []
584
- rubygems_version: 4.0.10
603
+ rubygems_version: 4.0.16
585
604
  specification_version: 4
586
605
  summary: Koi CMS admin framework
587
606
  test_files: []
@@ -1,84 +0,0 @@
1
- .govuk-document-field {
2
- display: grid;
3
- grid-template-areas:
4
- "label"
5
- "hint"
6
- "error"
7
- "preview"
8
- "file"
9
- "supplemental";
10
- grid-template-columns: auto;
11
- grid-auto-rows: auto;
12
-
13
- label {
14
- grid-area: label;
15
- }
16
-
17
- .govuk-hint {
18
- grid-area: hint;
19
- }
20
-
21
- .govuk-error-message {
22
- grid-area: error;
23
- }
24
-
25
- input {
26
- grid-area: file;
27
-
28
- &::file-selector-button {
29
- color: var(--color-dark);
30
- background: var(--color-tint);
31
- border: var(--stroke-input);
32
- border-radius: var(--input-radius);
33
- }
34
- }
35
-
36
- .preview-file {
37
- grid-area: preview;
38
- position: relative;
39
- overflow: visible;
40
- background-color: var(--color-tint);
41
- border: var(--stroke-input);
42
- border-radius: var(--input-radius);
43
- margin-bottom: var(--space-2xs);
44
- padding: var(--space-3xs);
45
- line-height: var(--leading-standard);
46
- align-items: start;
47
- margin-right: auto;
48
-
49
- &:not([hidden]) {
50
- display: inline-flex;
51
- }
52
-
53
- .preview-filename {
54
- line-height: unset;
55
- }
56
-
57
- .file-destroy {
58
- appearance: none;
59
- color: black;
60
- border: none;
61
- background: none;
62
- display: inline-block;
63
- margin-left: 0.2rem;
64
- padding: 0;
65
-
66
- &::after {
67
- content: "×";
68
- display: block;
69
- position: relative;
70
- width: 21px;
71
- line-height: 21px;
72
- font-size: 21px;
73
- }
74
- }
75
- }
76
-
77
- > div:last-child {
78
- grid-area: supplemental;
79
-
80
- > * + * {
81
- margin-top: var(--flow-space, var(--space-2xs));
82
- }
83
- }
84
- }
@@ -1,96 +0,0 @@
1
- .govuk-image-field {
2
- display: grid;
3
- grid-template-areas:
4
- "label preview"
5
- "hint preview"
6
- "error preview"
7
- "file preview"
8
- "supplemental supplemental";
9
- grid-template-columns: 1fr auto;
10
- grid-template-rows: auto auto auto 1fr auto;
11
- gap: 0 1rem;
12
-
13
- label {
14
- grid-area: label;
15
- }
16
-
17
- .govuk-hint {
18
- grid-area: hint;
19
- }
20
-
21
- .govuk-error-message {
22
- grid-area: error;
23
- }
24
-
25
- input {
26
- grid-area: file;
27
- align-self: start;
28
-
29
- &::file-selector-button {
30
- color: var(--color-dark);
31
- background: var(--color-tint);
32
- border: var(--stroke-input);
33
- border-radius: var(--input-radius);
34
- }
35
- }
36
-
37
- .preview-image {
38
- grid-area: preview;
39
- position: relative;
40
- display: grid;
41
- overflow: visible;
42
- align-self: start;
43
- align-items: center;
44
- justify-items: center;
45
- background-color: var(--color-tint);
46
- border: var(--stroke-input);
47
- border-radius: var(--input-radius);
48
-
49
- min-width: calc(8em + 2 * var(--stroke-input-width));
50
- aspect-ratio: 1;
51
-
52
- .image-thumbnail {
53
- max-width: 8em;
54
- max-height: 8em;
55
- }
56
- }
57
-
58
- .file-destroy {
59
- appearance: none;
60
- position: absolute;
61
- background-color: var(--color-tint);
62
- color: var(--color-dark);
63
- border-radius: var(--input-radius);
64
- border: var(--stroke-input);
65
- display: block;
66
- padding: 0;
67
- top: calc(-1 * var(--stroke-input-width));
68
- right: calc(-1 * var(--stroke-input-width));
69
-
70
- &::after {
71
- content: "×";
72
- display: block;
73
- position: relative;
74
- width: 21px;
75
- line-height: 21px;
76
- font-size: 21px;
77
- top: -1px;
78
- }
79
- }
80
-
81
- > div:last-child {
82
- grid-area: supplemental;
83
-
84
- > * + * {
85
- margin-top: var(--flow-space, var(--space-2xs));
86
- }
87
- }
88
-
89
- .preview-image[hidden] {
90
- display: block !important;
91
-
92
- .file-destroy {
93
- display: none;
94
- }
95
- }
96
- }
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Admin
4
- class DeviceTokensController < ApplicationController
5
- GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code"
6
-
7
- rate_limit to: 20, within: 1.minute, only: :create
8
- skip_before_action :verify_authenticity_token, only: :create
9
-
10
- def create
11
- return render(json: { error: "invalid_request" }, status: :bad_request) unless params[:grant_type] == GRANT_TYPE
12
-
13
- render json: Admin::DeviceAuthorization.issue_access_token!(device_code: params[:device_code])
14
- rescue Admin::DeviceAuthorization::TokenError => e
15
- render json: { error: e.code }, status: :bad_request
16
- end
17
- end
18
- end