xs/hkexsession.go

108 lines
1.9 KiB
Go

// Session info/routines for the HKExSh
//
// Copyright (c) 2017-2018 Russell Magee
// Licensed under the terms of the MIT license (see LICENSE.mit in this
// distribution)
//
// golang implementation by Russ Magee (rmagee_at_gmail.com)
package hkexsh
import (
"fmt"
"runtime"
)
type Session struct {
op []byte
who []byte
connhost []byte
termtype []byte // client initial $TERM
cmd []byte
authCookie []byte
status uint32 // exit status (0-255 is std UNIX status)
}
// Output Session record as a string. Implements Stringer interface.
func (h *Session) String() string {
return fmt.Sprintf("hkexsh.Session:\nOp:%v\nWho:%v\nCmd:%v\nAuthCookie:%v\nStatus:%v",
h.op, h.who, h.cmd, h.AuthCookie(false), h.status)
}
func (h Session) Op() []byte {
return h.op
}
func (h *Session) SetOp(o []byte) {
h.op = o
}
func (h Session) Who() []byte {
return h.who
}
func (h *Session) SetWho(w []byte) {
h.who = w
}
func (h Session) ConnHost() []byte {
return h.connhost
}
func (h *Session) SetConnHost(n []byte) {
h.connhost = n
}
func (h Session) TermType() []byte {
return h.termtype
}
func (h *Session) SetTermType(t []byte) {
h.termtype = t
}
func (h Session) Cmd() []byte {
return h.cmd
}
func (h *Session) SetCmd(c []byte) {
h.cmd = c
}
func (h Session) AuthCookie(reallyShow bool) []byte {
if reallyShow {
return h.authCookie
} else {
return []byte("**REDACTED**")
}
}
func (h *Session) SetAuthCookie(a []byte) {
h.authCookie = a
}
func (h *Session) ClearAuthCookie() {
for i := range h.authCookie {
h.authCookie[i] = 0
}
runtime.GC()
}
func (h Session) Status() uint32 {
return h.status
}
func (h *Session) SetStatus(s uint32) {
h.status = s
}
func NewSession(op, who, connhost, ttype, cmd, authcookie []byte, status uint32) *Session {
return &Session{
op: op,
who: who,
connhost: connhost,
termtype: ttype,
cmd: cmd,
authCookie: authcookie,
status: status}
}