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