func()

in internal/source/gitlab/gitlab.go [67:114]


func (g *Gitlab) Resolve(r *http.Request) (*serving.Request, error) {
	host := request.GetHostWithoutPort(r)

	response := g.client.Resolve(r.Context(), host)
	if response.Error != nil {
		return nil, response.Error
	}

	urlPath := path.Clean(r.URL.Path)
	if urlPath == "." {
		// If the result of Clean process is an empty string, it returns the string "."
		urlPath = "/"
	}

	lowerURLPath := strings.ToLower(urlPath)
	size := len(response.Domain.LookupPaths)

	for _, lookup := range response.Domain.LookupPaths {
		lookupPrefix := strings.ToLower(lookup.Prefix)
		isSubPath := strings.HasPrefix(lowerURLPath, lookupPrefix)
		isRootPath := lowerURLPath == path.Clean(lookupPrefix)

		if isSubPath || isRootPath {
			subPath := ""
			if isSubPath {
				subPath = urlPath[len(lookupPrefix):]
			}

			srv, err := g.fabricateServing(lookup)
			if err != nil {
				return nil, err
			}

			return &serving.Request{
				Serving:    srv,
				LookupPath: fabricateLookupPath(size, lookup),
				SubPath:    subPath}, nil
		}
	}

	logging.LogRequest(r).WithError(domain.ErrDomainDoesNotExist).WithFields(
		log.Fields{
			"lookup_paths_count": size,
			"lookup_paths":       response.Domain.LookupPaths,
		}).Error("could not find project lookup path")

	return nil, domain.ErrDomainDoesNotExist
}