git-pr

created pr with 16.1 on 2024-08-18T15:28:14Z · by c8ef7d19
added 16.2 on 2024-08-18T15:31:36Z · by c8ef7d19
1: 3bd44da ! 1: 9002592 chore(pgs): add validation to project names
added 16.3 on 2024-08-18T16:05:53Z · by c8ef7d19
1: 9002592 = 1: 9002592 chore(pgs): add validation to project names
-: ------- > 2: cd17cf4 chore: update pobj
-: ------- > 3: a00def2 chore: complete impl
changed pr name to feat: private obj store service on 2024-08-18T16:06:30Z · by c8ef7d19
added 16.4 on 2024-08-18T16:39:07Z · by c8ef7d19
1: 9002592 = 1: 9002592 chore(pgs): add validation to project names
2: cd17cf4 = 2: cd17cf4 chore: update pobj
3: a00def2 = 3: a00def2 chore: complete impl
-: ------- > 4: 0ed7dc9 chore: update pobj
-: ------- > 5: 8ff1131 working!
added 16.5 on 2024-08-19T02:01:34Z · by c8ef7d19
1: 9002592 = 1: 9002592 chore(pgs): add validation to project names
2: cd17cf4 = 2: cd17cf4 chore: update pobj
3: a00def2 = 3: a00def2 chore: complete impl
4: 0ed7dc9 = 4: 0ed7dc9 chore: update pobj
5: 8ff1131 = 5: 8ff1131 working!
-: ------- > 6: 0c8ad0d chore(obj): prep service def
cmds
checkout latest patchset:
ssh pr.pico.sh print 16 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print 16.[rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 16
+20 -1 go.mod #
......@@ -32,7 +32,7 @@ require (
3232 github.com/muesli/reflow v0.3.0
3333 github.com/muesli/termenv v0.15.2
3434 github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577
35- github.com/picosh/pobj v0.0.0-20240709135546-27097077b26a
35+ github.com/picosh/pobj v0.0.0-20240818155605-c7df7b892bf5
3636 github.com/picosh/send v0.0.0-20240709135413-81b1dd703a11
3737 github.com/picosh/tunkit v0.0.0-20240709033345-8315d4f3cd0e
3838 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
......@@ -57,6 +57,25 @@ require (
5757 github.com/andybalholm/cascadia v1.3.2 // indirect
5858 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
5959 github.com/atotto/clipboard v0.1.4 // indirect
60+ github.com/aws/aws-sdk-go-v2 v1.30.4 // indirect
61+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect
62+ github.com/aws/aws-sdk-go-v2/config v1.27.28 // indirect
63+ github.com/aws/aws-sdk-go-v2/credentials v1.17.28 // indirect
64+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect
65+ github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.11 // indirect
66+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect
67+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect
68+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
69+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect
70+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
71+ github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect
72+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect
73+ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect
74+ github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0 // indirect
75+ github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect
76+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect
77+ github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 // indirect
78+ github.com/aws/smithy-go v1.20.4 // indirect
6079 github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
6180 github.com/aymerick/douceur v0.2.0 // indirect
6281 github.com/beorn7/perks v1.0.1 // indirect
+40 -0 go.sum #
......@@ -21,6 +21,44 @@ github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhP
2121 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
2222 github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
2323 github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
24+github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDagTk8=
25+github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0=
26+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU=
27+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw=
28+github.com/aws/aws-sdk-go-v2/config v1.27.28 h1:OTxWGW/91C61QlneCtnD62NLb4W616/NM1jA8LhJqbg=
29+github.com/aws/aws-sdk-go-v2/config v1.27.28/go.mod h1:uzVRVtJSU5EFv6Fu82AoVFKozJi2ZCY6WRCXj06rbvs=
30+github.com/aws/aws-sdk-go-v2/credentials v1.17.28 h1:m8+AHY/ND8CMHJnPoH7PJIRakWGa4gbfbxuY9TGTUXM=
31+github.com/aws/aws-sdk-go-v2/credentials v1.17.28/go.mod h1:6TF7dSc78ehD1SL6KpRIPKMA1GyyWflIkjqg+qmf4+c=
32+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE=
33+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI=
34+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.11 h1:FEDZD/Axt5tKSkPAs967KZ++MkvYdBqr0a+cetRbjLM=
35+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.11/go.mod h1:dvlsbA32KfvCzqwTiX7maABgFek2RyUuYEJ3kyn/PmQ=
36+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY=
37+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc=
38+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I=
39+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs=
40+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
41+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
42+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc=
43+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY=
44+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI=
45+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc=
46+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM=
47+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U=
48+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ=
49+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c=
50+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I=
51+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY=
52+github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0 h1:Cso4Ev/XauMVsbwdhYEoxg8rxZWw43CFqqaPB5w3W2c=
53+github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI=
54+github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c=
55+github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM=
56+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI=
57+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac=
58+github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 h1:iAckBT2OeEK/kBDyN/jDtpEExhjeeA/Im2q4X0rJZT8=
59+github.com/aws/aws-sdk-go-v2/service/sts v1.30.4/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0=
60+github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4=
61+github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
2462 github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
2563 github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
2664 github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
......@@ -224,6 +262,8 @@ github.com/picosh/go-rsync-receiver v0.0.0-20240709135253-1daf4b12a9fc h1:bvcsoO
224262 github.com/picosh/go-rsync-receiver v0.0.0-20240709135253-1daf4b12a9fc/go.mod h1:i0iR3W4GSm1PuvVxB9OH32E5jP+CYkVb2NQSe0JCtlo=
225263 github.com/picosh/pobj v0.0.0-20240709135546-27097077b26a h1:Cr1xODiyd/SjjBRtYA9VX6Do3D+w+DansQzkb4NGeyA=
226264 github.com/picosh/pobj v0.0.0-20240709135546-27097077b26a/go.mod h1:VIkR1MZBvxSK2OO47jikxikAO/sKb/vTmXX5ZuYTIvo=
265+github.com/picosh/pobj v0.0.0-20240818155605-c7df7b892bf5 h1:gYoKG14iOjlYYCTiyFiOgybrqAOpnAqe6YU5QXnn8+A=
266+github.com/picosh/pobj v0.0.0-20240818155605-c7df7b892bf5/go.mod h1:tPv/ydMnuXlGVpWUMvBlcWlyn/xu9PsVPdncYibweWY=
227267 github.com/picosh/send v0.0.0-20240709135413-81b1dd703a11 h1:ElTyYxJPPfAz+NLRL9qy+SQ9UYaSGlWXWl2yYrLPzCU=
228268 github.com/picosh/send v0.0.0-20240709135413-81b1dd703a11/go.mod h1:RAgLDK3LrDK6pNeXtU9tjo28obl5DxShcTUk2nm/KCM=
229269 github.com/picosh/senpai v0.0.0-20240503200611-af89e73973b0 h1:pBRIbiCj7K6rGELijb//dYhyCo8A3fvxW5dijrJVtjs=
+27 -0 obj/config.go #
......@@ -0,0 +1,27 @@
1+package obj
2+
3+import (
4+ "github.com/picosh/pico/shared"
5+)
6+
7+func NewConfigSite() *shared.ConfigSite {
8+ debug := shared.GetEnv("OBJ_DEBUG", "0")
9+ storageDir := shared.GetEnv("OBJ_STORAGE_DIR", ".storage")
10+ minioURL := shared.GetEnv("MINIO_URL", "")
11+ minioUser := shared.GetEnv("MINIO_ROOT_USER", "")
12+ minioPass := shared.GetEnv("MINIO_ROOT_PASSWORD", "")
13+ dbURL := shared.GetEnv("DATABASE_URL", "")
14+
15+ cfg := shared.ConfigSite{
16+ Debug: debug == "1",
17+ DbURL: dbURL,
18+ StorageDir: storageDir,
19+ MinioURL: minioURL,
20+ MinioUser: minioUser,
21+ MinioPass: minioPass,
22+ Space: "obj",
23+ Logger: shared.CreateLogger(debug == "1"),
24+ }
25+
26+ return &cfg
27+}
+99 -0 obj/ssh.go #
......@@ -0,0 +1,99 @@
1+package obj
2+
3+import (
4+ "context"
5+ "fmt"
6+ "log/slog"
7+ "os"
8+ "os/signal"
9+ "path/filepath"
10+ "syscall"
11+ "time"
12+
13+ "github.com/charmbracelet/wish"
14+ "github.com/picosh/pico/db"
15+ "github.com/picosh/pico/db/postgres"
16+ "github.com/picosh/pico/filehandlers/util"
17+ "github.com/picosh/pico/shared"
18+ "github.com/picosh/pico/shared/storage"
19+ "github.com/picosh/pobj"
20+ "github.com/picosh/send/send/utils"
21+)
22+
23+type AssetNamesPriv struct {
24+ DBPool db.DB
25+}
26+
27+var _ pobj.AssetNames = &AssetNamesPriv{}
28+var _ pobj.AssetNames = (*AssetNamesPriv)(nil)
29+
30+func (an *AssetNamesPriv) BucketName(userName string) string {
31+ user, _ := an.DBPool.FindUserForName(userName)
32+ return shared.GetAssetBucketName(user.ID)
33+}
34+func (an *AssetNamesPriv) ObjectName(entry *utils.FileEntry) string {
35+ return filepath.Join("pico-private", entry.Filepath)
36+}
37+
38+func StartSshServer() {
39+ logger := slog.Default()
40+ host := pobj.GetEnv("OBJ_SSH_HOST", "0.0.0.0")
41+ port := pobj.GetEnv("OBJ_SSH_PORT", "2222")
42+ cfg := NewConfigSite()
43+ dbpool := postgres.NewDB(cfg.DbURL, cfg.Logger)
44+ defer dbpool.Close()
45+
46+ var st storage.StorageServe
47+ var err error
48+ if cfg.MinioURL == "" {
49+ st, err = storage.NewStorageFS(cfg.StorageDir)
50+ } else {
51+ st, err = storage.NewStorageMinio(cfg.MinioURL, cfg.MinioUser, cfg.MinioPass)
52+ }
53+
54+ assetNames := &AssetNamesPriv{
55+ DBPool: dbpool,
56+ }
57+ objcfg := &pobj.Config{
58+ Logger: logger,
59+ Storage: st,
60+ AssetNames: assetNames,
61+ }
62+
63+ handler := pobj.NewUploadAssetHandler(objcfg)
64+
65+ sshAuth := util.NewSshAuthHandler(dbpool, logger, cfg)
66+ s, err := wish.NewServer(
67+ wish.WithAddress(fmt.Sprintf("%s:%s", host, port)),
68+ wish.WithHostKeyPath("ssh_data/term_info_ed25519"),
69+ wish.WithPublicKeyAuth(sshAuth.PubkeyAuthHandler),
70+ pobj.WithProxy(handler),
71+ )
72+ if err != nil {
73+ logger.Error(err.Error())
74+ return
75+ }
76+
77+ done := make(chan os.Signal, 1)
78+ signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
79+ logger.Info(
80+ "starting SSH server",
81+ "host", host,
82+ "port", port,
83+ )
84+ go func() {
85+ if err = s.ListenAndServe(); err != nil {
86+ logger.Error(err.Error())
87+ }
88+ }()
89+
90+ <-done
91+ logger.Info("stopping SSH server")
92+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
93+ defer func() {
94+ cancel()
95+ }()
96+ if err := s.Shutdown(ctx); err != nil {
97+ logger.Error(err.Error())
98+ }
99+}
Back to top