GetUser now returns a pointer
This commit is contained in:
parent
8fbe721453
commit
a4112c1404
|
@ -173,7 +173,7 @@ func (l *Label) ReadOne() (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
l.CreatedBy = &user
|
||||
l.CreatedBy = user
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ type List struct {
|
|||
NamespaceID int64 `xorm:"int(11) INDEX not null" json:"-" param:"namespace"`
|
||||
|
||||
// The user who created this list.
|
||||
Owner User `xorm:"-" json:"owner" valid:"-"`
|
||||
Owner *User `xorm:"-" json:"owner" valid:"-"`
|
||||
// An array of tasks which belong to the list.
|
||||
Tasks []*ListTask `xorm:"-" json:"tasks"`
|
||||
|
||||
|
@ -224,7 +224,7 @@ func AddListDetails(lists []*List) (err error) {
|
|||
// Owner
|
||||
for _, owner := range owners {
|
||||
if list.OwnerID == owner.ID {
|
||||
lists[in].Owner = *owner
|
||||
lists[in].Owner = owner
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -326,7 +326,7 @@ func (l *List) Create(a web.Auth) (err error) {
|
|||
}
|
||||
|
||||
l.OwnerID = doer.ID
|
||||
l.Owner = *doer
|
||||
l.Owner = doer
|
||||
l.ID = 0 // Otherwise only the first time a new list would be created
|
||||
|
||||
return CreateOrUpdateList(l)
|
||||
|
|
|
@ -193,7 +193,7 @@ func (t *ListTask) addNewAssigneeByID(newAssigneeID int64, list *List) (err erro
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
canRead, err := list.CanRead(&newAssignee)
|
||||
canRead, err := list.CanRead(newAssignee)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ type ListTask struct {
|
|||
Updated int64 `xorm:"updated not null" json:"updated"`
|
||||
|
||||
// The user who initially created the task.
|
||||
CreatedBy User `xorm:"-" json:"createdBy" valid:"-"`
|
||||
CreatedBy *User `xorm:"-" json:"createdBy" valid:"-"`
|
||||
|
||||
web.CRUDable `xorm:"-" json:"-"`
|
||||
web.Rights `xorm:"-" json:"-"`
|
||||
|
@ -411,7 +411,7 @@ func addMoreInfoToTasks(taskMap map[int64]*ListTask) (tasks []*ListTask, err err
|
|||
for _, task := range taskMap {
|
||||
|
||||
// Make created by user objects
|
||||
taskMap[task.ID].CreatedBy = *users[task.CreatedByID]
|
||||
taskMap[task.ID].CreatedBy = users[task.CreatedByID]
|
||||
|
||||
// Add the reminders
|
||||
taskMap[task.ID].RemindersUnix = taskRemindersUnix[task.ID]
|
||||
|
|
|
@ -34,7 +34,7 @@ type Namespace struct {
|
|||
OwnerID int64 `xorm:"int(11) not null INDEX" json:"-"`
|
||||
|
||||
// The user who owns this namespace
|
||||
Owner User `xorm:"-" json:"owner" valid:"-"`
|
||||
Owner *User `xorm:"-" json:"owner" valid:"-"`
|
||||
|
||||
// A unix timestamp when this namespace was created. You cannot change this value.
|
||||
Created int64 `xorm:"created not null" json:"created"`
|
||||
|
@ -148,7 +148,7 @@ func (n *Namespace) ReadAll(search string, a web.Auth, page int) (interface{}, e
|
|||
// Create our pseudo-namespace to hold the shared lists
|
||||
// We want this one at the beginning, which is why we create it here
|
||||
pseudonamespace := PseudoNamespace
|
||||
pseudonamespace.Owner = *doer
|
||||
pseudonamespace.Owner = doer
|
||||
all = append(all, &NamespaceWithLists{
|
||||
pseudonamespace,
|
||||
[]*List{},
|
||||
|
@ -238,7 +238,7 @@ func (n *Namespace) ReadAll(search string, a web.Auth, page int) (interface{}, e
|
|||
// Users
|
||||
for _, u := range users {
|
||||
if n.OwnerID == u.ID {
|
||||
all[i].Owner = *u
|
||||
all[i].Owner = u
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ type Team struct {
|
|||
CreatedByID int64 `xorm:"int(11) not null INDEX" json:"-"`
|
||||
|
||||
// The user who created this team.
|
||||
CreatedBy User `xorm:"-" json:"createdBy"`
|
||||
CreatedBy *User `xorm:"-" json:"createdBy"`
|
||||
// An array of all members in this team.
|
||||
Members []*TeamUser `xorm:"-" json:"members"`
|
||||
|
||||
|
@ -178,7 +178,7 @@ func (t *Team) Create(a web.Auth) (err error) {
|
|||
}
|
||||
|
||||
t.CreatedByID = doer.ID
|
||||
t.CreatedBy = *doer
|
||||
t.CreatedBy = doer
|
||||
|
||||
_, err = x.Insert(t)
|
||||
if err != nil {
|
||||
|
|
|
@ -99,8 +99,8 @@ type APIUserPassword struct {
|
|||
}
|
||||
|
||||
// APIFormat formats an API User into a normal user struct
|
||||
func (apiUser *APIUserPassword) APIFormat() User {
|
||||
return User{
|
||||
func (apiUser *APIUserPassword) APIFormat() *User {
|
||||
return &User{
|
||||
ID: apiUser.ID,
|
||||
Username: apiUser.Username,
|
||||
Password: apiUser.Password,
|
||||
|
@ -109,41 +109,41 @@ func (apiUser *APIUserPassword) APIFormat() User {
|
|||
}
|
||||
|
||||
// GetUserByID gets informations about a user by its ID
|
||||
func GetUserByID(id int64) (user User, err error) {
|
||||
func GetUserByID(id int64) (user *User, err error) {
|
||||
// Apparently xorm does otherwise look for all users but return only one, which leads to returing one even if the ID is 0
|
||||
if id < 1 {
|
||||
return User{}, ErrUserDoesNotExist{}
|
||||
return &User{}, ErrUserDoesNotExist{}
|
||||
}
|
||||
|
||||
return GetUser(User{ID: id})
|
||||
return GetUser(&User{ID: id})
|
||||
}
|
||||
|
||||
// GetUserByUsername gets a user from its user name. This is an extra function to be able to add an extra error check.
|
||||
func GetUserByUsername(username string) (user User, err error) {
|
||||
func GetUserByUsername(username string) (user *User, err error) {
|
||||
if username == "" {
|
||||
return User{}, ErrUserDoesNotExist{}
|
||||
return &User{}, ErrUserDoesNotExist{}
|
||||
}
|
||||
|
||||
return GetUser(User{Username: username})
|
||||
return GetUser(&User{Username: username})
|
||||
}
|
||||
|
||||
// GetUser gets a user object
|
||||
func GetUser(user User) (userOut User, err error) {
|
||||
func GetUser(user *User) (userOut *User, err error) {
|
||||
userOut = user
|
||||
exists, err := x.Get(&userOut)
|
||||
|
||||
if !exists {
|
||||
return User{}, ErrUserDoesNotExist{UserID: user.ID}
|
||||
return &User{}, ErrUserDoesNotExist{UserID: user.ID}
|
||||
}
|
||||
|
||||
return userOut, err
|
||||
}
|
||||
|
||||
// CheckUserCredentials checks user credentials
|
||||
func CheckUserCredentials(u *UserLogin) (User, error) {
|
||||
func CheckUserCredentials(u *UserLogin) (*User, error) {
|
||||
// Check if we have any credentials
|
||||
if u.Password == "" || u.Username == "" {
|
||||
return User{}, ErrNoUsernamePassword{}
|
||||
return &User{}, ErrNoUsernamePassword{}
|
||||
}
|
||||
|
||||
// Check if the user exists
|
||||
|
@ -151,21 +151,21 @@ func CheckUserCredentials(u *UserLogin) (User, error) {
|
|||
if err != nil {
|
||||
// hashing the password takes a long time, so we hash something to not make it clear if the username was wrong
|
||||
bcrypt.GenerateFromPassword([]byte(u.Username), 14)
|
||||
return User{}, ErrWrongUsernameOrPassword{}
|
||||
return &User{}, ErrWrongUsernameOrPassword{}
|
||||
}
|
||||
|
||||
// User is invalid if it needs to verify its email address
|
||||
if !user.IsActive {
|
||||
return User{}, ErrEmailNotConfirmed{UserID: user.ID}
|
||||
return &User{}, ErrEmailNotConfirmed{UserID: user.ID}
|
||||
}
|
||||
|
||||
// Check the users password
|
||||
err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(u.Password))
|
||||
if err != nil {
|
||||
if err == bcrypt.ErrMismatchedHashAndPassword {
|
||||
return User{}, ErrWrongUsernameOrPassword{}
|
||||
return &User{}, ErrWrongUsernameOrPassword{}
|
||||
}
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
return user, nil
|
||||
|
@ -216,13 +216,13 @@ func UpdateActiveUsersFromContext(c echo.Context) (err error) {
|
|||
}
|
||||
|
||||
// CreateUser creates a new user and inserts it into the database
|
||||
func CreateUser(user User) (newUser User, err error) {
|
||||
func CreateUser(user *User) (newUser *User, err error) {
|
||||
|
||||
newUser = user
|
||||
|
||||
// Check if we have all needed informations
|
||||
if newUser.Password == "" || newUser.Username == "" || newUser.Email == "" {
|
||||
return User{}, ErrNoUsernamePassword{}
|
||||
return &User{}, ErrNoUsernamePassword{}
|
||||
}
|
||||
|
||||
// Check if the user already existst with that username
|
||||
|
@ -232,31 +232,31 @@ func CreateUser(user User) (newUser User, err error) {
|
|||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
}
|
||||
if exists {
|
||||
return User{}, ErrUsernameExists{newUser.ID, newUser.Username}
|
||||
return &User{}, ErrUsernameExists{newUser.ID, newUser.Username}
|
||||
}
|
||||
|
||||
// Check if the user already existst with that email
|
||||
exists = true
|
||||
existingUser, err = GetUser(User{Email: newUser.Email})
|
||||
existingUser, err = GetUser(&User{Email: newUser.Email})
|
||||
if err != nil {
|
||||
if IsErrUserDoesNotExist(err) {
|
||||
exists = false
|
||||
} else {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
}
|
||||
if exists {
|
||||
return User{}, ErrUserEmailExists{existingUser.ID, existingUser.Email}
|
||||
return &User{}, ErrUserEmailExists{existingUser.ID, existingUser.Email}
|
||||
}
|
||||
|
||||
// Hash the password
|
||||
newUser.Password, err = hashPassword(user.Password)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
newUser.IsActive = true
|
||||
|
@ -270,7 +270,7 @@ func CreateUser(user User) (newUser User, err error) {
|
|||
// Insert it
|
||||
_, err = x.Insert(newUser)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
// Update the metrics
|
||||
|
@ -279,14 +279,14 @@ func CreateUser(user User) (newUser User, err error) {
|
|||
// Get the full new User
|
||||
newUserOut, err := GetUser(newUser)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
// Create the user's namespace
|
||||
newN := &Namespace{Name: newUserOut.Username, Description: newUserOut.Username + "'s namespace.", Owner: newUserOut}
|
||||
err = newN.Create(&newUserOut)
|
||||
err = newN.Create(newUserOut)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
// Dont send a mail if we're testing
|
||||
|
@ -311,12 +311,12 @@ func hashPassword(password string) (string, error) {
|
|||
}
|
||||
|
||||
// UpdateUser updates a user
|
||||
func UpdateUser(user User) (updatedUser User, err error) {
|
||||
func UpdateUser(user *User) (updatedUser *User, err error) {
|
||||
|
||||
// Check if it exists
|
||||
theUser, err := GetUserByID(user.ID)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
// Check if we have at least a username
|
||||
|
@ -330,13 +330,13 @@ func UpdateUser(user User) (updatedUser User, err error) {
|
|||
// Update it
|
||||
_, err = x.Id(user.ID).Update(user)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
// Get the newly updated user
|
||||
updatedUser, err = GetUserByID(user.ID)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
return updatedUser, err
|
||||
|
|
|
@ -88,7 +88,7 @@ func RequestUserPasswordResetToken(tr *PasswordTokenRequest) (err error) {
|
|||
}
|
||||
|
||||
// Check if the user exists
|
||||
user, err := GetUser(User{Email: tr.Email})
|
||||
user, err := GetUser(&User{Email: tr.Email})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ func Login(c echo.Context) error {
|
|||
}
|
||||
|
||||
// Create token
|
||||
t, err := CreateNewJWTTokenForUser(&user)
|
||||
t, err := CreateNewJWTTokenForUser(user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue