66 lines
2 KiB
Crystal
66 lines
2 KiB
Crystal
require "http/client"
|
|
|
|
module Routing::Misc
|
|
extend self
|
|
|
|
struct Stats
|
|
include JSON::Serializable
|
|
|
|
@[JSON::Field(key: "filesHosted")]
|
|
property files_hosted : Int32
|
|
@[JSON::Field(key: "maxUploadSize")]
|
|
property max_upload_size : String
|
|
@[JSON::Field(key: "thumbnailGeneration")]
|
|
property thumbnail_generation : Bool
|
|
@[JSON::Field(key: "filenameLength")]
|
|
property filename_length : Int32
|
|
@[JSON::Field(key: "alternativeDomains")]
|
|
property alternative_domains : Array(String)
|
|
|
|
def initialize
|
|
@files_hosted = SQL.query_one("SELECT COUNT (filename) FROM files", as: Int32)
|
|
@max_upload_size = CONFIG.size_limit.to_s
|
|
@thumbnail_generation = CONFIG.generate_thumbnails
|
|
@filename_length = CONFIG.filename_length
|
|
@alternative_domains = CONFIG.alternative_domains
|
|
end
|
|
end
|
|
|
|
def stats(env)
|
|
env.response.content_type = "application/json"
|
|
Stats.new.to_json
|
|
end
|
|
|
|
def sharex_config(env)
|
|
host = env.request.headers["X-Forwarded-Host"]? || env.request.headers["Host"]?
|
|
scheme = env.request.headers["X-Forwarded-Proto"]? || "http"
|
|
env.response.content_type = "application/json"
|
|
# So it's able to download the file instead of displaying it
|
|
env.response.headers["Content-Disposition"] = "attachment; filename=\"#{host}.sxcu\""
|
|
|
|
return %({
|
|
"Version": "14.0.1",
|
|
"DestinationType": "ImageUploader, FileUploader",
|
|
"RequestMethod": "POST",
|
|
"RequestURL": "#{scheme}://#{host}/upload",
|
|
"Body": "MultipartFormData",
|
|
"FileFormName": "file",
|
|
"URL": "{json:link}",
|
|
"DeletionURL": "{json:deleteLink}",
|
|
"ErrorMessage": "{json:error}"
|
|
})
|
|
end
|
|
|
|
def chatterino_config(env)
|
|
host = env.request.headers["X-Forwarded-Host"]? || env.request.headers["Host"]?
|
|
scheme = env.request.headers["X-Forwarded-Proto"]? || "http"
|
|
env.response.content_type = "application/json"
|
|
|
|
return %({
|
|
"requestUrl": "#{scheme}://#{host}/upload",
|
|
formField": "data",
|
|
imageLink": "{link}",
|
|
deleteLink": "{deleteLink}"
|
|
})
|
|
end
|
|
end
|