Fix bugs
This commit is contained in:
parent
42608975e0
commit
e4181681cb
|
@ -119,11 +119,12 @@ var genpassSymbols = true
|
||||||
var keyfile bool
|
var keyfile bool
|
||||||
var keyfiles []string
|
var keyfiles []string
|
||||||
var keyfileOrderMatters bool
|
var keyfileOrderMatters bool
|
||||||
|
var keyfilePrompt = "None selected."
|
||||||
var showKeyfile bool
|
var showKeyfile bool
|
||||||
|
|
||||||
// Metadata variables
|
// Metadata variables
|
||||||
var metadata string
|
var metadata string
|
||||||
var metadataPrompt = "Metadata (optional):"
|
var metadataPrompt = "Metadata:"
|
||||||
var metadataDisabled bool
|
var metadataDisabled bool
|
||||||
|
|
||||||
// Advanced options
|
// Advanced options
|
||||||
|
@ -200,7 +201,7 @@ func draw() {
|
||||||
Flags(giu.WindowFlagsNoMove|giu.WindowFlagsNoResize).Layout(
|
Flags(giu.WindowFlagsNoMove|giu.WindowFlagsNoResize).Layout(
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Label(s("Length:")),
|
giu.Label(s("Length:")),
|
||||||
giu.SliderInt("", &genpassLength, 4, 64).Size(-0.0000001),
|
giu.SliderInt(&genpassLength, 4, 64).Size(fill),
|
||||||
),
|
),
|
||||||
giu.Checkbox(s("Uppercase"), &genpassUpper),
|
giu.Checkbox(s("Uppercase"), &genpassUpper),
|
||||||
giu.Checkbox(s("Lowercase"), &genpassLower),
|
giu.Checkbox(s("Lowercase"), &genpassLower),
|
||||||
|
@ -233,53 +234,17 @@ func draw() {
|
||||||
giu.PopupModal(s("Manage keyfiles:")).
|
giu.PopupModal(s("Manage keyfiles:")).
|
||||||
Flags(giu.WindowFlagsNoMove|giu.WindowFlagsNoResize).Layout(
|
Flags(giu.WindowFlagsNoMove|giu.WindowFlagsNoResize).Layout(
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Label(s("Drop and drop your keyfile(s) here or")),
|
giu.Label(s("Drop and drop your keyfiles.")),
|
||||||
giu.Button(s("select")).OnClick(func() {
|
|
||||||
file, _ := dialog.File().Title(s("Select a keyfile")).Load()
|
|
||||||
|
|
||||||
// Return if user canceled the file dialog
|
|
||||||
if file == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
keyfiles = append(keyfiles, file)
|
|
||||||
tmp := []string{}
|
|
||||||
for _, i := range keyfiles {
|
|
||||||
if i != file {
|
|
||||||
tmp = append(tmp, i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tmp = append(tmp, file)
|
|
||||||
keyfiles = tmp
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
giu.Custom(func() {
|
giu.Custom(func() {
|
||||||
if mode != "decrypt" {
|
if mode != "decrypt" {
|
||||||
giu.Row(
|
|
||||||
giu.Label(s("You can also generate a keyfile:")),
|
|
||||||
giu.Button(s("Generate")).OnClick(func() {
|
|
||||||
file, _ := dialog.File().Title(s("Save keyfile as")).Save()
|
|
||||||
|
|
||||||
// Return if user canceled the file dialog
|
|
||||||
if file == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fout, _ := os.Create(file)
|
|
||||||
data := make([]byte, 1048576)
|
|
||||||
rand.Read(data)
|
|
||||||
fout.Write(data)
|
|
||||||
fout.Close()
|
|
||||||
|
|
||||||
keyfiles = append(keyfiles, file)
|
|
||||||
}),
|
|
||||||
).Build()
|
|
||||||
giu.Checkbox(s("Require correct keyfile order"), &keyfileOrderMatters).Build()
|
giu.Checkbox(s("Require correct keyfile order"), &keyfileOrderMatters).Build()
|
||||||
|
giu.Tooltip(s("If checked, you will need to drop keyfiles in the correct order.")).Build()
|
||||||
} else if keyfileOrderMatters {
|
} else if keyfileOrderMatters {
|
||||||
giu.Label(s("The correct order of keyfiles is required.")).Build()
|
giu.Label(s("The correct order of keyfiles is required.")).Build()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
giu.Tooltip(s("If checked, you will need to drop keyfiles in the correct order.")),
|
|
||||||
giu.Custom(func() {
|
giu.Custom(func() {
|
||||||
for _, i := range keyfiles {
|
for _, i := range keyfiles {
|
||||||
giu.Row(
|
giu.Row(
|
||||||
|
@ -389,8 +354,10 @@ func draw() {
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Label(s("Password:")),
|
giu.Label(s("Password:")),
|
||||||
giu.Dummy(-124/dpi, 0),
|
giu.Dummy(-124/dpi, 0),
|
||||||
|
giu.Style().SetDisabled(mode == "decrypt" && !keyfile).To(
|
||||||
giu.Label(s("Keyfiles:")),
|
giu.Label(s("Keyfiles:")),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Button(s(passwordStateLabel)).Size(54, 0).OnClick(func() {
|
giu.Button(s(passwordStateLabel)).Size(54, 0).OnClick(func() {
|
||||||
if passwordState == giu.InputTextFlagsPassword {
|
if passwordState == giu.InputTextFlagsPassword {
|
||||||
|
@ -427,8 +394,26 @@ func draw() {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
|
||||||
giu.Button(s("Edit")).Size(54, 0),
|
giu.Style().SetDisabled(mode == "decrypt" && !keyfile).To(
|
||||||
giu.Button(s("Create")).Size(54, 0),
|
giu.Row(
|
||||||
|
giu.Button(s("Edit")).Size(54, 0).OnClick(func() {
|
||||||
|
showKeyfile = true
|
||||||
|
}),
|
||||||
|
giu.Style().SetDisabled(mode == "decrypt").To(
|
||||||
|
giu.Button(s("Create")).Size(54, 0).OnClick(func() {
|
||||||
|
file, _ := dialog.File().Title(s("Save keyfile as:")).Save()
|
||||||
|
if file == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fout, _ := os.Create(file)
|
||||||
|
data := make([]byte, 1048576)
|
||||||
|
rand.Read(data)
|
||||||
|
fout.Write(data)
|
||||||
|
fout.Close()
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.InputText(&password).Flags(passwordState).Size(302/dpi).OnChange(func() {
|
giu.InputText(&password).Flags(passwordState).Size(302/dpi).OnChange(func() {
|
||||||
|
@ -462,7 +447,9 @@ func draw() {
|
||||||
c.PathArcTo(path, 6*dpi, -math.Pi/2, float32(passwordStrength+1)/5*2*math.Pi-math.Pi/2, -1)
|
c.PathArcTo(path, 6*dpi, -math.Pi/2, float32(passwordStrength+1)/5*2*math.Pi-math.Pi/2, -1)
|
||||||
c.PathStroke(col, false, 2)
|
c.PathStroke(col, false, 2)
|
||||||
}),
|
}),
|
||||||
giu.Label(s("No keyfiles.")),
|
giu.Style().SetDisabled(true).To(
|
||||||
|
giu.InputText(&keyfilePrompt).Size(fill),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -472,9 +459,11 @@ func draw() {
|
||||||
giu.Label(s("Confirm password:")),
|
giu.Label(s("Confirm password:")),
|
||||||
),
|
),
|
||||||
giu.Dummy(-124/dpi, 0),
|
giu.Dummy(-124/dpi, 0),
|
||||||
|
giu.Style().SetDisabled(true).To(
|
||||||
giu.Label(s("Custom Argon2:")),
|
giu.Label(s("Custom Argon2:")),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
giu.Style().SetDisabled(password == "").To(
|
giu.Style().SetDisabled(password == "").To(
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Style().SetDisabled(mode == "decrypt").To(
|
giu.Style().SetDisabled(mode == "decrypt").To(
|
||||||
|
@ -501,9 +490,11 @@ func draw() {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
giu.Style().SetDisabled(true).To(
|
||||||
giu.Button(s("Manage")).Size(fill, 0),
|
giu.Button(s("Manage")).Size(fill, 0),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
|
||||||
giu.Dummy(0, 3),
|
giu.Dummy(0, 3),
|
||||||
giu.Separator(),
|
giu.Separator(),
|
||||||
|
@ -526,14 +517,16 @@ func draw() {
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Checkbox(s("Use fast mode"), &fast),
|
giu.Checkbox(s("Use fast mode"), &fast),
|
||||||
giu.Dummy(-221/dpi, 0),
|
giu.Dummy(-221/dpi, 0),
|
||||||
giu.Checkbox(s("Delete files when done"), &deleteWhenDone),
|
giu.Checkbox(s("Delete files when complete"), &deleteWhenDone),
|
||||||
).Build()
|
).Build()
|
||||||
giu.Row(
|
giu.Row(
|
||||||
giu.Checkbox(s("Use paranoid mode"), ¶noid),
|
giu.Checkbox(s("Use paranoid mode"), ¶noid),
|
||||||
giu.Dummy(-221/dpi, 0),
|
giu.Dummy(-221/dpi, 0),
|
||||||
giu.Checkbox(s("Split into"), &split),
|
giu.Checkbox(s("Split every"), &split),
|
||||||
giu.InputText(&splitSize).Size(20).Flags(giu.InputTextFlagsCharsHexadecimal),
|
giu.InputText(&splitSize).Size(55).Flags(giu.InputTextFlagsCharsHexadecimal).OnChange(func() {
|
||||||
giu.Label("MiB chunks"),
|
split = splitSize != ""
|
||||||
|
}),
|
||||||
|
giu.Combo("##splitter", splitUnits[splitSelected], splitUnits, &splitSelected).Size(52),
|
||||||
).Build()
|
).Build()
|
||||||
} else {
|
} else {
|
||||||
giu.Checkbox(s("Keep decrypted output even if it's corrupted or modified"), &keep).Build()
|
giu.Checkbox(s("Keep decrypted output even if it's corrupted or modified"), &keep).Build()
|
||||||
|
@ -554,23 +547,41 @@ func draw() {
|
||||||
).Build()
|
).Build()
|
||||||
giu.SameLine()
|
giu.SameLine()
|
||||||
giu.Button(s("Change")).Size(bw/dpi, 0).OnClick(func() {
|
giu.Button(s("Change")).Size(bw/dpi, 0).OnClick(func() {
|
||||||
file, _ := dialog.File().Title(s("Save output as...")).Save()
|
file, _ := dialog.File().Title(s("Save as:")).Save()
|
||||||
if file == "" {
|
if file == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if mode == "encrypt" {
|
if mode == "encrypt" {
|
||||||
if len(allFiles) > 1 || len(onlyFolders) > 0 {
|
if len(allFiles) > 1 || len(onlyFolders) > 0 {
|
||||||
|
file = strings.TrimSuffix(file, ".zip.pcv")
|
||||||
file = strings.TrimSuffix(file, ".pcv")
|
file = strings.TrimSuffix(file, ".pcv")
|
||||||
if !strings.HasSuffix(file, ".zip.pcv") {
|
if !strings.HasSuffix(file, ".zip.pcv") {
|
||||||
file += ".zip.pcv"
|
file += ".zip.pcv"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
file = strings.TrimSuffix(file, ".pcv")
|
||||||
|
ind := strings.Index(inputFile, ".")
|
||||||
|
file += inputFile[ind:]
|
||||||
if !strings.HasSuffix(file, ".pcv") {
|
if !strings.HasSuffix(file, ".pcv") {
|
||||||
file += ".pcv"
|
file += ".pcv"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ind := strings.Index(file, ".")
|
||||||
|
if ind != -1 {
|
||||||
|
file = file[:ind]
|
||||||
}
|
}
|
||||||
|
if strings.HasSuffix(inputFile, ".zip.pcv") {
|
||||||
|
file += ".zip"
|
||||||
|
} else {
|
||||||
|
tmp := strings.TrimSuffix(filepath.Base(inputFile), ".pcv")
|
||||||
|
tmp = tmp[strings.Index(tmp, "."):]
|
||||||
|
file += tmp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
outputFile = file
|
||||||
}).Build()
|
}).Build()
|
||||||
giu.Tooltip(s("Save the output with a custom path and name.")).Build()
|
giu.Tooltip(s("Save the output with a custom path and name.")).Build()
|
||||||
}),
|
}),
|
||||||
|
@ -583,6 +594,7 @@ func draw() {
|
||||||
if keyfile && keyfiles == nil {
|
if keyfile && keyfiles == nil {
|
||||||
mainStatus = "Please select your keyfiles."
|
mainStatus = "Please select your keyfiles."
|
||||||
mainStatusColor = color.RGBA{0xff, 0x00, 0x00, 0xff}
|
mainStatusColor = color.RGBA{0xff, 0x00, 0x00, 0xff}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
_, err := os.Stat(outputFile)
|
_, err := os.Stat(outputFile)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -632,6 +644,35 @@ func draw() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func onDrop(names []string) {
|
func onDrop(names []string) {
|
||||||
|
if tab == 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if tab == 2 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if showKeyfile {
|
||||||
|
keyfiles = append(keyfiles, names...)
|
||||||
|
tmp := []string{}
|
||||||
|
for _, i := range keyfiles {
|
||||||
|
duplicate := false
|
||||||
|
for _, j := range tmp {
|
||||||
|
if i == j {
|
||||||
|
duplicate = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stat, _ := os.Stat(i)
|
||||||
|
if !duplicate && !stat.IsDir() {
|
||||||
|
tmp = append(tmp, i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
keyfiles = tmp
|
||||||
|
if len(keyfiles) == 1 {
|
||||||
|
keyfilePrompt = s("Using 1 keyfile.")
|
||||||
|
}
|
||||||
|
keyfilePrompt = fmt.Sprintf(s("Using %d keyfiles."), len(keyfiles))
|
||||||
|
return
|
||||||
|
}
|
||||||
mainStatus = "Ready."
|
mainStatus = "Ready."
|
||||||
mainStatusColor = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
mainStatusColor = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
||||||
metadataDisabled = false
|
metadataDisabled = false
|
||||||
|
@ -751,6 +792,7 @@ func onDrop(names []string) {
|
||||||
|
|
||||||
flags := make([]byte, 18)
|
flags := make([]byte, 18)
|
||||||
fin.Read(flags)
|
fin.Read(flags)
|
||||||
|
fin.Close()
|
||||||
flags, err = rsDecode(rs6, flags)
|
flags, err = rsDecode(rs6, flags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mainStatus = "Input file is corrupt and cannot be decrypted."
|
mainStatus = "Input file is corrupt and cannot be decrypted."
|
||||||
|
@ -760,6 +802,9 @@ func onDrop(names []string) {
|
||||||
|
|
||||||
if flags[2] == 1 {
|
if flags[2] == 1 {
|
||||||
keyfile = true
|
keyfile = true
|
||||||
|
keyfilePrompt = s("Keyfiles required.")
|
||||||
|
} else {
|
||||||
|
keyfilePrompt = s("Not applicable.")
|
||||||
}
|
}
|
||||||
if flags[5] == 1 {
|
if flags[5] == 1 {
|
||||||
keyfileOrderMatters = true
|
keyfileOrderMatters = true
|
||||||
|
@ -1220,9 +1265,9 @@ func work() {
|
||||||
mainStatus = "The provided password is incorrect."
|
mainStatus = "The provided password is incorrect."
|
||||||
} else {
|
} else {
|
||||||
if keyfileOrderMatters {
|
if keyfileOrderMatters {
|
||||||
mainStatus = "Incorrect keyfile(s) and/or order."
|
mainStatus = "Incorrect keyfiles and/or order."
|
||||||
} else {
|
} else {
|
||||||
mainStatus = "Incorrect keyfile(s)."
|
mainStatus = "Incorrect keyfiles."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mainStatusColor = color.RGBA{0xff, 0x00, 0x00, 0xff}
|
mainStatusColor = color.RGBA{0xff, 0x00, 0x00, 0xff}
|
||||||
|
@ -1605,13 +1650,15 @@ func resetUI() {
|
||||||
keyfiles = nil
|
keyfiles = nil
|
||||||
keyfile = false
|
keyfile = false
|
||||||
keyfileOrderMatters = false
|
keyfileOrderMatters = false
|
||||||
|
keyfilePrompt = s("None selected.")
|
||||||
metadata = ""
|
metadata = ""
|
||||||
metadataPrompt = "Metadata (optional):"
|
metadataPrompt = "Metadata:"
|
||||||
shredTemp = false
|
shredTemp = false
|
||||||
keep = false
|
keep = false
|
||||||
reedsolo = false
|
reedsolo = false
|
||||||
split = false
|
split = false
|
||||||
splitSize = ""
|
splitSize = ""
|
||||||
|
splitSelected = 1
|
||||||
fast = false
|
fast = false
|
||||||
deleteWhenDone = false
|
deleteWhenDone = false
|
||||||
paranoid = false
|
paranoid = false
|
||||||
|
|
Loading…
Reference in New Issue