diff --git a/controllers/user.go b/controllers/user.go index c6bc13b0..8c273810 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -160,35 +160,47 @@ func (c *ApiController) GetUser() { id = util.GetId(userFromUserId.Owner, userFromUserId.Name) } - if owner == "" { - owner = util.GetOwnerFromId(id) - } + var user *object.User - organization, err := object.GetOrganization(util.GetId("admin", owner)) - if err != nil { - c.ResponseError(err.Error()) - return - } + if id == "" && owner == "" { + switch { + case email != "": + user, err = object.GetUserByEmailOnly(email) + case phone != "": + user, err = object.GetUserByPhoneOnly(phone) + case userId != "": + user, err = object.GetUserByUserIdOnly(userId) + } + } else { + if owner == "" { + owner = util.GetOwnerFromId(id) + } - if !organization.IsProfilePublic { - requestUserId := c.GetSessionUsername() - hasPermission, err := object.CheckUserPermission(requestUserId, id, false, c.GetAcceptLanguage()) - if !hasPermission { + organization, err := object.GetOrganization(util.GetId("admin", owner)) + if err != nil { c.ResponseError(err.Error()) return } - } - var user *object.User - switch { - case email != "": - user, err = object.GetUserByEmail(owner, email) - case phone != "": - user, err = object.GetUserByPhone(owner, phone) - case userId != "": - user = userFromUserId - default: - user, err = object.GetUser(id) + if !organization.IsProfilePublic { + requestUserId := c.GetSessionUsername() + hasPermission, err := object.CheckUserPermission(requestUserId, id, false, c.GetAcceptLanguage()) + if !hasPermission { + c.ResponseError(err.Error()) + return + } + } + + switch { + case email != "": + user, err = object.GetUserByEmail(owner, email) + case phone != "": + user, err = object.GetUserByPhone(owner, phone) + case userId != "": + user = userFromUserId + default: + user, err = object.GetUser(id) + } } if err != nil { diff --git a/object/user.go b/object/user.go index 78dbcbd7..37564423 100644 --- a/object/user.go +++ b/object/user.go @@ -372,6 +372,24 @@ func GetUserByEmail(owner string, email string) (*User, error) { } } +func GetUserByEmailOnly(email string) (*User, error) { + if email == "" { + return nil, nil + } + + user := User{Email: email} + existed, err := ormer.Engine.Get(&user) + if err != nil { + return nil, err + } + + if existed { + return &user, nil + } else { + return nil, nil + } +} + func GetUserByPhone(owner string, phone string) (*User, error) { if owner == "" || phone == "" { return nil, nil @@ -390,6 +408,24 @@ func GetUserByPhone(owner string, phone string) (*User, error) { } } +func GetUserByPhoneOnly(phone string) (*User, error) { + if phone == "" { + return nil, nil + } + + user := User{Phone: phone} + existed, err := ormer.Engine.Get(&user) + if err != nil { + return nil, err + } + + if existed { + return &user, nil + } else { + return nil, nil + } +} + func GetUserByUserId(owner string, userId string) (*User, error) { if owner == "" || userId == "" { return nil, nil