2019-03-15 00:48:15 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2019-03-15 01:31:59 +00:00
|
|
|
"crypto/hmac"
|
|
|
|
"crypto/sha256"
|
|
|
|
"encoding/hex"
|
2019-04-18 11:09:07 +00:00
|
|
|
"log"
|
2019-03-15 00:48:15 +00:00
|
|
|
"os"
|
|
|
|
"strings"
|
2019-03-15 13:07:20 +00:00
|
|
|
"time"
|
2019-03-15 00:48:15 +00:00
|
|
|
)
|
|
|
|
|
2020-10-29 01:06:34 +00:00
|
|
|
var stickSalt []byte
|
2019-04-16 12:48:32 +00:00
|
|
|
|
2019-03-15 00:48:15 +00:00
|
|
|
func expandPath(path string) (string, error) {
|
|
|
|
if !strings.HasPrefix(path, "~") {
|
|
|
|
return path, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
homedir, err := os.UserHomeDir()
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return homedir + path[1:], nil
|
|
|
|
}
|
2019-03-15 01:31:59 +00:00
|
|
|
|
2020-10-29 01:06:34 +00:00
|
|
|
func uniqueInts(input []int) []int {
|
2019-04-19 14:01:03 +00:00
|
|
|
u := make([]int, 0, len(input))
|
|
|
|
m := make(map[int]bool)
|
|
|
|
|
|
|
|
for _, val := range input {
|
|
|
|
if _, ok := m[val]; !ok {
|
|
|
|
m[val] = true
|
|
|
|
u = append(u, val)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return u
|
|
|
|
}
|
|
|
|
|
|
|
|
func stripLeadingCheckbox(line string) string {
|
|
|
|
line = strings.ToLower(line)
|
|
|
|
if startsWithCheckbox.MatchString(line) {
|
|
|
|
line = line[3:]
|
|
|
|
}
|
|
|
|
return line
|
|
|
|
}
|
|
|
|
|
2019-04-16 12:48:32 +00:00
|
|
|
func hashWithSalt(str string, salt []byte) string {
|
|
|
|
h := hmac.New(sha256.New, salt)
|
2019-03-15 01:31:59 +00:00
|
|
|
h.Write([]byte(str))
|
|
|
|
return hex.EncodeToString(h.Sum(nil))
|
|
|
|
}
|
2019-03-15 13:07:20 +00:00
|
|
|
|
2019-04-16 12:48:32 +00:00
|
|
|
func hash(str string) string {
|
2020-10-29 01:06:34 +00:00
|
|
|
return hashWithSalt(str, stickSalt)
|
2019-04-16 12:48:32 +00:00
|
|
|
}
|
|
|
|
|
2019-03-15 13:07:20 +00:00
|
|
|
func elapsed(what string) func() {
|
|
|
|
start := time.Now()
|
|
|
|
return func() {
|
2019-04-18 11:09:07 +00:00
|
|
|
log.Printf("%s: %v\n", what, time.Since(start))
|
2019-03-15 13:07:20 +00:00
|
|
|
}
|
|
|
|
}
|
2019-03-20 09:50:07 +00:00
|
|
|
|
2020-10-29 01:06:34 +00:00
|
|
|
func checkError(err error) {
|
2019-03-20 09:50:07 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|