this repo has no description smallweb.run
smallweb
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

remove the sftp server

pomdtr 84854808 68d6535b

+16 -44
+12 -5
cmd/sync.go
··· 11 11 12 12 func NewCmdSync() *cobra.Command { 13 13 return &cobra.Command{ 14 - Use: "sync <remote>", 14 + Use: "sync <remote> [remote-dir]", 15 15 Short: "Sync the smallweb config with the filesystem", 16 16 PreRunE: func(cmd *cobra.Command, args []string) error { 17 17 return checkMutagen() 18 18 }, 19 - Args: cobra.MaximumNArgs(1), 19 + Args: cobra.RangeArgs(1, 2), 20 20 RunE: func(cmd *cobra.Command, args []string) error { 21 - remote := args[0] 22 - localDir := k.String("dir") 21 + var alpha string 22 + if len(args) == 1 { 23 + alpha = fmt.Sprintf("%s:smallweb", args[0]) 24 + } else { 25 + alpha = fmt.Sprintf("%s:%s", args[0], args[1]) 26 + } 27 + 28 + beta := k.String("dir") 29 + 23 30 syncName := strings.Replace(k.String("domain"), ".", "-", -1) 24 - command := exec.Command("mutagen", "sync", "create", fmt.Sprintf("--name=%s", syncName), "--ignore=node_modules,.DS_Store", "--ignore-vcs", "--mode=two-way-resolved", remote, localDir) 31 + command := exec.Command("mutagen", "sync", "create", fmt.Sprintf("--name=%s", syncName), "--ignore=node_modules,.DS_Store", "--ignore-vcs", "--mode=two-way-resolved", alpha, beta) 25 32 26 33 command.Stdout = os.Stdout 27 34 command.Stderr = os.Stderr
-25
cmd/up.go
··· 6 6 "errors" 7 7 "fmt" 8 8 "io" 9 - "log" 10 9 "log/slog" 11 10 "net" 12 11 "net/http" ··· 23 22 "github.com/caddyserver/certmagic" 24 23 "github.com/charmbracelet/keygen" 25 24 "github.com/charmbracelet/ssh" 26 - "github.com/pkg/sftp" 27 25 "github.com/pomdtr/smallweb/app" 28 26 "github.com/pomdtr/smallweb/watcher" 29 27 gossh "golang.org/x/crypto/ssh" ··· 138 136 139 137 if flags.sshAddr != "" { 140 138 server := ssh.Server{ 141 - SubsystemHandlers: map[string]ssh.SubsystemHandler{ 142 - "sftp": NewSftpHandler(k.String("dir")), 143 - }, 144 139 PublicKeyHandler: func(ctx ssh.Context, key ssh.PublicKey) bool { 145 140 for _, authorizedKeysPath := range []string{ 146 141 filepath.Join(os.Getenv("HOME"), ".ssh", "authorized_keys"), ··· 399 394 return errors.New("missing domain") 400 395 } 401 396 return nil 402 - } 403 - 404 - // SftpHandler handler for SFTP subsystem 405 - func NewSftpHandler(rootDir string) func(sess ssh.Session) { 406 - return func(sess ssh.Session) { 407 - server, err := sftp.NewServer( 408 - sess, 409 - sftp.WithServerWorkingDirectory(rootDir), 410 - ) 411 - if err != nil { 412 - log.Printf("sftp server init error: %s\n", err) 413 - return 414 - } 415 - if err := server.Serve(); err == io.EOF { 416 - server.Close() 417 - fmt.Println("sftp client exited session.") 418 - } else if err != nil { 419 - fmt.Println("sftp server completed with error:", err) 420 - } 421 - } 422 397 } 423 398 424 399 func validatePublicKey(authorizedKeysPath string, pubKey ssh.PublicKey) (bool, error) {
+4 -4
go.mod
··· 23 23 require ( 24 24 github.com/caddyserver/certmagic v0.21.4 25 25 github.com/carapace-sh/carapace v1.5.0 26 + github.com/charmbracelet/keygen v0.5.1 27 + github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c 26 28 github.com/fsnotify/fsnotify v1.8.0 27 29 github.com/getsops/sops/v3 v3.9.1 28 30 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 29 31 github.com/google/uuid v1.6.0 30 32 github.com/knadh/koanf/providers/confmap v0.1.0 31 33 github.com/knadh/koanf/providers/posflag v0.1.0 34 + github.com/pkg/sftp v1.13.7 32 35 github.com/robfig/cron/v3 v3.0.1 36 + golang.org/x/crypto v0.31.0 33 37 gopkg.in/natefinch/lumberjack.v2 v2.2.1 34 38 ) 35 39 ··· 78 82 github.com/caddyserver/zerossl v0.1.3 // indirect 79 83 github.com/carapace-sh/carapace-shlex v1.0.1 // indirect 80 84 github.com/cenkalti/backoff/v4 v4.3.0 // indirect 81 - github.com/charmbracelet/keygen v0.5.1 // indirect 82 85 github.com/charmbracelet/lipgloss v0.13.0 // indirect 83 - github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c // indirect 84 86 github.com/charmbracelet/x/ansi v0.2.3 // indirect 85 87 github.com/charmbracelet/x/conpty v0.1.0 // indirect 86 88 github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 // indirect ··· 139 141 github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect 140 142 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect 141 143 github.com/pkg/errors v0.9.1 // indirect 142 - github.com/pkg/sftp v1.13.7 // indirect 143 144 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect 144 145 github.com/rivo/uniseg v0.4.7 // indirect 145 146 github.com/russross/blackfriday/v2 v2.1.0 // indirect ··· 158 159 go.opentelemetry.io/otel/trace v1.30.0 // indirect 159 160 go.uber.org/multierr v1.11.0 // indirect 160 161 go.uber.org/zap v1.27.0 // indirect 161 - golang.org/x/crypto v0.31.0 // indirect 162 162 golang.org/x/mod v0.18.0 // indirect 163 163 golang.org/x/oauth2 v0.23.0 // indirect 164 164 golang.org/x/sync v0.10.0 // indirect
-10
go.sum
··· 417 417 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 418 418 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 419 419 golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 420 - golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= 421 - golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= 422 420 golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= 423 421 golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 424 422 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= ··· 450 448 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 451 449 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 452 450 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 453 - golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= 454 - golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 455 451 golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= 456 452 golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 457 453 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= ··· 470 466 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 471 467 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 472 468 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 473 - golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= 474 - golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 475 469 golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= 476 470 golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 477 471 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= ··· 479 473 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 480 474 golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 481 475 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 482 - golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= 483 - golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= 484 476 golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= 485 477 golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= 486 478 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= ··· 489 481 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 490 482 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 491 483 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 492 - golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= 493 - golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 494 484 golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= 495 485 golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 496 486 golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=