mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-05-13 06:49:38 -05:00
@@ -47,6 +47,12 @@ linters-settings:
|
||||
severity:
|
||||
default-severity: error
|
||||
|
||||
skip-dirs:
|
||||
- protogen/gen
|
||||
- docs
|
||||
- deployments
|
||||
- changelog
|
||||
|
||||
issues:
|
||||
exclude-use-default: true
|
||||
exclude-rules:
|
||||
|
||||
@@ -33,6 +33,13 @@ import (
|
||||
merrors "go-micro.dev/v4/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
_spaceTypePersonal = "personal"
|
||||
_spaceTypeProject = "project"
|
||||
|
||||
_sortDescending = "desc"
|
||||
)
|
||||
|
||||
var (
|
||||
_invalidSpaceNameCharacters = []string{`/`, `\`, `.`, `:`, `?`, `*`, `"`, `>`, `<`, `|`}
|
||||
_maxSpaceNameLength = 255
|
||||
@@ -253,8 +260,8 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) {
|
||||
driveType = *drive.DriveType
|
||||
}
|
||||
switch driveType {
|
||||
case "", "project":
|
||||
driveType = "project"
|
||||
case "", _spaceTypeProject:
|
||||
driveType = _spaceTypeProject
|
||||
default:
|
||||
logger.Debug().Str("type", driveType).Msg("could not create drive: drives of this type cannot be created via this api")
|
||||
errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "drives of this type cannot be created via this api")
|
||||
@@ -275,7 +282,7 @@ func (g Graph) CreateDrive(w http.ResponseWriter, r *http.Request) {
|
||||
csr.Opaque = utils.AppendPlainToOpaque(csr.Opaque, "spaceAlias", *drive.DriveAlias)
|
||||
}
|
||||
|
||||
if driveType == "personal" {
|
||||
if driveType == _spaceTypePersonal {
|
||||
csr.Owner = us
|
||||
}
|
||||
|
||||
@@ -911,7 +918,7 @@ func sortSpaces(req *godata.GoDataRequest, spaces []*libregraph.Drive) ([]*libre
|
||||
return nil, errors.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value)
|
||||
}
|
||||
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == "desc" {
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending {
|
||||
sorter = sort.Reverse(sorter)
|
||||
}
|
||||
sort.Sort(sorter)
|
||||
|
||||
@@ -56,7 +56,7 @@ var sortTests = []sortTest{
|
||||
Query: &godata.GoDataQuery{
|
||||
OrderBy: &godata.GoDataOrderByQuery{
|
||||
OrderByItems: []*godata.OrderByItem{
|
||||
{Field: &godata.Token{Value: "name"}, Order: "desc"},
|
||||
{Field: &godata.Token{Value: "name"}, Order: _sortDescending},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -94,7 +94,7 @@ var sortTests = []sortTest{
|
||||
Query: &godata.GoDataQuery{
|
||||
OrderBy: &godata.GoDataOrderByQuery{
|
||||
OrderByItems: []*godata.OrderByItem{
|
||||
{Field: &godata.Token{Value: "lastModifiedDateTime"}, Order: "desc"},
|
||||
{Field: &godata.Token{Value: "lastModifiedDateTime"}, Order: _sortDescending},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -427,7 +427,7 @@ func sortGroups(req *godata.GoDataRequest, groups []*libregraph.Group) ([]*libre
|
||||
return nil, fmt.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value)
|
||||
}
|
||||
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == "desc" {
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending {
|
||||
sorter = sort.Reverse(sorter)
|
||||
}
|
||||
sort.Sort(sorter)
|
||||
|
||||
@@ -499,7 +499,7 @@ func sortUsers(req *godata.GoDataRequest, users []*libregraph.User) ([]*libregra
|
||||
return nil, fmt.Errorf("we do not support <%s> as a order parameter", req.Query.OrderBy.OrderByItems[0].Field.Value)
|
||||
}
|
||||
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == "desc" {
|
||||
if req.Query.OrderBy.OrderByItems[0].Order == _sortDescending {
|
||||
sorter = sort.Reverse(sorter)
|
||||
}
|
||||
sort.Sort(sorter)
|
||||
|
||||
@@ -139,7 +139,7 @@ func ensureEncryptionSecretExists(path string) error {
|
||||
|
||||
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0600)
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
@@ -175,7 +175,7 @@ func ensureSigningPrivateKeyExists(paths []string) error {
|
||||
|
||||
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0600)
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
|
||||
@@ -2,35 +2,32 @@ package svc
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/owncloud/ocis/v2/services/ocs/pkg/service/v0/data"
|
||||
"github.com/owncloud/ocis/v2/services/ocs/pkg/service/v0/response"
|
||||
)
|
||||
|
||||
const (
|
||||
_backendCS3 = "cs3"
|
||||
)
|
||||
|
||||
// ListUserGroups lists a users groups
|
||||
func (o Ocs) ListUserGroups(w http.ResponseWriter, r *http.Request) {
|
||||
userid := chi.URLParam(r, "userid")
|
||||
userid, _ = url.PathUnescape(userid)
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
// TODO
|
||||
o.mustRender(w, r, response.DataRender(&data.Groups{}))
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// AddToGroup adds a user to a group
|
||||
func (o Ocs) AddToGroup(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
// TODO
|
||||
o.cs3WriteNotSupported(w, r)
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
@@ -39,10 +36,9 @@ func (o Ocs) AddToGroup(w http.ResponseWriter, r *http.Request) {
|
||||
// RemoveFromGroup removes a user from a group
|
||||
func (o Ocs) RemoveFromGroup(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
// TODO
|
||||
o.cs3WriteNotSupported(w, r)
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
@@ -51,23 +47,20 @@ func (o Ocs) RemoveFromGroup(w http.ResponseWriter, r *http.Request) {
|
||||
// ListGroups lists all groups
|
||||
func (o Ocs) ListGroups(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
// TODO
|
||||
o.mustRender(w, r, response.DataRender(&data.Groups{}))
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// AddGroup adds a group
|
||||
// oC10 implementation: https://github.com/owncloud/core/blob/762780a23c9eadda4fb5fa8db99eba66a5100b6e/apps/provisioning_api/lib/Groups.php#L126-L154
|
||||
func (o Ocs) AddGroup(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
o.cs3WriteNotSupported(w, r)
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
@@ -76,9 +69,8 @@ func (o Ocs) AddGroup(w http.ResponseWriter, r *http.Request) {
|
||||
// DeleteGroup deletes a group
|
||||
func (o Ocs) DeleteGroup(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
o.cs3WriteNotSupported(w, r)
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
@@ -87,12 +79,10 @@ func (o Ocs) DeleteGroup(w http.ResponseWriter, r *http.Request) {
|
||||
// GetGroupMembers lists all members of a group
|
||||
func (o Ocs) GetGroupMembers(w http.ResponseWriter, r *http.Request) {
|
||||
switch o.config.AccountBackend {
|
||||
case "cs3":
|
||||
case _backendCS3:
|
||||
// TODO
|
||||
o.mustRender(w, r, response.DataRender(&data.Users{}))
|
||||
return
|
||||
default:
|
||||
o.logger.Fatal().Msgf("Invalid accounts backend type '%s'", o.config.AccountBackend)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"encoding/hex"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
storemsg "github.com/owncloud/ocis/v2/protogen/gen/ocis/messages/store/v0"
|
||||
storesvc "github.com/owncloud/ocis/v2/protogen/gen/ocis/services/store/v0"
|
||||
@@ -37,7 +36,6 @@ func (o Ocs) GetSelf(w http.ResponseWriter, r *http.Request) {
|
||||
GIDNumber: u.GidNumber,
|
||||
}
|
||||
o.mustRender(w, r, response.DataRender(d))
|
||||
return
|
||||
}
|
||||
|
||||
// GetUser returns the user with the given userid
|
||||
@@ -237,11 +235,6 @@ func (o Ocs) ListUsers(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
// escapeValue escapes all special characters in the value
|
||||
func escapeValue(value string) string {
|
||||
return strings.ReplaceAll(value, "'", "''")
|
||||
}
|
||||
|
||||
func (o Ocs) fetchAccountFromCS3Backend(ctx context.Context, name string) (*cs3.User, error) {
|
||||
backend := o.getCS3Backend()
|
||||
u, _, err := backend.GetUserByClaims(ctx, "username", name, false)
|
||||
@@ -254,5 +247,4 @@ func (o Ocs) fetchAccountFromCS3Backend(ctx context.Context, name string) (*cs3.
|
||||
func (o Ocs) cs3WriteNotSupported(w http.ResponseWriter, r *http.Request) {
|
||||
o.logger.Warn().Msg("the CS3 backend does not support adding or updating users")
|
||||
o.NotImplementedStub(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ func (s Store) ListRoleAssignments(accountUUID string) ([]*settingsmsg.UserRoleA
|
||||
assignmentsFolder := s.buildFolderPathForRoleAssignments(false)
|
||||
assignmentFiles, err := os.ReadDir(assignmentsFolder)
|
||||
if err != nil {
|
||||
return records, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
for _, assignmentFile := range assignmentFiles {
|
||||
|
||||
@@ -23,7 +23,7 @@ func (s Store) ListBundles(bundleType settingsmsg.Bundle_Type, bundleIDs []strin
|
||||
bundlesFolder := s.buildFolderPathForBundles(false)
|
||||
bundleFiles, err := os.ReadDir(bundlesFolder)
|
||||
if err != nil {
|
||||
return []*settingsmsg.Bundle{}, nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
records := make([]*settingsmsg.Bundle, 0, len(bundleFiles))
|
||||
@@ -133,7 +133,7 @@ func (s Store) AddSettingToBundle(bundleID string, setting *settingsmsg.Setting)
|
||||
func (s Store) RemoveSettingFromBundle(bundleID string, settingID string) error {
|
||||
bundle, err := s.ReadBundle(bundleID)
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
if ok := removeSetting(bundle, settingID); ok {
|
||||
if _, err := s.WriteBundle(bundle); err != nil {
|
||||
|
||||
@@ -18,7 +18,7 @@ func (s Store) ListValues(bundleID, accountUUID string) ([]*settingsmsg.Value, e
|
||||
valuesFolder := s.buildFolderPathForValues(false)
|
||||
valueFiles, err := os.ReadDir(valuesFolder)
|
||||
if err != nil {
|
||||
return []*settingsmsg.Value{}, nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
records := make([]*settingsmsg.Value, 0, len(valueFiles))
|
||||
@@ -71,7 +71,7 @@ func (s Store) ReadValueByUniqueIdentifiers(accountUUID, settingID string) (*set
|
||||
s.Logger.Debug().Msgf("reading contents from file: %v", filepath.Join(valuesFolder, files[i].Name()))
|
||||
if err := s.parseRecordFromFile(&r, filepath.Join(valuesFolder, files[i].Name())); err != nil {
|
||||
s.Logger.Debug().Msgf("match found: %v", filepath.Join(valuesFolder, files[i].Name()))
|
||||
return &settingsmsg.Value{}, nil
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// if value saved without accountUUID, then it's a global value
|
||||
|
||||
@@ -11,6 +11,10 @@ import (
|
||||
"github.com/owncloud/ocis/v2/ocis-pkg/config/envdecode"
|
||||
)
|
||||
|
||||
const (
|
||||
_backendCS3 = "cs3"
|
||||
)
|
||||
|
||||
// ParseConfig loads configuration from known paths.
|
||||
func ParseConfig(cfg *config.Config) error {
|
||||
_, err := ociscfg.BindSourcesToStructs(cfg.Service.Name, cfg)
|
||||
@@ -38,19 +42,19 @@ func Validate(cfg *config.Config) error {
|
||||
return shared.MissingJWTTokenError(cfg.Service.Name)
|
||||
}
|
||||
|
||||
if cfg.PublicSharingDriver == "cs3" && cfg.PublicSharingDrivers.CS3.SystemUserAPIKey == "" {
|
||||
if cfg.PublicSharingDriver == _backendCS3 && cfg.PublicSharingDrivers.CS3.SystemUserAPIKey == "" {
|
||||
return shared.MissingSystemUserApiKeyError(cfg.Service.Name)
|
||||
}
|
||||
|
||||
if cfg.PublicSharingDriver == "cs3" && cfg.PublicSharingDrivers.CS3.SystemUserID == "" {
|
||||
if cfg.PublicSharingDriver == _backendCS3 && cfg.PublicSharingDrivers.CS3.SystemUserID == "" {
|
||||
return shared.MissingSystemUserID(cfg.Service.Name)
|
||||
}
|
||||
|
||||
if cfg.UserSharingDriver == "cs3" && cfg.UserSharingDrivers.CS3.SystemUserAPIKey == "" {
|
||||
if cfg.UserSharingDriver == _backendCS3 && cfg.UserSharingDrivers.CS3.SystemUserAPIKey == "" {
|
||||
return shared.MissingSystemUserApiKeyError(cfg.Service.Name)
|
||||
}
|
||||
|
||||
if cfg.UserSharingDriver == "cs3" && cfg.UserSharingDrivers.CS3.SystemUserID == "" {
|
||||
if cfg.UserSharingDriver == _backendCS3 && cfg.UserSharingDrivers.CS3.SystemUserID == "" {
|
||||
return shared.MissingSystemUserID(cfg.Service.Name)
|
||||
}
|
||||
|
||||
|
||||
@@ -82,13 +82,11 @@ func (g Thumbnail) GetThumbnail(ctx context.Context, req *thumbnailssvc.GetThumb
|
||||
}
|
||||
generator, err := thumbnail.GeneratorForType(tType)
|
||||
if err != nil {
|
||||
g.logger.Debug().Str("thumbnail_type", tType).Msg("unsupported thumbnail type")
|
||||
return nil
|
||||
return merrors.BadRequest(g.serviceID, "unsupported thumbnail type")
|
||||
}
|
||||
encoder, err := thumbnail.EncoderForType(tType)
|
||||
if err != nil {
|
||||
g.logger.Debug().Str("thumbnail_type", tType).Msg("unsupported thumbnail type")
|
||||
return nil
|
||||
return merrors.BadRequest(g.serviceID, "unsupported thumbnail type")
|
||||
}
|
||||
|
||||
var key string
|
||||
|
||||
@@ -10,10 +10,6 @@ import (
|
||||
"github.com/owncloud/ocis/v2/services/webdav/pkg/prop"
|
||||
)
|
||||
|
||||
const (
|
||||
_spaceTypeProject = "project"
|
||||
)
|
||||
|
||||
type countingReader struct {
|
||||
n int
|
||||
r io.Reader
|
||||
|
||||
Reference in New Issue
Block a user