/status: show HTTP request headers and client IP.

Show the HTTP request headers and the client IP on the /status page.
This is for debugging request headers added by reverse proxies such as
Cloudflare and Nginx, and for making sure the client IP is correctly set
by the X-Forwarded-For header.
This commit is contained in:
evazion
2021-05-06 00:30:37 -05:00
parent ba5a2dcd79
commit e36fb6fee3
3 changed files with 26 additions and 1 deletions

View File

@@ -3,8 +3,16 @@ class ServerStatus
include ActiveModel::Serializers::JSON
include ActiveModel::Serializers::Xml
attr_reader :request
def initialize(request)
@request = request
end
def serializable_hash(options = {})
{
ip: request.remote_ip,
headers: http_headers,
status: {
hostname: hostname,
uptime: uptime,
@@ -29,6 +37,14 @@ class ServerStatus
end
concerning :InfoMethods do
def http_headers
headers = request.headers.env.select { |key| key.starts_with?("HTTP_") }
headers = headers.transform_keys { |key| key.delete_prefix("HTTP_").titleize.tr(" ", "-") }
headers = headers.except("Cookie")
headers = headers.reject { |k, v| v.blank? }
headers
end
def hostname
Socket.gethostname
end