package chat // chat server funcs which aren't specific to the server struct import ( "bytes" "crypto/md5" "encoding/json" "fmt" "io" "net/http" "os" "github.com/golang-jwt/jwt" ) var Address = "127.0.0.1:8000" var JwtSecret = os.Getenv("secret") func checkToken(token string) (username string, ok bool) { type ParsedToken struct { Username string jwt.StandardClaims } var t ParsedToken jwt, err := jwt.ParseWithClaims(token, &t, func(t *jwt.Token) (interface{}, error) { return []byte(JwtSecret), nil }) if err != nil { return "", false } if userToken, ok := jwt.Claims.(*ParsedToken); ok && jwt.Valid { return userToken.Username, true } else { fmt.Println(err) return "", false } } func encodeJson(data interface{}) ([]byte, bool) { if jsonData, err := json.Marshal(data); err != nil { fmt.Fprintln(os.Stderr, "Could not marshal json data", data) return nil, false } else { return jsonData, true } } func decodeJson(body *io.ReadCloser, w *http.ResponseWriter, message interface{}) { if err := json.NewDecoder(*body).Decode(&message); err != nil { fmt.Fprintln(os.Stderr, "Error decoding", err.Error()) if w != nil && (*w) != nil { (*w).WriteHeader(http.StatusBadRequest) (*w).Write([]byte(`{"error":"bad message"}`)) } } } func dbHandleError(body *io.ReadCloser, w *http.ResponseWriter) (message string) { type ErrorMessage struct { Error string `json:"error"` } var error ErrorMessage decodeJson(body, w, &error) return error.Error } func isAcceptedMIMEType(mime string) bool { switch mime { case "image/bmp", "image/gif", "image/jpeg", "image/png", "audio/mpeg", "video/webm": return true } return false } func uploadFile(fileContents *[]byte, fileName, mimeType string) (res *http.Response, err error) { type FileObject struct { FileName string `json:"filename"` FileType string `json:"filetype"` Contents []byte `json:"contents"` Sum [16]byte `json:"sum"` } file := FileObject{ fileName, mimeType, *fileContents, md5.Sum(*fileContents), } jsonData, ok := encodeJson(&file) if !ok { fmt.Fprintln(os.Stderr, "error encoding file data") return } res, err = http.Post(DbAddress+"/file", "application/json", bytes.NewBuffer(jsonData)) if err != nil { fmt.Fprintln(os.Stderr, "file POST error:", err) } return }