MEGAROR upload ----------------- Un uploader fatto apposta per ondarossa Cose principali: * pesca l'utente da degli header HTTP (sì, il server proxy deve fare le cose giuste) * autorizza delle cose in base a dei file di permessi semplici. Esempio /megaror/spot -> tizio@ondarossa.info, *.ondarossa.net, tipa@ondarossa.info * associa path tipo /megaror/redattor@/boyska a https://megaror.ondarossa.info/redattor@/boyska. Ovvero gli dai un view-url-base e un view-path-base e lui compone le cose giuste. * fa graceful degradation così non killa i trasferimenti in corso * logga decentemente * (da approfondire) scarica da URL, ma con possibilità di filtrare quali url sì e quali no (ie: solo archive.org) * (da approfondire) manda mail quando un file viene caricato Configurazione. Un file YAML in cui l'unità di base è lo "share". Ogni share ha ``` type Share struct { Name OBBLIGATORIO Dir OBBLIGATORIA Description Authorized lista di glob di utenti autorizzati. SizeLimit esempio 20M ExtList lista di estensioni esempio ogg,oga,mp3,aac } ``` ``` type Global struct { Excluded []Glob ViewURLBase string ViewPathBase string } ``` Sezione globale: si possono escludere alcune persone globalmente dal servizio. Esempio: molesto@ondarossa.info, worm@ondarossa.info. Se un utente è bloccato globalmente ma è dentro l'Authorized di un certo share, è autorizzato. ``` type UserHome { PathPrefix string Create bool } func (*uh UserHome) GetShare(username string) (Share) ``` Share per-utente: si può creare una share "dinamica" per ogni utente (home) tipo /megaror/Redazione/redattor@/%h Se c'è una share con nome uguale a home_tizio@ondarossa.info si possono cambiare le impostazioni per quella home. Ovvero una share statica sovrascrive una share dinamica. Ad esempio per dire che home_leditanellapresa@ondarossa.info è scrivibile anche da nerd@ondarossa.info si può creare la share esplicitamente e mettere tutti i desiderati (incluso il "proprietario", non c'è automatismo) dentro Authorized Un utente bloccato globalmente non ha la home, a meno che la sezione non sia creata manualmente e l'utente venga autorizzato. ``` type URLFetcher struct { Enabled bool AllowedURLs []Glob SizeLimit ??? } ```