Skip to content

Commit

Permalink
Port to pion/[email protected] (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean-Der authored and maxmcd committed Jun 14, 2019
1 parent a3d5a7b commit edfe418
Show file tree
Hide file tree
Showing 8 changed files with 182 additions and 128 deletions.
45 changes: 23 additions & 22 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,30 @@ import (
"github.com/kr/pty"
"github.com/maxmcd/webtty/pkg/sd"
"github.com/mitchellh/colorstring"
"github.com/pions/webrtc"
"github.com/pions/webrtc/pkg/datachannel"
"github.com/pion/webrtc/v2"
"golang.org/x/crypto/ssh/terminal"
)

type clientSession struct {
session
dc *webrtc.RTCDataChannel
dc *webrtc.DataChannel
offerString string
}

func sendTermSize(term *os.File, dcSend func(p datachannel.Payload) error) error {
func sendTermSize(term *os.File, dcSend func(s string) error) error {
winSize, err := pty.GetsizeFull(term)
if err != nil {
log.Fatal(err)
}
size := fmt.Sprintf(`["set_size",%d,%d,%d,%d]`,
winSize.Rows, winSize.Cols, winSize.X, winSize.Y)

return dcSend(datachannel.PayloadString{Data: []byte(size)})
return dcSend(size)
}

func (cs *clientSession) dataChannelOnOpen() func() {
return func() {
log.Printf("Data channel '%s'-'%d'='%d' open.\n", cs.dc.Label, cs.dc.ID, *cs.dc.MaxPacketLifeTime)
log.Printf("Data channel '%s'-'%d'='%d' open.\n", cs.dc.Label(), cs.dc.ID(), cs.dc.MaxPacketLifeTime())
colorstring.Println("[bold]Terminal session started:")

if err := cs.makeRawTerminal(); err != nil {
Expand All @@ -47,7 +46,7 @@ func (cs *clientSession) dataChannelOnOpen() func() {
signal.Notify(ch, syscall.SIGWINCH)
go func() {
for range ch {
err := sendTermSize(os.Stdin, cs.dc.Send)
err := sendTermSize(os.Stdin, cs.dc.SendText)
if err != nil {
log.Println(err)
cs.errChan <- err
Expand All @@ -62,7 +61,7 @@ func (cs *clientSession) dataChannelOnOpen() func() {
log.Println(err)
cs.errChan <- err
}
err = cs.dc.Send(datachannel.PayloadBinary{Data: buf[0:nr]})
err = cs.dc.Send(buf[0:nr])
if err != nil {
log.Println(err)
cs.errChan <- err
Expand All @@ -71,10 +70,9 @@ func (cs *clientSession) dataChannelOnOpen() func() {
}
}

func (cs *clientSession) dataChannelOnMessage() func(payload datachannel.Payload) {
return func(payload datachannel.Payload) {
switch p := payload.(type) {
case *datachannel.PayloadString:
func (cs *clientSession) dataChannelOnMessage() func(payload webrtc.DataChannelMessage) {
return func(p webrtc.DataChannelMessage) {
if p.IsString {
if string(p.Data) == "quit" {
if cs.isTerminal {
terminal.Restore(int(os.Stdin.Fd()), cs.oldTerminalState)
Expand All @@ -83,14 +81,10 @@ func (cs *clientSession) dataChannelOnMessage() func(payload datachannel.Payload
return
}
cs.errChan <- fmt.Errorf(`Unmatched string message: "%s"`, string(p.Data))
case *datachannel.PayloadBinary:
} else {
f := bufio.NewWriter(os.Stdout)
f.Write(p.Data)
f.Flush()
default:
cs.errChan <- fmt.Errorf(
"Message with type %s from DataChannel has no payload",
p.PayloadType().String())
}
}
}
Expand All @@ -102,7 +96,7 @@ func (cs *clientSession) run() (err error) {

maxPacketLifeTime := uint16(1000) // Arbitrary
ordered := true
if cs.dc, err = cs.pc.CreateDataChannel("data", &webrtc.RTCDataChannelInit{
if cs.dc, err = cs.pc.CreateDataChannel("data", &webrtc.DataChannelInit{
Ordered: &ordered,
MaxPacketLifeTime: &maxPacketLifeTime,
}); err != nil {
Expand All @@ -123,9 +117,9 @@ func (cs *clientSession) run() (err error) {
return
}
}
offer := webrtc.RTCSessionDescription{
Type: webrtc.RTCSdpTypeOffer,
Sdp: cs.offer.Sdp,
offer := webrtc.SessionDescription{
Type: webrtc.SDPTypeOffer,
SDP: cs.offer.Sdp,
}

if err = cs.pc.SetRemoteDescription(offer); err != nil {
Expand All @@ -138,8 +132,15 @@ func (cs *clientSession) run() (err error) {
log.Println(err)
return
}

err = cs.pc.SetLocalDescription(answer)
if err != nil {
log.Println(err)
return
}

answerSd := sd.SessionDescription{
Sdp: answer.Sdp,
Sdp: answer.SDP,
Key: cs.offer.Key,
Nonce: cs.offer.Nonce,
}
Expand Down
56 changes: 25 additions & 31 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"testing"

"github.com/kr/pty"
"github.com/pions/webrtc/pkg/datachannel"
"github.com/pion/webrtc/v2"
"golang.org/x/crypto/ssh/terminal"
)

Expand All @@ -18,8 +18,8 @@ func TestClientDataChannelOnMessage(t *testing.T) {
cs.errChan = make(chan error, 1)
cs.oldTerminalState = &terminal.State{}
onMessage := cs.dataChannelOnMessage()
quitPayload := datachannel.PayloadString{Data: []byte("quit")}
onMessage(&quitPayload)
quitPayload := webrtc.DataChannelMessage{IsString: true, Data: []byte("quit")}
onMessage(quitPayload)

select {
case err := <-cs.errChan:
Expand All @@ -33,8 +33,8 @@ func TestClientDataChannelOnMessage(t *testing.T) {
stdoutMock := tmpFile()
stdout := os.Stdout
os.Stdout = stdoutMock
binaryPayload := datachannel.PayloadBinary{Data: []byte("s")}
onMessage(&binaryPayload)
binaryPayload := webrtc.DataChannelMessage{IsString: false, Data: []byte("s")}
onMessage(binaryPayload)
os.Stdout = stdout
stdoutMock.Seek(0, 0)
msg, _ := ioutil.ReadAll(stdoutMock)
Expand All @@ -61,36 +61,30 @@ func TestSendTermSize(t *testing.T) {
t.Error(err)
}

dcSend := func(payload datachannel.Payload) error {
switch p := payload.(type) {
case datachannel.PayloadString:
onMessage, hs := makeShPty(t)
size, err := pty.GetsizeFull(hs.ptmx)
if err != nil {
t.Error(err)
}
if fmt.Sprintf("%v", size) != "&{0 0 0 0}" {
t.Error("wrong size", size)
}
onMessage(&datachannel.PayloadString{Data: p.Data})
select {
case err := <-hs.errChan:
if err != nil {
t.Error(err)
}
default:

}
size, err = pty.GetsizeFull(hs.ptmx)
dcSend := func(msg string) error {
onMessage, hs := makeShPty(t)
size, err := pty.GetsizeFull(hs.ptmx)
if err != nil {
t.Error(err)
}
if fmt.Sprintf("%v", size) != "&{0 0 0 0}" {
t.Error("wrong size", size)
}
onMessage(webrtc.DataChannelMessage{IsString: true, Data: []byte(msg)})
select {
case err := <-hs.errChan:
if err != nil {
t.Error(err)
}
if fmt.Sprintf("%v", size) != "&{19 29 9 8}" {
t.Error("wrong size", size)
}
default:
fmt.Println(p.PayloadType().String())
t.Error("Should have matched")

}
size, err = pty.GetsizeFull(hs.ptmx)
if err != nil {
t.Error(err)
}
if fmt.Sprintf("%v", size) != "&{19 29 9 8}" {
t.Error("wrong size", size)
}
return nil
}
Expand Down
14 changes: 7 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module github.com/maxmcd/webtty

go 1.12

require (
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a
github.com/kr/pty v1.1.3
github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286
github.com/pions/webrtc v1.1.2-0.20181205040827-70592e40f97d
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9
golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6 // indirect
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06 // indirect
github.com/btcsuite/btcutil v0.0.0-20190316010144-3ac1210f4b38
github.com/kr/pty v1.1.4
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db
github.com/pion/webrtc/v2 v2.0.15
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a
)
110 changes: 85 additions & 25 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,28 +1,88 @@
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a h1:RQMUrEILyYJEoAT34XS/kLu40vC0+po/UfxrBBA4qZE=
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190316010144-3ac1210f4b38 h1:GbQHMJ2u/geMPV1tbN7i7zARSoPAPuXWa44V0KYvJXU=
github.com/btcsuite/btcutil v0.0.0-20190316010144-3ac1210f4b38/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/kr/pty v1.1.3 h1:/Um6a/ZmD5tF7peoOJ5oN5KMQ0DrGVQSXLNwyckutPk=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286 h1:KHyL+3mQOF9sPfs26lsefckcFNDcIZtiACQiECzIUkw=
github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/pions/dtls v1.0.1 h1:HAOaQCXL62butEul8Hc4pOMcx/pUC9htdcWEzxG73UU=
github.com/pions/dtls v1.0.1/go.mod h1:T22vu8VCOxNmIrbe3nnM1UdIo3m1Bx5CJNkHyehahLg=
github.com/pions/pkg v0.0.0-20181115215726-b60cd756f712 h1:ciXO7F7PusyAzW/EZJt01bETgfTxP/BIGoWQ15pBP54=
github.com/pions/pkg v0.0.0-20181115215726-b60cd756f712/go.mod h1:r9wKZs+Xxv2acLspex4CHQiIhFjGK1zGP+nUm/8klXA=
github.com/pions/webrtc v1.1.1 h1:yVDoXk2sbaJJXIkW79IME2MRg0y/lT4zjOFI+EV0pQI=
github.com/pions/webrtc v1.1.1/go.mod h1:sQhy8101lrrfMDzn8H/9YoCJDLzAgpT05HKVeyupaak=
github.com/pions/webrtc v1.1.2-0.20181205040827-70592e40f97d h1:QJZMe/T+T/uq5LrwjLstpihM1p7Nw/3jwMXaN3CUV4A=
github.com/pions/webrtc v1.1.2-0.20181205040827-70592e40f97d/go.mod h1:6N2qMMzi6f4OyNlMR51fkIm9O57eg9HzRBesjOidP84=
github.com/pions/webrtc v1.1.2-0.20181212142319-7cc44ba79bba h1:2TmSfn1ghKFSDCpcUuNTpZq7Jd7dEO8R5TkRbcSctME=
github.com/pions/webrtc v1.1.2-0.20181212142319-7cc44ba79bba/go.mod h1:6N2qMMzi6f4OyNlMR51fkIm9O57eg9HzRBesjOidP84=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ=
github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9 h1:tbuodUh2vuhOVZAdW3NEUvosFHUMJwUNl7jk/VSEiwc=
github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA=
github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pion/datachannel v1.4.3 h1:tqS6YiqqAiFCxGGhvn1K7fHEzemK9Aov025dE/isGFo=
github.com/pion/datachannel v1.4.3/go.mod h1:SpMJbuu8v+qbA94m6lWQwSdCf8JKQvgmdSHDNtcbe+w=
github.com/pion/dtls v1.3.4 h1:MdOMsCfd44m2iTrxtkzA6UndvYVjLWWjua7hxU8EXEA=
github.com/pion/dtls v1.3.4/go.mod h1:CjlPLfQdsTg3G4AEXjJp8FY5bRweBlxHrgoFrN+fQsk=
github.com/pion/ice v0.2.8 h1:DCFMO8yJRB6XGaRjjdHupsHvjcM72LJ9YwL/2Io2EXk=
github.com/pion/ice v0.2.8/go.mod h1:HyIp0mppSrUdw7DFLQfPgJWnPRRV96pnTV8irdrBGrA=
github.com/pion/logging v0.2.1 h1:LwASkBKZ+2ysGJ+jLv1E/9H1ge0k1nTfi1X+5zirkDk=
github.com/pion/logging v0.2.1/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
github.com/pion/quic v0.1.1 h1:D951FV+TOqI9A0rTF7tHx0Loooqz+nyzjEyj8o3PuMA=
github.com/pion/quic v0.1.1/go.mod h1:zEU51v7ru8Mp4AUBJvj6psrSth5eEFNnVQK5K48oV3k=
github.com/pion/rtcp v1.2.0 h1:rT2FptW5YHIern+4XlbGYnnsT26XGxurnkNLnzhtDXg=
github.com/pion/rtcp v1.2.0/go.mod h1:a5dj2d6BKIKHl43EnAOIrCczcjESrtPuMgfmL6/K6QM=
github.com/pion/rtp v1.1.2 h1:ERNugzYHW9F2ldpwoARbeFGKRoq1REe5Jxdjvm/rOx8=
github.com/pion/rtp v1.1.2/go.mod h1:/l4cvcKd0D3u9JLs2xSVI95YkfXW87a3br3nqmVtSlE=
github.com/pion/sctp v1.6.3 h1:SC4vKOjcddK8tXiTNj05a+0/GyPpCmuNfeBA/rzNFqs=
github.com/pion/sctp v1.6.3/go.mod h1:cCqpLdYvgEUdl715+qbWtgT439CuQrAgy8BZTp0aEfA=
github.com/pion/sdp/v2 v2.1.1 h1:i3fAyjiLuQseYNo0BtCOPfzp91Ppb7vasRGmUUTog28=
github.com/pion/sdp/v2 v2.1.1/go.mod h1:idSlWxhfWQDtTy9J05cgxpHBu/POwXN2VDRGYxT/EjU=
github.com/pion/srtp v1.2.4 h1:wwGKC5ewuBukkZ+i+pZ8aO33+t6z2y/XRiYtyP0Xpv0=
github.com/pion/srtp v1.2.4/go.mod h1:52qiP0g3FVMG/5NL6Ko8Vr2qirevKH+ukYbNS/4EX40=
github.com/pion/stun v0.2.2 h1:0IJCwJFOdEmHzz4oxl9SBGLlJbnNbF+0h6XSOmuE034=
github.com/pion/stun v0.2.2/go.mod h1:TChCNKgwnFiFG/c9K+zqEdd6pO6tlODb9yN1W/zVfsE=
github.com/pion/transport v0.6.0 h1:WAoyJg/6OI8dhCVFl/0JHTMd1iu2iHgGUXevptMtJ3U=
github.com/pion/transport v0.6.0/go.mod h1:iWZ07doqOosSLMhZ+FXUTq+TamDoXSllxpbGcfkCmbE=
github.com/pion/transport v0.7.0 h1:EsXN8TglHMlKZMo4ZGqwK6QgXBu0WYg7wfGMWIXsS+w=
github.com/pion/transport v0.7.0/go.mod h1:iWZ07doqOosSLMhZ+FXUTq+TamDoXSllxpbGcfkCmbE=
github.com/pion/webrtc/v2 v2.0.15 h1:0n8P+sYfGN515RnkdRyc4SD1r+0BZ5ts7SDSUxxlkmY=
github.com/pion/webrtc/v2 v2.0.15/go.mod h1:e1xwQPR2XVoDWTj5uGSKfHB9Xk4oWRt7mk4bVfXHi8E=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6 h1:gT0Y6H7hbVPUtvtk0YGxMXPgN+p8fYlqWkgJeUCZcaQ=
golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06 h1:0oC8rFnE+74kEmuHZ46F6KHsMr5Gx2gUQPuNz28iQZM=
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5 h1:bselrhR0Or1vomJZC8ZIjWtbDmn9OYFLX5Ik9alpJpE=
golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a h1:Igim7XhdOpBnWPuYJ70XcNpq8q3BCACtVgNfoJxOV7g=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqYSEQ0KWqdWLu3xuZJts=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Loading

0 comments on commit edfe418

Please sign in to comment.