github.com/GregorioDiStefano/go-file-storage@v0.0.0-20161001105139-5707ab351525/file-storage.go (about) 1 package main 2 3 import ( 4 "os" 5 "time" 6 7 redis "gopkg.in/redis.v3" 8 9 "github.com/GregorioDiStefano/go-file-storage/controllers" 10 "github.com/GregorioDiStefano/go-file-storage/log" 11 "github.com/GregorioDiStefano/go-file-storage/models" 12 "github.com/GregorioDiStefano/go-file-storage/utils" 13 "github.com/etcinit/speedbump" 14 "github.com/etcinit/speedbump/ginbump" 15 "github.com/gin-gonic/gin" 16 ) 17 18 func init() { 19 log.SetLevel(log.DebugLevel) 20 log.Debug("Init running..") 21 22 configFile := os.Getenv("CONFIG_FILE") 23 utils.LoadConfig(configFile) 24 25 models.DB.Setup(utils.Config.GetInt("key_size")) 26 models.DB.OpenDatabaseFile() 27 } 28 29 func main() { 30 defer models.DB.CloseDatabaseFile() 31 32 router := gin.Default() 33 router.LoadHTMLGlob("templates/*") 34 log.Debug("Starting main...") 35 36 go deleteUnusedFile() 37 38 client := redis.NewClient(&redis.Options{ 39 Addr: "localhost:6379", 40 Password: "", 41 DB: 0, 42 }) 43 44 go func() { 45 if client.Ping().Err() != nil { 46 log.Error("Communication with Redis server failed.") 47 } 48 time.Sleep(5 * time.Minute) 49 }() 50 51 downloader := controller.NewDownloader(utils.Config.GetString("CAPTCHA_SECRET"), utils.Config.GetInt("max_downloads")) 52 uploader := controller.NewUploader(utils.Config.GetString("domain"), utils.Config.GetInt64("max_file_size"), utils.Config.GetInt("delete_key_size"), utils.Config.GetString("aws.bucket"), utils.Config.GetString("aws.region")) 53 deleter := controller.NewDeleter(*uploader) 54 55 router.GET("/", controller.IndexPage) 56 router.GET("/:key/:filename", downloader.DownloadFile) 57 router.PUT("/:filename", ginbump.RateLimit(client, speedbump.PerHourHasher{}, 5), uploader.UploadFile) 58 router.DELETE("/:key/:delete_key/:filename", ginbump.RateLimit(client, speedbump.PerHourHasher{}, 5), deleter.DeleteFile) 59 60 router.Run(utils.Config.GetString("port")) 61 }