diff options
Diffstat (limited to 'paste')
| -rw-r--r-- | paste/paste.go | 52 | 
1 files changed, 52 insertions, 0 deletions
| diff --git a/paste/paste.go b/paste/paste.go new file mode 100644 index 0000000..ce06f6a --- /dev/null +++ b/paste/paste.go @@ -0,0 +1,52 @@ +package paste + +import( +	"crypto/sha256" +	"fmt" +	"log" +	"os" +	"io/ioutil" +	"errors" +) + + + +func Store(title, date, content, dest_dir string) (string, error) { + +	h := sha256.New() +	 +	h.Write([]byte(title)) +	h.Write([]byte(date)) +	h.Write([]byte(content)) + +	paste := fmt.Sprintf("# Title: %s\n# Date: %s\n%s", title, date, content) +	 +	paste_hash := fmt.Sprintf("%x", h.Sum(nil)) +	log.Printf("  `-- hash: %s\n", paste_hash) +	paste_dir := dest_dir + "/" + +	 +	// Now we save the file +	for i := 0; i < len(paste_hash)-16; i++ { +		paste_name := paste_hash[i:i+16] +		if _, err := os.Stat(paste_dir + paste_name); os.IsNotExist(err) { +			// The file does not exist, so we can create it +			if err := ioutil.WriteFile(paste_dir + paste_name, []byte(paste), 0644); err == nil { +				// and then we return the URL: +				log.Printf("  `-- saving new paste to : %s", paste_dir + paste_name) +				return paste_name, nil +			} else { +				log.Printf("Cannot create the paste: %s!\n", paste_dir + paste_name) +			} +		} +	} +	return "", errors.New("Cannot store the paste...Sorry!") +} + + +//func Retrieve(URI string) (title, date, content string) { +	 +	 +	 +	 +//} | 
