@ -28,7 +28,7 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
` ,
DisableAutoGenTag : true ,
RunE : func ( cmd * cobra . Command , args [ ] string ) error {
return runKey ( globalOptions, args )
return runKey ( cmd. Context ( ) , globalOptions, args )
} ,
}
@ -120,18 +120,18 @@ func getNewPassword(gopts GlobalOptions) (string, error) {
"enter password again: " )
}
func addKey ( gopts GlobalOptions , repo * repository . Repository ) error {
func addKey ( ctx context . Context , repo * repository . Repository , gopts GlobalOptions ) error {
pw , err := getNewPassword ( gopts )
if err != nil {
return err
}
id , err := repository . AddKey ( gopts. ctx, repo , pw , keyUsername , keyHostname , repo . Key ( ) )
id , err := repository . AddKey ( ctx, repo , pw , keyUsername , keyHostname , repo . Key ( ) )
if err != nil {
return errors . Fatalf ( "creating new key failed: %v\n" , err )
}
err = switchToNewKeyAndRemoveIfBroken ( gopts. ctx, repo , id , pw )
err = switchToNewKeyAndRemoveIfBroken ( ctx, repo , id , pw )
if err != nil {
return err
}
@ -156,25 +156,25 @@ func deleteKey(ctx context.Context, repo *repository.Repository, name string) er
return nil
}
func changePassword ( gopts GlobalOptions , repo * repository . Repository ) error {
func changePassword ( ctx context . Context , repo * repository . Repository , gopts GlobalOptions ) error {
pw , err := getNewPassword ( gopts )
if err != nil {
return err
}
id , err := repository . AddKey ( gopts. ctx, repo , pw , "" , "" , repo . Key ( ) )
id , err := repository . AddKey ( ctx, repo , pw , "" , "" , repo . Key ( ) )
if err != nil {
return errors . Fatalf ( "creating new key failed: %v\n" , err )
}
oldID := repo . KeyName ( )
err = switchToNewKeyAndRemoveIfBroken ( gopts. ctx, repo , id , pw )
err = switchToNewKeyAndRemoveIfBroken ( ctx, repo , id , pw )
if err != nil {
return err
}
h := restic . Handle { Type : restic . KeyFile , Name : oldID }
err = repo . Backend ( ) . Remove ( gopts. ctx, h )
err = repo . Backend ( ) . Remove ( ctx, h )
if err != nil {
return err
}
@ -197,22 +197,19 @@ func switchToNewKeyAndRemoveIfBroken(ctx context.Context, repo *repository.Repos
return nil
}
func runKey ( gopts GlobalOptions , args [ ] string ) error {
func runKey ( ctx context . Context , gopts GlobalOptions , args [ ] string ) error {
if len ( args ) < 1 || ( args [ 0 ] == "remove" && len ( args ) != 2 ) || ( args [ 0 ] != "remove" && len ( args ) != 1 ) {
return errors . Fatal ( "wrong number of arguments" )
}
ctx , cancel := context . WithCancel ( gopts . ctx )
defer cancel ( )
repo , err := OpenRepository ( gopts )
repo , err := OpenRepository ( ctx , gopts )
if err != nil {
return err
}
switch args [ 0 ] {
case "list" :
lock , err := lockRepo ( ctx , repo )
lock , ctx, err := lockRepo ( ctx , repo )
defer unlockRepo ( lock )
if err != nil {
return err
@ -220,15 +217,15 @@ func runKey(gopts GlobalOptions, args []string) error {
return listKeys ( ctx , repo , gopts )
case "add" :
lock , err := lockRepo ( ctx , repo )
lock , ctx, err := lockRepo ( ctx , repo )
defer unlockRepo ( lock )
if err != nil {
return err
}
return addKey ( gopts, repo )
return addKey ( ctx, repo , gopts )
case "remove" :
lock , err := lockRepoExclusive ( ctx , repo )
lock , ctx, err := lockRepoExclusive ( ctx , repo )
defer unlockRepo ( lock )
if err != nil {
return err
@ -239,15 +236,15 @@ func runKey(gopts GlobalOptions, args []string) error {
return err
}
return deleteKey ( gopts. ctx, repo , id )
return deleteKey ( ctx, repo , id )
case "passwd" :
lock , err := lockRepoExclusive ( ctx , repo )
lock , ctx, err := lockRepoExclusive ( ctx , repo )
defer unlockRepo ( lock )
if err != nil {
return err
}
return changePassword ( gopts, repo )
return changePassword ( ctx, repo , gopts )
}
return nil