github.com/devops-filetransfer/sshego@v7.0.4+incompatible/netcli.go (about) 1 package sshego 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net" 7 "time" 8 ) 9 10 func (cfg *SshegoConfig) TcpClientUserAdd(user *User) (toptPath, qrPath, rsaPath string, err error) { 11 12 if cfg.SshegoSystemMutexPort < 0 { 13 err = fmt.Errorf("SshegoSystemMutexPort was negative(%v),"+ 14 " not possible to add user", cfg.SshegoSystemMutexPort) 15 return 16 } 17 18 // send newUserCmd followed by the msgp marshalled user 19 sendMe, err := user.MarshalMsg(nil) 20 panicOn(err) 21 22 addr := fmt.Sprintf("127.0.0.1:%v", cfg.SshegoSystemMutexPort) 23 nConn, err := net.Dial("tcp", addr) 24 panicOn(err) 25 26 deadline := time.Now().Add(time.Second * 10) 27 err = nConn.SetDeadline(deadline) 28 panicOn(err) 29 30 _, err = nConn.Write(NewUserCmd) 31 panicOn(err) 32 33 _, err = nConn.Write(sendMe) 34 panicOn(err) 35 36 // read response 37 deadline = time.Now().Add(time.Second * 10) 38 err = nConn.SetDeadline(deadline) 39 panicOn(err) 40 41 dat, err := ioutil.ReadAll(nConn) 42 panicOn(err) 43 44 n := len(NewUserReply) 45 if len(dat) < n { 46 panic(fmt.Errorf("expected '%s' preamble, but got '%s' of length %v", NewUserReply, string(dat), len(dat))) 47 } 48 p("dat = '%v'", string(dat)) 49 payload := dat[n:] 50 51 var r User // returned User 52 _, err = r.UnmarshalMsg(payload) 53 panicOn(err) 54 55 err = nConn.Close() 56 panicOn(err) 57 58 return r.TOTPpath, r.QrPath, r.PrivateKeyPath, nil 59 } 60 61 func (cfg *SshegoConfig) TcpClientUserDel(user *User) error { 62 63 if cfg.SshegoSystemMutexPort < 0 { 64 err := fmt.Errorf("SshegoSystemMutexPort was negative(%v),"+ 65 " not possible to delete user", cfg.SshegoSystemMutexPort) 66 return err 67 } 68 69 // send newUserCmd followed by the msgp marshalled user 70 sendMe, err := user.MarshalMsg(nil) 71 panicOn(err) 72 73 addr := fmt.Sprintf("127.0.0.1:%v", cfg.SshegoSystemMutexPort) 74 nConn, err := net.Dial("tcp", addr) 75 panicOn(err) 76 77 deadline := time.Now().Add(time.Second * 10) 78 err = nConn.SetDeadline(deadline) 79 panicOn(err) 80 81 _, err = nConn.Write(DelUserCmd) 82 panicOn(err) 83 84 _, err = nConn.Write(sendMe) 85 panicOn(err) 86 87 // read response 88 deadline = time.Now().Add(time.Second * 10) 89 err = nConn.SetDeadline(deadline) 90 panicOn(err) 91 92 dat, err := ioutil.ReadAll(nConn) 93 panicOn(err) 94 95 n := len(DelUserReplyFailed) 96 if len(dat) < n { 97 panic(fmt.Errorf("expected '%s' preamble, but got '%s' of length %v", NewUserReply, string(dat), len(dat))) 98 } 99 p("dat = '%v'", string(dat)) 100 101 err = nConn.Close() 102 panicOn(err) 103 104 if string(dat[:n]) == string(DelUserReplyFailed) { 105 return fmt.Errorf("user delete failed -- typically because user does not exist") 106 } 107 108 return nil 109 }