repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
5f405b9
parent
2ba02ac
author
Antonio Mika
date
2025-04-10 14:40:40 -0400 EDT
Fix user registration
7 files changed,  +43, -17
M pkg/apps/pastes/ssh.go
+2, -1
 1@@ -5,6 +5,7 @@ import (
 2 	"os"
 3 	"os/signal"
 4 	"syscall"
 5+	"time"
 6 
 7 	"github.com/picosh/pico/pkg/db/postgres"
 8 	"github.com/picosh/pico/pkg/filehandlers"
 9@@ -60,7 +61,7 @@ func StartSshServer() {
10 			scp.Middleware(handler),
11 			rsync.Middleware(handler),
12 			auth.Middleware(handler),
13-			pssh.PtyMdw(pssh.DeprecatedNotice()),
14+			pssh.PtyMdw(pssh.DeprecatedNotice(), 200*time.Millisecond),
15 			pssh.LogMiddleware(handler, dbh),
16 		},
17 		[]pssh.SSHServerMiddleware{
M pkg/apps/pico/ssh.go
+2, -1
 1@@ -5,6 +5,7 @@ import (
 2 	"os"
 3 	"os/signal"
 4 	"syscall"
 5+	"time"
 6 
 7 	"git.sr.ht/~rockorager/vaxis"
 8 	"github.com/picosh/pico/pkg/db/postgres"
 9@@ -98,7 +99,7 @@ func StartSshServer() {
10 						Dbpool:  handler.DBPool,
11 						Logger:  cfg.Logger,
12 					}
13-					return pssh.PtyMdw(createTui(shrd))(next)(sesh)
14+					return pssh.PtyMdw(createTui(shrd), 200*time.Millisecond)(next)(sesh)
15 				}
16 			},
17 			Middleware(cliHandler),
M pkg/apps/prose/ssh.go
+2, -1
 1@@ -5,6 +5,7 @@ import (
 2 	"os"
 3 	"os/signal"
 4 	"syscall"
 5+	"time"
 6 
 7 	"github.com/picosh/pico/pkg/db/postgres"
 8 	"github.com/picosh/pico/pkg/filehandlers"
 9@@ -79,7 +80,7 @@ func StartSshServer() {
10 			scp.Middleware(handler),
11 			rsync.Middleware(handler),
12 			auth.Middleware(handler),
13-			pssh.PtyMdw(pssh.DeprecatedNotice()),
14+			pssh.PtyMdw(pssh.DeprecatedNotice(), 200*time.Millisecond),
15 			pssh.LogMiddleware(handler, dbh),
16 		},
17 		[]pssh.SSHServerMiddleware{
M pkg/pobj/storage/minio.go
+3, -0
 1@@ -82,6 +82,7 @@ func (s *StorageMinio) GetBucket(name string) (Bucket, error) {
 2 		s.Logger.Info("bucket found in lru cache", "name", name)
 3 		return cachedBucket.Bucket, cachedBucket.Error
 4 	}
 5+
 6 	s.Logger.Info("bucket not found in lru cache", "name", name)
 7 
 8 	bucket := Bucket{
 9@@ -114,6 +115,8 @@ func (s *StorageMinio) UpsertBucket(name string) (Bucket, error) {
10 		return bucket, err
11 	}
12 
13+	s.BucketCache.Remove(name)
14+
15 	return bucket, nil
16 }
17 
M pkg/pssh/logger.go
+13, -12
 1@@ -1,7 +1,6 @@
 2 package pssh
 3 
 4 import (
 5-	"fmt"
 6 	"log/slog"
 7 	"time"
 8 
 9@@ -31,18 +30,20 @@ func LogMiddleware(getLogger GetLoggerInterface, db FindUserInterface) SSHServer
10 				user := GetUser(s)
11 				if user == nil {
12 					userID, ok := s.Permissions().Extensions["user_id"]
13-					if !ok {
14-						return fmt.Errorf("`user_id` not set in permissions")
15-					}
16-					user, err := db.FindUser(userID)
17-					if err == nil && user != nil {
18-						logger = logger.With(
19-							"user", user.Name,
20-							"userId", user.ID,
21-							"ip", s.RemoteAddr().String(),
22-						)
23-						s.SetValue(ctxUserKey{}, user)
24+					if ok {
25+						user, err := db.FindUser(userID)
26+						if err == nil && user != nil {
27+							logger = logger.With(
28+								"user", user.Name,
29+								"userId", user.ID,
30+								"ip", s.RemoteAddr().String(),
31+							)
32+							s.SetValue(ctxUserKey{}, user)
33+						}
34+					} else {
35+						logger.Error("`user_id` not set in permissions")
36 					}
37+
38 				}
39 
40 				s.SetValue(ctxLoggerKey{}, logger)
M pkg/pssh/pty.go
+19, -1
 1@@ -3,6 +3,7 @@ package pssh
 2 import (
 3 	"encoding/binary"
 4 	"fmt"
 5+	"time"
 6 )
 7 
 8 func SessionMessage(sesh *SSHServerConnSession, msg string) {
 9@@ -23,9 +24,26 @@ func DeprecatedNotice() SSHServerMiddleware {
10 	}
11 }
12 
13-func PtyMdw(mdw SSHServerMiddleware) SSHServerMiddleware {
14+func PtyMdw(mdw SSHServerMiddleware, waitTimeout time.Duration) SSHServerMiddleware {
15 	return func(next SSHServerHandler) SSHServerHandler {
16 		return func(sesh *SSHServerConnSession) error {
17+			if waitTimeout > 0 {
18+				afterTime := time.Now().Add(waitTimeout)
19+
20+				for {
21+					if time.Now().After(afterTime) {
22+						break
23+					}
24+
25+					_, _, ok := sesh.Pty()
26+					if ok {
27+						break
28+					}
29+
30+					time.Sleep(50 * time.Millisecond)
31+				}
32+			}
33+
34 			_, _, ok := sesh.Pty()
35 			if !ok {
36 				return next(sesh)
M pkg/pssh/server.go
+2, -1
 1@@ -614,7 +614,8 @@ func NewSSHServerWithConfig(
 2 	app, host, port, promPort, hostKey string,
 3 	pubKeyAuthHandler PubKeyAuthHandler,
 4 	middleware, subsystemMiddleware []SSHServerMiddleware,
 5-	channelMiddleware map[string]SSHServerChannelMiddleware) (*SSHServer, error) {
 6+	channelMiddleware map[string]SSHServerChannelMiddleware,
 7+) (*SSHServer, error) {
 8 	server := NewSSHServer(ctx, logger, &SSHServerConfig{
 9 		App:        app,
10 		ListenAddr: fmt.Sprintf("%s:%s", host, port),