mirror of
https://github.com/h44z/wg-portal.git
synced 2025-08-25 14:31:14 +00:00
V2 alpha - initial version (#172)
Initial alpha codebase for version 2 of WireGuard Portal. This version is considered unstable and incomplete (for example, no public REST API)! Use with care! Fixes/Implements the following issues: - OAuth support #154, #1 - New Web UI with internationalisation support #98, #107, #89, #62 - Postgres Support #49 - Improved Email handling #47, #119 - DNS Search Domain support #46 - Bugfixes #94, #48 --------- Co-authored-by: Fabian Wechselberger <wechselbergerf@hotmail.com>
This commit is contained in:
92
internal/app/api/v0/handlers/session.go
Normal file
92
internal/app/api/v0/handlers/session.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-contrib/sessions"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gob.Register(SessionData{})
|
||||
}
|
||||
|
||||
type SessionData struct {
|
||||
LoggedIn bool
|
||||
IsAdmin bool
|
||||
|
||||
UserIdentifier string
|
||||
|
||||
Firstname string
|
||||
Lastname string
|
||||
Email string
|
||||
|
||||
OauthState string
|
||||
OauthNonce string
|
||||
OauthProvider string
|
||||
OauthReturnTo string
|
||||
}
|
||||
|
||||
type SessionStore interface {
|
||||
DefaultSessionData() SessionData
|
||||
|
||||
GetData(c *gin.Context) SessionData
|
||||
SetData(c *gin.Context, data SessionData)
|
||||
|
||||
DestroyData(c *gin.Context)
|
||||
}
|
||||
|
||||
type GinSessionStore struct {
|
||||
sessionIdentifier string
|
||||
}
|
||||
|
||||
func (g GinSessionStore) GetData(c *gin.Context) SessionData {
|
||||
session := sessions.Default(c)
|
||||
rawSessionData := session.Get(g.sessionIdentifier)
|
||||
|
||||
var sessionData SessionData
|
||||
if rawSessionData != nil {
|
||||
sessionData = rawSessionData.(SessionData)
|
||||
} else {
|
||||
// init a new default session
|
||||
sessionData = g.DefaultSessionData()
|
||||
session.Set(g.sessionIdentifier, sessionData)
|
||||
if err := session.Save(); err != nil {
|
||||
panic(fmt.Sprintf("failed to store session: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
return sessionData
|
||||
}
|
||||
|
||||
func (g GinSessionStore) DefaultSessionData() SessionData {
|
||||
return SessionData{
|
||||
LoggedIn: false,
|
||||
IsAdmin: false,
|
||||
UserIdentifier: "",
|
||||
Firstname: "",
|
||||
Lastname: "",
|
||||
Email: "",
|
||||
OauthState: "",
|
||||
OauthNonce: "",
|
||||
OauthProvider: "",
|
||||
OauthReturnTo: "",
|
||||
}
|
||||
}
|
||||
|
||||
func (g GinSessionStore) SetData(c *gin.Context, data SessionData) {
|
||||
session := sessions.Default(c)
|
||||
session.Set(g.sessionIdentifier, data)
|
||||
if err := session.Save(); err != nil {
|
||||
panic(fmt.Sprintf("failed to store session: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func (g GinSessionStore) DestroyData(c *gin.Context) {
|
||||
session := sessions.Default(c)
|
||||
session.Delete(g.sessionIdentifier)
|
||||
if err := session.Save(); err != nil {
|
||||
panic(fmt.Sprintf("failed to store session: %v", err))
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user