This commit is contained in:
parent
3529e01f19
commit
7b9616f378
1 changed files with 0 additions and 98 deletions
|
@ -1,98 +0,0 @@
|
||||||
require "yaml"
|
|
||||||
|
|
||||||
class Config
|
|
||||||
include YAML::Serializable
|
|
||||||
|
|
||||||
# Colorize logs
|
|
||||||
property colorize_logs : Bool = true
|
|
||||||
# Where the uploaded files will be located
|
|
||||||
property files : String = "./files"
|
|
||||||
# Where the thumbnails will be located when they are successfully generated
|
|
||||||
property thumbnails : String = "./thumbnails"
|
|
||||||
# Generate thumbnails for OpenGraph compatible platforms like Chatterino
|
|
||||||
# Whatsapp, Facebook, Discord, etc.
|
|
||||||
property generateThumbnails : Bool = false
|
|
||||||
# Where the SQLITE3 database will be located
|
|
||||||
property db : String = "./db.sqlite3"
|
|
||||||
# Enable or disable the admin API
|
|
||||||
property adminEnabled : Bool = false
|
|
||||||
# The API key for admin routes. It's passed as a "X-Api-Key" header to the
|
|
||||||
# request
|
|
||||||
property adminApiKey : String? = ""
|
|
||||||
# Not implemented
|
|
||||||
property incrementalFileameLength : Bool = true
|
|
||||||
# Filename length
|
|
||||||
property fileameLength : Int32 = 3
|
|
||||||
# In MiB
|
|
||||||
property size_limit : Int16 = 512
|
|
||||||
# Port on which the uploader will bind
|
|
||||||
property port : Int32 = 8080
|
|
||||||
# IP address on which the uploader will bind
|
|
||||||
property host : String = "127.0.0.1"
|
|
||||||
# A file path where do you want to place a unix socket (THIS WILL DISABLE ACCESS
|
|
||||||
# BY IP ADDRESS)
|
|
||||||
property unix_socket : String?
|
|
||||||
# True if you want this program to block IP addresses coming from the Tor
|
|
||||||
# network
|
|
||||||
property blockTorAddresses : Bool? = false
|
|
||||||
# How often (in seconds) should this program download the exit nodes list
|
|
||||||
property torExitNodesCheck : Int32 = 3600
|
|
||||||
# Only https://check.torproject.org/exit-addresses is supported
|
|
||||||
property torExitNodesUrl : String = "https://check.torproject.org/exit-addresses"
|
|
||||||
# Where the file of the exit nodes will be located, can be placed anywhere
|
|
||||||
property torExitNodesFile : String = "./torexitnodes.txt"
|
|
||||||
# Message that will be displayed to the Tor user.
|
|
||||||
# It will be shown on the Frontend and shown in the error 401 when a user
|
|
||||||
# tries to upload a file using curl or any other tool
|
|
||||||
property torMessage : String? = "Tor is blocked!"
|
|
||||||
# How many files an IP address can upload to the server
|
|
||||||
property filesPerIP : Int32 = 32
|
|
||||||
# How often is the file limit per IP reset? (in seconds)
|
|
||||||
property rateLimitPeriod : Int32 = 600
|
|
||||||
# TODO: UNUSED CONSTANT
|
|
||||||
property rateLimitMessage : String = ""
|
|
||||||
# Delete the files after how many days?
|
|
||||||
property deleteFilesAfter : Int32 = 7
|
|
||||||
# How often should the check of old files be performed? (in seconds)
|
|
||||||
property deleteFilesCheck : Int32 = 1800
|
|
||||||
# The lenght of the delete key
|
|
||||||
property deleteKeyLength : Int32 = 4
|
|
||||||
property siteInfo : String = "xd"
|
|
||||||
# TODO: UNUSED CONSTANT
|
|
||||||
property siteWarning : String? = ""
|
|
||||||
# Log level
|
|
||||||
property log_level : LogLevel = LogLevel::Info
|
|
||||||
# Blocked extensions that are not allowed to be uploaded to the server
|
|
||||||
property blockedExtensions : Array(String) = [] of String
|
|
||||||
# A list of OpenGraph user agents. If the request contains one of those User
|
|
||||||
# agents when trying to retrieve a file from the server; the server will
|
|
||||||
# reply with an HTML with OpenGraph tags, pointing to the media thumbnail
|
|
||||||
# (if it was generated successfully) and the name of the file as title
|
|
||||||
property opengraphUseragents : Array(String) = [] of String
|
|
||||||
# Since this program detects the Host header of the client it can be used
|
|
||||||
# with multiple domains. You can display the domains in the frontend
|
|
||||||
# and in `/api/stats`
|
|
||||||
property alternativeDomains : Array(String) = [] of String
|
|
||||||
|
|
||||||
def self.load
|
|
||||||
config_file = "config/config.yml"
|
|
||||||
config_yaml = File.read(config_file)
|
|
||||||
config = Config.from_yaml(config_yaml)
|
|
||||||
check_config(config)
|
|
||||||
config
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.check_config(config : Config)
|
|
||||||
if config.fileameLength <= 0
|
|
||||||
puts "Config: fileameLength cannot be #{config.fileameLength}"
|
|
||||||
exit(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
if config.files.ends_with?('/')
|
|
||||||
config.files = config.files.chomp('/')
|
|
||||||
end
|
|
||||||
if config.thumbnails.ends_with?('/')
|
|
||||||
config.thumbnails = config.thumbnails.chomp('/')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Reference in a new issue