mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2025-10-28 04:35:40 +00:00
109 lines
3.2 KiB
Go
109 lines
3.2 KiB
Go
package controller
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"tinyauth/internal/utils"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type UserContextResponse struct {
|
|
Status int `json:"status"`
|
|
Message string `json:"message"`
|
|
IsLoggedIn bool `json:"isLoggedIn"`
|
|
Username string `json:"username"`
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
Provider string `json:"provider"`
|
|
OAuth bool `json:"oauth"`
|
|
TotpPending bool `json:"totpPending"`
|
|
}
|
|
|
|
type AppContextResponse struct {
|
|
Status int `json:"status"`
|
|
Message string `json:"message"`
|
|
ConfiguredProviders []string `json:"configuredProviders"`
|
|
Title string `json:"title"`
|
|
GenericName string `json:"genericName"`
|
|
AppURL string `json:"appUrl"`
|
|
RootDomain string `json:"rootDomain"`
|
|
ForgotPasswordMessage string `json:"forgotPasswordMessage"`
|
|
BackgroundImage string `json:"backgroundImage"`
|
|
OAuthAutoRedirect string `json:"oauthAutoRedirect"`
|
|
}
|
|
|
|
type ContextControllerConfig struct {
|
|
ConfiguredProviders []string
|
|
Title string
|
|
GenericName string
|
|
AppURL string
|
|
RootDomain string
|
|
ForgotPasswordMessage string
|
|
BackgroundImage string
|
|
OAuthAutoRedirect string
|
|
}
|
|
|
|
type ContextController struct {
|
|
config ContextControllerConfig
|
|
router *gin.RouterGroup
|
|
}
|
|
|
|
func NewContextController(config ContextControllerConfig, router *gin.RouterGroup) *ContextController {
|
|
return &ContextController{
|
|
config: config,
|
|
router: router,
|
|
}
|
|
}
|
|
|
|
func (controller *ContextController) SetupRoutes() {
|
|
contextGroup := controller.router.Group("/context")
|
|
contextGroup.GET("/user", controller.userContextHandler)
|
|
contextGroup.GET("/app", controller.appContextHandler)
|
|
}
|
|
|
|
func (controller *ContextController) userContextHandler(c *gin.Context) {
|
|
context, err := utils.GetContext(c)
|
|
|
|
userContext := UserContextResponse{
|
|
Status: 200,
|
|
Message: "Success",
|
|
IsLoggedIn: context.IsLoggedIn,
|
|
Username: context.Username,
|
|
Name: context.Name,
|
|
Email: context.Email,
|
|
Provider: context.Provider,
|
|
OAuth: context.OAuth,
|
|
TotpPending: context.TotpPending,
|
|
}
|
|
|
|
if err != nil {
|
|
log.Debug().Err(err).Msg("No user context found in request")
|
|
userContext.Status = 401
|
|
userContext.Message = "Unauthorized"
|
|
userContext.IsLoggedIn = false
|
|
c.JSON(200, userContext)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, userContext)
|
|
}
|
|
|
|
func (controller *ContextController) appContextHandler(c *gin.Context) {
|
|
appUrl, _ := url.Parse(controller.config.AppURL) // no need to check error, validated on startup
|
|
|
|
c.JSON(200, AppContextResponse{
|
|
Status: 200,
|
|
Message: "Success",
|
|
ConfiguredProviders: controller.config.ConfiguredProviders,
|
|
Title: controller.config.Title,
|
|
GenericName: controller.config.GenericName,
|
|
AppURL: fmt.Sprintf("%s://%s", appUrl.Scheme, appUrl.Host),
|
|
RootDomain: controller.config.RootDomain,
|
|
ForgotPasswordMessage: controller.config.ForgotPasswordMessage,
|
|
BackgroundImage: controller.config.BackgroundImage,
|
|
OAuthAutoRedirect: controller.config.OAuthAutoRedirect,
|
|
})
|
|
}
|