katalyst-koi 4.15.1 → 4.17.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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/koi/admin.css +1 -1
  3. data/app/assets/stylesheets/koi/components/_query.scss +4 -3
  4. data/app/assets/stylesheets/koi/layouts/_header.scss +18 -20
  5. data/app/assets/stylesheets/koi/pages/_login.scss +1 -1
  6. data/app/assets/stylesheets/koi/themes/_govuk.scss +37 -33
  7. data/app/assets/stylesheets/koi/utils/_typography.scss +20 -2
  8. data/app/controllers/admin/admin_users_controller.rb +1 -1
  9. data/app/controllers/admin/credentials_controller.rb +1 -1
  10. data/app/controllers/admin/otps_controller.rb +1 -1
  11. data/app/controllers/admin/sessions_controller.rb +2 -29
  12. data/app/controllers/admin/tokens_controller.rb +18 -44
  13. data/app/controllers/admin/url_rewrites_controller.rb +1 -1
  14. data/app/controllers/admin/well_knowns_controller.rb +71 -0
  15. data/app/controllers/concerns/koi/controller/has_webauthn.rb +6 -5
  16. data/app/controllers/concerns/koi/controller/records_authentication.rb +35 -0
  17. data/app/controllers/well_knowns_controller.rb +15 -0
  18. data/app/models/admin/user.rb +2 -0
  19. data/app/models/well_known.rb +25 -0
  20. data/app/views/admin/sessions/password.html.erb +3 -0
  21. data/app/views/admin/tokens/create.turbo_stream.erb +2 -0
  22. data/app/views/admin/tokens/show.html.erb +3 -1
  23. data/app/views/admin/well_knowns/_fields.html.erb +6 -0
  24. data/app/views/admin/well_knowns/edit.html.erb +12 -0
  25. data/app/views/admin/well_knowns/index.html.erb +15 -0
  26. data/app/views/admin/well_knowns/new.html.erb +11 -0
  27. data/app/views/admin/well_knowns/show.html.erb +19 -0
  28. data/config/routes.rb +4 -1
  29. data/db/migrate/20250204060748_create_well_knowns.rb +14 -0
  30. data/lib/generators/koi/admin_controller/templates/controller.rb.tt +2 -2
  31. data/lib/generators/koi/admin_route/admin_route_generator.rb +2 -1
  32. data/lib/generators/koi/admin_route/templates/initializer.rb.tt +1 -0
  33. data/spec/factories/well_knowns.rb +10 -0
  34. metadata +16 -10
  35. data/app/controllers/concerns/koi/controller/json_web_token.rb +0 -22
@@ -0,0 +1,11 @@
1
+ <% content_for :header do %>
2
+ <%= render(Koi::Header::NewComponent.new(model: WellKnown)) %>
3
+ <% end %>
4
+
5
+ <%= form_with(model: well_known, url: admin_well_knowns_path) do |form| %>
6
+ <%= render "fields", form: %>
7
+
8
+ <div class="actions">
9
+ <%= form.admin_save %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <% content_for :header do %>
2
+ <%= render(Koi::Header::ShowComponent.new(resource: well_known)) %>
3
+ <% end %>
4
+
5
+ <h2>Summary</h2>
6
+
7
+ <%= summary_table_with(model: well_known) do |row| %>
8
+ <% row.link :name %>
9
+ <% row.text :purpose %>
10
+ <% row.text :content_type %>
11
+ <% row.text :content %>
12
+ <% end %>
13
+
14
+ <div class="actions">
15
+ <%= button_to "Delete", admin_well_known_path(well_known),
16
+ class: "button button--secondary",
17
+ method: :delete,
18
+ form: { data: { turbo_confirm: "Are you sure?" } } %>
19
+ </div>
data/config/routes.rb CHANGED
@@ -7,7 +7,6 @@ Rails.application.routes.draw do
7
7
  resources :tokens, param: :token, only: %i[show update], token: /[^\/]+/
8
8
  end
9
9
 
10
- resources :url_rewrites
11
10
  resources :admin_users do
12
11
  resources :credentials, only: %i[new create destroy]
13
12
  resource :otp, only: %i[new create destroy]
