diff --git a/graph/pkg/identity/backend.go b/graph/pkg/identity/backend.go index d230a6b13..62d9ccd13 100644 --- a/graph/pkg/identity/backend.go +++ b/graph/pkg/identity/backend.go @@ -13,15 +13,15 @@ type Backend interface { CreateUser(ctx context.Context, user libregraph.User) (*libregraph.User, error) // DeleteUser deletes a given user, identified by username or id, from the backend - DeleteUser(ctx context.Context, nameOrId string) error + DeleteUser(ctx context.Context, nameOrID string) error // UpdateUser applies changes to given user, identified by username or id - UpdateUser(ctx context.Context, nameOrId string, user libregraph.User) (*libregraph.User, error) + UpdateUser(ctx context.Context, nameOrID string, user libregraph.User) (*libregraph.User, error) - GetUser(ctx context.Context, nameOrId string) (*libregraph.User, error) + GetUser(ctx context.Context, nameOrID string) (*libregraph.User, error) GetUsers(ctx context.Context, queryParam url.Values) ([]*libregraph.User, error) - GetGroup(ctx context.Context, nameOrId string) (*libregraph.Group, error) + GetGroup(ctx context.Context, nameOrID string) (*libregraph.Group, error) GetGroups(ctx context.Context, queryParam url.Values) ([]*libregraph.Group, error) } diff --git a/graph/pkg/identity/cs3.go b/graph/pkg/identity/cs3.go index 231107d11..36e6108bd 100644 --- a/graph/pkg/identity/cs3.go +++ b/graph/pkg/identity/cs3.go @@ -15,6 +15,10 @@ import ( "github.com/owncloud/ocis/ocis-pkg/log" ) +var ( + errNotImplemented = errorcode.New(errorcode.NotSupported, "not implemented") +) + type CS3 struct { Config *config.Reva Logger *log.Logger @@ -22,17 +26,17 @@ type CS3 struct { // CreateUser implements the Backend Interface. It's currently not supported for the CS3 backend func (i *CS3) CreateUser(ctx context.Context, user libregraph.User) (*libregraph.User, error) { - return nil, errorcode.New(errorcode.NotSupported, "not implemented") + return nil, errNotImplemented } // DeleteUser implements the Backend Interface. It's currently not supported for the CS3 backend func (i *CS3) DeleteUser(ctx context.Context, nameOrID string) error { - return errorcode.New(errorcode.NotSupported, "not implemented") + return errNotImplemented } // UpdateUser implements the Backend Interface. It's currently not suported for the CS3 backend func (i *CS3) UpdateUser(ctx context.Context, nameOrID string, user libregraph.User) (*libregraph.User, error) { - return nil, errorcode.New(errorcode.NotSupported, "not implemented") + return nil, errNotImplemented } func (i *CS3) GetUser(ctx context.Context, userID string) (*libregraph.User, error) { diff --git a/graph/pkg/identity/ldap.go b/graph/pkg/identity/ldap.go index bf16afe93..04c8d7e97 100644 --- a/graph/pkg/identity/ldap.go +++ b/graph/pkg/identity/ldap.go @@ -2,6 +2,7 @@ package identity import ( "context" + "errors" "fmt" "net/url" @@ -14,6 +15,11 @@ import ( "github.com/owncloud/ocis/ocis-pkg/log" ) +var ( + errReadOnly = errorcode.New(errorcode.NotAllowed, "server is configured read-only") + errNotFound = errorcode.New(errorcode.ItemNotFound, "not found") +) + type LDAP struct { useServerUUID bool writeEnabled bool @@ -47,7 +53,7 @@ type groupAttributeMap struct { func NewLDAPBackend(lc ldap.Client, config config.LDAP, logger *log.Logger) (*LDAP, error) { if config.UserDisplayNameAttribute == "" || config.UserIDAttribute == "" || config.UserEmailAttribute == "" || config.UserNameAttribute == "" { - return nil, fmt.Errorf("Invalid user attribute mappings") + return nil, errors.New("invalid user attribute mappings") } uam := userAttributeMap{ displayName: config.UserDisplayNameAttribute, @@ -57,7 +63,7 @@ func NewLDAPBackend(lc ldap.Client, config config.LDAP, logger *log.Logger) (*LD } if config.GroupNameAttribute == "" || config.GroupIDAttribute == "" { - return nil, fmt.Errorf("Invalid group attribute mappings") + return nil, errors.New("invalid group attribute mappings") } gam := groupAttributeMap{ name: config.GroupNameAttribute, @@ -67,11 +73,11 @@ func NewLDAPBackend(lc ldap.Client, config config.LDAP, logger *log.Logger) (*LD var userScope, groupScope int var err error if userScope, err = stringToScope(config.UserSearchScope); err != nil { - return nil, fmt.Errorf("Error configuring user scope: %w", err) + return nil, fmt.Errorf("error configuring user scope: %w", err) } if groupScope, err = stringToScope(config.GroupSearchScope); err != nil { - return nil, fmt.Errorf("Error configuring group scope: %w", err) + return nil, fmt.Errorf("error configuring group scope: %w", err) } return &LDAP{ @@ -95,7 +101,7 @@ func NewLDAPBackend(lc ldap.Client, config config.LDAP, logger *log.Logger) (*LD // configured LDAP server func (i *LDAP) CreateUser(ctx context.Context, user libregraph.User) (*libregraph.User, error) { if !i.writeEnabled { - return nil, errorcode.New(errorcode.NotAllowed, "server is configured read-only") + return nil, errReadOnly } ar := ldap.AddRequest{ DN: fmt.Sprintf("uid=%s,%s", *user.OnPremisesSamAccountName, i.userBaseDN), @@ -161,7 +167,7 @@ func (i *LDAP) CreateUser(ctx context.Context, user libregraph.User) (*libregrap // by name or id from the LDAP server func (i *LDAP) DeleteUser(ctx context.Context, nameOrID string) error { if !i.writeEnabled { - return errorcode.New(errorcode.NotAllowed, "server is configured read-only") + return errReadOnly } e, err := i.getLDAPUserByNameOrID(nameOrID) if err != nil { @@ -177,7 +183,7 @@ func (i *LDAP) DeleteUser(ctx context.Context, nameOrID string) error { // UpdateUser implements the Backend Interface. It's currently not suported for the CS3 backedn func (i *LDAP) UpdateUser(ctx context.Context, nameOrID string, user libregraph.User) (*libregraph.User, error) { if !i.writeEnabled { - return nil, errorcode.New(errorcode.NotAllowed, "server is configured read-only") + return nil, errReadOnly } e, err := i.getLDAPUserByNameOrID(nameOrID) if err != nil { @@ -249,7 +255,7 @@ func (i *LDAP) getUserByDN(dn string) (*ldap.Entry, error) { return nil, errorcode.New(errorcode.ItemNotFound, err.Error()) } if len(res.Entries) == 0 { - return nil, errorcode.New(errorcode.ItemNotFound, "not found") + return nil, errNotFound } return res.Entries[0], nil @@ -283,7 +289,7 @@ func (i *LDAP) getLDAPUserByNameOrID(nameOrID string) (*ldap.Entry, error) { return nil, errorcode.New(errorcode.ItemNotFound, errmsg) } if len(res.Entries) == 0 { - return nil, errorcode.New(errorcode.ItemNotFound, "not found") + return nil, errNotFound } return res.Entries[0], nil @@ -367,7 +373,7 @@ func (i *LDAP) GetGroup(ctx context.Context, groupID string) (*libregraph.Group, return nil, errorcode.New(errorcode.ItemNotFound, errmsg) } if len(res.Entries) == 0 { - return nil, errorcode.New(errorcode.ItemNotFound, "not found") + return nil, errNotFound } return i.createGroupModelFromLDAP(res.Entries[0]), nil @@ -449,7 +455,7 @@ func stringToScope(scope string) (int, error) { case "base": s = ldap.ScopeBaseObject default: - return 0, fmt.Errorf("Invalid Scope '%s'", scope) + return 0, fmt.Errorf("invalid Scope '%s'", scope) } return s, nil } diff --git a/graph/pkg/identity/ldap/reconnect.go b/graph/pkg/identity/ldap/reconnect.go index 8fba2e610..8442bbd66 100644 --- a/graph/pkg/identity/ldap/reconnect.go +++ b/graph/pkg/identity/ldap/reconnect.go @@ -14,6 +14,10 @@ import ( "github.com/owncloud/ocis/ocis-pkg/log" ) +var ( + errMaxRetries = errors.New("max retries") +) + type ldapConnection struct { Conn *ldap.Conn Error error @@ -61,7 +65,7 @@ func (c ConnWithReconnect) Search(sr *ldap.SearchRequest) (*ldap.SearchResult, e c.logger.Debug().Msg("retrying LDAP Search") } // if we get here we reached the maximum retries. So return an error - return nil, ldap.NewError(ldap.ErrorNetwork, errors.New("max retries")) + return nil, ldap.NewError(ldap.ErrorNetwork, errMaxRetries) } func (c ConnWithReconnect) Add(a *ldap.AddRequest) error { @@ -84,7 +88,7 @@ func (c ConnWithReconnect) Add(a *ldap.AddRequest) error { c.logger.Debug().Msg("retrying LDAP Add") } // if we get here we reached the maximum retries. So return an error - return ldap.NewError(ldap.ErrorNetwork, errors.New("max retries")) + return ldap.NewError(ldap.ErrorNetwork, errMaxRetries) } func (c ConnWithReconnect) Del(d *ldap.DelRequest) error { @@ -108,7 +112,7 @@ func (c ConnWithReconnect) Del(d *ldap.DelRequest) error { c.logger.Debug().Msg("retrying LDAP Del") } // if we get here we reached the maximum retries. So return an error - return ldap.NewError(ldap.ErrorNetwork, errors.New("max retries")) + return ldap.NewError(ldap.ErrorNetwork, errMaxRetries) } func (c ConnWithReconnect) Modify(m *ldap.ModifyRequest) error { @@ -132,7 +136,7 @@ func (c ConnWithReconnect) Modify(m *ldap.ModifyRequest) error { c.logger.Debug().Msg("retrying LDAP Modify") } // if we get here we reached the maximum retries. So return an error - return ldap.NewError(ldap.ErrorNetwork, errors.New("max retries")) + return ldap.NewError(ldap.ErrorNetwork, errMaxRetries) } func (c ConnWithReconnect) ModifyDN(m *ldap.ModifyDNRequest) error { @@ -156,7 +160,7 @@ func (c ConnWithReconnect) ModifyDN(m *ldap.ModifyDNRequest) error { c.logger.Debug().Msg("retrying LDAP ModifyDN") } // if we get here we reached the maximum retries. So return an error - return ldap.NewError(ldap.ErrorNetwork, errors.New("max retries")) + return ldap.NewError(ldap.ErrorNetwork, errMaxRetries) } func (c ConnWithReconnect) GetConnection() (*ldap.Conn, error) { diff --git a/sonar-project.properties b/sonar-project.properties index 41c6a0089..4b378d31e 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -36,5 +36,5 @@ sonar.go.coverage.reportPaths=cache/coverage/* sonar.go.golangci-lint.reportPaths=cache/checkstyle/accounts_checkstyle.xml,cache/checkstyle/glauth_checkstyle.xml,cache/checkstyle/graph_checkstyle.xml,cache/checkstyle/graph-explorer_checkstyle.xml,cache/checkstyle/idp_checkstyle.xml,cache/checkstyle/ocis_checkstyle.xml,cache/checkstyle/ocis-pkg_checkstyle.xml,cache/checkstyle/ocs_checkstyle.xml,cache/checkstyle/proxy_checkstyle.xml,cache/checkstyle/settings_checkstyle.xml,cache/checkstyle/storage_checkstyle.xml,cache/checkstyle/store_checkstyle.xml,cache/checkstyle/thumbnails_checkstyle.xml,cache/checkstyle/web_checkstyle.xml,cache/checkstyle/webdav_checkstyle.xml # Exclude files -sonar.exclusions=**/third_party,docs/**,changelog/**,*/pkg/assets/embed.go,idp/assets/identifier/**,**/package.json,**/rollup.config.js,CHANGELOG.md,**/pkg/proto/**/*.pb.*,deployments/**,tests/**,vendor-bin/**,README.md +sonar.exclusions=**/third_party,docs/**,changelog/**,*/pkg/assets/embed.go,idp/assets/identifier/**,**/package.json,**/rollup.config.js,CHANGELOG.md,**/pkg/proto/**/*.pb.*,deployments/**,tests/**,vendor-bin/**,README.md,**/mocks/ sonar.coverage.exclusions=**/*_test.go