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  }