summaryrefslogtreecommitdiff
path: root/vendor/github.com/subosito/gotenv
diff options
context:
space:
mode:
authorLibravatar Terin Stock <terinjokes@gmail.com>2025-03-09 17:47:56 +0100
committerLibravatar Terin Stock <terinjokes@gmail.com>2025-03-10 01:59:49 +0100
commit3ac1ee16f377d31a0fb80c8dae28b6239ac4229e (patch)
treef61faa581feaaeaba2542b9f2b8234a590684413 /vendor/github.com/subosito/gotenv
parent[chore] update URLs to forked source (diff)
downloadgotosocial-3ac1ee16f377d31a0fb80c8dae28b6239ac4229e.tar.xz
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/subosito/gotenv')
-rw-r--r--vendor/github.com/subosito/gotenv/.env1
-rw-r--r--vendor/github.com/subosito/gotenv/.env.invalid1
-rw-r--r--vendor/github.com/subosito/gotenv/.gitignore4
-rw-r--r--vendor/github.com/subosito/gotenv/.golangci.yaml7
-rw-r--r--vendor/github.com/subosito/gotenv/CHANGELOG.md105
-rw-r--r--vendor/github.com/subosito/gotenv/LICENSE21
-rw-r--r--vendor/github.com/subosito/gotenv/README.md129
-rw-r--r--vendor/github.com/subosito/gotenv/gotenv.go409
8 files changed, 0 insertions, 677 deletions
diff --git a/vendor/github.com/subosito/gotenv/.env b/vendor/github.com/subosito/gotenv/.env
deleted file mode 100644
index 6405eca71..000000000
--- a/vendor/github.com/subosito/gotenv/.env
+++ /dev/null
@@ -1 +0,0 @@
-HELLO=world
diff --git a/vendor/github.com/subosito/gotenv/.env.invalid b/vendor/github.com/subosito/gotenv/.env.invalid
deleted file mode 100644
index 016d5e0ce..000000000
--- a/vendor/github.com/subosito/gotenv/.env.invalid
+++ /dev/null
@@ -1 +0,0 @@
-lol$wut
diff --git a/vendor/github.com/subosito/gotenv/.gitignore b/vendor/github.com/subosito/gotenv/.gitignore
deleted file mode 100644
index 7db37c1db..000000000
--- a/vendor/github.com/subosito/gotenv/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.test
-*.out
-annotate.json
-profile.cov
diff --git a/vendor/github.com/subosito/gotenv/.golangci.yaml b/vendor/github.com/subosito/gotenv/.golangci.yaml
deleted file mode 100644
index 8c82a762e..000000000
--- a/vendor/github.com/subosito/gotenv/.golangci.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Options for analysis running.
-run:
- timeout: 1m
-
-linters-settings:
- gofmt:
- simplify: true
diff --git a/vendor/github.com/subosito/gotenv/CHANGELOG.md b/vendor/github.com/subosito/gotenv/CHANGELOG.md
deleted file mode 100644
index c4fe7d326..000000000
--- a/vendor/github.com/subosito/gotenv/CHANGELOG.md
+++ /dev/null
@@ -1,105 +0,0 @@
-# Changelog
-
-## [1.5.0] - 2023-08-15
-
-### Fixed
-
-- Use io.Reader instead of custom Reader
-
-## [1.5.0] - 2023-08-15
-
-### Added
-
-- Support for reading UTF16 files
-
-### Fixed
-
-- Scanner error handling
-- Reader error handling
-
-## [1.4.2] - 2023-01-11
-
-### Fixed
-
-- Env var initialization
-
-### Changed
-
-- More consitent line splitting
-
-## [1.4.1] - 2022-08-23
-
-### Fixed
-
-- Missing file close
-
-### Changed
-
-- Updated dependencies
-
-## [1.4.0] - 2022-06-02
-
-### Added
-
-- Add `Marshal` and `Unmarshal` helpers
-
-### Changed
-
-- The CI will now run a linter and the tests on PRs.
-
-## [1.3.0] - 2022-05-23
-
-### Added
-
-- Support = within double-quoted strings
-- Add support for multiline values
-
-### Changed
-
-- `OverLoad` prefer environment variables over local variables
-
-## [1.2.0] - 2019-08-03
-
-### Added
-
-- Add `Must` helper to raise an error as panic. It can be used with `Load` and `OverLoad`.
-- Add more tests to be 100% coverage.
-- Add CHANGELOG
-- Add more OS for the test: OSX and Windows
-
-### Changed
-
-- Reduce complexity and improve source code for having `A+` score in [goreportcard](https://goreportcard.com/report/github.com/subosito/gotenv).
-- Updated README with mentions to all available functions
-
-### Removed
-
-- Remove `ErrFormat`
-- Remove `MustLoad` and `MustOverload`, replaced with `Must` helper.
-
-## [1.1.1] - 2018-06-05
-
-### Changed
-
-- Replace `os.Getenv` with `os.LookupEnv` to ensure that the environment variable is not set, by [radding](https://github.com/radding)
-
-## [1.1.0] - 2017-03-20
-
-### Added
-
-- Supports carriage return in env
-- Handle files with UTF-8 BOM
-
-### Changed
-
-- Whitespace handling
-
-### Fixed
-
-- Incorrect variable expansion
-- Handling escaped '$' characters
-
-## [1.0.0] - 2014-10-05
-
-First stable release.
-
diff --git a/vendor/github.com/subosito/gotenv/LICENSE b/vendor/github.com/subosito/gotenv/LICENSE
deleted file mode 100644
index f64ccaedc..000000000
--- a/vendor/github.com/subosito/gotenv/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 Alif Rachmawadi
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/vendor/github.com/subosito/gotenv/README.md b/vendor/github.com/subosito/gotenv/README.md
deleted file mode 100644
index fc9616e3b..000000000
--- a/vendor/github.com/subosito/gotenv/README.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# gotenv
-
-[![Build Status](https://github.com/subosito/gotenv/workflows/Go%20workflow/badge.svg)](https://github.com/subosito/gotenv/actions)
-[![Coverage Status](https://badgen.net/codecov/c/github/subosito/gotenv)](https://codecov.io/gh/subosito/gotenv)
-[![Go Report Card](https://goreportcard.com/badge/github.com/subosito/gotenv)](https://goreportcard.com/report/github.com/subosito/gotenv)
-[![GoDoc](https://godoc.org/github.com/subosito/gotenv?status.svg)](https://godoc.org/github.com/subosito/gotenv)
-
-Load environment variables from `.env` or `io.Reader` in Go.
-
-## Usage
-
-Put the gotenv package on your `import` statement:
-
-```go
-import "github.com/subosito/gotenv"
-```
-
-To modify your app environment variables, `gotenv` expose 2 main functions:
-
-- `gotenv.Load`
-- `gotenv.Apply`
-
-By default, `gotenv.Load` will look for a file called `.env` in the current working directory.
-
-Behind the scene, it will then load `.env` file and export the valid variables to the environment variables. Make sure you call the method as soon as possible to ensure it loads all variables, say, put it on `init()` function.
-
-Once loaded you can use `os.Getenv()` to get the value of the variable.
-
-Let's say you have `.env` file:
-
-```sh
-APP_ID=1234567
-APP_SECRET=abcdef
-```
-
-Here's the example of your app:
-
-```go
-package main
-
-import (
- "github.com/subosito/gotenv"
- "log"
- "os"
-)
-
-func init() {
- gotenv.Load()
-}
-
-func main() {
- log.Println(os.Getenv("APP_ID")) // "1234567"
- log.Println(os.Getenv("APP_SECRET")) // "abcdef"
-}
-```
-
-You can also load other than `.env` file if you wish. Just supply filenames when calling `Load()`. It will load them in order and the first value set for a variable will win.:
-
-```go
-gotenv.Load(".env.production", "credentials")
-```
-
-While `gotenv.Load` loads entries from `.env` file, `gotenv.Apply` allows you to use any `io.Reader`:
-
-```go
-gotenv.Apply(strings.NewReader("APP_ID=1234567"))
-
-log.Println(os.Getenv("APP_ID"))
-// Output: "1234567"
-```
-
-Both `gotenv.Load` and `gotenv.Apply` **DO NOT** overrides existing environment variables. If you want to override existing ones, you can see section below.
-
-### Environment Overrides
-
-Besides above functions, `gotenv` also provides another functions that overrides existing:
-
-- `gotenv.OverLoad`
-- `gotenv.OverApply`
-
-Here's the example of this overrides behavior:
-
-```go
-os.Setenv("HELLO", "world")
-
-// NOTE: using Apply existing value will be reserved
-gotenv.Apply(strings.NewReader("HELLO=universe"))
-fmt.Println(os.Getenv("HELLO"))
-// Output: "world"
-
-// NOTE: using OverApply existing value will be overridden
-gotenv.OverApply(strings.NewReader("HELLO=universe"))
-fmt.Println(os.Getenv("HELLO"))
-// Output: "universe"
-```
-
-### Throw a Panic
-
-Both `gotenv.Load` and `gotenv.OverLoad` returns an error on something wrong occurred, like your env file is not exist, and so on. To make it easier to use, `gotenv` also provides `gotenv.Must` helper, to let it panic when an error returned.
-
-```go
-err := gotenv.Load(".env-is-not-exist")
-fmt.Println("error", err)
-// error: open .env-is-not-exist: no such file or directory
-
-gotenv.Must(gotenv.Load, ".env-is-not-exist")
-// it will throw a panic
-// panic: open .env-is-not-exist: no such file or directory
-```
-
-### Another Scenario
-
-Just in case you want to parse environment variables from any `io.Reader`, gotenv keeps its `Parse` and `StrictParse` function as public API so you can use that.
-
-```go
-// import "strings"
-
-pairs := gotenv.Parse(strings.NewReader("FOO=test\nBAR=$FOO"))
-// gotenv.Env{"FOO": "test", "BAR": "test"}
-
-pairs, err := gotenv.StrictParse(strings.NewReader(`FOO="bar"`))
-// gotenv.Env{"FOO": "bar"}
-```
-
-`Parse` ignores invalid lines and returns `Env` of valid environment variables, while `StrictParse` returns an error for invalid lines.
-
-## Notes
-
-The gotenv package is a Go port of [`dotenv`](https://github.com/bkeepers/dotenv) project with some additions made for Go. For general features, it aims to be compatible as close as possible.
diff --git a/vendor/github.com/subosito/gotenv/gotenv.go b/vendor/github.com/subosito/gotenv/gotenv.go
deleted file mode 100644
index 1191d3587..000000000
--- a/vendor/github.com/subosito/gotenv/gotenv.go
+++ /dev/null
@@ -1,409 +0,0 @@
-// Package gotenv provides functionality to dynamically load the environment variables
-package gotenv
-
-import (
- "bufio"
- "bytes"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "regexp"
- "sort"
- "strconv"
- "strings"
-
- "golang.org/x/text/encoding/unicode"
- "golang.org/x/text/transform"
-)
-
-const (
- // Pattern for detecting valid line format
- linePattern = `\A\s*(?:export\s+)?([\w\.]+)(?:\s*=\s*|:\s+?)('(?:\'|[^'])*'|"(?:\"|[^"])*"|[^#\n]+)?\s*(?:\s*\#.*)?\z`
-
- // Pattern for detecting valid variable within a value
- variablePattern = `(\\)?(\$)(\{?([A-Z0-9_]+)?\}?)`
-)
-
-// Byte order mark character
-var (
- bomUTF8 = []byte("\xEF\xBB\xBF")
- bomUTF16LE = []byte("\xFF\xFE")
- bomUTF16BE = []byte("\xFE\xFF")
-)
-
-// Env holds key/value pair of valid environment variable
-type Env map[string]string
-
-// Load is a function to load a file or multiple files and then export the valid variables into environment variables if they do not exist.
-// When it's called with no argument, it will load `.env` file on the current path and set the environment variables.
-// Otherwise, it will loop over the filenames parameter and set the proper environment variables.
-func Load(filenames ...string) error {
- return loadenv(false, filenames...)
-}
-
-// OverLoad is a function to load a file or multiple files and then export and override the valid variables into environment variables.
-func OverLoad(filenames ...string) error {
- return loadenv(true, filenames...)
-}
-
-// Must is wrapper function that will panic when supplied function returns an error.
-func Must(fn func(filenames ...string) error, filenames ...string) {
- if err := fn(filenames...); err != nil {
- panic(err.Error())
- }
-}
-
-// Apply is a function to load an io Reader then export the valid variables into environment variables if they do not exist.
-func Apply(r io.Reader) error {
- return parset(r, false)
-}
-
-// OverApply is a function to load an io Reader then export and override the valid variables into environment variables.
-func OverApply(r io.Reader) error {
- return parset(r, true)
-}
-
-func loadenv(override bool, filenames ...string) error {
- if len(filenames) == 0 {
- filenames = []string{".env"}
- }
-
- for _, filename := range filenames {
- f, err := os.Open(filename)
- if err != nil {
- return err
- }
-
- err = parset(f, override)
- f.Close()
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// parse and set :)
-func parset(r io.Reader, override bool) error {
- env, err := strictParse(r, override)
- if err != nil {
- return err
- }
-
- for key, val := range env {
- setenv(key, val, override)
- }
-
- return nil
-}
-
-func setenv(key, val string, override bool) {
- if override {
- os.Setenv(key, val)
- } else {
- if _, present := os.LookupEnv(key); !present {
- os.Setenv(key, val)
- }
- }
-}
-
-// Parse is a function to parse line by line any io.Reader supplied and returns the valid Env key/value pair of valid variables.
-// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
-// This function is skipping any invalid lines and only processing the valid one.
-func Parse(r io.Reader) Env {
- env, _ := strictParse(r, false)
- return env
-}
-
-// StrictParse is a function to parse line by line any io.Reader supplied and returns the valid Env key/value pair of valid variables.
-// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
-// This function is returning an error if there are any invalid lines.
-func StrictParse(r io.Reader) (Env, error) {
- return strictParse(r, false)
-}
-
-// Read is a function to parse a file line by line and returns the valid Env key/value pair of valid variables.
-// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
-// This function is skipping any invalid lines and only processing the valid one.
-func Read(filename string) (Env, error) {
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- return strictParse(f, false)
-}
-
-// Unmarshal reads a string line by line and returns the valid Env key/value pair of valid variables.
-// It expands the value of a variable from the environment variable but does not set the value to the environment itself.
-// This function is returning an error if there are any invalid lines.
-func Unmarshal(str string) (Env, error) {
- return strictParse(strings.NewReader(str), false)
-}
-
-// Marshal outputs the given environment as a env file.
-// Variables will be sorted by name.
-func Marshal(env Env) (string, error) {
- lines := make([]string, 0, len(env))
- for k, v := range env {
- if d, err := strconv.Atoi(v); err == nil {
- lines = append(lines, fmt.Sprintf(`%s=%d`, k, d))
- } else {
- lines = append(lines, fmt.Sprintf(`%s=%q`, k, v))
- }
- }
- sort.Strings(lines)
- return strings.Join(lines, "\n"), nil
-}
-
-// Write serializes the given environment and writes it to a file
-func Write(env Env, filename string) error {
- content, err := Marshal(env)
- if err != nil {
- return err
- }
- // ensure the path exists
- if err := os.MkdirAll(filepath.Dir(filename), 0o775); err != nil {
- return err
- }
- // create or truncate the file
- file, err := os.Create(filename)
- if err != nil {
- return err
- }
- defer file.Close()
- _, err = file.WriteString(content + "\n")
- if err != nil {
- return err
- }
-
- return file.Sync()
-}
-
-// splitLines is a valid SplitFunc for a bufio.Scanner. It will split lines on CR ('\r'), LF ('\n') or CRLF (any of the three sequences).
-// If a CR is immediately followed by a LF, it is treated as a CRLF (one single line break).
-func splitLines(data []byte, atEOF bool) (advance int, token []byte, err error) {
- if atEOF && len(data) == 0 {
- return 0, nil, bufio.ErrFinalToken
- }
-
- idx := bytes.IndexAny(data, "\r\n")
- switch {
- case atEOF && idx < 0:
- return len(data), data, bufio.ErrFinalToken
-
- case idx < 0:
- return 0, nil, nil
- }
-
- // consume CR or LF
- eol := idx + 1
- // detect CRLF
- if len(data) > eol && data[eol-1] == '\r' && data[eol] == '\n' {
- eol++
- }
-
- return eol, data[:idx], nil
-}
-
-func strictParse(r io.Reader, override bool) (Env, error) {
- env := make(Env)
-
- buf := new(bytes.Buffer)
- tee := io.TeeReader(r, buf)
-
- // There can be a maximum of 3 BOM bytes.
- bomByteBuffer := make([]byte, 3)
- _, err := tee.Read(bomByteBuffer)
- if err != nil && err != io.EOF {
- return env, err
- }
-
- z := io.MultiReader(buf, r)
-
- // We chooes a different scanner depending on file encoding.
- var scanner *bufio.Scanner
-
- if bytes.HasPrefix(bomByteBuffer, bomUTF8) {
- scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF8BOM.NewDecoder()))
- } else if bytes.HasPrefix(bomByteBuffer, bomUTF16LE) {
- scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF16(unicode.LittleEndian, unicode.ExpectBOM).NewDecoder()))
- } else if bytes.HasPrefix(bomByteBuffer, bomUTF16BE) {
- scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM).NewDecoder()))
- } else {
- scanner = bufio.NewScanner(z)
- }
-
- scanner.Split(splitLines)
-
- for scanner.Scan() {
- if err := scanner.Err(); err != nil {
- return env, err
- }
-
- line := strings.TrimSpace(scanner.Text())
- if line == "" || line[0] == '#' {
- continue
- }
-
- quote := ""
- // look for the delimiter character
- idx := strings.Index(line, "=")
- if idx == -1 {
- idx = strings.Index(line, ":")
- }
- // look for a quote character
- if idx > 0 && idx < len(line)-1 {
- val := strings.TrimSpace(line[idx+1:])
- if val[0] == '"' || val[0] == '\'' {
- quote = val[:1]
- // look for the closing quote character within the same line
- idx = strings.LastIndex(strings.TrimSpace(val[1:]), quote)
- if idx >= 0 && val[idx] != '\\' {
- quote = ""
- }
- }
- }
- // look for the closing quote character
- for quote != "" && scanner.Scan() {
- l := scanner.Text()
- line += "\n" + l
- idx := strings.LastIndex(l, quote)
- if idx > 0 && l[idx-1] == '\\' {
- // foud a matching quote character but it's escaped
- continue
- }
- if idx >= 0 {
- // foud a matching quote
- quote = ""
- }
- }
-
- if quote != "" {
- return env, fmt.Errorf("missing quotes")
- }
-
- err := parseLine(line, env, override)
- if err != nil {
- return env, err
- }
- }
-
- return env, scanner.Err()
-}
-
-var (
- lineRgx = regexp.MustCompile(linePattern)
- unescapeRgx = regexp.MustCompile(`\\([^$])`)
- varRgx = regexp.MustCompile(variablePattern)
-)
-
-func parseLine(s string, env Env, override bool) error {
- rm := lineRgx.FindStringSubmatch(s)
-
- if len(rm) == 0 {
- return checkFormat(s, env)
- }
-
- key := strings.TrimSpace(rm[1])
- val := strings.TrimSpace(rm[2])
-
- var hsq, hdq bool
-
- // check if the value is quoted
- if l := len(val); l >= 2 {
- l -= 1
- // has double quotes
- hdq = val[0] == '"' && val[l] == '"'
- // has single quotes
- hsq = val[0] == '\'' && val[l] == '\''
-
- // remove quotes '' or ""
- if hsq || hdq {
- val = val[1:l]
- }
- }
-
- if hdq {
- val = strings.ReplaceAll(val, `\n`, "\n")
- val = strings.ReplaceAll(val, `\r`, "\r")
-
- // Unescape all characters except $ so variables can be escaped properly
- val = unescapeRgx.ReplaceAllString(val, "$1")
- }
-
- if !hsq {
- fv := func(s string) string {
- return varReplacement(s, hsq, env, override)
- }
- val = varRgx.ReplaceAllStringFunc(val, fv)
- }
-
- env[key] = val
- return nil
-}
-
-func parseExport(st string, env Env) error {
- if strings.HasPrefix(st, "export") {
- vs := strings.SplitN(st, " ", 2)
-
- if len(vs) > 1 {
- if _, ok := env[vs[1]]; !ok {
- return fmt.Errorf("line `%s` has an unset variable", st)
- }
- }
- }
-
- return nil
-}
-
-var varNameRgx = regexp.MustCompile(`(\$)(\{?([A-Z0-9_]+)\}?)`)
-
-func varReplacement(s string, hsq bool, env Env, override bool) string {
- if s == "" {
- return s
- }
-
- if s[0] == '\\' {
- // the dollar sign is escaped
- return s[1:]
- }
-
- if hsq {
- return s
- }
-
- mn := varNameRgx.FindStringSubmatch(s)
-
- if len(mn) == 0 {
- return s
- }
-
- v := mn[3]
-
- if replace, ok := os.LookupEnv(v); ok && !override {
- return replace
- }
-
- if replace, ok := env[v]; ok {
- return replace
- }
-
- return os.Getenv(v)
-}
-
-func checkFormat(s string, env Env) error {
- st := strings.TrimSpace(s)
-
- if st == "" || st[0] == '#' {
- return nil
- }
-
- if err := parseExport(st, env); err != nil {
- return err
- }
-
- return fmt.Errorf("line `%s` doesn't match format", s)
-}