109 lines
2.3 KiB
Go
109 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/genuinetools/reg/registry"
|
|
"github.com/genuinetools/reg/repoutils"
|
|
"github.com/genuinetools/reg/version"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
var (
|
|
auth types.AuthConfig
|
|
r *registry.Registry
|
|
)
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Name = "reg"
|
|
app.Version = fmt.Sprintf("version %s, build %s", version.VERSION, version.GITCOMMIT)
|
|
app.Author = "The Genuinetools Authors"
|
|
app.Email = "no-reply@butts.com"
|
|
app.Usage = "Docker registry v2 client."
|
|
|
|
app.Flags = []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "debug, d",
|
|
Usage: "run in debug mode",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "insecure, k",
|
|
Usage: "do not verify tls certificates",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "force-non-ssl, f",
|
|
Usage: "force allow use of non-ssl",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "username, u",
|
|
Usage: "username for the registry",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "password, p",
|
|
Usage: "password for the registry",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "registry, r",
|
|
Usage: "URL to the private registry (ex. r.j3ss.co)",
|
|
Value: repoutils.DefaultDockerRegistry,
|
|
EnvVar: "REG_REGISTRY",
|
|
},
|
|
}
|
|
|
|
app.Commands = []cli.Command{
|
|
deleteCommand,
|
|
layerCommand,
|
|
listCommand,
|
|
manifestCommand,
|
|
tagsCommand,
|
|
vulnsCommand,
|
|
}
|
|
|
|
app.Before = func(c *cli.Context) (err error) {
|
|
// Preload initializes any global options and configuration
|
|
// before the main or sub commands are run.
|
|
if c.GlobalBool("debug") {
|
|
logrus.SetLevel(logrus.DebugLevel)
|
|
}
|
|
|
|
if len(c.Args()) == 0 {
|
|
return
|
|
}
|
|
|
|
if c.Args()[0] == "help" {
|
|
return
|
|
}
|
|
|
|
auth, err = repoutils.GetAuthConfig(c.GlobalString("username"), c.GlobalString("password"), c.GlobalString("registry"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Prevent non-ssl unless explicitly forced
|
|
if !c.GlobalBool("force-non-ssl") && strings.HasPrefix(auth.ServerAddress, "http:") {
|
|
return fmt.Errorf("Attempt to use insecure protocol! Use non-ssl option to force")
|
|
}
|
|
|
|
// create the registry client
|
|
if c.GlobalBool("insecure") {
|
|
r, err = registry.NewInsecure(auth, c.GlobalBool("debug"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
r, err = registry.New(auth, c.GlobalBool("debug"))
|
|
return err
|
|
}
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|