From a4112c1404945e33d3b329a2425acad7b57da886 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 14 Aug 2019 21:00:56 +0200 Subject: [PATCH] GetUser now returns a pointer --- pkg/models/label.go | 2 +- pkg/models/list.go | 6 +-- pkg/models/list_task_assignees.go | 2 +- pkg/models/list_tasks.go | 4 +- pkg/models/namespace.go | 6 +-- pkg/models/teams.go | 4 +- pkg/models/user.go | 64 +++++++++++++++---------------- pkg/models/user_password_reset.go | 2 +- pkg/routes/api/v1/login.go | 2 +- 9 files changed, 46 insertions(+), 46 deletions(-) diff --git a/pkg/models/label.go b/pkg/models/label.go index 70c34df4a..7c8b3aadb 100644 --- a/pkg/models/label.go +++ b/pkg/models/label.go @@ -173,7 +173,7 @@ func (l *Label) ReadOne() (err error) { return err } - l.CreatedBy = &user + l.CreatedBy = user return } diff --git a/pkg/models/list.go b/pkg/models/list.go index 81a8c2189..41fc16afd 100644 --- a/pkg/models/list.go +++ b/pkg/models/list.go @@ -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) diff --git a/pkg/models/list_task_assignees.go b/pkg/models/list_task_assignees.go index f6bb227c5..c873364b0 100644 --- a/pkg/models/list_task_assignees.go +++ b/pkg/models/list_task_assignees.go @@ -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 } diff --git a/pkg/models/list_tasks.go b/pkg/models/list_tasks.go index 04e6ebe41..19fc20b38 100644 --- a/pkg/models/list_tasks.go +++ b/pkg/models/list_tasks.go @@ -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] diff --git a/pkg/models/namespace.go b/pkg/models/namespace.go index 1ef0cf381..91b7754c4 100644 --- a/pkg/models/namespace.go +++ b/pkg/models/namespace.go @@ -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 } } diff --git a/pkg/models/teams.go b/pkg/models/teams.go index 182603ea0..0d9c77e5a 100644 --- a/pkg/models/teams.go +++ b/pkg/models/teams.go @@ -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 { diff --git a/pkg/models/user.go b/pkg/models/user.go index 559554fdb..87e490ac0 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -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 diff --git a/pkg/models/user_password_reset.go b/pkg/models/user_password_reset.go index 900472538..9d3ccb2cf 100644 --- a/pkg/models/user_password_reset.go +++ b/pkg/models/user_password_reset.go @@ -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 } diff --git a/pkg/routes/api/v1/login.go b/pkg/routes/api/v1/login.go index 4753d6498..0db483b6f 100644 --- a/pkg/routes/api/v1/login.go +++ b/pkg/routes/api/v1/login.go @@ -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 }