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  }