From 005fb8e7dc2ba40e8fca968284ff0b5c378dce7d Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Tue, 4 Mar 2025 23:22:30 +0500 Subject: [PATCH] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BD=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 86 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/main.go b/main.go index 5b89b72..95ebad3 100644 --- a/main.go +++ b/main.go @@ -16,6 +16,24 @@ import ( "gopkg.in/yaml.v3" ) +type ImageProvider interface { + GetImage() string +} + +type LocalProvider struct{} + +type S3Provider struct { + confHundler ConfHandler +} + +func (p LocalProvider) GetImage() string { + return GetRandImg() +} + +func (p S3Provider) GetImage() string { + return p.confHundler.GetRandImgS3() +} + func GetPicsArray() []string { files, err := os.ReadDir("images") if err != nil { @@ -37,23 +55,6 @@ func (conf *ConfHandler) GetRandImgS3() string { return picsArray[rand.Intn(len(picsArray))] } -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 (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 := conf.GetRandImgS3() - log.Println(image) - htmlOpen.Execute(w, image) -} - func GetRandImg() string { picsArray := GetPicsArray() if len(picsArray) == 0 { @@ -62,23 +63,25 @@ func GetRandImg() string { 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 ReturnPicFilename(provider ImageProvider) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + image := provider.GetImage() + io.Copy(w, strings.NewReader(image)) + log.Println("Картинка отдана") + } } -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() - log.Println(image) - if err := htmlOpen.Execute(w, image); err != nil { - log.Printf("Ошибка рендеринга HTML: %v", err) - http.Error(w, "Internal Server Error", http.StatusInternalServerError) +func ReturnHTML(provider ImageProvider) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + htmlOpen, err := template.ParseFiles("dist/index.html") + if err != nil { + log.Println(err.Error()) + return + } + image := provider.GetImage() + if err := htmlOpen.Execute(w, image); err != nil { + log.Printf("Ошибка рендеринга: %v", err) + } } } @@ -135,11 +138,11 @@ func main() { http.Handle("/images/", http.StripPrefix("/images/", imagesDir)) http.Handle("/assets/", http.StripPrefix("/assets/", staticDir)) + var provider ImageProvider + if !conf.UseS3 { - http.HandleFunc("/rand", ReturnPicFilename) - http.HandleFunc("/", ReturnHTML) + provider = LocalProvider{} } else { - var confHandler ConfHandler minioClient, err := minio.New(conf.Address, &minio.Options{ Creds: credentials.NewStaticV4(conf.AccessKey, conf.SecretKey, ""), Secure: true, @@ -148,11 +151,14 @@ func main() { if err != nil { log.Fatalln(err) } - confHandler.minioClient = minioClient - confHandler.ConfigHandler = conf - http.HandleFunc("/rand", confHandler.ReturnObjectName) - http.HandleFunc("/", confHandler.ReturnHTMLS3) + provider = S3Provider{ + confHundler: ConfHandler{ + ConfigHandler: conf, + minioClient: minioClient, + }, + } } - + http.HandleFunc("/rand", ReturnPicFilename(provider)) + http.HandleFunc("/", ReturnHTML(provider)) http.ListenAndServe(":3666", nil) }