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" /> | |
| | |
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 | |