2024-11-23 01:28:58 -05:00
|
|
|
package session
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
|
|
"github.com/labstack/echo/v4"
|
|
|
|
|
|
|
|
|
|
"github.com/onsonr/sonr/pkg/common"
|
2024-12-02 14:27:18 -05:00
|
|
|
"github.com/onsonr/sonr/pkg/common/cookie"
|
|
|
|
|
"github.com/onsonr/sonr/pkg/common/header"
|
|
|
|
|
"github.com/onsonr/sonr/pkg/vault/types"
|
2024-11-23 01:28:58 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// HwayMiddleware establishes a Session Cookie.
|
|
|
|
|
func HwayMiddleware() echo.MiddlewareFunc {
|
|
|
|
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
|
|
|
return func(c echo.Context) error {
|
|
|
|
|
cc := injectSession(c, common.RoleHway)
|
|
|
|
|
return next(cc)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MotrMiddleware establishes a Session Cookie.
|
2024-12-02 14:27:18 -05:00
|
|
|
func MotrMiddleware(config *types.Config) echo.MiddlewareFunc {
|
2024-11-23 01:28:58 -05:00
|
|
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
|
|
|
return func(c echo.Context) error {
|
|
|
|
|
err := injectConfig(c, config)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
cc := injectSession(c, common.RoleMotr)
|
|
|
|
|
return next(cc)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-02 14:27:18 -05:00
|
|
|
func injectConfig(c echo.Context, config *types.Config) error {
|
2024-11-23 01:28:58 -05:00
|
|
|
header.Write(c, header.SonrAPIURL, config.SonrApiUrl)
|
|
|
|
|
header.Write(c, header.SonrRPCURL, config.SonrRpcUrl)
|
|
|
|
|
|
|
|
|
|
cookie.Write(c, cookie.SonrAddress, config.MotrAddress)
|
|
|
|
|
schemaBz, err := json.Marshal(config.VaultSchema)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
cookie.WriteBytes(c, cookie.VaultSchema, schemaBz)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// injectSession returns the session injectSession from the cookies.
|
|
|
|
|
func injectSession(c echo.Context, role common.PeerRole) *HTTPContext {
|
|
|
|
|
if c == nil {
|
|
|
|
|
return initHTTPContext(nil)
|
|
|
|
|
}
|
2024-12-02 14:27:18 -05:00
|
|
|
|
2024-11-23 01:28:58 -05:00
|
|
|
cookie.Write(c, cookie.SessionRole, role.String())
|
2024-12-02 14:27:18 -05:00
|
|
|
|
2024-11-23 01:28:58 -05:00
|
|
|
// Continue even if there are errors, just ensure we have valid session data
|
|
|
|
|
if err := loadOrGenKsuid(c); err != nil {
|
|
|
|
|
// Log error but continue
|
|
|
|
|
}
|
|
|
|
|
if err := loadOrGenChallenge(c); err != nil {
|
2024-12-02 14:27:18 -05:00
|
|
|
// Log error but continue
|
2024-11-23 01:28:58 -05:00
|
|
|
}
|
2024-12-02 14:27:18 -05:00
|
|
|
|
2024-11-23 01:28:58 -05:00
|
|
|
return initHTTPContext(c)
|
|
|
|
|
}
|