diff --git a/main.go b/main.go index bd9cf28..c687df0 100644 --- a/main.go +++ b/main.go @@ -31,39 +31,46 @@ func GetPicsArray() []string { return filesNames } -func GetRandImg(conf Config) string { - - var picsArray []string - - if conf.UseS3 == true { - picsArray = GetObjectsFilenames(conf) - } else { - picsArray = GetPicsArray() - } - +func (conf *ConfHandler) GetRandImgS3() string { + picsArray := GetObjectsFilenames(conf.ConfigHandler, conf.minioClient) return picsArray[rand.Intn(len(picsArray))] } -func (conf *ConfHandler) ReturnPicFilename(w http.ResponseWriter, req *http.Request) { - var picFilename io.Reader = strings.NewReader(GetRandImg(conf.ConfigHandler)) +func (conf *ConfHandler) ReturnObjectName(w http.ResponseWriter, req *http.Request) { + var picFilename io.Reader = strings.NewReader(conf.GetRandImgS3()) log.Println("Картинка отдана") io.Copy(w, picFilename) } -/*func ReturnPic(w http.ResponseWriter, req *http.Request) { - picture, _ := os.Open(fmt.Sprintf("images/%v", GetRandImg())) - var pictureReader io.Reader = picture - io.Copy(w, pictureReader) - log.Println("Картинка отдана") -}*/ - -func (conf *ConfHandler) ReturnHTML(w http.ResponseWriter, req *http.Request) { +func (conf *ConfHandler) ReturnHTMLS3(w http.ResponseWriter, req *http.Request) { htmlOpen, err := template.ParseFiles("dist/index.html") if err != nil { log.Println(err.Error()) return } - image := GetRandImg(conf.ConfigHandler) + image := conf.GetRandImgS3() + fmt.Println(image) + htmlOpen.Execute(w, image) +} + +func GetRandImg() string { + picsArray := GetPicsArray() + return picsArray[rand.Intn(len(picsArray))] +} + +func ReturnPicFilename(w http.ResponseWriter, req *http.Request) { + var picFilename io.Reader = strings.NewReader(GetRandImg()) + log.Println("Картинка отдана") + io.Copy(w, picFilename) +} + +func ReturnHTML(w http.ResponseWriter, req *http.Request) { + htmlOpen, err := template.ParseFiles("dist/index.html") + if err != nil { + log.Println(err.Error()) + return + } + image := GetRandImg() fmt.Println(image) htmlOpen.Execute(w, image) } @@ -78,6 +85,7 @@ type Config struct { type ConfHandler struct { ConfigHandler Config + minioClient minio.Client } func InitConf(filename string) Config { @@ -91,15 +99,7 @@ func InitConf(filename string) Config { return conf } -func GetObjectsFilenames(conf Config) []string { - minioClient, err := minio.New(conf.Address, &minio.Options{ - Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""), - Secure: true, - }) - - if err != nil { - log.Fatalln(err) - } +func GetObjectsFilenames(conf Config, minioClient minio.Client) []string { ctx, cancel := context.WithCancel(context.Background()) @@ -122,13 +122,29 @@ func GetObjectsFilenames(conf Config) []string { func main() { log.Println("Server Start") conf := InitConf("config.yaml") - confHandler := ConfHandler{ConfigHandler: conf} imagesDir := http.FileServer(http.Dir("images")) staticDir := http.FileServer(http.Dir("dist/assets")) http.Handle("/images/", http.StripPrefix("/images/", imagesDir)) http.Handle("/assets/", http.StripPrefix("/assets/", staticDir)) - http.HandleFunc("/rand", confHandler.ReturnPicFilename) - http.HandleFunc("/", confHandler.ReturnHTML) + if !conf.UseS3 { + http.HandleFunc("/rand", ReturnPicFilename) + http.HandleFunc("/", ReturnHTML) + } else { + var confHandler ConfHandler + minioClient, err := minio.New(conf.Address, &minio.Options{ + Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""), + Secure: true, + }) + + if err != nil { + log.Fatalln(err) + } + confHandler.minioClient = *minioClient + confHandler.ConfigHandler = conf + http.HandleFunc("/rand", confHandler.ReturnObjectName) + http.HandleFunc("/", confHandler.ReturnHTMLS3) + } + http.ListenAndServe(":3666", nil) }