Compare commits

...

3 Commits

Author SHA1 Message Date
Stavros
e22d181de7 refactor: switch to min-h-dvh in layout 2025-06-17 20:39:15 +03:00
Stavros
c9b609b69c refactor: remove port from domain before getting container 2025-06-15 20:28:22 +03:00
Stavros
4e6372ea97 feat: allow user to specify domain in container labels in order to identify it 2025-06-15 20:17:45 +03:00
5 changed files with 25 additions and 26 deletions

View File

@@ -7,7 +7,7 @@ export const Layout = () => {
return ( return (
<div <div
className="relative flex flex-col justify-center items-center min-h-svh" className="relative flex flex-col justify-center items-center min-h-dvh"
style={{ style={{
backgroundImage: `url(${backgroundImage})`, backgroundImage: `url(${backgroundImage})`,
backgroundSize: "cover", backgroundSize: "cover",

View File

@@ -74,7 +74,7 @@ func (docker *Docker) DockerConnected() bool {
return err == nil return err == nil
} }
func (docker *Docker) GetLabels(appId string) (types.Labels, error) { func (docker *Docker) GetLabels(id string, domain string) (types.Labels, error) {
// Check if we have access to the Docker API // Check if we have access to the Docker API
isConnected := docker.DockerConnected() isConnected := docker.DockerConnected()
@@ -85,15 +85,16 @@ func (docker *Docker) GetLabels(appId string) (types.Labels, error) {
} }
// Get the containers // Get the containers
log.Debug().Msg("Getting containers")
containers, err := docker.GetContainers() containers, err := docker.GetContainers()
// If there is an error, return false // If there is an error, return false
if err != nil { if err != nil {
log.Error().Err(err).Msg("Error getting containers")
return types.Labels{}, err return types.Labels{}, err
} }
log.Debug().Msg("Got containers")
// Loop through the containers // Loop through the containers
for _, container := range containers { for _, container := range containers {
// Inspect the container // Inspect the container
@@ -105,28 +106,22 @@ func (docker *Docker) GetLabels(appId string) (types.Labels, error) {
continue continue
} }
// Get the container name (for some reason it is /name) // Get the labels
containerName := strings.TrimPrefix(inspect.Name, "/") log.Debug().Str("id", inspect.ID).Msg("Getting labels for container")
// There is a container with the same name as the app ID labels, err := utils.GetLabels(inspect.Config.Labels)
if containerName == appId {
log.Debug().Str("container", containerName).Msg("Found container")
// Get only the tinyauth labels in a struct // Check if there was an error
labels, err := utils.GetLabels(inspect.Config.Labels) if err != nil {
log.Warn().Str("id", container.ID).Err(err).Msg("Error getting container labels, skipping")
// Check if there was an error continue
if err != nil {
log.Error().Err(err).Msg("Error parsing labels")
return types.Labels{}, err
}
log.Debug().Msg("Got labels")
// Return labels
return labels, nil
} }
// Check if the labels match the id or the domain
if strings.TrimPrefix(inspect.Name, "/") == id || labels.Domain == domain {
log.Debug().Str("id", inspect.ID).Msg("Found matching container")
return labels, nil
}
} }
log.Debug().Msg("No matching container found, returning empty labels") log.Debug().Msg("No matching container found, returning empty labels")

View File

@@ -69,11 +69,14 @@ func (h *Handlers) AuthHandler(c *gin.Context) {
proto := c.Request.Header.Get("X-Forwarded-Proto") proto := c.Request.Header.Get("X-Forwarded-Proto")
host := c.Request.Header.Get("X-Forwarded-Host") host := c.Request.Header.Get("X-Forwarded-Host")
// Get the app id // Remove the port from the host if it exists
appId := strings.Split(host, ".")[0] hostPortless := strings.Split(host, ":")[0] // *lol*
// Get the id
id := strings.Split(hostPortless, ".")[0]
// Get the container labels // Get the container labels
labels, err := h.Docker.GetLabels(appId) labels, err := h.Docker.GetLabels(id, hostPortless)
log.Debug().Interface("labels", labels).Msg("Got labels") log.Debug().Interface("labels", labels).Msg("Got labels")

View File

@@ -104,5 +104,6 @@ type Labels struct {
Users string Users string
Allowed string Allowed string
Headers []string Headers []string
Domain string
OAuth OAuthLabels OAuth OAuthLabels
} }

View File

@@ -201,7 +201,7 @@ func GetLabels(labels map[string]string) (types.Labels, error) {
var labelsParsed types.Labels var labelsParsed types.Labels
// Decode the labels into the labels struct // Decode the labels into the labels struct
err := parser.Decode(labels, &labelsParsed, "tinyauth", "tinyauth.users", "tinyauth.allowed", "tinyauth.headers", "tinyauth.oauth") err := parser.Decode(labels, &labelsParsed, "tinyauth", "tinyauth.users", "tinyauth.allowed", "tinyauth.headers", "tinyauth.domain", "tinyauth.oauth")
// Check if there was an error // Check if there was an error
if err != nil { if err != nil {