aboutsummaryrefslogtreecommitdiffstats
path: root/models/auth/session.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2023-12-27 15:24:23 +0800
committerGitHub <noreply@github.com>2023-12-27 15:24:23 +0800
commit4c29c75968f520123f125e8305b2c29198664251 (patch)
treede556b8083fd2a1b671d7cc9536fe0f1ebe91218 /models/auth/session.go
parenta1dfffd723c434966152ee521c99e966a3aee065 (diff)
downloadgitea-4c29c75968f520123f125e8305b2c29198664251.tar.gz
gitea-4c29c75968f520123f125e8305b2c29198664251.zip
Fix session key conflict with database keyword (#28613)
This is a regression from #28220 . `builder.Cond` will not add `` ` `` automatically but xorm method `Get/Find` adds `` ` ``. This PR also adds tests to prevent the method from being implemented incorrectly. The tests are added in `integrations` to test every database.
Diffstat (limited to 'models/auth/session.go')
-rw-r--r--models/auth/session.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/models/auth/session.go b/models/auth/session.go
index 60fdeaba7c..75a205f702 100644
--- a/models/auth/session.go
+++ b/models/auth/session.go
@@ -41,12 +41,15 @@ func ReadSession(ctx context.Context, key string) (*Session, error) {
}
defer committer.Close()
- session, exist, err := db.Get[Session](ctx, builder.Eq{"key": key})
+ session, exist, err := db.Get[Session](ctx, builder.Eq{"`key`": key})
if err != nil {
return nil, err
} else if !exist {
- session.Expiry = timeutil.TimeStampNow()
- if err := db.Insert(ctx, &session); err != nil {
+ session = &Session{
+ Key: key,
+ Expiry: timeutil.TimeStampNow(),
+ }
+ if err := db.Insert(ctx, session); err != nil {
return nil, err
}
}
@@ -56,7 +59,7 @@ func ReadSession(ctx context.Context, key string) (*Session, error) {
// ExistSession checks if a session exists
func ExistSession(ctx context.Context, key string) (bool, error) {
- return db.Exist[Session](ctx, builder.Eq{"key": key})
+ return db.Exist[Session](ctx, builder.Eq{"`key`": key})
}
// DestroySession destroys a session
@@ -75,13 +78,13 @@ func RegenerateSession(ctx context.Context, oldKey, newKey string) (*Session, er
}
defer committer.Close()
- if has, err := db.Exist[Session](ctx, builder.Eq{"key": newKey}); err != nil {
+ if has, err := db.Exist[Session](ctx, builder.Eq{"`key`": newKey}); err != nil {
return nil, err
} else if has {
return nil, fmt.Errorf("session Key: %s already exists", newKey)
}
- if has, err := db.Exist[Session](ctx, builder.Eq{"key": oldKey}); err != nil {
+ if has, err := db.Exist[Session](ctx, builder.Eq{"`key`": oldKey}); err != nil {
return nil, err
} else if !has {
if err := db.Insert(ctx, &Session{
@@ -96,7 +99,7 @@ func RegenerateSession(ctx context.Context, oldKey, newKey string) (*Session, er
return nil, err
}
- s, _, err := db.Get[Session](ctx, builder.Eq{"key": newKey})
+ s, _, err := db.Get[Session](ctx, builder.Eq{"`key`": newKey})
if err != nil {
// is not exist, it should be impossible
return nil, err