cmd/megauploader | ||
res | ||
.gitignore | ||
conf.go | ||
conf_test.go | ||
confload.go | ||
doc.go | ||
fileutils.go | ||
fileutils_test.go | ||
http.go | ||
http_test.go | ||
httpui.go | ||
README.md |
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 ???
}