aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Richey <joerichey94@gmail.com>2017-10-17 10:34:54 -0700
committerJoseph Richey <joerichey94@gmail.com>2017-10-19 02:22:27 -0700
commit36b313c802f9a8d23f2ad8ce5a59aa05f5925a2f (patch)
tree8ac0e740a892843de7f1ad25a06ec2e28ebc44d3
parentd82fd8b6c15104e6970ab4f2d1abe680fdb95203 (diff)
Destroy refactor
-rw-r--r--cmd/fscrypt/fscrypt.go88
1 files changed, 86 insertions, 2 deletions
diff --git a/cmd/fscrypt/fscrypt.go b/cmd/fscrypt/fscrypt.go
index 4348567..63b2cbc 100644
--- a/cmd/fscrypt/fscrypt.go
+++ b/cmd/fscrypt/fscrypt.go
@@ -68,8 +68,7 @@ var fscryptCommand = cmd.Command{
cmd.VersionUsage,
},
SubCommands: []*cmd.Command{setupCommand, encryptCommand, unlockCommand,
- purgeCommand, statusCommand, metadataCommand, cmd.VersionCommand},
- Flags: baseFlags,
+ purgeCommand, statusCommand, metadataCommand, cmd.VersionCommand}, Flags: baseFlags,
ManPage: &cmd.ManPage{Name: "fscrypt", Section: 8},
}
@@ -221,6 +220,7 @@ var statusCommand = &cmd.Command{
Name: "status",
Title: "get the status of the system or a path",
UsageLines: []string{"", usedMountpointArg.String(), encryptedPathArg.String()},
+ Arguments: []*cmd.Argument{usedMountpointArg, encryptedPathArg},
Flags: []cmd.Flag{cmd.VerboseFlag, cmd.HelpFlag},
ManPage: &cmd.ManPage{Name: "fscrypt-status", Section: 8},
Action: statusAction,
@@ -361,3 +361,87 @@ func createPolicyAction(c *cmd.Context) error {
policy.Descriptor(), ctx.Mount.Path)
return nil
}
+
+var destroyCommand = &cmd.Command{
+ Name: "destroy",
+ Title: "directly delete an existing protector or policy",
+ UsageLines: []string{
+ fmt.Sprintf("%s [%s]", protectorFlag, cmd.ForceFlag),
+ fmt.Sprintf("%s [%s]", policyFlag, cmd.ForceFlag),
+ fmt.Sprintf("%s [%s]", usedMountpointArg, cmd.ForceFlag),
+ },
+ Arguments: []*cmd.Argument{usedMountpointArg},
+ InheritFlags: true,
+ Flags: []cmd.Flag{cmd.ForceFlag},
+ Action: destroyAction,
+}
+
+func destoryAction(c *cmd.Context) error {
+ switch {
+ case protectorFlag.Value != "":
+ if len(c.Args) != 0 {
+ break
+ }
+ // Case (1) - protector destroy
+ protector, err := getProtectorFromFlag(protectorFlag.Value, nil)
+ if err != nil {
+ return newExitError(c, err)
+ }
+
+ prompt := fmt.Sprintf("Destroy protector %s on %q?",
+ protector.Descriptor(), protector.Context.Mount.Path)
+ warning := "All files protected only with this protector will be lost!!"
+ if err := askConfirmation(prompt, false, warning); err != nil {
+ return newExitError(c, err)
+ }
+ if err := protector.Destroy(); err != nil {
+ return newExitError(c, err)
+ }
+
+ fmt.Fprintf(c.App.Writer, "Protector %s deleted from filesystem %q.\n",
+ protector.Descriptor(), protector.Context.Mount.Path)
+ case policyFlag.Value != "":
+ if len(c.Args) != 0 {
+ break
+ }
+ // Case (2) - policy destroy
+ policy, err := getPolicyFromFlag(policyFlag.Value, nil)
+ if err != nil {
+ return newExitError(c, err)
+ }
+
+ prompt := fmt.Sprintf("Destroy policy %s on %q?",
+ policy.Descriptor(), policy.Context.Mount.Path)
+ warning := "All files using this policy will be lost!!"
+ if err := askConfirmation(prompt, false, warning); err != nil {
+ return newExitError(c, err)
+ }
+ if err := policy.Destroy(); err != nil {
+ return newExitError(c, err)
+ }
+
+ fmt.Fprintf(c.App.Writer, "Policy %s deleted from filesystem %q.\n",
+ policy.Descriptor(), policy.Context.Mount.Path)
+ case len(c.Args) == 1:
+ // Case (3) - mountpoint destroy
+ ctx, err := actions.NewContextFromMountpoint(c.Args[0], nil)
+ if err != nil {
+ return err
+ }
+
+ prompt := fmt.Sprintf("Destroy all the metadata on %q?", ctx.Mount.Path)
+ warning := "All the encrypted files on this filesystem will be lost!"
+ if err := cmd.AskConfirmation(prompt, warning, false); err != nil {
+ return err
+ }
+ if err := ctx.Mount.RemoveAllMetadata(); err != nil {
+ return err
+ }
+
+ fmt.Fprintf(cmd.Output, "All metadata on %q deleted.\n", ctx.Mount.Path)
+ return nil
+ }
+ return cmd.UsageError(fmt.Sprintf("Must specify exactly one of: %s, %s, or %s",
+ usedMountpointArg, protectorFlag, policyFlag))
+}
+