Ответ прост:
По умолчанию Sinatra прослушивает порт 4567, поэтому я просто удостоверился, что он привязан ко всем интерфейсам на всякий случай, если я хочу вызвать его со своего внешнего IP-адреса, и отключил всевывод многословной ошибки следующим образом:
listener.rb
require "sinatra"
set :bind, "0.0.0.0"
disable :show_exceptions
disable :raise_errors
post "/" do
# Check if the header matches
# If it did not match then halt and return code 401 Unauthorized
if request.env["HTTP_custom_header_name"] != "verystrongpassword"
halt 401
end
#the rest of your code goes here
status :ok
end
Обратите внимание, что при сравнении значения заголовка всегда необходимо включать HTTP , а затемидет имя вашего заголовка - Ссылка
Пример
require "sinatra"
set :bind, "0.0.0.0"
disable :show_exceptions
disable :raise_errors
post "/" do
# Check if the header matches
# If it did not match then halt and return code 401 Unauthorized
if request.env["HTTP_X_GIT_SECRET"] != "d4c74594d841139328695756648b6bd6"
halt 401
end
data = JSON.parse request.body.read
p data
status :ok
end
Где X_GIT_SECRET это имя заголовка
Extra
если вы не знаете, как называется заголовок, отправляемый в sinatra, вы можете проверить все содержимое запроса, поставив следующее перед оператором if up:
p request.env
, а затем попробуйте отправить запрос еще раз, найдите свой заголовок и проведите сравнение на его основе.
Примечание: status :ok
aka 200 OK, было установлено в конце блока, потому что, когда кто-то отправляет запрос to Синатра должна что-то возвращать, иначе возникнет внутренняя ошибка 500.