package main import ( "bytes" "compress/gzip" "encoding/json" "fmt" "io/ioutil" "log" "net/http" "os" "strings" ) type Site struct { Host string `json:host` MinimumLength int `json:minimumLength` MaximumLength int `json:maximumLength` SpecialCharacters string `json:specialCharacters` NumberOfSpecialCharacters int `json:numberOfSpecialCharacters` NumberOfUpperCase int `json:numberOfUpperCase` NumberOfDigits int `json:numberOfDigits` } func main() { http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) { }) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { path := strings.TrimPrefix(r.URL.Path, "/") if path == "" { // Index page, err := ioutil.ReadFile("index.html") if err != nil { http.NotFound(w, r) return } fmt.Fprintf(w, string(page)) } else { // A passphrase has been entered } }) log.Fatal(http.ListenAndServe("localhost:8080", nil)) //execDir, err := filepath.Abs(filepath.Dir(os.Args[0])) //if err != nil { // log.Fatal(err) //} //file := filepath.Join(execDir, "enigma.safe") //sites, err := Read(file) //if err != nil { // log.Fatal(err) //} //log.Println(sites) //err = Save(file, sites) //if err != nil { // log.Fatal(err) //} } func Save(file string, sites []Site) error { // If the file doesn't exist then create it if _, err := os.Stat(file); os.IsNotExist(err) { _, err = os.Create(file) if err != nil { return err } } // Marshal the JSON b, err := json.Marshal(sites) if err != nil { return err } // Compress the contents buffer := bytes.NewBuffer(b) gzipWriter := gzip.NewWriter(buffer) if err != nil { return err } defer gzipWriter.Close() // Write to the file fi, err := os.OpenFile(file, os.O_WRONLY, 0666) if err != nil { return err } defer fi.Close() _, err = fi.Write(buffer.Bytes()) if err != nil { return err } return nil } func Read(file string) ([]Site, error) { // If the file doesn't exist yet no worries if _, err := os.Stat(file); os.IsNotExist(err) { return []Site{}, nil } // Bring in the compressed data log.Println("Reading compressed file") compressed, err := ioutil.ReadFile(file) if err != nil { return nil, err } // Decompress the file contents log.Println("Decompressing") buffer := bytes.NewBuffer(compressed) gzipReader, err := gzip.NewReader(buffer) if err != nil { return nil, err } defer gzipReader.Close() // Unmarshal the JSON information log.Println("Unmarshal") var sites []Site err = json.Unmarshal(buffer.Bytes(), &sites) if err != nil { return nil, err } return sites, nil }