mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-08 21:30:07 -06:00
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package svc
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
revactx "github.com/opencloud-eu/reva/v2/pkg/ctx"
|
|
|
|
"github.com/opencloud-eu/opencloud/services/graph/pkg/errorcode"
|
|
)
|
|
|
|
// HTTPDataHandler returns data from the request, it should exit early and return false in the case of any error
|
|
type HTTPDataHandler[T any] func(w http.ResponseWriter, r *http.Request) (T, bool)
|
|
|
|
var (
|
|
// ErrNoUser is returned when no user is found
|
|
ErrNoUser = errors.New("no user found")
|
|
)
|
|
|
|
// GetUserIDFromCTX extracts the user from the request
|
|
func GetUserIDFromCTX(w http.ResponseWriter, r *http.Request) (string, bool) {
|
|
u, ok := revactx.ContextGetUser(r.Context())
|
|
if !ok {
|
|
errorcode.GeneralException.Render(w, r, http.StatusMethodNotAllowed, ErrNoUser.Error())
|
|
}
|
|
|
|
return u.GetId().GetOpaqueId(), ok
|
|
}
|
|
|
|
func GetSlugValue(key string) HTTPDataHandler[string] {
|
|
return func(w http.ResponseWriter, r *http.Request) (string, bool) {
|
|
v, err := url.PathUnescape(chi.URLParam(r, key))
|
|
if err != nil {
|
|
errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, fmt.Sprintf(`failed to get slug: "%s"`, key))
|
|
}
|
|
|
|
return v, err == nil
|
|
}
|
|
}
|