mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-09-27 03:36:09 +08:00

* feat: add syncthing for clone mode --------- Co-authored-by: wencaiwulue <895703375@qq.com>
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package syncthing
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"embed"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/wencaiwulue/kubevpn/v2/pkg/config"
|
|
)
|
|
|
|
//go:embed gui.zip
|
|
var assetsZip embed.FS
|
|
|
|
func MakeSureGui() error {
|
|
return ExtractSyncthingGUIZipToDir(assetsZip, "gui.zip", config.GetSyncthingPath())
|
|
}
|
|
|
|
func ExtractSyncthingGUIZipToDir(fs embed.FS, zipPath, targetDir string) error {
|
|
zipData, err := fs.Open(zipPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer zipData.Close()
|
|
|
|
all, err := io.ReadAll(zipData)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
zipReader, err := zip.NewReader(bytes.NewReader(all), int64(len(all)))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, file := range zipReader.File {
|
|
filePath := filepath.Join(targetDir, file.Name)
|
|
|
|
if file.FileInfo().IsDir() {
|
|
if err = os.MkdirAll(filePath, file.Mode()); err != nil {
|
|
return err
|
|
}
|
|
continue
|
|
}
|
|
|
|
if err = os.MkdirAll(filepath.Dir(filePath), 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
var fileWriter *os.File
|
|
fileWriter, err = os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var fileReader io.ReadCloser
|
|
fileReader, err = file.Open()
|
|
if err != nil {
|
|
_ = fileWriter.Close()
|
|
return err
|
|
}
|
|
|
|
_, err = io.Copy(fileWriter, fileReader)
|
|
_ = fileReader.Close()
|
|
_ = fileWriter.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|