@@ -19,6 +18,8 @@ Rails.application.routes.draw do
19
18
 
20
19
  resource :cache, only: %i[destroy]
21
20
  resource :dashboard, only: %i[show]
21
+ resources :well_knowns
22
+ resources :url_rewrites
22
23
 
23
24
  root to: redirect("admin/dashboard")
24
25
  end
@@ -28,4 +29,6 @@ Rails.application.routes.draw do
28
29
  mount Katalyst::Navigation::Engine, at: "navigation"
29
30
  mount Flipper::UI.app(Flipper) => "flipper" if Object.const_defined?("Flipper::UI")
30
31
  end
32
+
33
+ resources :well_knowns, path: ".well-known", param: :name, only: %i[show], name: /[^\/]+/
31
34
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateWellKnowns < ActiveRecord::Migration[8.0]
4
+ def change
5
+ create_table :well_knowns do |t|
6
+ t.string :name, index: { unique: true }
7
+ t.string :purpose
8
+ t.string :content_type
9
+ t.string :content
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -50,9 +50,9 @@ class <%= controller_class_name %>Controller < ApplicationController
50
50
  # Only allow a list of trusted parameters through.
51
51
  def <%= "#{singular_table_name}_params" %>
52
52
  <%- if attributes_names.empty? -%>
53
- params.fetch(:<%= singular_table_name %>, {})
53
+ params.expect(<%= singular_table_name %>: [])
54
54
  <%- else -%>
55
- params.require(:<%= singular_table_name %>).permit(<%= permitted_params %>)
55
+ params.expect(<%= singular_table_name %>: [<%= permitted_params %>])
56
56
  <%- end -%>
57
57
  end
58
58
 
@@ -27,7 +27,8 @@ module Koi
27
27
 
28
28
  def add_navigation
29
29
  gsub_file("config/initializers/koi.rb", /Koi::Menu.modules = ({}|{\n(?:\s+.*\n)*})\n/) do |match|
30
- config = eval(match) # rubocop:disable Security/Eval # we know that this only during generation
30
+ # Safe because we know that this only called during code generation
31
+ config = eval(match) # rubocop:disable Security/Eval
31
32
  label = [*regular_class_path.map(&:humanize), human_name.pluralize].join(" ")
32
33
  path = "/admin#{route_url}"
33
34
  config[label] = path
