Skip to content

Commit f3693bc

Browse files
committed
add job mission control
1 parent 2bdf2fa commit f3693bc

File tree

8 files changed

+67
-2
lines changed

8 files changed

+67
-2
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ gem "activerecord-enhancedsqlite3-adapter"
8989
gem "litestream", "~> 0.10.1"
9090
gem "solid_cache"
9191
gem "solid_queue"
92+
gem "mission_control-jobs"
9293

9394
gem "inline_svg", "~> 1.9"
9495
gem "net-http", "~> 0.3.2"

Gemfile.lock

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ GEM
192192
multi_xml (>= 0.5.2)
193193
i18n (1.14.5)
194194
concurrent-ruby (~> 1.0)
195+
importmap-rails (2.0.1)
196+
actionpack (>= 6.0.0)
197+
activesupport (>= 6.0.0)
198+
railties (>= 6.0.0)
195199
inline_svg (1.9.0)
196200
activesupport (>= 3.0)
197201
nokogiri (>= 1.6)
@@ -238,6 +242,11 @@ GEM
238242
method_source (1.1.0)
239243
mini_mime (1.1.5)
240244
minitest (5.24.1)
245+
mission_control-jobs (0.2.1)
246+
importmap-rails
247+
rails (~> 7.1)
248+
stimulus-rails
249+
turbo-rails
241250
msgpack (1.7.2)
242251
multi_xml (0.7.1)
243252
bigdecimal (~> 3.1)
@@ -403,6 +412,8 @@ GEM
403412
rubocop-performance (~> 1.21.0)
404413
standardrb (1.0.1)
405414
standard
415+
stimulus-rails (1.3.3)
416+
railties (>= 6.0.0)
406417
stringio (3.1.1)
407418
strscan (3.1.0)
408419
thor (1.3.1)
@@ -478,6 +489,7 @@ DEPENDENCIES
478489
litestream (~> 0.10.1)
479490
meilisearch-rails
480491
meta-tags (~> 2.18)
492+
mission_control-jobs
481493
net-http (~> 0.3.2)
482494
pagy (~> 6.0)
483495
propshaft

app/clients/youtube/transcript.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require "message_pb"
1+
require "message_type"
22

33
module Youtube
44
class Transcript

config/application.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class Application < Rails::Application
3030
#
3131
# config.time_zone = "Central Time (US & Canada)"
3232
# config.eager_load_paths << Rails.root.join("extras")
33+
#
34+
config.autoload_lib(ignore: %w[assets tasks])
3335

3436
config.active_job.queue_adapter = :solid_queue
3537
config.solid_queue.connects_to = {database: {writing: :queue}}

config/database.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#
77
default: &default
88
adapter: sqlite3
9-
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
9+
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
1010
timeout: 5000
1111

1212
# DATABASE CONFIGURATIONS

config/routes.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#
33

44
Rails.application.routes.draw do
5+
extend Authenticator
6+
57
# static pages
68
get "uses", to: "page#uses"
79

@@ -14,6 +16,10 @@
1416
get "sign_up", to: "registrations#new"
1517
post "sign_up", to: "registrations#create"
1618

19+
authenticate :admin do
20+
mount MissionControl::Jobs::Engine, at: "/jobs"
21+
end
22+
1723
resources :sessions, only: [:index, :show, :destroy]
1824
resource :password, only: [:edit, :update]
1925
namespace :identity do

lib/authenticator.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
module Authenticator
2+
class AdminConstraint
3+
def matches?(request)
4+
session = Session.find_by_id(request.cookie_jar.signed[:session_token])
5+
6+
if session
7+
session.user.admin?
8+
else
9+
false
10+
end
11+
end
12+
end
13+
14+
class UserConstraint
15+
def matches?(request)
16+
session = Session.find_by_id(request.cookie_jar.signed[:session_token])
17+
18+
if session
19+
session.user
20+
else
21+
false
22+
end
23+
end
24+
end
25+
26+
class ForbiddenConstraint
27+
def matches?(request) = false
28+
end
29+
30+
ROLES = {
31+
admin: AdminConstraint,
32+
user: UserConstraint
33+
}
34+
35+
def authenticate(role, &)
36+
constraints(constraint_for(role), &)
37+
end
38+
39+
private
40+
41+
def constraint_for(role)
42+
ROLES[role.to_sym]&.new || ForbiddenConstraint.new
43+
end
44+
end
File renamed without changes.

0 commit comments

Comments
 (0)