package svc import ( "errors" "net/http" "net/url" revactx "github.com/cs3org/reva/pkg/ctx" "github.com/go-chi/chi/v5" "github.com/go-chi/render" "github.com/owncloud/ocis/graph/pkg/identity" "github.com/owncloud/ocis/graph/pkg/service/v0/errorcode" //msgraph "github.com/owncloud/open-graph-api-go" // FIXME needs OnPremisesSamAccountName, OnPremisesDomainName and AdditionalData ) // GetMe implements the Service interface. func (g Graph) GetMe(w http.ResponseWriter, r *http.Request) { u, ok := revactx.ContextGetUser(r.Context()) if !ok { g.logger.Error().Msg("user not in context") errorcode.ServiceNotAvailable.Render(w, r, http.StatusInternalServerError, "user not in context") return } g.logger.Info().Interface("user", u).Msg("User in /me") me := identity.CreateUserModelFromCS3(u) render.Status(r, http.StatusOK) render.JSON(w, r, me) } // GetUsers implements the Service interface. // TODO use cs3 api to look up user func (g Graph) GetUsers(w http.ResponseWriter, r *http.Request) { users, err := g.identityBackend.GetUsers(r.Context(), r.URL.Query()) if err != nil { var errcode errorcode.Error if errors.As(err, &errcode) { errcode.Render(w, r) } else { errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) } } render.Status(r, http.StatusOK) render.JSON(w, r, &listResponse{Value: users}) } // GetUser implements the Service interface. func (g Graph) GetUser(w http.ResponseWriter, r *http.Request) { userID := chi.URLParam(r, "userID") userID, err := url.PathUnescape(userID) if err != nil { errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping user id failed") } if userID == "" { errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "missing user id") return } user, err := g.identityBackend.GetUser(r.Context(), userID) if err != nil { var errcode errorcode.Error if errors.As(err, &errcode) { errcode.Render(w, r) } else { errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error()) } } render.Status(r, http.StatusOK) render.JSON(w, r, user) }