$43 GRAYBYTE WORDPRESS FILE MANAGER $95

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 2.57.91.242 | ADMIN IP 216.73.216.215
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/go/pkg/mod/github.com/go-openapi/spec@v0.20.8/

HOME
Current File : /opt/go/pkg/mod/github.com/go-openapi/spec@v0.20.8//normalizer_windows.go
// -build windows

// Copyright 2015 go-swagger maintainers
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package spec

import (
	"net/url"
	"os"
	"path"
	"path/filepath"
	"strings"
)

// absPath makes a file path absolute and compatible with a URI path component
//
// The parameter must be a path, not an URI.
func absPath(in string) string {
	// NOTE(windows): filepath.Abs exhibits a special behavior on windows for empty paths.
	// See https://github.com/golang/go/issues/24441
	if in == "" {
		in = "."
	}

	anchored, err := filepath.Abs(in)
	if err != nil {
		specLogger.Printf("warning: could not resolve current working directory: %v", err)
		return in
	}

	pth := strings.ReplaceAll(strings.ToLower(anchored), `\`, `/`)
	if !strings.HasPrefix(pth, "/") {
		pth = "/" + pth
	}

	return path.Clean(pth)
}

// repairURI tolerates invalid file URIs with common typos
// such as 'file://E:\folder\file', that break the regular URL parser.
//
// Adopting the same defaults as for unixes (e.g. return an empty path) would
// result into a counter-intuitive result for that case (e.g. E:\folder\file is
// eventually resolved as the current directory). The repair will detect the missing "/".
//
// Note that this only works for the file scheme.
func repairURI(in string) (*url.URL, string) {
	const prefix = fileScheme + "://"
	if !strings.HasPrefix(in, prefix) {
		// giving up: resolve to empty path
		u, _ := parseURL("")

		return u, ""
	}

	// attempt the repair, stripping the scheme should be sufficient
	u, _ := parseURL(strings.TrimPrefix(in, prefix))
	debugLog("repaired URI: original: %q, repaired: %q", in, u.String())

	return u, u.String()
}

// fixWindowsURI tolerates an absolute file path on windows such as C:\Base\File.yaml or \\host\share\Base\File.yaml
// and makes it a canonical URI: file:///c:/base/file.yaml
//
// Catch 22 notes for Windows:
//
// * There may be a drive letter on windows (it is lower-cased)
// * There may be a share UNC, e.g. \\server\folder\data.xml
// * Paths are case insensitive
// * Paths may already contain slashes
// * Paths must be slashed
//
// NOTE: there is no escaping. "/" may be valid separators just like "\".
// We don't use ToSlash() (which escapes everything) because windows now also
// tolerates the use of "/". Hence, both C:\File.yaml and C:/File.yaml will work.
func fixWindowsURI(u *url.URL, in string) {
	drive := filepath.VolumeName(in)

	if len(drive) > 0 {
		if len(u.Scheme) == 1 && strings.EqualFold(u.Scheme, drive[:1]) { // a path with a drive letter
			u.Scheme = fileScheme
			u.Host = ""
			u.Path = strings.Join([]string{drive, u.Opaque, u.Path}, `/`) // reconstruct the full path component (no fragment, no query)
		} else if u.Host == "" && strings.HasPrefix(u.Path, drive) { // a path with a \\host volume
			// NOTE: the special host@port syntax for UNC is not supported (yet)
			u.Scheme = fileScheme

			// this is a modified version of filepath.Dir() to apply on the VolumeName itself
			i := len(drive) - 1
			for i >= 0 && !os.IsPathSeparator(drive[i]) {
				i--
			}
			host := drive[:i] // \\host\share => host

			u.Path = strings.TrimPrefix(u.Path, host)
			u.Host = strings.TrimPrefix(host, `\\`)
		}

		u.Opaque = ""
		u.Path = strings.ReplaceAll(strings.ToLower(u.Path), `\`, `/`)

		// ensure we form an absolute path
		if !strings.HasPrefix(u.Path, "/") {
			u.Path = "/" + u.Path
		}

		u.Path = path.Clean(u.Path)

		return
	}

	if u.Scheme == fileScheme {
		// Handle dodgy cases for file://{...} URIs on windows.
		// A canonical URI should always be followed by an absolute path.
		//
		// Examples:
		//   * file:///folder/file => valid, unchanged
		//   * file:///c:\folder\file => slashed
		//   * file:///./folder/file => valid, cleaned to remove the dot
		//   * file:///.\folder\file => remapped to cwd
		//   * file:///. => dodgy, remapped to / (consistent with the behavior on unix)
		//   * file:///.. => dodgy, remapped to / (consistent with the behavior on unix)
		if (!path.IsAbs(u.Path) && !filepath.IsAbs(u.Path)) || (strings.HasPrefix(u.Path, `/.`) && strings.Contains(u.Path, `\`)) {
			// ensure we form an absolute path
			u.Path, _ = filepath.Abs(strings.TrimLeft(u.Path, `/`))
			if !strings.HasPrefix(u.Path, "/") {
				u.Path = "/" + u.Path
			}
		}
		u.Path = strings.ToLower(u.Path)
	}

	// NOTE: lower case normalization does not propagate to inner resources,
	// generated when rebasing: when joining a relative URI with a file to an absolute base,
	// only the base is currently lower-cased.
	//
	// For now, we assume this is good enough for most use cases
	// and try not to generate too many differences
	// between the output produced on different platforms.
	u.Path = path.Clean(strings.ReplaceAll(u.Path, `\`, `/`))
}

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
25 Jan 2024 4.43 PM
root / root
0755
.github
--
25 Jan 2024 4.43 PM
root / root
0555
fixtures
--
25 Jan 2024 4.43 PM
root / root
0555
schemas
--
25 Jan 2024 4.43 PM
root / root
0555
.editorconfig
0.526 KB
25 Jan 2024 4.43 PM
root / root
0444
.gitignore
0.024 KB
25 Jan 2024 4.43 PM
root / root
0444
.golangci.yml
0.621 KB
25 Jan 2024 4.43 PM
root / root
0444
CODE_OF_CONDUCT.md
3.157 KB
25 Jan 2024 4.43 PM
root / root
0444
LICENSE
11.092 KB
25 Jan 2024 4.43 PM
root / root
0444
README.md
2.114 KB
25 Jan 2024 4.43 PM
root / root
0444
appveyor.yml
1.261 KB
25 Jan 2024 4.43 PM
root / root
0444
auth_test.go
4.577 KB
25 Jan 2024 4.43 PM
root / root
0444
bindata.go
24.402 KB
25 Jan 2024 4.43 PM
root / root
0444
cache.go
2.507 KB
25 Jan 2024 4.43 PM
root / root
0444
cache_test.go
0.66 KB
25 Jan 2024 4.43 PM
root / root
0444
circular_test.go
9.746 KB
25 Jan 2024 4.43 PM
root / root
0444
contact_info.go
1.574 KB
25 Jan 2024 4.43 PM
root / root
0444
contact_info_test.go
1.422 KB
25 Jan 2024 4.43 PM
root / root
0444
debug.go
1.272 KB
25 Jan 2024 4.43 PM
root / root
0444
debug_test.go
1.293 KB
25 Jan 2024 4.43 PM
root / root
0444
errors.go
0.881 KB
25 Jan 2024 4.43 PM
root / root
0444
expander.go
16.719 KB
25 Jan 2024 4.43 PM
root / root
0444
expander_test.go
40.121 KB
25 Jan 2024 4.43 PM
root / root
0444
external_docs.go
0.896 KB
25 Jan 2024 4.43 PM
root / root
0444
external_docs_test.go
1.045 KB
25 Jan 2024 4.43 PM
root / root
0444
go.mod
0.236 KB
25 Jan 2024 4.43 PM
root / root
0444
go.sum
3.695 KB
25 Jan 2024 4.43 PM
root / root
0444
header.go
4.943 KB
25 Jan 2024 4.43 PM
root / root
0444
header_test.go
4.348 KB
25 Jan 2024 4.43 PM
root / root
0444
helpers_spec_test.go
3.971 KB
25 Jan 2024 4.43 PM
root / root
0444
helpers_test.go
4.854 KB
25 Jan 2024 4.43 PM
root / root
0444
info.go
4.256 KB
25 Jan 2024 4.43 PM
root / root
0444
info_test.go
2.407 KB
25 Jan 2024 4.43 PM
root / root
0444
items.go
5.755 KB
25 Jan 2024 4.43 PM
root / root
0444
items_test.go
4.494 KB
25 Jan 2024 4.43 PM
root / root
0444
license.go
1.48 KB
25 Jan 2024 4.43 PM
root / root
0444
license_test.go
1.322 KB
25 Jan 2024 4.43 PM
root / root
0444
normalizer.go
6.241 KB
25 Jan 2024 4.43 PM
root / root
0444
normalizer_nonwindows.go
1.191 KB
25 Jan 2024 4.43 PM
root / root
0444
normalizer_test.go
16.808 KB
25 Jan 2024 4.43 PM
root / root
0444
normalizer_windows.go
5.146 KB
25 Jan 2024 4.43 PM
root / root
0444
operation.go
10.751 KB
25 Jan 2024 4.43 PM
root / root
0444
operation_test.go
9.549 KB
25 Jan 2024 4.43 PM
root / root
0444
parameter.go
10.344 KB
25 Jan 2024 4.43 PM
root / root
0444
parameters_test.go
4.756 KB
25 Jan 2024 4.43 PM
root / root
0444
path_item.go
2.596 KB
25 Jan 2024 4.43 PM
root / root
0444
path_item_test.go
2.42 KB
25 Jan 2024 4.43 PM
root / root
0444
paths.go
2.571 KB
25 Jan 2024 4.43 PM
root / root
0444
paths_test.go
1.167 KB
25 Jan 2024 4.43 PM
root / root
0444
properties.go
2.403 KB
25 Jan 2024 4.43 PM
root / root
0444
properties_test.go
2.054 KB
25 Jan 2024 4.43 PM
root / root
0444
ref.go
4.167 KB
25 Jan 2024 4.43 PM
root / root
0444
ref_test.go
1.19 KB
25 Jan 2024 4.43 PM
root / root
0444
resolver.go
3.752 KB
25 Jan 2024 4.43 PM
root / root
0444
resolver_test.go
12.791 KB
25 Jan 2024 4.43 PM
root / root
0444
response.go
4.166 KB
25 Jan 2024 4.43 PM
root / root
0444
response_test.go
2.817 KB
25 Jan 2024 4.43 PM
root / root
0444
responses.go
3.619 KB
25 Jan 2024 4.43 PM
root / root
0444
schema.go
18.14 KB
25 Jan 2024 4.43 PM
root / root
0444
schema_loader.go
8.993 KB
25 Jan 2024 4.43 PM
root / root
0444
schema_test.go
6.643 KB
25 Jan 2024 4.43 PM
root / root
0444
security_scheme.go
5.713 KB
25 Jan 2024 4.43 PM
root / root
0444
spec.go
2.18 KB
25 Jan 2024 4.43 PM
root / root
0444
spec_test.go
12.704 KB
25 Jan 2024 4.43 PM
root / root
0444
structs_test.go
3.88 KB
25 Jan 2024 4.43 PM
root / root
0444
swagger.go
11.854 KB
25 Jan 2024 4.43 PM
root / root
0444
swagger_test.go
11.273 KB
25 Jan 2024 4.43 PM
root / root
0444
tag.go
2.235 KB
25 Jan 2024 4.43 PM
root / root
0444
url_go18.go
0.093 KB
25 Jan 2024 4.43 PM
root / root
0444
url_go19.go
0.189 KB
25 Jan 2024 4.43 PM
root / root
0444
validations.go
7.121 KB
25 Jan 2024 4.43 PM
root / root
0444
validations_test.go
2.969 KB
25 Jan 2024 4.43 PM
root / root
0444
xml_object.go
1.928 KB
25 Jan 2024 4.43 PM
root / root
0444
xml_object_test.go
1.938 KB
25 Jan 2024 4.43 PM
root / root
0444

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF