diff --git a/controllers/account.go b/controllers/account.go index e49f4a5e..03e2fd76 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -380,7 +380,8 @@ func (c *ApiController) GetAccount() { return } - u, err := object.GetMaskedUser(user) + isAdminOrSelf := c.IsAdminOrSelf(user) + u, err := object.GetMaskedUser(user, isAdminOrSelf) if err != nil { c.ResponseError(err.Error()) return diff --git a/controllers/base.go b/controllers/base.go index 62b54100..cd1e3082 100644 --- a/controllers/base.go +++ b/controllers/base.go @@ -55,6 +55,18 @@ func (c *ApiController) IsAdmin() bool { return isGlobalAdmin || user.IsAdmin } +func (c *ApiController) IsAdminOrSelf(user2 *object.User) bool { + isGlobalAdmin, user := c.isGlobalAdmin() + if isGlobalAdmin || (user != nil && user.IsAdmin) { + return true + } + + if user.Owner == user2.Owner && user.Name == user2.Name { + return true + } + return false +} + func (c *ApiController) isGlobalAdmin() (bool, *object.User) { username := c.GetSessionUsername() if strings.HasPrefix(username, "app/") { diff --git a/controllers/user.go b/controllers/user.go index f64c61dc..37587775 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -208,7 +208,8 @@ func (c *ApiController) GetUser() { return } - maskedUser, err := object.GetMaskedUser(user) + isAdminOrSelf := c.IsAdminOrSelf(user) + maskedUser, err := object.GetMaskedUser(user, isAdminOrSelf) if err != nil { c.ResponseError(err.Error()) return diff --git a/object/record.go b/object/record.go index f2ad432d..7a71ef19 100644 --- a/object/record.go +++ b/object/record.go @@ -161,7 +161,8 @@ func SendWebhooks(record *Record) error { if matched { if webhook.IsUserExtended { - user, err := GetMaskedUser(getUser(record.Organization, record.User)) + user, err := getUser(record.Organization, record.User) + user, err = GetMaskedUser(user, false, err) if err != nil { return err } diff --git a/object/user.go b/object/user.go index bf04a15b..97ed52cc 100644 --- a/object/user.go +++ b/object/user.go @@ -418,7 +418,7 @@ func GetUserNoCheck(id string) (*User, error) { return getUser(owner, name) } -func GetMaskedUser(user *User, errs ...error) (*User, error) { +func GetMaskedUser(user *User, isAdminOrSelf bool, errs ...error) (*User, error) { if len(errs) > 0 && errs[0] != nil { return nil, errs[0] } @@ -430,9 +430,13 @@ func GetMaskedUser(user *User, errs ...error) (*User, error) { if user.Password != "" { user.Password = "***" } - if user.AccessSecret != "" { - user.AccessSecret = "***" + + if !isAdminOrSelf { + if user.AccessSecret != "" { + user.AccessSecret = "***" + } } + if user.ManagedAccounts != nil { for _, manageAccount := range user.ManagedAccounts { manageAccount.Password = "***" @@ -456,7 +460,7 @@ func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) { var err error for _, user := range users { - user, err = GetMaskedUser(user) + user, err = GetMaskedUser(user, false) if err != nil { return nil, err }