github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/core/helpers/http_helpers/http_helpers.go (about) 1 package http_helpers 2 3 import ( 4 "encoding/json" 5 "github.com/k0marov/go-socnet/core/general/client_errors" 6 "github.com/k0marov/go-socnet/core/general/core_entities" 7 "github.com/k0marov/go-socnet/core/general/core_values" 8 "github.com/k0marov/go-socnet/core/general/core_values/ref" 9 "io" 10 "log" 11 "net/http" 12 13 auth "github.com/k0marov/golang-auth" 14 ) 15 16 func setJsonHeader(w http.ResponseWriter) { 17 w.Header().Add("contentType", "application/json") 18 } 19 20 func WriteJson(w http.ResponseWriter, obj any) { 21 setJsonHeader(w) 22 json.NewEncoder(w).Encode(obj) 23 } 24 25 func GetUserOrAddUnauthorized(w http.ResponseWriter, r *http.Request) (core_entities.User, bool) { 26 authUser, castSuccess := r.Context().Value(auth.UserContextKey).(auth.User) // try to cast this to User 27 if !castSuccess { 28 w.WriteHeader(http.StatusUnauthorized) 29 return core_entities.User{}, false 30 } 31 return core_entities.UserFromAuth(authUser), true 32 } 33 34 func HandleServiceError(w http.ResponseWriter, err error) { 35 clientError, isClientError := err.(client_errors.ClientError) 36 if isClientError { 37 ThrowClientError(w, clientError) 38 } else { 39 log.Printf("Error while serving request: %v", err) 40 http.Error(w, "", http.StatusInternalServerError) 41 } 42 } 43 44 func ThrowClientError(w http.ResponseWriter, clientError client_errors.ClientError) { 45 setJsonHeader(w) 46 errorJson, _ := json.Marshal(clientError) 47 http.Error(w, string(errorJson), clientError.HTTPCode) 48 } 49 50 func ParseFile(r *http.Request, field string) (core_values.FileData, bool) { 51 file, _, err := r.FormFile(field) 52 if err != nil { 53 return core_values.FileData{}, false 54 } 55 defer file.Close() 56 avatarData, err := io.ReadAll(file) 57 if err != nil { 58 return core_values.FileData{}, false 59 } 60 dataRef, err := ref.NewRef(&avatarData) 61 if err != nil { 62 return core_values.FileData{}, false 63 } 64 return dataRef, true 65 }