From 16eb14db9f9b228ef88bcf1beb09cf823256dac1 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Sun, 15 Feb 2015 01:34:25 +0100 Subject: redesign cli This is a major rebuilding of the CLI. The library part is split out into pkilib and the cli handles only the communication with the user, I/O and the library. The API will still look the same, but the code should be much better to grasp. Instead of repeating everything, more will be grouped together and reused. --- io.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 io.go (limited to 'io.go') diff --git a/io.go b/io.go new file mode 100644 index 0000000..382044e --- /dev/null +++ b/io.go @@ -0,0 +1,41 @@ +package main + +// handle all io and de/encoding of data + +import ( + "encoding/pem" + "errors" + "io/ioutil" +) + +var ( + ErrBlockNotFound = errors.New("block not found") +) + +// load a pem section from a file +func readSectionFromFile(path, btype string) ([]byte, error) { + raw, err := readFile(path) + if err != nil { return raw, err } + + return decodeSection(raw, btype) +} + +// read a file completely and report possible errors +func readFile(path string) ([]byte, error) { + raw, err := ioutil.ReadFile(path) + if err != nil { return EmptyByteArray, err } + return raw, nil +} + +// decode a pem encoded file and search for the specified section +func decodeSection(data []byte, btype string) ([]byte, error) { + rest := data + for len(rest) > 0 { + var block *pem.Block + block, rest = pem.Decode(rest) + if block.Type == btype { + return block.Bytes, nil + } + } + return EmptyByteArray, ErrBlockNotFound +} -- cgit v1.2.3-70-g09d2