sapo-videos/main.rb
2023-07-28 12:00:41 +01:00

74 lines
1.5 KiB
Ruby

# SPDX-License-Identifier: AGPL-3.0-only
# SPDX-FileCopyrightText: 2023 Hugo Peixoto <hugo.peixoto@gmail.com>
require 'sinatra'
require './database.rb'
require './models.rb'
def h(bytes)
if bytes < 2**10
"#{bytes} bytes"
elsif bytes < 2**20
"%.2f KiB" % (1.0 * bytes / 2**10)
elsif bytes < 2**30
"%.2f MiB" % (1.0 * bytes / 2**20)
elsif bytes < 2**40
"%.2f GiB" % (1.0 * bytes / 2**30)
else
"%.2f TiB" % (1.0 * bytes / 2**40)
end
end
set :public_folder, __dir__ + '/public'
get '/' do
downloads = ActiveRecord::Base.connection.execute("
SELECT
COUNT(1) AS total,
SUM(size) AS bytes
FROM (select size from downloads group by video_id) as x;
")[0]
stats = { downloads: downloads }
ERB
.new(File.read("index.html.erb"), trim_mode: "<>-")
.result_with_hash(stats: stats)
end
get '/videos.json' do
content_type 'application/json'
amount = params['amount'].to_i
if amount > 100_000
{ error: "greedy" }.to_json
else
{ videos: Video.order("RANDOM()").limit(amount).pluck(:randname) }.to_json
end
end
post '/video' do
content_type 'application/json'
data = JSON.parse(request.body.read)
Download.create!(
video: Video.find_by!(randname: data["video_id"]),
size: data["size"],
sha256: data["sha256"],
email: data["email"],
)
{ status: 'ok' }.to_json
end
get '/config.json' do
content_type 'application/json'
{
videos_url: "https://sapo.pxto.pt/videos.json",
upload_url: "https://sapo.pxto.pt/video",
max_amount: 100_000,
}.to_json
end