{"record":{"id":"1ac0cdf7958e0992","repo":"dutchcoders/transfer.sh","slug":"provider-not-set-or-invalid","errorCode":null,"errorMessage":"Provider not set or invalid.","messagePattern":"Provider not set or invalid\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"cmd/cmd.go","lineNumber":531,"sourceCode":"\t\t\tif access := c.String(\"storj-access\"); access == \"\" {\n\t\t\t\treturn errors.New(\"storj-access not set.\")\n\t\t\t} else if bucket := c.String(\"storj-bucket\"); bucket == \"\" {\n\t\t\t\treturn errors.New(\"storj-bucket not set.\")\n\t\t\t} else if store, err := storage.NewStorjStorage(c.Context, access, bucket, purgeDays, logger); err != nil {\n\t\t\t\treturn err\n\t\t\t} else {\n\t\t\t\toptions = append(options, server.UseStorage(store))\n\t\t\t}\n\t\tcase \"local\":\n\t\t\tif v := c.String(\"basedir\"); v == \"\" {\n\t\t\t\treturn errors.New(\"basedir not set.\")\n\t\t\t} else if store, err := storage.NewLocalStorage(v, logger); err != nil {\n\t\t\t\treturn err\n\t\t\t} else {\n\t\t\t\toptions = append(options, server.UseStorage(store))\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.New(\"Provider not set or invalid.\")\n\t\t}\n\n\t\tsrvr, err := server.New(\n\t\t\toptions...,\n\t\t)\n\n\t\tif err != nil {\n\t\t\tlogger.Println(color.RedString(\"Error starting server: %s\", err.Error()))\n\t\t\treturn err\n\t\t}\n\n\t\tsrvr.Run()\n\t\treturn nil\n\t}\n\n\treturn &Cmd{\n\t\tApp: app,\n\t}","sourceCodeStart":513,"sourceCodeEnd":549,"githubUrl":"https://github.com/dutchcoders/transfer.sh/blob/c37bfd95797fd6da8a6da53fc13d191994b3f687/cmd/cmd.go#L513-L549","documentation":"This error is thrown by the transfer.sh CLI startup when the value of the --provider flag does not match any of the supported storage backends (s3, gdrive, storj, local). The switch statement in cmd/cmd.go falls through to its default branch, aborting server startup. It means no valid storage provider was configured, so the server cannot store uploads.","triggerScenarios":"Running the server with --provider set to a misspelled or unsupported value (e.g. --provider=S3, --provider=filesystem, or omitted entirely so it defaults to an empty/unrecognized string). Any value outside {s3, gdrive, storj, local} hits cmd/cmd.go:531.","commonSituations":"Typos in the provider flag, copying config from an older transfer.sh version that used a differently named provider (e.g. 's3' vs 'aws'), forgetting to set --provider in a systemd unit or Docker CMD, or case mismatch since the switch is case-sensitive.","solutions":["Set --provider to one of the exact lowercase values: s3, gdrive, storj, or local.","If using local storage, also pass --basedir pointing to a writable directory; for s3 also pass aws-access-key, aws-secret-key, and bucket.","Check your environment variables or config file feeding the flag for typos or trailing whitespace (e.g. PROVIDER=s3 ).","Upgrade to a version that supports your intended backend, or verify the provider name against the documented flag list (transfer.sh --help)."],"exampleFix":"// before\ntransfer.sh --provider=S3 --aws-access-key ... \n// after\ntransfer.sh --provider s3 --aws-access-key ... --aws-secret-key ... --bucket mybucket","handlingStrategy":"validation","validationCode":"case os.Getenv(\"PROVIDER\"), providerFlag := \"\"\n// shell check before launch:\n// [ \"$PROVIDER\" = \"s3\" ] || [ \"$PROVIDER\" = \"gdrive\" ] || [ \"$PROVIDER\" = \"storj\" ] || [ \"$PROVIDER\" = \"local\" ] || { echo \"invalid provider\"; exit 1; }","typeGuard":"func validProvider(p string) bool {\n\tswitch p {\n\tcase \"s3\", \"gdrive\", \"storj\", \"local\":\n\t\treturn true\n\t}\n\treturn false\n}","tryCatchPattern":null,"preventionTips":["Always pass --provider with a lowercase supported value: s3, gdrive, storj, or local.","Lint systemd units, Dockerfiles and scripts for the provider flag value.","Keep provider config in one environment file and validate it in CI before deploy."],"tags":["configuration","cli","startup","storage-provider"],"backgroundTag":"missing-env-var","analyzedSha":"c37bfd95797fd6da8a6da53fc13d191994b3f687","analyzedAt":"2026-09-05T10:21:07.548Z","contentChangedAt":"2026-09-05T10:21:07.548Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}