Address Brother QL printer by URL path instead of session cookie
deploy / deploy (push) Successful in 9s
deploy / deploy (push) Successful in 9s
Drops /brother/select and the session-based "active printer" state: the printer key now lives in the path (/brother/<printer>/*), so the proxy is stateless and any path under it -- including brother_ql_web's API, not just its UI -- is reachable without a prior "activation" step.
This commit is contained in:
1 parent
776f7fdd5a
commit
5c06f725f0
4 files changed
+13
-34
No files matched your search
@@ -89,9 +89,10 @@ helpers do
|
||||
end
|
||||
|
||||
# Transparently reverse-proxies the current request to one of the
|
||||
# brother_ql_web instances, so all three printers are reachable through
|
||||
# this single sinatra port instead of their own dedicated ports.
|
||||
def proxy_to_brother(port, path)
|
||||
# brother_ql_web instances, so all three printers (web UI and API alike)
|
||||
# are reachable through this single sinatra port instead of their own
|
||||
# dedicated ports.
|
||||
def proxy_to_brother(port, prefix, path)
|
||||
uri = URI("http://127.0.0.1:#{port}#{path}")
|
||||
uri.query = request.query_string unless request.query_string.empty?
|
||||
|
||||
@@ -103,7 +104,7 @@ helpers do
|
||||
proxied[header] = value
|
||||
end
|
||||
proxied['Content-Type'] = request.content_type if request.content_type
|
||||
proxied['X-Forwarded-Prefix'] = '/brother'
|
||||
proxied['X-Forwarded-Prefix'] = prefix
|
||||
proxied['X-Forwarded-Host'] = request.host
|
||||
proxied.body = request.body.read unless request.request_method == 'GET'
|
||||
|
||||
@@ -188,23 +189,14 @@ end
|
||||
|
||||
get '/brother' do
|
||||
@printers = BROTHER_PRINTERS
|
||||
@selected = session[:brother_printer]
|
||||
erb :brother_picker
|
||||
end
|
||||
|
||||
post '/brother/select' do
|
||||
key = params[:printer]
|
||||
halt 400, 'unknown printer' unless BROTHER_PRINTERS.key?(key)
|
||||
|
||||
session[:brother_printer] = key
|
||||
redirect '/brother/'
|
||||
end
|
||||
|
||||
%w[get post put delete].each do |verb|
|
||||
send(verb, '/brother/*') do
|
||||
key = session[:brother_printer]
|
||||
redirect '/brother' unless key
|
||||
send(verb, '/brother/:printer/*') do
|
||||
printer = BROTHER_PRINTERS[params[:printer]]
|
||||
halt 404, 'unknown printer' unless printer
|
||||
|
||||
proxy_to_brother(BROTHER_PRINTERS[key][:port], '/' + params[:splat].first)
|
||||
proxy_to_brother(printer[:port], "/brother/#{params[:printer]}", '/' + params[:splat].first)
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user