GetUser now returns a pointer

This commit is contained in:
kolaente 2019-08-14 21:00:56 +02:00
parent 8fbe721453
commit a4112c1404
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
9 changed files with 46 additions and 46 deletions

View File

@ -173,7 +173,7 @@ func (l *Label) ReadOne() (err error) {
return err
}
l.CreatedBy = &user
l.CreatedBy = user
return
}

View File

@ -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)

View File

@ -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
}

View File

@ -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]

View File

@ -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
}
}

View File

@ -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 {

View File

@ -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

View File

@ -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
}

View File

@ -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
}