the lock screen can now also be a locomotive page

did committed Dec 13, 2015
commit 2e147dff8cfee431dd7093c20dcd1762c31a77c7
Showing 4 changed files with 29 additions and 8 deletions
locomotive/steam/middlewares/private_access.rb b/lib/locomotive/steam/middlewares/private_access.rb +12 -3
@@ @@ -19,19 +19,28 @@ module Locomotive::Steam
if access_granted?
store_password
else
- render_response(lock_screen_html, 403)
+ render_lock_screen
end
end
end
private
+ def render_lock_screen
+ if page = services.page_finder.by_handle('lock_screen', false)
+ log "Found custom lock screen: #{page.title}"
+ env['steam.page'] = page
+ else
+ render_response(lock_screen_html, 403)
+ end
+ end
+
def access_granted?
!submitted_password.blank? && submitted_password == site.password
end
def submitted_password
- request.session[:private_access_password] || params[:private_access_password]
+ params[:private_access_password] || request.session[:private_access_password]
end
def store_password
@@ @@ -53,7 +62,7 @@ module Locomotive::Steam
}
</style>
<body>
- <form action="/#{mounted_on}" method="POST">
+ <form action="#{mounted_on}" method="POST">
#{'<p>Wrong password</p>' unless submitted_password.blank?}
<input type="password" name="private_access_password" placeholder="Password" />
&nbsp;
locomotive/steam/server.rb b/lib/locomotive/steam/server.rb +1 -1
@@ @@ -59,10 +59,10 @@ module Locomotive::Steam
Middlewares::UrlRedirection,
Middlewares::Robots,
Middlewares::Timezone,
- Middlewares::PrivateAccess,
Middlewares::EntrySubmission,
Middlewares::Locale,
Middlewares::LocaleRedirection,
+ Middlewares::PrivateAccess,
Middlewares::Path,
Middlewares::Page,
Middlewares::Sitemap,
locomotive/steam/services/page_finder_service.rb b/lib/locomotive/steam/services/page_finder_service.rb +4 -2
@@ @@ -19,8 +19,10 @@ module Locomotive
end
end
- def by_handle(handle)
- decorate { page_map[handle] }
+ def by_handle(handle, with_cache = true)
+ decorate do
+ with_cache ? page_map[handle] : repository.by_handle(handle)
+ end
end
private
spec/unit/middlewares/private_access_spec.rb +12 -2
@@ @@ -9,7 +9,9 @@ describe Locomotive::Steam::Middlewares::PrivateAccess do
let(:password) { nil }
let(:site) { instance_double('Site', name: 'Acme Corp', private_access: private_access, password: password) }
let(:url) { 'http://models.example.com' }
- let(:locomotive_path) { nil }
+ let(:lock_screen) { nil }
+ let(:page_finder) { instance_double('PageFinder', by_handle: lock_screen) }
+ let(:services) { instance_double('Services', page_finder: page_finder) }
let(:session) { {} }
let(:app) { ->(env) { [200, env, ['app']] } }
let(:middleware) { described_class.new(app) }
@@ @@ -34,6 +36,14 @@ describe Locomotive::Steam::Middlewares::PrivateAccess do
it { is_expected.not_to eq 'app' }
+ describe 'with a custom lock screen page' do
+
+ let(:lock_screen) { instance_double('LockScreenPage', title: 'LockScreen') }
+
+ it { subject; expect(rack_env['steam.page'].title).to eq 'LockScreen' }
+
+ end
+
end
context 'password defined' do
@@ @@ -85,7 +95,7 @@ describe Locomotive::Steam::Middlewares::PrivateAccess do
env_for(url, params: form).tap do |env|
env['steam.site'] = site
env['steam.request'] = Rack::Request.new(env)
- env['locomotive.path'] = locomotive_path
+ env['steam.services'] = services
env['rack.session'] = session
end
end