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