added logic function to check sessions

This commit is contained in:
overflowerror 2021-08-14 15:24:58 +02:00
parent 798db0e0f2
commit 59f5b51a9d
7 changed files with 58 additions and 4 deletions

View file

@ -3,6 +3,8 @@ package app
import "threadule/backend/internal/data/models"
type Data interface {
GetSession(id string) (*models.Session, error)
UpdateSession(session *models.Session) error
CleanupSessions() error
UpdateTweet(tweet *models.Tweet) error

View file

@ -1,4 +1,7 @@
package app
import "threadule/backend/internal/data/models"
type Logic interface {
AuthenticateSession(token string) (*models.User, error)
}

View file

@ -11,3 +11,22 @@ func (d *Data) CleanupSessions() error {
Delete(&models.Session{}).
Error
}
func (d *Data) GetSession(id string) (*models.Session, error) {
var session models.Session
err := d.db.
Where("valid_until > ?", time.Now()).
Where("id = ?", id).
First(&session).
Error
if err != nil {
return nil, err
}
return &session, nil
}
func (d *Data) UpdateSession(session *models.Session) error {
return d.db.
Save(session).
Error
}

View file

@ -6,7 +6,9 @@ import (
)
func (d *Data) UpdateThread(thread *models.Thread) error {
return d.db.Save(thread).Error
return d.db.
Save(thread).
Error
}
func (d *Data) GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error) {
@ -14,7 +16,8 @@ func (d *Data) GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error)
err := d.db.
Where("thread_id = ?", thread.ID).
Order("ordinal ASC").
Find(&tweets).Error
Find(&tweets).
Error
return tweets, err
}

View file

@ -3,5 +3,7 @@ package data
import "threadule/backend/internal/data/models"
func (d *Data) UpdateTweet(tweet *models.Tweet) error {
return d.db.Save(tweet).Error
return d.db.
Save(tweet).
Error
}

View file

@ -1,8 +1,31 @@
package logic
import (
"errors"
"threadule/backend/internal/data/models"
"time"
)
const sessionDuration = 7 * 24 * time.Hour
func (l *Logic) scheduleTriggerAuth() {
err := l.ctx.Data.CleanupSessions()
if err != nil {
l.ctx.Log.Errorf("couldn't clean up sessions: %v", err)
}
}
func (l *Logic) AuthenticateSession(token string) (*models.User, error) {
session, err := l.ctx.Data.GetSession(token)
if err != nil {
return nil, errors.New("invalid session")
}
session.ValidUntil = time.Now().Add(sessionDuration)
err = l.ctx.Data.UpdateSession(session)
if err != nil {
l.ctx.Log.Errorf("couldn't extend session: %v", err)
}
return session.User, nil
}

View file

@ -1,6 +1,8 @@
package logic
import "threadule/backend/internal/app"
import (
"threadule/backend/internal/app"
)
type Logic struct {
ctx *app.Context