diff --git a/.dockerignore b/.dockerignore index dbe8b332..62b98d88 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,7 +4,6 @@ documentation release releases server/plikd -server/common/version.go testing webapp/node_modules webapp/bower_components diff --git a/.gitignore b/.gitignore index db2156f5..5e7b038f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ webapp/dist clients client/client servers -server/common/version.go release releases debs diff --git a/Makefile b/Makefile index c5ea2b17..5f3f3973 100644 --- a/Makefile +++ b/Makefile @@ -12,13 +12,15 @@ GOHOSTARCH=$(shell go env GOHOSTARCH) DEBROOT_SERVER=debs/server DEBROOT_CLIENT=debs/client -race_detector = GORACE="halt_on_error=1" go build -race +BUILD_INFO=$(shell server/gen_build_info.sh $(RELEASE_VERSION) base64) +BUILD_FLAG=-ldflags="-X github.com/root-gg/plik/server/common.buildInfoString=$(BUILD_INFO)" + +GO_BUILD=go build $(BUILD_FLAG) +GO_TEST=GORACE="halt_on_error=1" go test $(BUILD_FLAG) -race -cover -p 1 + ifdef ENABLE_RACE_DETECTOR - build = $(race_detector) -else - build = go build + GO_BUILD:=GORACE="halt_on_error=1" $(GO_BUILD) -race endif -test: build = $(race_detector) all: clean clean-frontend frontend clients server @@ -34,15 +36,15 @@ frontend: # Build plik server for the current architecture ### server: - @server/gen_build_info.sh $(RELEASE_VERSION) + @server/gen_build_info.sh $(RELEASE_VERSION) info @echo "Building Plik server" - @cd server && $(build) -o plikd ./ + @cd server && $(GO_BUILD) -o plikd ### # Build plik server for all architectures ### servers: frontend - @server/gen_build_info.sh $(RELEASE_VERSION) + @server/gen_build_info.sh $(RELEASE_VERSION) info @cd server && for target in $(RELEASE_TARGETS) ; do \ SERVER_DIR=../servers/$$target; \ SERVER_PATH=$$SERVER_DIR/plikd; \ @@ -52,23 +54,23 @@ servers: frontend if [ $$GOOS = "windows" ] ; then SERVER_PATH=$$SERVER_DIR/plikd.exe ; fi ; \ if [ -e $$SERVER_PATH ] ; then continue ; fi ; \ echo "Building Plik server for $$target to $$SERVER_PATH"; \ - $(build) -o $$SERVER_PATH ; \ + $(GO_BUILD) -o $$SERVER_PATH ; \ done ### # Build plik client for the current architecture ### client: - @server/gen_build_info.sh $(RELEASE_VERSION) + @server/gen_build_info.sh $(RELEASE_VERSION) info @echo "Building Plik client" - @cd client && $(build) -o plik ./ + @cd client && $(GO_BUILD) -o plik ./ ### # Build plik client for all architectures ### clients: - @server/gen_build_info.sh $(RELEASE_VERSION) + @server/gen_build_info.sh $(RELEASE_VERSION) info @cd client && for target in $(RELEASE_TARGETS) ; do \ CLIENT_DIR=../clients/$$target; \ CLIENT_PATH=$$CLIENT_DIR/plik; \ @@ -79,7 +81,7 @@ clients: if [ $$GOOS = "windows" ] ; then CLIENT_PATH=$$CLIENT_DIR/plik.exe ; fi ; \ if [ -e $$CLIENT_PATH ] ; then continue ; fi ; \ echo "Building Plik client for $$target to $$CLIENT_PATH"; \ - $(build) -o $$CLIENT_PATH ; \ + $(GO_BUILD) -o $$CLIENT_PATH ; \ md5sum $$CLIENT_PATH | awk '{print $$1}' > $$CLIENT_MD5; \ done @mkdir -p clients/bash && cp client/plik.sh clients/bash @@ -185,7 +187,7 @@ releases: release-template servers # Generate build info ### build-info: - @server/gen_build_info.sh $(RELEASE_VERSION) + @server/gen_build_info.sh $(RELEASE_VERSION) info ### # Run linters @@ -210,8 +212,7 @@ fmt: ### test: @if curl -s 127.0.0.1:8080 > /dev/null ; then echo "Plik server probably already running" && exit 1 ; fi - @server/gen_build_info.sh $(RELEASE_VERSION) - @GORACE="halt_on_error=1" go test -race -cover -p 1 ./... 2>&1 | grep -v "no test files"; test $${PIPESTATUS[0]} -eq 0 + @$(GO_TEST) ./... 2>&1 | grep -v "no test files"; test $${PIPESTATUS[0]} -eq 0 @echo "cli client integration tests :" && cd client && ./test.sh ### @@ -230,7 +231,6 @@ docker: # Remove server build files ### clean: - @rm -rf server/common/version.go @rm -rf server/plikd @rm -rf client/plik @rm -rf clients diff --git a/README.md b/README.md index 83770307..6fd73600 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,6 @@ To compile plik from sources, you'll need golang and npm installed on your syste First, get the project and libs via go get : ```sh $ go get github.com/root-gg/plik/server -go/src/github.com/root-gg/plik/server/handlers/misc.go:51: undefined: common.GetBuildInfo <== ignore this warning $ cd $GOPATH/src/github.com/root-gg/plik/ ``` diff --git a/client/config.go b/client/config.go index 495b6f31..b18dce7d 100644 --- a/client/config.go +++ b/client/config.go @@ -11,6 +11,7 @@ import ( "strings" "github.com/BurntSushi/toml" + "github.com/docopt/docopt-go" "github.com/mitchellh/go-homedir" "github.com/root-gg/plik/server/common" @@ -73,7 +74,7 @@ func LoadConfigFromFile(path string) (*CliConfig, error) { // LoadConfig creates a new default configuration and override it with .plikrc fike. // If .plikrc does not exist, ask domain, and create a new one in user HOMEDIR -func LoadConfig() (config *CliConfig, err error) { +func LoadConfig(opts docopt.Opts) (config *CliConfig, err error) { // Load config file from environment variable path := os.Getenv("PLIKRC") if path != "" { @@ -115,11 +116,9 @@ func LoadConfig() (config *CliConfig, err error) { config = NewUploadConfig() - // Check if quiet mode ( you'll have to pass --server flag ) - for _, arg := range os.Args[1:] { - if arg == "-q" || arg == "--quiet" { - return config, nil - } + // Bypass ~/.plikrc file creation if quiet mode and/or --server flag + if opts["--quiet"].(bool) || opts["--server"].(string) != "" { + return config, nil } // Config file not found. Create one. @@ -192,22 +191,22 @@ func LoadConfig() (config *CliConfig, err error) { // UnmarshalArgs turns command line arguments into upload settings // Command line arguments override config file settings -func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err error) { - if arguments["--debug"].(bool) { +func (config *CliConfig) UnmarshalArgs(opts docopt.Opts) (err error) { + if opts["--debug"].(bool) { config.Debug = true } - if arguments["--quiet"].(bool) { + if opts["--quiet"].(bool) { config.Quiet = true } // Plik server url - if arguments["--server"] != nil && arguments["--server"].(string) != "" { - config.URL = arguments["--server"].(string) + if opts["--server"] != nil && opts["--server"].(string) != "" { + config.URL = opts["--server"].(string) } // Paths - if _, ok := arguments["FILE"].([]string); ok { - config.filePaths = arguments["FILE"].([]string) + if _, ok := opts["FILE"].([]string); ok { + config.filePaths = opts["FILE"].([]string) } else { return fmt.Errorf("No files specified") } @@ -226,29 +225,29 @@ func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err er } // Override file name if specified - if arguments["--name"] != nil && arguments["--name"].(string) != "" { - config.filenameOverride = arguments["--name"].(string) + if opts["--name"] != nil && opts["--name"].(string) != "" { + config.filenameOverride = opts["--name"].(string) } // Upload options - if arguments["--oneshot"].(bool) { + if opts["--oneshot"].(bool) { config.OneShot = true } - if arguments["--removable"].(bool) { + if opts["--removable"].(bool) { config.Removable = true } - if arguments["--stream"].(bool) { + if opts["--stream"].(bool) { config.Stream = true } - if arguments["--comments"] != nil && arguments["--comments"].(string) != "" { - config.Comments = arguments["--comments"].(string) + if opts["--comments"] != nil && opts["--comments"].(string) != "" { + config.Comments = opts["--comments"].(string) } // Configure upload expire date - if arguments["--ttl"] != nil && arguments["--ttl"].(string) != "" { - ttlStr := arguments["--ttl"].(string) + if opts["--ttl"] != nil && opts["--ttl"].(string) != "" { + ttlStr := opts["--ttl"].(string) mul := 1 if string(ttlStr[len(ttlStr)-1]) == "m" { mul = 60 @@ -262,32 +261,32 @@ func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err er } ttl, err := strconv.Atoi(ttlStr) if err != nil { - return fmt.Errorf("Invalid TTL %s", arguments["--ttl"].(string)) + return fmt.Errorf("Invalid TTL %s", opts["--ttl"].(string)) } config.TTL = ttl * mul } // Enable archive mode ? - if arguments["-a"].(bool) || arguments["--archive"] != nil || config.Archive { + if opts["-a"].(bool) || opts["--archive"] != nil || config.Archive { config.Archive = true - if arguments["--archive"] != nil && arguments["--archive"] != "" { - config.ArchiveMethod = arguments["--archive"].(string) + if opts["--archive"] != nil && opts["--archive"] != "" { + config.ArchiveMethod = opts["--archive"].(string) } } // Enable secure mode ? - if arguments["--not-secure"].(bool) { + if opts["--not-secure"].(bool) { config.Secure = false - } else if arguments["-s"].(bool) || arguments["--secure"] != nil || config.Secure { + } else if opts["-s"].(bool) || opts["--secure"] != nil || config.Secure { config.Secure = true - if arguments["--secure"] != nil && arguments["--secure"].(string) != "" { - config.SecureMethod = arguments["--secure"].(string) + if opts["--secure"] != nil && opts["--secure"].(string) != "" { + config.SecureMethod = opts["--secure"].(string) } } // Enable password protection ? - if arguments["-p"].(bool) { + if opts["-p"].(bool) { fmt.Printf("Login [plik]: ") var err error _, err = fmt.Scanln(&config.Login) @@ -302,8 +301,8 @@ func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err er if err != nil { return fmt.Errorf("Unable to get password : %s", err) } - } else if arguments["--password"] != nil && arguments["--password"].(string) != "" { - credentials := arguments["--password"].(string) + } else if opts["--password"] != nil && opts["--password"].(string) != "" { + credentials := opts["--password"].(string) sepIndex := strings.Index(credentials, ":") var login, password string if sepIndex > 0 { @@ -318,8 +317,8 @@ func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err er } // Override upload token ? - if arguments["--token"] != nil && arguments["--token"].(string) != "" { - config.Token = arguments["--token"].(string) + if opts["--token"] != nil && opts["--token"].(string) != "" { + config.Token = opts["--token"].(string) } // Ask for token @@ -332,7 +331,7 @@ func (config *CliConfig) UnmarshalArgs(arguments map[string]interface{}) (err er } } - if arguments["--stdin"].(bool) { + if opts["--stdin"].(bool) { config.DisableStdin = false } diff --git a/client/plik.go b/client/plik.go index d6483534..c2cdbf6d 100644 --- a/client/plik.go +++ b/client/plik.go @@ -79,7 +79,7 @@ Options: } // Load config - config, err = LoadConfig() + config, err = LoadConfig(arguments) if err != nil { fmt.Fprintf(os.Stderr, "Unable to load configuration : %s\n", err) os.Exit(1) @@ -105,7 +105,12 @@ Options: // Display info if arguments["--info"].(bool) { - info(client) + err = info(client) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + os.Exit(0) } // Update @@ -307,29 +312,27 @@ Options: } } -func info(client *plik.Client) { +func info(client *plik.Client) (err error) { fmt.Printf("Plik client version : %s\n\n", common.GetBuildInfo()) fmt.Printf("Plik server url : %s\n", config.URL) serverBuildInfo, err := client.GetServerVersion() if err != nil { - fmt.Printf("Plik server unreachable %s\n", err) - return + return fmt.Errorf("Plik server unreachable : %s", err) } fmt.Printf("Plik server version : %s\n", serverBuildInfo) serverConfig, err := client.GetServerConfig() if err != nil { - fmt.Printf("Plik server unreachable %s\n", err) - return + return fmt.Errorf("Plik server unreachable : %s", err) } fmt.Printf("\nPlik server configuration :\n") fmt.Printf(serverConfig.String()) - os.Exit(0) + return nil } func getFileCommand(file *plik.File) (command string, err error) { diff --git a/go.mod b/go.mod index 25bdea42..4dc7b69e 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( github.com/gorilla/mux v1.7.1 github.com/hashicorp/golang-lru v0.5.1 // indirect github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 // indirect + github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a github.com/jinzhu/gorm v1.9.13-0.20200126152832-7180bd0f27d1 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/lib/pq v1.3.1-0.20200116171513-9eb3fc897d6f // indirect diff --git a/go.sum b/go.sum index 95c4f504..ee9af216 100644 --- a/go.sum +++ b/go.sum @@ -104,6 +104,8 @@ github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFE github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o= +github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= github.com/jinzhu/gorm v1.9.2/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= github.com/jinzhu/gorm v1.9.11/go.mod h1:bu/pK8szGZ2puuErfU0RwyeNdsf3e6nCX/noXaVxkfw= github.com/jinzhu/gorm v1.9.13-0.20200126152832-7180bd0f27d1 h1:3FjnhIYXVZpGs9h4eA1mSe65h0ocfwoaO8ehiqW0sf8= diff --git a/server/common/config.go b/server/common/config.go index a1faa11e..c7b67125 100644 --- a/server/common/config.go +++ b/server/common/config.go @@ -72,7 +72,7 @@ func NewConfiguration() (config *Configuration) { config.ListenAddress = "0.0.0.0" config.ListenPort = 8080 - config.EnhancedWebSecurity = true + config.EnhancedWebSecurity = false config.MaxFileSize = 10000000000 // 10GB config.MaxFilePerUpload = 1000 diff --git a/server/common/version.go b/server/common/version.go new file mode 100644 index 00000000..e8107316 --- /dev/null +++ b/server/common/version.go @@ -0,0 +1,127 @@ +package common + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/jinzhu/copier" + + "github.com/root-gg/plik/version" +) + +// This variable content is meant to be passed the output of the gen_build_info.sh script at compile time using -ldflags +// BUILD_INFO=$(shell server/gen_build_info.sh $(RELEASE_VERSION) base64) +// BUILD_FLAG=-ldflags="-X github.com/root-gg/plik/server/common.buildInfoString=$(BUILD_INFO)" +var buildInfoString string + +var buildInfo *BuildInfo + +func init() { + buildInfo = &BuildInfo{} + + if buildInfoString != "" { + jsonString, err := base64.StdEncoding.DecodeString(buildInfoString) + if err != nil { + panic(fmt.Errorf("Unable to parse build info base64 string : %s", err)) + } + + err = json.Unmarshal(jsonString, buildInfo) + if err != nil { + panic(fmt.Errorf("Unable to parse build info json string : %s", err)) + } + } + + buildInfo.Version = version.Get() +} + +// BuildInfo export build related variables +type BuildInfo struct { + Version string `json:"version"` + Date int64 `json:"date"` + + User string `json:"user,omitempty"` + Host string `json:"host,omitempty"` + + GitShortRevision string `json:"gitShortRevision,omitempty"` + GitFullRevision string `json:"gitFullRevision,omitempty"` + + IsRelease bool `json:"isRelease"` + IsMint bool `json:"isMint"` + + GoVersion string `json:"goVersion,omitempty"` + + Clients []*Client `json:"clients"` + Releases []*Release `json:"releases"` +} + +// Client export client build related variables +type Client struct { + Name string `json:"name"` + Md5 string `json:"md5"` + Path string `json:"path"` + OS string `json:"os"` + ARCH string `json:"arch"` +} + +// Release export releases related variables +type Release struct { + Name string `json:"name"` + Date int64 `json:"date"` +} + +// GetBuildInfo get build info +func GetBuildInfo() (bi *BuildInfo) { + bi = &BuildInfo{} + + // Defensive copy + err := copier.Copy(bi, buildInfo) + if err != nil { + panic(fmt.Errorf("Unable to copy build info : %s", err)) + } + + return bi +} + +// Sanitize removes sensitive info from BuildInfo +func (bi *BuildInfo) Sanitize() { + // Version is needed for the client update to work + bi.Date = 0 + bi.User = "" + bi.Host = "" + bi.GitShortRevision = "" + bi.GitFullRevision = "" + bi.IsRelease = false + bi.IsMint = false + bi.GoVersion = "" +} + +func (bi *BuildInfo) String() string { + + v := fmt.Sprintf("v%s", bi.Version) + + if bi.GitShortRevision != "" { + v += fmt.Sprintf(" built from git rev %s", bi.GitShortRevision) + } + + // Compute flags + var flags []string + if bi.IsMint { + flags = append(flags, "mint") + } + if bi.IsRelease { + flags = append(flags, "release") + } + + if len(flags) > 0 { + v += fmt.Sprintf(" [%s]", strings.Join(flags, ",")) + } + + if bi.Date > 0 && bi.GoVersion != "" { + v += fmt.Sprintf(" at %s with %s)", time.Unix(bi.Date, 0), bi.GoVersion) + } + + return v +} diff --git a/server/common/version_test.go b/server/common/version_test.go index 6956b1b2..60492989 100644 --- a/server/common/version_test.go +++ b/server/common/version_test.go @@ -1,6 +1,9 @@ package common import ( + "fmt" + "github.com/root-gg/plik/version" + "strings" "testing" "github.com/stretchr/testify/require" @@ -14,6 +17,15 @@ func TestGetBuildInfo(t *testing.T) { func TestGetBuildInfoString(t *testing.T) { buildInfo := GetBuildInfo() - version := buildInfo.String() - require.NotZero(t, version, "invalid build string") + buildInfo.GitShortRevision = "foobar" + v := buildInfo.String() + require.NotZero(t, v, "empty build string") + require.True(t, strings.Contains(v, "foobar"), "invalid version string") +} + +func TestGetBuildInfoStringSanitize(t *testing.T) { + buildInfo := GetBuildInfo() + buildInfo.Sanitize() + v := buildInfo.String() + require.Equal(t, fmt.Sprintf("v%s", version.Get()), v, "invalid build string") } diff --git a/server/gen_build_info.sh b/server/gen_build_info.sh index 498ae35b..eafbde89 100755 --- a/server/gen_build_info.sh +++ b/server/gen_build_info.sh @@ -2,8 +2,11 @@ set -e -# some variables +# arguments version=$1 +output=$2 + +# some variables user=$(whoami) host=$(hostname) repo=$(pwd) @@ -33,11 +36,17 @@ if is_mint_repo; then isMint=true fi -echo "Plik $version with go $goVersion" -echo "Commit $full_rev mint=$isMint release=$isRelease" +if [[ "$output" == "info" ]]; then + echo "Plik $version with go $goVersion" + echo "Commit $full_rev mint=$isMint release=$isRelease" + exit 0 +fi + +# join strings from array +function join_by { local IFS="$1"; shift; echo "$*"; } # compute clients code -clients="" +declare -a clients clientList=$(find clients -name "plik*" 2> /dev/null | sort -n) for client in $clientList ; do folder=$(echo $client | cut -d "/" -f2) @@ -65,120 +74,47 @@ for client in $clientList ; do esac fullName="$prettyOs $prettyArch" - clientCode="&Client{Name: \"$fullName\", Md5: \"$md5\", Path: \"$client\", OS: \"$os\", ARCH: \"$arch\"}" - clients+=$'\t\t'"buildInfo.Clients = append(buildInfo.Clients, $clientCode)"$'\n' + client_json="{\"name\": \"$fullName\", \"md5\": \"$md5\", \"path\": \"$client\", \"os\": \"$os\", \"arch\": \"$arch\"}" + clients+=("$client_json") done +clients_json="[$(join_by , "${clients[@]}")]" # get releases -releases="" +declare -a releases git config versionsort.prereleaseSuffix -RC for gitTag in $(git tag --sort version:refname) do if [ -f "changelog/$gitTag" ]; then # '%at': author date, UNIX timestamp - releaseDate=$(git show -s --pretty="format:%at" "refs/tags/$gitTag") - releaseCode="&Release{Name: \"$gitTag\", Date: $releaseDate}" - releases+=$'\t\t'"buildInfo.Releases = append(buildInfo.Releases, $releaseCode)"$'\n' + release_date=$(git show -s --pretty="format:%at" "refs/tags/$gitTag") + release_json="{\"name\": \"$gitTag\", \"date\": $release_date}" + releases+=("$release_json") fi done +releases_json="[$(join_by , "${releases[@]}")]" -cat > "server/common/version.go" < 0 { - v += fmt.Sprintf(" [%s]", strings.Join(flags, ",")) - } - - v += fmt.Sprintf(" at %s with %s)", time.Unix(bi.Date, 0), bi.GoVersion) - - return v + "clients" : $clients_json, + "releases" : $releases_json } EOF +) + +if [[ "$output" == "base64" ]]; then + echo $json | base64 -w 0 +else + echo $json +fi \ No newline at end of file diff --git a/server/handlers/misc.go b/server/handlers/misc.go index 348238f2..6d706340 100644 --- a/server/handlers/misc.go +++ b/server/handlers/misc.go @@ -15,7 +15,12 @@ import ( // GetVersion return the build information. func GetVersion(ctx *context.Context, resp http.ResponseWriter, req *http.Request) { - common.WriteJSONResponse(resp, common.GetBuildInfo()) + bi := common.GetBuildInfo() + if ctx.GetConfig().EnhancedWebSecurity { + // Remove sensible info from BuildInfo + bi.Sanitize() + } + common.WriteJSONResponse(resp, bi) } // GetConfiguration return the server configuration diff --git a/server/handlers/misc_test.go b/server/handlers/misc_test.go index 96ce4f2f..e9953cb9 100644 --- a/server/handlers/misc_test.go +++ b/server/handlers/misc_test.go @@ -60,6 +60,37 @@ func TestGetVersion(t *testing.T) { require.EqualValues(t, common.GetBuildInfo(), result, "invalid build info") } +func TestGetVersionEnhancedWebSecurity(t *testing.T) { + ctx := newTestingContext(common.NewConfiguration()) + ctx.GetConfig().EnhancedWebSecurity = true + + req, err := http.NewRequest("GET", "/version", bytes.NewBuffer([]byte{})) + require.NoError(t, err, "unable to create new request") + + rr := ctx.NewRecorder(req) + GetVersion(ctx, rr, req) + + // Check the status code is what we expect. + context.TestOK(t, rr) + + respBody, err := ioutil.ReadAll(rr.Body) + require.NoError(t, err, "unable to read response body") + + var result *common.BuildInfo + err = json.Unmarshal(respBody, &result) + require.NoError(t, err, "unable to unmarshal response body") + + require.NotEmpty(t, result.Version, "invalid build info") + require.Empty(t, result.GoVersion, result, "invalid build info") + require.Empty(t, result.GitFullRevision, result, "invalid build info") + require.Empty(t, result.GitShortRevision, result, "invalid build info") + require.Zero(t, result.Date, result, "invalid build info") + require.False(t, result.IsMint, result, "invalid build info") + require.False(t, result.IsRelease, result, "invalid build info") + require.Empty(t, result.Host, result, "invalid build info") + require.Empty(t, result.User, result, "invalid build info") +} + func TestGetConfiguration(t *testing.T) { ctx := newTestingContext(common.NewConfiguration()) diff --git a/server/plikd.cfg b/server/plikd.cfg index 4df043fd..0d4761d2 100644 --- a/server/plikd.cfg +++ b/server/plikd.cfg @@ -24,7 +24,7 @@ SslCert = "plik.crt" # Path to your certificate file SslKey = "plik.key" # Path to your certificate private key file NoWebInterface = false # Disable web user interface DownloadDomain = "" # Enforce download domain ( ex : https://dl.plik.root.gg ) ( necessary for quick upload to work ) -EnhancedWebSecurity = false # Enable additional security headers ( X-Content-Type-Options, X-XSS-Protection, X-Frame-Options, Content-Security-Policy, Secure Cookies, ... ) +EnhancedWebSecurity = false # Enable additional security headers ( X-Content-Type-Options, X-XSS-Protection, X-Frame-Options, Content-Security-Policy, Secure Cookies, ... ) SourceIpHeader = "" # If behind reverse proxy ( ex : X-FORWARDED-FOR ) UploadWhitelist = [] # Restrict upload ans user creation to one or more IP range ( CIDR notation, /32 can be omitted ) diff --git a/version/version.sh b/version/version.sh index 7d9349f1..9e46ec4b 100755 --- a/version/version.sh +++ b/version/version.sh @@ -1,7 +1,5 @@ #!/bin/bash - - set -e FILE=$(dirname $0)/version.go