diff --git a/services/panel.go b/services/panel.go new file mode 100644 index 0000000..c675a4c --- /dev/null +++ b/services/panel.go @@ -0,0 +1,273 @@ +package services + +import ( + "archive/zip" + "bytes" + "fmt" + "io" + "io/ioutil" + "netina/database" + "netina/models" + "os" + "path/filepath" + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + "github.com/labstack/echo/v4" +) + +// ExtractZip extracts a zip file to a specified destination directory +func extractZip(zipPath string, destDir string) ([]string, error) { + r, err := zip.OpenReader(zipPath) + if err != nil { + return nil, err + } + defer r.Close() + + var extractedFiles []string + for _, f := range r.File { + fPath := filepath.Join(destDir, f.Name) + if !strings.HasPrefix(fPath, filepath.Clean(destDir)+string(os.PathSeparator)) { + return nil, fmt.Errorf("illegal file path: %s", fPath) + } + + extractedFiles = append(extractedFiles, fPath) + + if f.FileInfo().IsDir() { + os.MkdirAll(fPath, os.ModePerm) + continue + } + + if err := os.MkdirAll(filepath.Dir(fPath), os.ModePerm); err != nil { + return nil, err + } + + dstFile, err := os.OpenFile(fPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return nil, err + } + defer dstFile.Close() + + srcFile, err := f.Open() + if err != nil { + return nil, err + } + defer srcFile.Close() + + _, err = io.Copy(dstFile, srcFile) + if err != nil { + return nil, err + } + } + return extractedFiles, nil +} + + +func UpdatePanel(c echo.Context) error{ + + db := database.Db() + var stores []models.Store + + if err := db.Where("is_removed = ?" , false).Find(&stores).Error;err != nil { + return err + } + + var sess []session.Session + + for _ , store := range stores { + ses , err := session.NewSession(&aws.Config{ + Credentials: credentials.NewStaticCredentials(store.StorageApiKey , store.StorageSecret , ""), + Region: aws.String("ir-thr-at1"), + Endpoint: aws.String(store.StorageAddress), + }) + if err != nil { + return err + } + sess = append(sess, *ses) + } + + var svcs []s3.S3 + + for _ , i := range sess{ + svc := s3.New(&i) + svcs = append(svcs, *svc) + } + + + + + for i:=0;i