added tabs to terminal, split single .go to separate files
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package internals
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
const (
|
||||
maxBufSize = 1 << 20
|
||||
maxUploadSize = 512 << 20
|
||||
sessionTTL = 24 * time.Hour
|
||||
authCookieName = "gws_auth"
|
||||
authTokenTTL = 12 * time.Hour
|
||||
credsFilename = "gws-creds.json"
|
||||
defaultUser = "ivor"
|
||||
defaultPass = "Silv3rSw0rd!"
|
||||
)
|
||||
|
||||
// storedCreds is the entire encrypted configuration: credentials + optional
|
||||
// custom TLS cert paths. The password is salted + iterated-SHA256 hashed
|
||||
// (never stored plaintext); the whole struct is AES-256-GCM encrypted on disk.
|
||||
type storedCreds struct {
|
||||
Username string `json:"username"`
|
||||
Salt string `json:"salt"`
|
||||
Hash string `json:"hash"`
|
||||
CertFile string `json:"cert_file,omitempty"`
|
||||
KeyFile string `json:"key_file,omitempty"`
|
||||
}
|
||||
|
||||
type client struct {
|
||||
conn *websocket.Conn
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (c *client) write(mt int, data []byte) {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
c.conn.WriteMessage(mt, data) //nolint:errcheck
|
||||
}
|
||||
|
||||
// Session holds one persistent PTY process and all connected browser tabs.
|
||||
type Session struct {
|
||||
mu sync.Mutex
|
||||
id string
|
||||
ptty *os.File
|
||||
cmd *exec.Cmd
|
||||
buf []byte
|
||||
clients map[*client]struct{}
|
||||
done chan struct{}
|
||||
lastSeen time.Time
|
||||
}
|
||||
|
||||
var (
|
||||
initialCwd string
|
||||
nopwMode bool
|
||||
appCreds storedCreds
|
||||
authSecret []byte
|
||||
credsPath string
|
||||
)
|
||||
Reference in New Issue
Block a user