mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-06 06:22:05 +02:00
* image: add an optional public image processing gateway * image: fix representation metadata and processing bounds * image: restrict passthrough to non-executable media types Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * image: tighten source media-type validation Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * image: write passthrough body on the inner response writer CodeQL still flagged the passthrough write: the content type was set on the wrapper while the body reached w.ResponseWriter, so the validated header could not be associated with the write. Set headers and copy the body on the same inner writer. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * image: serve processed output on the inner response writer * image: reject XML source types and unsafe conditional metadata --------- Co-authored-by: zhaoyuchen <yc.zhao@yinzon.com> Co-authored-by: Chris Lu <chrislusf@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
115 lines
2.2 KiB
Go
115 lines
2.2 KiB
Go
package command
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
|
|
)
|
|
|
|
var Commands = []*Command{
|
|
cmdAdmin,
|
|
cmdAutocomplete,
|
|
cmdUnautocomplete,
|
|
cmdBackup,
|
|
cmdBenchmark,
|
|
cmdCompact,
|
|
cmdDownload,
|
|
cmdExport,
|
|
cmdFiler,
|
|
cmdFilerBackup,
|
|
cmdFilerCat,
|
|
cmdFilerCopy,
|
|
cmdFilerMetaBackup,
|
|
cmdFilerMetaScan,
|
|
cmdFilerMetaTail,
|
|
cmdFilerRemoteGateway,
|
|
cmdFilerRemoteSynchronize,
|
|
cmdFilerReplicate,
|
|
cmdFilerSynchronize,
|
|
cmdFilerSyncVerify,
|
|
cmdFix,
|
|
cmdFuse,
|
|
cmdIam,
|
|
cmdImage,
|
|
cmdMaster,
|
|
cmdMasterFollower,
|
|
cmdMini,
|
|
cmdMount,
|
|
cmdMqAgent,
|
|
cmdMqBroker,
|
|
cmdMqKafkaGateway,
|
|
cmdS3,
|
|
cmdScaffold,
|
|
cmdServer,
|
|
cmdShell,
|
|
cmdUpdate,
|
|
cmdUpload,
|
|
cmdVersion,
|
|
cmdVolume,
|
|
cmdWebDav,
|
|
cmdSftp,
|
|
cmdWorker,
|
|
}
|
|
|
|
type Command struct {
|
|
// Run runs the command.
|
|
// The args are the arguments after the command name.
|
|
Run func(cmd *Command, args []string) bool
|
|
|
|
// UsageLine is the one-line usage message.
|
|
// The first word in the line is taken to be the command name.
|
|
UsageLine string
|
|
|
|
// Short is the short description shown in the 'go help' output.
|
|
Short string
|
|
|
|
// Long is the long message shown in the 'go help <this-command>' output.
|
|
Long string
|
|
|
|
// Flag is a set of flags specific to this command.
|
|
Flag flag.FlagSet
|
|
|
|
IsDebug *bool
|
|
}
|
|
|
|
// Name returns the command's name: the first word in the usage line.
|
|
func (c *Command) Name() string {
|
|
name := c.UsageLine
|
|
i := strings.Index(name, " ")
|
|
if i >= 0 {
|
|
name = name[:i]
|
|
}
|
|
return name
|
|
}
|
|
|
|
func (c *Command) Usage() {
|
|
fmt.Fprintf(os.Stderr, "Example: weed %s\n", c.UsageLine)
|
|
fmt.Fprintf(os.Stderr, "Default Usage:\n")
|
|
c.Flag.PrintDefaults()
|
|
fmt.Fprintf(os.Stderr, "Description:\n")
|
|
fmt.Fprintf(os.Stderr, " %s\n", strings.TrimSpace(c.Long))
|
|
os.Exit(2)
|
|
}
|
|
|
|
// Runnable reports whether the command can be run; otherwise
|
|
// it is a documentation pseudo-command such as importpath.
|
|
func (c *Command) Runnable() bool {
|
|
return c.Run != nil
|
|
}
|
|
|
|
// Recorded, not os.Exit'ed, so the failure still travels through main's
|
|
// shutdown path. The highest requested status wins.
|
|
var commandExitStatus int
|
|
|
|
func SetCommandExitStatus(n int) {
|
|
if n > commandExitStatus {
|
|
commandExitStatus = n
|
|
}
|
|
}
|
|
|
|
func CommandExitStatus() int {
|
|
return commandExitStatus
|
|
}
|