99 lines
2.2 KiB
Go
99 lines
2.2 KiB
Go
package shell
|
|
|
|
/*
|
|
This simply parses the command line arguments using the default golang
|
|
package called 'flag'. This can be used as a simple template to parse
|
|
command line arguments in other programs.
|
|
|
|
It puts everything in a 'config' Protobuf which I think is a good
|
|
wrapper around the 'flags' package and doesn't need a whole mess of
|
|
global variables
|
|
*/
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
"go.wit.com/log"
|
|
)
|
|
|
|
func Wget(url string) *bytes.Buffer {
|
|
buf := new(bytes.Buffer)
|
|
|
|
// Get the data
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
handleError(err, -1)
|
|
return nil
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
log.Log(INFO, "res.StatusCode: %d\n", resp.StatusCode)
|
|
if resp.StatusCode != 200 {
|
|
handleError(fmt.Errorf(fmt.Sprint("%d", resp.StatusCode)), -1)
|
|
return nil
|
|
}
|
|
|
|
buf.ReadFrom(resp.Body)
|
|
return buf
|
|
}
|
|
|
|
func WgetToFile(filepath string, url string) error {
|
|
log.Log(INFO, "WgetToFile() filepath =", filepath)
|
|
log.Log(INFO, "WgetToFile() URL =", url)
|
|
// Get the data
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
handleError(err, -1)
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Create the file
|
|
out, err := os.Create(filepath)
|
|
if err != nil {
|
|
handleError(err, -1)
|
|
return err
|
|
}
|
|
defer out.Close()
|
|
|
|
// Write the body to file
|
|
_, err = io.Copy(out, resp.Body)
|
|
return err
|
|
}
|
|
|
|
// write out a file. Always be nice and end with '\n'
|
|
// if you are here and want to complain about ending in '\n'
|
|
// then you probably aren't going to like lots of things in this
|
|
// package. I will quote the evilwm man page:
|
|
//
|
|
// BUGS: The author's idea of friendly may differ to that of many other people.
|
|
func Write(filepath string, data string) bool {
|
|
// TODO: this isn't working for some reason and is making two '\n' chars
|
|
// probably because Chomp() isn't fixed yet
|
|
data = Chomp(data) + "\n"
|
|
// Create the file
|
|
ospath := Path(filepath)
|
|
log.Log(INFO, "shell.Write() START ospath =", ospath, "filepath =", filepath)
|
|
out, err := os.Create(ospath)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
defer out.Close()
|
|
|
|
// Write the body to file
|
|
// _, err = io.Copy(out, resp.Body)
|
|
count, err := io.Copy(out, strings.NewReader(data))
|
|
if err != nil {
|
|
handleError(err, -1)
|
|
return false
|
|
}
|
|
handleError(nil, int(count))
|
|
log.Log(INFO, "shell.Write() END", ospath)
|
|
return true
|
|
}
|