mirror of
https://github.com/go-gitea/gitea
synced 2024-08-27 17:53:41 +02:00
Follow #30454 And fix #24957 When using "preferred_username", if no such field, `extractUserNameFromOAuth2` (old `getUserName`) shouldn't return an error. All other USERNAME options do not return such error. And fine tune some logic and error messages, make code more stable and more friendly to end users.
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package session
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
"gitea.com/go-chi/session"
|
|
)
|
|
|
|
// Store represents a session store
|
|
type Store interface {
|
|
Get(any) any
|
|
Set(any, any) error
|
|
Delete(any) error
|
|
ID() string
|
|
Release() error
|
|
Flush() error
|
|
Destroy(http.ResponseWriter, *http.Request) error
|
|
}
|
|
|
|
// RegenerateSession regenerates the underlying session and returns the new store
|
|
func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
|
|
for _, f := range BeforeRegenerateSession {
|
|
f(resp, req)
|
|
}
|
|
if setting.IsInTesting {
|
|
if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
|
|
return store, nil
|
|
}
|
|
}
|
|
return session.RegenerateSession(resp, req)
|
|
}
|
|
|
|
func GetContextSession(req *http.Request) Store {
|
|
if setting.IsInTesting {
|
|
if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
|
|
return store
|
|
}
|
|
}
|
|
return session.GetSession(req)
|
|
}
|
|
|
|
// BeforeRegenerateSession is a list of functions that are called before a session is regenerated.
|
|
var BeforeRegenerateSession []func(http.ResponseWriter, *http.Request)
|