package routes import ( "encoding/json" "gitea.deepak.science/deepak/gogmagog/models" "gitea.deepak.science/deepak/gogmagog/tokens" "github.com/go-chi/chi" "log" "net/http" ) // NewCurrentUserRouter returns a new router for getting the current user. func NewCurrentUserRouter(m *models.Model) http.Handler { router := chi.NewRouter() router.Get("/", getMeFunc(m)) return router } func getMeFunc(m *models.Model) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { userID, err := tokens.GetUserID(r.Context()) if err != nil { log.Print(err) unauthorizedHandler(w, r) return } username, err := tokens.GetUsername(r.Context()) if err != nil { log.Print(err) unauthorizedHandler(w, r) return } user, err := m.UserByUsername(username, userID) if err != nil { if models.IsNotFoundError(err) { notFoundHandler(w, r) return } serverError(w, err) return } w.Header().Add("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(user); err != nil { serverError(w, err) } } }