diff --git a/src/cli/flags/repo.go b/src/cli/flags/repo.go index 172049360..efac65b0c 100644 --- a/src/cli/flags/repo.go +++ b/src/cli/flags/repo.go @@ -67,7 +67,7 @@ func AddCorsoUpdatePassphraseFlags(cmd *cobra.Command) { fs.StringVar(&UpdateCorsoPhasephraseFV, UpdateCorsoPassphraseFN, "", - "update kopia passphrase for repo") + "update Corso passphrase for repo") } // --------------------------------------------------------------------------- diff --git a/src/cli/repo/repo.go b/src/cli/repo/repo.go index 0e5d99ba9..53952da0c 100644 --- a/src/cli/repo/repo.go +++ b/src/cli/repo/repo.go @@ -182,7 +182,7 @@ func updateCmd() *cobra.Command { return &cobra.Command{ Use: updateCommand, Short: "Update a repository.", - Long: `Update a existing repository to store your backups.`, + Long: `Update repository configuration and behavior.`, RunE: handleUpdateCmd, Args: cobra.NoArgs, } diff --git a/src/cli/repo/s3.go b/src/cli/repo/s3.go index cc0f4b97b..25cbd7079 100644 --- a/src/cli/repo/s3.go +++ b/src/cli/repo/s3.go @@ -33,7 +33,6 @@ func addS3Commands(cmd *cobra.Command) *cobra.Command { update := s3UpdateCmd() flags.AddCorsoUpdatePassphraseFlags(update) c, _ = utils.AddCommand(cmd, update) - } c.Use = c.Use + " " + s3ProviderCommandUseSuffix @@ -266,6 +265,7 @@ func s3UpdateCmd() *cobra.Command { // currently just updating Kopia password func updateS3Cmd(cmd *cobra.Command, args []string) error { ctx := cmd.Context() + cfg, err := config.GetConfigRepoDetails( ctx, storage.ProviderS3, @@ -297,5 +297,7 @@ func updateS3Cmd(cmd *cobra.Command, args []string) error { return Only(ctx, clues.Wrap(err, "Failed to update s3")) } + Infof(ctx, "Updated repo password.") + return nil } diff --git a/src/internal/kopia/conn.go b/src/internal/kopia/conn.go index 001fd3f0f..f1c0f82df 100644 --- a/src/internal/kopia/conn.go +++ b/src/internal/kopia/conn.go @@ -578,3 +578,17 @@ func (w *conn) LoadSnapshot( func (w *conn) SnapshotRoot(man *snapshot.Manifest) (fs.Entry, error) { return snapshotfs.SnapshotRoot(w.Repository, man) } + +func (w *conn) UpdatePassword(ctx context.Context, password string, opts repository.Options) error { + kopiaRef := NewConn(w.storage) + if err := kopiaRef.Connect(ctx, opts); err != nil { + return clues.Wrap(err, "connecting kopia client") + } + + defer kopiaRef.Close(ctx) + + repository := kopiaRef.Repository.(repo.DirectRepository) + err := repository.FormatManager().ChangePassword(ctx, password) + + return errors.Wrap(err, "unable to update password") +} diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 78fad37df..01ba8bdd9 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -6,7 +6,6 @@ import ( "github.com/alcionai/clues" "github.com/google/uuid" - "github.com/kopia/kopia/repo" "github.com/kopia/kopia/repo/manifest" "github.com/pkg/errors" @@ -129,7 +128,7 @@ func New( s storage.Storage, opts control.Options, configFileRepoID string, -) (repo *repository, err error) { +) (singleRepo *repository, err error) { ctx = clues.Add( ctx, "acct_provider", acct.Provider.String(), @@ -295,15 +294,12 @@ func (r *repository) UpdatePassword(ctx context.Context, password string) (err e return clues.Wrap(err, "connecting kopia client") } - defer kopiaRef.Close(ctx) - - repository := kopiaRef.Repository.(repo.DirectRepository) - err = repository.FormatManager().ChangePassword(ctx, password) - - if err != nil { - return errors.Wrap(err, "unable to update password") + if err := kopiaRef.UpdatePassword(ctx, password, r.Opts.Repo); err != nil { + return clues.Wrap(err, "updating on kopia") } + defer kopiaRef.Close(ctx) + r.Bus.Event(ctx, events.RepoUpdate, nil) return nil