From d240344db66a93e1042e0529c0fbcec45d2f4408 Mon Sep 17 00:00:00 2001 From: rot1024 Date: Sat, 14 Jan 2023 02:57:01 +0900 Subject: [PATCH] fix(server): public plugin was deleted on installing privte plugin that has same name --- server/internal/infrastructure/gcs/file.go | 6 ++++++ server/internal/usecase/interactor/plugin_upload.go | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/server/internal/infrastructure/gcs/file.go b/server/internal/infrastructure/gcs/file.go index c219ea3acf..28d0fe8923 100644 --- a/server/internal/infrastructure/gcs/file.go +++ b/server/internal/infrastructure/gcs/file.go @@ -90,6 +90,8 @@ func (f *fileRepo) UploadAsset(ctx context.Context, file *file.File) (*url.URL, } func (f *fileRepo) RemoveAsset(ctx context.Context, u *url.URL) error { + log.Infof("gcs: asset deleted: %s", u) + sn := getGCSObjectNameFromURL(f.base, u) if sn == "" { return gateway.ErrInvalidFile @@ -117,6 +119,8 @@ func (f *fileRepo) UploadPluginFile(ctx context.Context, pid id.PluginID, file * } func (f *fileRepo) RemovePlugin(ctx context.Context, pid id.PluginID) error { + log.Infof("gcs: plugin deleted: %s", pid) + return f.deleteAll(ctx, path.Join(gcsPluginBasePath, pid.String())) } @@ -148,6 +152,8 @@ func (f *fileRepo) MoveBuiltScene(ctx context.Context, oldName, name string) err } func (f *fileRepo) RemoveBuiltScene(ctx context.Context, name string) error { + log.Infof("gcs: built scene deleted: %s", name) + sn := sanitize.Path(name + ".json") if sn == "" { return gateway.ErrInvalidFile diff --git a/server/internal/usecase/interactor/plugin_upload.go b/server/internal/usecase/interactor/plugin_upload.go index 053098dfda..ad611e5e51 100644 --- a/server/internal/usecase/interactor/plugin_upload.go +++ b/server/internal/usecase/interactor/plugin_upload.go @@ -95,6 +95,12 @@ func (i *Plugin) upload(ctx context.Context, p *pluginpack.Package, sid id.Scene var oldPManifest *manifest.Manifest newpid := p.Manifest.Plugin.ID() oldpid := s.Plugins().PluginByName(newpid.Name()).PluginRef() + + // if the old plugin is public, it should not be deleted + if oldpid != nil && oldpid.Scene() == nil { + return nil, nil, interfaces.ErrPluginAlreadyInstalled + } + if oldpid != nil { oldPlugin, err := i.pluginRepo.FindByID(ctx, *oldpid) if err != nil {