mirror of
https://gogs.blitter.com/RLabs/xs
synced 2024-08-14 10:26:42 +00:00
89 lines
1.6 KiB
Go
89 lines
1.6 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
|
||
|
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) 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, cmd, authcookie []byte, status uint32) *Session {
|
||
|
return &Session{
|
||
|
op: op,
|
||
|
who: who,
|
||
|
cmd: cmd,
|
||
|
authCookie: authcookie,
|
||
|
status: status}
|
||
|
}
|