github.com/louisevanderlith/droxolite@v1.20.2/drx/common.go (about) 1 package drx 2 3 import ( 4 "crypto/md5" 5 "encoding/json" 6 "fmt" 7 "github.com/gorilla/mux" 8 "net/http" 9 "strconv" 10 "strings" 11 ) 12 13 //JSONBody will bind JSON body to container 14 func JSONBody(r *http.Request, container interface{}) error { 15 decoder := json.NewDecoder(r.Body) 16 return decoder.Decode(container) 17 } 18 19 //FindParam will return named path parameter value 20 func FindParam(r *http.Request, name string) string { 21 vars := mux.Vars(r) 22 return vars[name] 23 } 24 25 //FindQueryParam returns the First requested querystring parameter 26 func FindQueryParam(r *http.Request, name string) string { 27 results, ok := r.URL.Query()[name] 28 29 if !ok { 30 return "" 31 } 32 33 return results[0] 34 } 35 36 //GetPageData will attempt to parse the request Url for page sizes. 37 func GetPageData(r *http.Request) (page, pageSize int) { 38 pageData := FindParam(r, "pagesize") 39 return ParsePageData(pageData) 40 } 41 42 //turns /B5 into page 2. size 5 43 func ParsePageData(pageData string) (int, int) { 44 defaultPage := 1 45 defaultSize := 10 46 47 if len(pageData) < 2 { 48 return defaultPage, defaultSize 49 } 50 51 pChar := []rune(pageData[:1]) 52 53 if len(pChar) != 1 { 54 return defaultPage, defaultSize 55 } 56 57 page := int(pChar[0]) % 32 58 pageSize, err := strconv.Atoi(pageData[1:]) 59 60 if err != nil { 61 return defaultPage, defaultSize 62 } 63 64 return page, pageSize 65 } 66 67 func GravatarHash(email string) string { 68 if len(email) == 0 { 69 return "" 70 } 71 72 gravatar := md5.Sum([]byte(strings.ToLower(strings.Trim(email, " ")))) 73 74 return fmt.Sprintf("%x", gravatar) 75 }