func FromURL()

in server/pkg/cloud/aws/session/builder.go [114:178]


func FromURL(u string) (*Options, error) {
	// Parse input as URL
	input, err := url.Parse(u)
	if err != nil {
		return nil, fmt.Errorf("unable to build session from url")
	}

	// Extract path and object key
	bucketName, objectKey := filepath.Split(input.Path)
	if bucketName == "" {
		return nil, fmt.Errorf("bucketName is mandatory")
	}
	if objectKey == "" {
		return nil, fmt.Errorf("objectKey is mandatory")
	}

	q := input.Query()

	// Unescape strings
	accessKeyID, err := url.QueryUnescape(q.Get("access-key-id"))
	if err != nil {
		return nil, fmt.Errorf("accessKeyID value is invalid: %w", err)
	}
	profile, err := url.QueryUnescape(q.Get("profile"))
	if err != nil {
		return nil, fmt.Errorf("profile value is invalid: %w", err)
	}
	region, err := url.QueryUnescape(q.Get("region"))
	if err != nil {
		return nil, fmt.Errorf("region value is invalid: %w", err)
	}
	secretAccessKey, err := url.QueryUnescape(q.Get("secret-access-key"))
	if err != nil {
		return nil, fmt.Errorf("secret-access-key value is invalid: %w", err)
	}
	sessionToken, err := url.QueryUnescape(q.Get("session-token"))
	if err != nil {
		return nil, fmt.Errorf("session-token value is invalid: %w", err)
	}

	const trueStringValue = "true"

	// Assemble options
	opts := &Options{
		Endpoint:   input.Host,
		BucketName: strings.TrimSuffix(strings.TrimPrefix(bucketName, "/"), "/"),
		ObjectKey:  objectKey,
		// Query params
		AccessKeyID:           accessKeyID,
		DisableSSL:            q.Get("disable-ssl") == trueStringValue,
		EnvAuthentication:     q.Get("env-authentication") == trueStringValue,
		IgnoreConfigCreds:     q.Get("ignore-config-creds") == trueStringValue,
		IgnoreEC2RoleCreds:    q.Get("ignore-ec2role-creds") == trueStringValue,
		IgnoreEnvCreds:        q.Get("ignore-env-creds") == trueStringValue,
		Profile:               profile,
		Region:                region,
		S3ForcePathStyle:      q.Get("s3-force-path-style") == trueStringValue,
		SecretAccessKey:       secretAccessKey,
		SessionToken:          sessionToken,
		UseAccelerateEndpoint: q.Get("s3-use-accelerate-endpoint") == trueStringValue,
	}

	// Delegate to builder
	return opts, nil
}