@@ -9,4 +9,5 @@ Koi::Menu.modules = {
9
9
  Koi::Menu.advanced = {
10
10
  "Admin Users" => "/admin/admin_users",
11
11
  "URL Rewriter" => "/admin/url_rewrites",
12
+ "Well Knowns" => "/admin/well_knowns",
12
13
  }
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :well_known do
5
+ name { Faker::Internet.base64 }
6
+ purpose { Faker::Lorem.sentence }
7
+ content_type { :text }
8
+ content { Faker::Internet.base64 }
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-koi
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.15.1
4
+ version: 4.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-16 00:00:00.000000000 Z
10
+ date: 2025-02-27 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rails
@@ -114,14 +113,14 @@ dependencies:
114
113
  requirements:
115
114
  - - ">="
116
115
  - !ruby/object:Gem::Version
117
- version: '0'
116
+ version: 3.4.0
118
117
  type: :runtime
119
118
  prerelease: false
120
119
  version_requirements: !ruby/object:Gem::Requirement
121
120
  requirements:
122
121
  - - ">="
123
122
  - !ruby/object:Gem::Version
124
- version: '0'
123
+ version: 3.4.0
125
124
  - !ruby/object:Gem::Dependency
126
125
  name: katalyst-govuk-formbuilder
127
126
  requirement: !ruby/object:Gem::Requirement
@@ -234,7 +233,6 @@ dependencies:
234
233
  - - ">="
235
234
  - !ruby/object:Gem::Version
236
235
  version: '3.5'
237
- description:
238
236
  email:
239
237
  - developers@katalyst.com.au
240
238
  executables: []
@@ -375,11 +373,13 @@ files:
375
373
  - app/controllers/admin/sessions_controller.rb
376
374
  - app/controllers/admin/tokens_controller.rb
377
375
  - app/controllers/admin/url_rewrites_controller.rb
376
+ - app/controllers/admin/well_knowns_controller.rb
378
377
  - app/controllers/concerns/koi/controller/has_admin_users.rb
379
378
  - app/controllers/concerns/koi/controller/has_attachments.rb
380
379
  - app/controllers/concerns/koi/controller/has_webauthn.rb
381
380
  - app/controllers/concerns/koi/controller/is_admin_controller.rb
382
- - app/controllers/concerns/koi/controller/json_web_token.rb
381
+ - app/controllers/concerns/koi/controller/records_authentication.rb
382
+ - app/controllers/well_knowns_controller.rb
383
383
  - app/helpers/koi/application_helper.rb
384
384
  - app/helpers/koi/date_helper.rb
385
385
  - app/helpers/koi/definition_list_helper.rb
@@ -394,6 +394,7 @@ files:
394
394
  - app/models/concerns/koi/model/archivable.rb
395
395
  - app/models/concerns/koi/model/otp.rb
396
396
  - app/models/url_rewrite.rb
397
+ - app/models/well_known.rb
397
398
  - app/views/admin/admin_users/_fields.html+self.erb
398
399
  - app/views/admin/admin_users/_fields.html.erb
399
400
  - app/views/admin/admin_users/archived.html.erb
@@ -425,6 +426,11 @@ files:
425
426
  - app/views/admin/url_rewrites/index.html.erb
426
427
  - app/views/admin/url_rewrites/new.html.erb
427
428
  - app/views/admin/url_rewrites/show.html.erb
429
+ - app/views/admin/well_knowns/_fields.html.erb
430
+ - app/views/admin/well_knowns/edit.html.erb
431
+ - app/views/admin/well_knowns/index.html.erb
432
+ - app/views/admin/well_knowns/new.html.erb
433
+ - app/views/admin/well_knowns/show.html.erb
428
434
  - app/views/katalyst/content/asides/_aside.html+form.erb
429
435
  - app/views/katalyst/content/columns/_column.html+form.erb
430
436
  - app/views/katalyst/content/contents/_content.html+form.erb
@@ -465,6 +471,7 @@ files:
465
471
  - db/migrate/20230602033610_add_archived_to_admin_users.rb
466
472
  - db/migrate/20231211005214_add_status_code_to_url_rewrites.rb
467
473
  - db/migrate/20241214060913_add_otp_secret_to_admin_users.rb
474
+ - db/migrate/20250204060748_create_well_knowns.rb
468
475
  - db/seeds.rb
469
476
  - lib/generators/koi/active_record/active_record_generator.rb
470
477
  - lib/generators/koi/admin/USAGE
@@ -504,12 +511,12 @@ files:
504
511
  - lib/koi/release.rb
505
512
  - spec/factories/admins.rb
506
513
  - spec/factories/url_rewrites.rb
514
+ - spec/factories/well_knowns.rb
507
515
  homepage: https://github.com/katalyst/koi
508
516
  licenses:
509
517
  - MIT
510
518
  metadata:
511
519
  rubygems_mfa_required: 'true'
512
- post_install_message:
513
520
  rdoc_options: []
514
521
  require_paths:
515
522
  - lib
@@ -524,8 +531,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
524
531
  - !ruby/object:Gem::Version
525
532
  version: '0'
526
533
  requirements: []
527
- rubygems_version: 3.5.22
528
- signing_key:
534
+ rubygems_version: 3.6.2
529
535
  specification_version: 4
530
536
  summary: Koi CMS admin framework
531
537
  test_files: []
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Koi
4
- module Controller
5
- module JsonWebToken
6
- extend ActiveSupport::Concern
7
-
8
- SECRET_KEY = Rails.application.secret_key_base
9
-
10
- def encode_token(**payload)
11
- JWT.encode(payload, SECRET_KEY)
12
- end
13
-
14
- def decode_token(token)
15
- payload = JWT.decode(token, SECRET_KEY)[0]
16
- ActiveSupport::HashWithIndifferentAccess.new(payload)
17
- rescue JWT::DecodeError
18
- nil
19
- end
20
- end
21
- end
22
- end