2 Commits

Author SHA1 Message Date
86ba2e6c1a add route to dump bytes
Some checks failed
Gitea Actions Demo / lint (push) Failing after 2m11s
Gitea Actions Demo / test (push) Has been skipped
Gitea Actions Demo / release-image (push) Has been skipped
2025-03-09 15:36:49 -05:00
3a78bf5d03 add routes to dump configuration 2025-03-09 15:36:07 -05:00

66
app.rb
View File

@ -375,6 +375,12 @@ get "/cookies" do
jsonify response.headers jsonify response.headers
end end
get "/config", provides: "json" do
pretty = params.key? :pretty
jsonify config.as_json, pretty:
end
get "/_cat/headers" do get "/_cat/headers" do
stream do |out| stream do |out|
req_headers.each do |k, v| req_headers.each do |k, v|
@ -399,6 +405,21 @@ get "/_cat/cookies" do
end end
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 route :delete, :get, :patch, :post, :put, "/status/:code" do
# hello # hello
code = Integer(params[:code]) 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:) jsonify({authenticated: true, user: @auth.username}, pretty:)
end 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