689b1a804b
Added an executable file. Only works on Windows, if it doesn't work, then try building it for yourself with build.bat or go build Tweaked run.bat to make it more firewall friendly. It now generates an executable. Moved the files around to make it more organised. Added build.bat which you can use to build the program for you and install the libraries the software depends on.
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package main
|
|
import "fmt"
|
|
import "time"
|
|
import "encoding/base64"
|
|
import "crypto/rand"
|
|
|
|
// Generate a cryptographically secure set of random bytes..
|
|
func GenerateSafeString(length int) (string, error) {
|
|
rb := make([]byte,length)
|
|
_, err := rand.Read(rb)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return base64.URLEncoding.EncodeToString(rb), nil
|
|
}
|
|
|
|
func relative_time(in string) (string, error) {
|
|
layout := "2006-01-02 15:04:05"
|
|
t, err := time.Parse(layout, in)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
diff := time.Since(t)
|
|
hours := diff.Hours()
|
|
seconds := diff.Seconds()
|
|
switch {
|
|
case (hours / 24) > 7:
|
|
return t.Format("Mon Jan 2 2006"), err
|
|
case int(hours / 24) == 1:
|
|
return "1 day ago", err
|
|
case int(hours / 24) > 1:
|
|
return fmt.Sprintf("%d days ago", int(hours / 24)), err
|
|
case seconds <= 1:
|
|
return "a moment ago", err
|
|
case seconds < 60:
|
|
return fmt.Sprintf("%d seconds ago", int(seconds)), err
|
|
case seconds < 120:
|
|
return "a minute ago", err
|
|
case seconds < 3600:
|
|
return fmt.Sprintf("%d minutes ago", int(seconds / 60)), err
|
|
case seconds < 7200:
|
|
return "an hour ago", err
|
|
default:
|
|
return fmt.Sprintf("%d hours ago", int(seconds / 60 / 60)), err
|
|
}
|
|
} |