code.gitea.io/gitea@v1.19.3/modules/uri/uri.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package uri
     5  
     6  import (
     7  	"fmt"
     8  	"io"
     9  	"net/http"
    10  	"net/url"
    11  	"os"
    12  	"strings"
    13  )
    14  
    15  // ErrURISchemeNotSupported represents a scheme error
    16  type ErrURISchemeNotSupported struct {
    17  	Scheme string
    18  }
    19  
    20  func (e ErrURISchemeNotSupported) Error() string {
    21  	return fmt.Sprintf("Unsupported scheme: %v", e.Scheme)
    22  }
    23  
    24  // Open open a local file or a remote file
    25  func Open(uriStr string) (io.ReadCloser, error) {
    26  	u, err := url.Parse(uriStr)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  	switch strings.ToLower(u.Scheme) {
    31  	case "http", "https":
    32  		f, err := http.Get(uriStr)
    33  		if err != nil {
    34  			return nil, err
    35  		}
    36  		return f.Body, nil
    37  	case "file":
    38  		return os.Open(u.Path)
    39  	default:
    40  		return nil, ErrURISchemeNotSupported{Scheme: u.Scheme}
    41  	}
    42  }