Refactor session loading and allow OAuth 2.0 requests
All checks were successful
continuous-integration/drone/push Build is passing

atsebaytClient = config.Client(
		oauth2.NoContext,
		&oauth2.Token{
			AccessToken: atsebaytToken,
		},
	)
This commit is contained in:
nemunaire 2022-09-22 11:08:13 +02:00
parent b688a98802
commit 3a3acafa8e

36
api.go
View File

@ -3,6 +3,7 @@ package main
import ( import (
"encoding/base64" "encoding/base64"
"net/http" "net/http"
"strings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@ -76,20 +77,36 @@ func adminRestricted(u *User, c *gin.Context) bool {
return false return false
} }
func getSessionFromRequest(c *gin.Context) (*Session, error) {
var encodedSession string
if cookie, err := c.Request.Cookie("auth"); err == nil {
encodedSession = cookie.Value
} else if flds := strings.Fields(c.GetHeader("Authorization")); len(flds) == 2 && flds[0] == "Bearer" {
encodedSession = flds[1]
}
if len(encodedSession) > 0 {
if sessionid, err := base64.StdEncoding.DecodeString(encodedSession); err != nil {
return nil, err
} else {
return getSession(sessionid)
}
}
return nil, nil
}
func authMiddleware(access ...func(*User, *gin.Context) bool) gin.HandlerFunc { func authMiddleware(access ...func(*User, *gin.Context) bool) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
var user *User = nil session, err := getSessionFromRequest(c)
var session *Session = nil if err != nil {
if cookie, err := c.Request.Cookie("auth"); err == nil {
if sessionid, err := base64.StdEncoding.DecodeString(cookie.Value); err != nil {
eraseCookie(c)
c.AbortWithStatusJSON(http.StatusNotAcceptable, gin.H{"errmsg": err.Error()})
return
} else if session, err = getSession(sessionid); err != nil {
eraseCookie(c) eraseCookie(c)
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"errmsg": err.Error()}) c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"errmsg": err.Error()})
return return
} else if session.IdUser == nil { }
var user *User = nil
if session == nil || session.IdUser == nil {
user = nil user = nil
} else if std, err := getUser(int(*session.IdUser)); err != nil { } else if std, err := getUser(int(*session.IdUser)); err != nil {
eraseCookie(c) eraseCookie(c)
@ -98,7 +115,6 @@ func authMiddleware(access ...func(*User, *gin.Context) bool) gin.HandlerFunc {
} else { } else {
user = std user = std
} }
}
// Check access limitation // Check access limitation
for _, a := range access { for _, a := range access {