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  }