diff --git a/server/resource/util/util.go b/server/resource/util/util.go deleted file mode 100644 index d0bf19568..000000000 --- a/server/resource/util/util.go +++ /dev/null @@ -1,116 +0,0 @@ -package util - -import ( - "crypto/md5" - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "fmt" - "io" - "strings" - "unicode" - - "code.google.com/p/go.crypto/ssh" - "code.google.com/p/go.text/unicode/norm" -) - -// standard characters allowed in token string. -var chars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") - -// default token length -var length = 40 - -var ( - lat = []*unicode.RangeTable{unicode.Letter, unicode.Number} - nop = []*unicode.RangeTable{unicode.Mark, unicode.Sk, unicode.Lm} -) - -// helper function to create a Gravatar Hash -// for the given Email address. -func CreateGravatar(email string) string { - email = strings.ToLower(strings.TrimSpace(email)) - hash := md5.New() - hash.Write([]byte(email)) - return fmt.Sprintf("%x", hash.Sum(nil)) -} - -// helper function to create a Slug for the -// given string of text. -func CreateSlug(s string) string { - buf := make([]rune, 0, len(s)) - dash := false - for _, r := range norm.NFKD.String(s) { - switch { - // unicode 'letters' like mandarin characters pass through - case unicode.IsOneOf(lat, r): - buf = append(buf, unicode.ToLower(r)) - dash = true - case unicode.IsOneOf(nop, r): - // skip - case dash: - buf = append(buf, '-') - dash = false - } - } - if i := len(buf) - 1; i >= 0 && buf[i] == '-' { - buf = buf[:i] - } - return string(buf) -} - -// GenerateToken generates random strings good for use in URIs to -// identify unique objects. -func GenerateToken() string { - b := make([]byte, length) - r := make([]byte, length+(length/4)) // storage for random bytes. - clen := byte(len(chars)) - maxrb := byte(256 - (256 % len(chars))) - i := 0 - for { - io.ReadFull(rand.Reader, r) - for _, c := range r { - if c >= maxrb { - // Skip this number to avoid modulo bias. - continue - } - b[i] = chars[c%clen] - i++ - if i == length { - return string(b) - } - } - } -} - -// ----------------------------------------------------------------------------- -// SSH Functions - -const ( - RSA_BITS = 2048 // Default number of bits in an RSA key - RSA_BITS_MIN = 768 // Minimum number of bits in an RSA key -) - -// helper function to generate an RSA Private Key. -func GeneratePrivateKey() (*rsa.PrivateKey, error) { - return rsa.GenerateKey(rand.Reader, RSA_BITS) -} - -// helper function that marshalls an RSA Public Key to an SSH -// .authorized_keys format -func MarshalPublicKey(pubkey *rsa.PublicKey) string { - pk, err := ssh.NewPublicKey(pubkey) - if err != nil { - return "" - } - - return string(ssh.MarshalAuthorizedKey(pk)) -} - -// helper function that marshalls an RSA Private Key to -// a PEM encoded file. -func MarshalPrivateKey(privkey *rsa.PrivateKey) string { - privateKeyMarshaled := x509.MarshalPKCS1PrivateKey(privkey) - privateKeyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Headers: nil, Bytes: privateKeyMarshaled}) - return string(privateKeyPEM) -} diff --git a/server/resource/util/util_test.go b/server/resource/util/util_test.go deleted file mode 100644 index c4220c9da..000000000 --- a/server/resource/util/util_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package util - -import ( - "testing" -) - -func Test_CreateGravatar(t *testing.T) { - var got, want = CreateGravatar("dr_cooper@caltech.edu"), "2b77ba83e2216ddcd11fe8c24b70c2a3" - if got != want { - t.Errorf("Got gravatar hash %s, want %s", got, want) - } -} - -func TestCreateSlug(t *testing.T) { - var slugs = map[string]string{ - "sheldoncooper": "sheldoncooper", - "SheldonCooper": "sheldoncooper", - "Sheldon-Cooper": "sheldon-cooper", - "Sheldon_Cooper": "sheldon-cooper", - "Sheldon Cooper": "sheldon-cooper", - "Sheldon Cooper1": "sheldon-cooper1", - "Sheldon Cooper*": "sheldon-cooper", - "Sheldon[Cooper]": "sheldon-cooper", - "Sheldon[Cooper]]": "sheldon-cooper", - // let's try almost every single special character - "Sheldon!@#$%^&*()+=,<.>/?_Cooper": "sheldon-cooper", - "Sheldon!@#$%^&*()+=,<->/?Cooper": "sheldon-cooper", - } - - for in, out := range slugs { - var got, want = CreateSlug(in), out - if got != want { - t.Errorf("Got slug %s, want %s", got, want) - } - } -} - -func TestGenerateToken(t *testing.T) { - token := GenerateToken() - if len(token) != length { - t.Errorf("Want token length %d, got %d", length, len(token)) - } -} diff --git a/shared/model/util_test.go b/shared/model/util_test.go new file mode 100644 index 000000000..4aa17166f --- /dev/null +++ b/shared/model/util_test.go @@ -0,0 +1,19 @@ +package model + +import ( + "testing" +) + +func Test_createGravatar(t *testing.T) { + var got, want = createGravatar("dr_cooper@caltech.edu"), "2b77ba83e2216ddcd11fe8c24b70c2a3" + if got != want { + t.Errorf("Got gravatar hash %s, want %s", got, want) + } +} + +func Test_generateToken(t *testing.T) { + token := generateToken() + if len(token) != length { + t.Errorf("Want token length %d, got %d", length, len(token)) + } +}