Compare commits
2 Commits
fde1dd14b5
...
86ba2e6c1a
Author | SHA1 | Date | |
---|---|---|---|
86ba2e6c1a
|
|||
3a78bf5d03
|
66
app.rb
66
app.rb
@ -375,6 +375,12 @@ get "/cookies" do
|
||||
jsonify response.headers
|
||||
end
|
||||
|
||||
get "/config", provides: "json" do
|
||||
pretty = params.key? :pretty
|
||||
|
||||
jsonify config.as_json, pretty:
|
||||
end
|
||||
|
||||
get "/_cat/headers" do
|
||||
stream do |out|
|
||||
req_headers.each do |k, v|
|
||||
@ -399,6 +405,21 @@ get "/_cat/cookies" do
|
||||
end
|
||||
end
|
||||
|
||||
get "/_cat/config" do
|
||||
stream do |out|
|
||||
config.instance_variables.each do |k|
|
||||
k = k.to_s.delete_prefix "@"
|
||||
begin
|
||||
v = config.send(k)
|
||||
rescue NoMethodError
|
||||
next
|
||||
end
|
||||
|
||||
out << "#{k}(#{v.to_s.length})=#{v}\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
route :delete, :get, :patch, :post, :put, "/status/:code" do
|
||||
# hello
|
||||
code = Integer(params[:code])
|
||||
@ -425,3 +446,48 @@ route :delete, :get, :patch, :post, :put, "/auth/basic", provides: "json" do
|
||||
|
||||
jsonify({authenticated: true, user: @auth.username}, pretty:)
|
||||
end
|
||||
|
||||
def human_size_to_bytes(size)
|
||||
units = %i[b kb mb gb tb pb eb zb yb rb qb]
|
||||
|
||||
number, unit = size.split(/(?<=\d)(?=[A-Za-z])/)
|
||||
|
||||
raise ArgumentError, "the unit is not recognized" if unit.nil?
|
||||
|
||||
number = Float(number)
|
||||
unit = unit.downcase.to_sym
|
||||
|
||||
exponent = units.find_index(unit)
|
||||
|
||||
number *= (1024**exponent)
|
||||
Integer(number.ceil)
|
||||
end
|
||||
|
||||
MAX_DOWNLOAD_SIZE = "1GB"
|
||||
|
||||
get "/bytes/:size" do
|
||||
size = params[:size]
|
||||
n = [human_size_to_bytes(size), human_size_to_bytes(MAX_DOWNLOAD_SIZE)].min
|
||||
|
||||
headers["content-type"] = "application/octet-stream"
|
||||
headers["content-length"] = n
|
||||
|
||||
headers["content-disposition"] = "attachment; filename=\"#{params[:f]}\"" if params.key? :f
|
||||
|
||||
def generate_bytes(number, byte = "\x00", block_size = 4096)
|
||||
raise ArgumentError, "'byte' must be 1 byte" unless byte.b.length == 1
|
||||
|
||||
bytes_written = 0
|
||||
block = byte * block_size
|
||||
Enumerator.new do |g|
|
||||
while bytes_written < number
|
||||
remaining_bytes = number - bytes_written
|
||||
bytes_to_write = [block_size, remaining_bytes].min
|
||||
g.yield block[0, bytes_to_write]
|
||||
bytes_written += bytes_to_write
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
generate_bytes(Integer(n))
|
||||
end
|
||||
|
Reference in New Issue
Block a user