You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

56 lines
1.3 KiB

package user
import (
"errors"
"log"
"github.com/google/uuid"
)
func (env *Env) createSession(user *User) (string, error) {
var newSession Session
newSession.UserID = user.ID
newSession.SessionToken = uuid.New().String()
err := env.DB.Create(&newSession).Error
if err != nil {
log.Println(err)
return "", errors.New("failed write to database")
}
return newSession.SessionToken, nil
}
func (env *Env) getUserFromSessionToken(sessionToken string) (*User, error) {
var currUser User
err := env.DB.Table("sessions").Select("users.*").Joins("left join users on users.id = sessions.user_id").Where("sessions.session_token = ?", sessionToken).First(&currUser).Error
if err != nil {
log.Println(err)
return nil, errors.New("failed get user")
}
err = env.DB.Preload("Profile").Where(&currUser).First(&currUser).Error
if err != nil {
log.Println(err)
return nil, errors.New("failed get user")
}
return &currUser, nil
}
func (env *Env) logout(sessionToken string) error {
var currSession Session
err := env.DB.Where(&Session{SessionToken: sessionToken}).First(&currSession).Error
if err != nil {
log.Println(err)
return errors.New("failed get session")
}
err = env.DB.Delete(&currSession).Error
if err != nil {
log.Println(err)
return errors.New("failed to logout")
}
return nil
}