mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2025-10-28 04:35:40 +00:00
refactor: detect if using browser or headless client for better responses
This commit is contained in:
@@ -8,12 +8,12 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
nginx:
|
whoami:
|
||||||
container_name: nginx
|
container_name: whoami
|
||||||
image: nginx:latest
|
image: traefik/whoami:latest
|
||||||
labels:
|
labels:
|
||||||
traefik.enable: true
|
traefik.enable: true
|
||||||
traefik.http.routers.nginx.rule: Host(`nginx.dev.local`)
|
traefik.http.routers.nginx.rule: Host(`whoami.dev.local`)
|
||||||
traefik.http.services.nginx.loadbalancer.server.port: 80
|
traefik.http.services.nginx.loadbalancer.server.port: 80
|
||||||
traefik.http.routers.nginx.middlewares: tinyauth
|
traefik.http.routers.nginx.middlewares: tinyauth
|
||||||
|
|
||||||
|
|||||||
@@ -131,18 +131,24 @@ func (api *API) SetupRoutes() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debug().Interface("proxy", proxy.Proxy).Msg("Got proxy")
|
// Check if the request is coming from a browser (tools like curl/bruno use */* and they don't include the text/html)
|
||||||
|
isBrowser := strings.Contains(c.Request.Header.Get("Accept"), "text/html")
|
||||||
|
|
||||||
// Check if using basic auth
|
if isBrowser {
|
||||||
_, _, basicAuth := c.Request.BasicAuth()
|
log.Debug().Msg("Request is most likely coming from a browser")
|
||||||
|
} else {
|
||||||
|
log.Debug().Msg("Request is most likely not coming from a browser")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug().Interface("proxy", proxy.Proxy).Msg("Got proxy")
|
||||||
|
|
||||||
// Check if auth is enabled
|
// Check if auth is enabled
|
||||||
authEnabled, authEnabledErr := api.Auth.AuthEnabled(c)
|
authEnabled, authEnabledErr := api.Auth.AuthEnabled(c)
|
||||||
|
|
||||||
// Handle error
|
// Handle error
|
||||||
if authEnabledErr != nil {
|
if authEnabledErr != nil {
|
||||||
// Return 500 if nginx is the proxy or if the request is using basic auth
|
// Return 500 if nginx is the proxy or if the request is not coming from a browser
|
||||||
if proxy.Proxy == "nginx" || basicAuth {
|
if proxy.Proxy == "nginx" || !isBrowser {
|
||||||
log.Error().Err(authEnabledErr).Msg("Failed to check if auth is enabled")
|
log.Error().Err(authEnabledErr).Msg("Failed to check if auth is enabled")
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, gin.H{
|
||||||
"status": 500,
|
"status": 500,
|
||||||
@@ -186,8 +192,8 @@ func (api *API) SetupRoutes() {
|
|||||||
|
|
||||||
// Check if there was an error
|
// Check if there was an error
|
||||||
if appAllowedErr != nil {
|
if appAllowedErr != nil {
|
||||||
// Return 500 if nginx is the proxy or if the request is using basic auth
|
// Return 500 if nginx is the proxy or if the request is not coming from a browser
|
||||||
if proxy.Proxy == "nginx" || basicAuth {
|
if proxy.Proxy == "nginx" || !isBrowser {
|
||||||
log.Error().Err(appAllowedErr).Msg("Failed to check if app is allowed")
|
log.Error().Err(appAllowedErr).Msg("Failed to check if app is allowed")
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, gin.H{
|
||||||
"status": 500,
|
"status": 500,
|
||||||
@@ -208,9 +214,11 @@ func (api *API) SetupRoutes() {
|
|||||||
if !appAllowed {
|
if !appAllowed {
|
||||||
log.Warn().Str("username", userContext.Username).Str("host", host).Msg("User not allowed")
|
log.Warn().Str("username", userContext.Username).Str("host", host).Msg("User not allowed")
|
||||||
|
|
||||||
// Return 401 if nginx is the proxy or if the request is using an Authorization header
|
// Set WWW-Authenticate header
|
||||||
if proxy.Proxy == "nginx" || basicAuth {
|
c.Header("WWW-Authenticate", "Basic realm=\"tinyauth\"")
|
||||||
c.Header("WWW-Authenticate", "Basic realm=\"tinyauth\"")
|
|
||||||
|
// Return 401 if nginx is the proxy or if the request is not coming from a browser
|
||||||
|
if proxy.Proxy == "nginx" || !isBrowser {
|
||||||
c.JSON(401, gin.H{
|
c.JSON(401, gin.H{
|
||||||
"status": 401,
|
"status": 401,
|
||||||
"message": "Unauthorized",
|
"message": "Unauthorized",
|
||||||
@@ -252,9 +260,11 @@ func (api *API) SetupRoutes() {
|
|||||||
// The user is not logged in
|
// The user is not logged in
|
||||||
log.Debug().Msg("Unauthorized")
|
log.Debug().Msg("Unauthorized")
|
||||||
|
|
||||||
// Return 401 if nginx is the proxy or if the request is using an Authorization header
|
// Set www-authenticate header
|
||||||
if proxy.Proxy == "nginx" || basicAuth {
|
c.Header("WWW-Authenticate", "Basic realm=\"tinyauth\"")
|
||||||
c.Header("WWW-Authenticate", "Basic realm=\"tinyauth\"")
|
|
||||||
|
// Return 401 if nginx is the proxy or if the request is not coming from a browser
|
||||||
|
if proxy.Proxy == "nginx" || !isBrowser {
|
||||||
c.JSON(401, gin.H{
|
c.JSON(401, gin.H{
|
||||||
"status": 401,
|
"status": 401,
|
||||||
"message": "Unauthorized",
|
"message": "Unauthorized",
|
||||||
|
|||||||
Reference in New Issue
Block a user