fix video bug in zone with update

This commit is contained in:
Loïs BIBEHE 2023-07-20 14:48:38 +02:00
parent 79cc675c43
commit c557c60860
No known key found for this signature in database
GPG Key ID: 85BCF4EEE9A29479
129 changed files with 48460 additions and 1243 deletions

View File

@ -146,7 +146,7 @@ func (cm *ChatGrpcMiddleware) Process(ctx context.Context, req *SignalingMessage
errCh <- err errCh <- err
return return
} }
logger.Println(payload) // logger.Println(payload)
i, err := strconv.Atoi(payload["sdpMLineIndex"]) i, err := strconv.Atoi(payload["sdpMLineIndex"])
if err != nil { if err != nil {
errCh <- err errCh <- err
@ -154,7 +154,7 @@ func (cm *ChatGrpcMiddleware) Process(ctx context.Context, req *SignalingMessage
} }
SDPMLineIndex := uint16(i) SDPMLineIndex := uint16(i)
sdpMid := payload["sdpMid"] sdpMid := payload["sdpMid"]
logger.Println(sdpMid, SDPMLineIndex) // logger.Println(sdpMid, SDPMLineIndex)
if err := cm.Manager.AddCandidate(&webrtc.ICECandidateInit{ if err := cm.Manager.AddCandidate(&webrtc.ICECandidateInit{
Candidate: payload["candidate"], Candidate: payload["candidate"],
SDPMid: &sdpMid, SDPMid: &sdpMid,
@ -167,9 +167,9 @@ func (cm *ChatGrpcMiddleware) Process(ctx context.Context, req *SignalingMessage
fmt.Println("no request for chat grpc middleware") fmt.Println("no request for chat grpc middleware")
fmt.Println(req.Type) fmt.Println(req.Type)
fmt.Println(req.Payload) fmt.Println(req.Payload)
logger.Println("no request for chats grpc middleware") // logger.Println("no request for chats grpc middleware")
logger.Println(payload) // logger.Println(payload)
logger.Println(req.Type) // logger.Println(req.Type)
} }
done <- struct{}{} done <- struct{}{}
}() }()

View File

@ -63,8 +63,8 @@ func NewNodeChat(id, name, initiator, target, initiatorHost, targetHost string,
} }
chatScheduler, e := NewChatRequestScheduler(initiator, target, initiatorHost, targetHost, nodeChatMessageHandler, nodeChatNotificationsHandler) chatScheduler, e := NewChatRequestScheduler(initiator, target, initiatorHost, targetHost, nodeChatMessageHandler, nodeChatNotificationsHandler)
go func() { go func() {
for schedErr := range e { for range e {
logger.Println("chat error:", schedErr)
} }
}() }()
chat = &NodeChat{ chat = &NodeChat{
@ -128,7 +128,7 @@ func NewChatManager(id, token string) (chatManager *ChatsManager, err error) {
} }
for _, c := range chatsFolder { for _, c := range chatsFolder {
if _, ok := chatsMap[c.Name()]; !ok { if _, ok := chatsMap[c.Name()]; !ok {
logger.Println(chatManager.DeleteChat(c.Name())) // logger.Println(chatManager.DeleteChat(c.Name()))
} }
} }
return return
@ -152,7 +152,7 @@ func (cm *ChatsManager) fetchChats(nodeId string, token string) (chats []*NodeCh
} }
res, err := HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body)) res, err := HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body))
if err != nil { if err != nil {
logger.Println("error come from there inn chat manager") // logger.Println("error come from there inn chat manager")
return return
} }
bs, err := io.ReadAll(res.Body) bs, err := io.ReadAll(res.Body)
@ -196,7 +196,7 @@ func (cm *ChatsManager) CreateOffer(ctx context.Context, target string, from str
if err != nil { if err != nil {
return return
} }
logger.Println("connection created") // logger.Println("connection created")
rawOffer, err := peerConnection.CreateOffer(nil) rawOffer, err := peerConnection.CreateOffer(nil)
if err != nil { if err != nil {
return return
@ -206,7 +206,7 @@ func (cm *ChatsManager) CreateOffer(ctx context.Context, target string, from str
} }
_ = atomicallyExecute(cm.peerConnectionFlag, func() (err error) { _ = atomicallyExecute(cm.peerConnectionFlag, func() (err error) {
id := uuid.New().String() id := uuid.New().String()
logger.Println("adding for target", target) // logger.Println("adding for target", target)
cm.RTCPeerConnections[target] = &RTCPeerConnection{ cm.RTCPeerConnections[target] = &RTCPeerConnection{
id: id, id: id,
PeerConnection: peerConnection, PeerConnection: peerConnection,
@ -236,13 +236,13 @@ func (cm *ChatsManager) HandleOffer(ctx context.Context, from string, to string,
errCh <- err errCh <- err
return return
} }
logger.Println("handling chat offer") // logger.Println("handling chat offer")
_ = atomicallyExecute(cm.chatsFlag, func() (err error) { _ = atomicallyExecute(cm.chatsFlag, func() (err error) {
return return
}) })
if _, ok := cm.RTCPeerConnections[from]; ok { if _, ok := cm.RTCPeerConnections[from]; ok {
if e := cm.HandleLeavingMember(from, req["chatId"], false); e != nil { if e := cm.HandleLeavingMember(from, req["chatId"], false); e != nil {
logger.Println(e) // logger.Println(e)
} }
} }
peerConnection, err := cm.createPeerConnection(from, to, req["chatId"], webrtc.SDPTypeAnswer, cb) peerConnection, err := cm.createPeerConnection(from, to, req["chatId"], webrtc.SDPTypeAnswer, cb)
@ -250,7 +250,7 @@ func (cm *ChatsManager) HandleOffer(ctx context.Context, from string, to string,
errCh <- err errCh <- err
return return
} }
logger.Println("peer connection created") // logger.Println("peer connection created")
_ = atomicallyExecute(cm.peerConnectionFlag, func() (err error) { _ = atomicallyExecute(cm.peerConnectionFlag, func() (err error) {
id := uuid.New().String() id := uuid.New().String()
cm.RTCPeerConnections[from] = &RTCPeerConnection{ cm.RTCPeerConnections[from] = &RTCPeerConnection{
@ -261,7 +261,7 @@ func (cm *ChatsManager) HandleOffer(ctx context.Context, from string, to string,
negotiate: cm.negotiate, negotiate: cm.negotiate,
} }
logger.Println("peer connection added to map") // logger.Println("peer connection added to map")
offer := webrtc.SessionDescription{ offer := webrtc.SessionDescription{
Type: webrtc.SDPTypeOffer, Type: webrtc.SDPTypeOffer,
SDP: req[SDP], SDP: req[SDP],
@ -318,14 +318,14 @@ func (cm *ChatsManager) HandleAnswer(ctx context.Context, from string, to string
return return
} }
peerConnnection := cm.RTCPeerConnections[from] peerConnnection := cm.RTCPeerConnections[from]
logger.Println("---------------------") // logger.Println("---------------------")
logger.Println(req[SDP]) // logger.Println(req[SDP])
logger.Println("---------------------") // logger.Println("---------------------")
if err = peerConnnection.SetRemoteDescription(webrtc.SessionDescription{ if err = peerConnnection.SetRemoteDescription(webrtc.SessionDescription{
Type: webrtc.SDPTypeAnswer, Type: webrtc.SDPTypeAnswer,
SDP: req[SDP], SDP: req[SDP],
}); err != nil { }); err != nil {
logger.Println("error occured while setting remote description in handle answer") // logger.Println("error occured while setting remote description in handle answer")
return return
} }
return return
@ -340,7 +340,7 @@ func (cm *ChatsManager) HandleAnswer(ctx context.Context, from string, to string
} }
_ = atomicallyExecute(cm.candidateFlag, func() (err error) { _ = atomicallyExecute(cm.candidateFlag, func() (err error) {
for _, candidate := range cm.PendingCandidates[from] { for _, candidate := range cm.PendingCandidates[from] {
logger.Println("sending candidate from answer to", from) // logger.Println("sending candidate from answer to", from)
if err = cm.sendSignalingMessage(string(CHAT_WEBRTC_CANDIDATE), cm.ID, from, map[string]any{ if err = cm.sendSignalingMessage(string(CHAT_WEBRTC_CANDIDATE), cm.ID, from, map[string]any{
"from": cm.ID, "from": cm.ID,
"to": from, "to": from,
@ -348,7 +348,7 @@ func (cm *ChatsManager) HandleAnswer(ctx context.Context, from string, to string
"sdpMid": *candidate.ToJSON().SDPMid, "sdpMid": *candidate.ToJSON().SDPMid,
"sdpMLineIndex": strconv.Itoa(int(*candidate.ToJSON().SDPMLineIndex)), "sdpMLineIndex": strconv.Itoa(int(*candidate.ToJSON().SDPMLineIndex)),
}); err != nil { }); err != nil {
logger.Println(err) // logger.Println(err)
continue continue
} }
} }
@ -365,7 +365,7 @@ func (cm *ChatsManager) HandleAnswer(ctx context.Context, from string, to string
func (cm *ChatsManager) HandleCounterOffer(ctx context.Context, from string, to string, req map[string]string) (err error) { func (cm *ChatsManager) HandleCounterOffer(ctx context.Context, from string, to string, req map[string]string) (err error) {
_ = atomicallyExecute(cm.candidateFlag, func() (err error) { _ = atomicallyExecute(cm.candidateFlag, func() (err error) {
for _, candidate := range cm.PendingCandidates[from] { for _, candidate := range cm.PendingCandidates[from] {
logger.Println("sending candidate to", from) // logger.Println("sending candidate to", from)
if err = cm.sendSignalingMessage(string(CHAT_WEBRTC_CANDIDATE), cm.ID, from, map[string]any{ if err = cm.sendSignalingMessage(string(CHAT_WEBRTC_CANDIDATE), cm.ID, from, map[string]any{
"from": cm.ID, "from": cm.ID,
"to": from, "to": from,
@ -405,7 +405,7 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
if err != nil { if err != nil {
return return
} }
logger.Println("---------------------------------------------------") // logger.Println("---------------------------------------------------")
if peerType == webrtc.SDPTypeOffer { if peerType == webrtc.SDPTypeOffer {
channel, err := peerConnection.CreateDataChannel("data", &webrtc.DataChannelInit{}) channel, err := peerConnection.CreateDataChannel("data", &webrtc.DataChannelInit{})
if err != nil { if err != nil {
@ -413,9 +413,9 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
} }
reqChan := make(chan *ChatRequest) reqChan := make(chan *ChatRequest)
channel.OnOpen(func() { channel.OnOpen(func() {
logger.Println(chatId) // logger.Println(chatId)
if _, ok := cm.Chats[chatId]; ok { if _, ok := cm.Chats[chatId]; ok {
logger.Println("this chat exist") // logger.Println("this chat exist")
_ = atomicallyExecute(cm.Chats[chatId].DataChannelsFlag, func() (err error) { _ = atomicallyExecute(cm.Chats[chatId].DataChannelsFlag, func() (err error) {
x := uint32(0) x := uint32(0)
cm.Chats[chatId].DataChannels[target] = &DataChannel{DataChannel: channel, bufferedAmountLowThresholdReached: make(<-chan struct{}), l: &x} cm.Chats[chatId].DataChannels[target] = &DataChannel{DataChannel: channel, bufferedAmountLowThresholdReached: make(<-chan struct{}), l: &x}
@ -433,11 +433,11 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
Payload: map[string]interface{}{}, Payload: map[string]interface{}{},
}) })
if jsonErr != nil { if jsonErr != nil {
logger.Println("error in open channel", jsonErr) // logger.Println("error in open channel", jsonErr)
return return
} }
if sendErr := channel.SendText(string(bs)); sendErr != nil { if sendErr := channel.SendText(string(bs)); sendErr != nil {
logger.Println("error in open channel send", sendErr) // logger.Println("error in open channel send", sendErr)
return return
} }
go func() { go func() {
@ -445,32 +445,36 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
select { select {
case <-done: case <-done:
return return
case e := <-err: case <-err:
logger.Println("----- error from scheduler:", e) // logger.Println("----- error from scheduler:", e)
} }
} }
}() }()
} }
}) })
channel.OnClose(func() { channel.OnClose(func() {
close(reqChan) if _, closed := <-reqChan; !closed {
close(reqChan)
}
//_ = cm.HandleLeavingMember(target, chatId, true) //_ = cm.HandleLeavingMember(target, chatId, true)
}) })
channel.OnError(func(err error) { channel.OnError(func(err error) {
close(reqChan) if _, closed := <-reqChan; !closed {
close(reqChan)
}
//_ = cm.HandleLeavingMember(target, chatId, true) //_ = cm.HandleLeavingMember(target, chatId, true)
}) })
channel.OnMessage(func(msg webrtc.DataChannelMessage) { channel.OnMessage(func(msg webrtc.DataChannelMessage) {
var req ChatRequest var req ChatRequest
if err := json.Unmarshal(msg.Data, &req); err != nil { if err := json.Unmarshal(msg.Data, &req); err != nil {
logger.Println(err) // logger.Println(err)
return return
} }
logger.Println("incoming request", req) // logger.Println("incoming request", req)
reqChan <- &req reqChan <- &req
}) })
logger.Println("new channel for target : ", target) // logger.Println("new channel for target : ", target)
logger.Println(target) // logger.Println(target)
_ = atomicallyExecute(cm.dataChannelFlag, func() (err error) { _ = atomicallyExecute(cm.dataChannelFlag, func() (err error) {
l := uint32(0) l := uint32(0)
cm.DataChannels[target] = &DataChannel{ cm.DataChannels[target] = &DataChannel{
@ -493,11 +497,11 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
reqChan := make(chan *ChatRequest, 100) reqChan := make(chan *ChatRequest, 100)
if dc.Label() == "data" { if dc.Label() == "data" {
dc.OnOpen(func() { dc.OnOpen(func() {
logger.Println(chatId) // logger.Println(chatId)
if _, ok := cm.Chats[chatId]; ok { if _, ok := cm.Chats[chatId]; ok {
logger.Println("this chat exist") // logger.Println("this chat exist")
_ = atomicallyExecute(cm.Chats[chatId].DataChannelsFlag, func() (err error) { _ = atomicallyExecute(cm.Chats[chatId].DataChannelsFlag, func() (err error) {
logger.Println("adding dc to dc map") // logger.Println("adding dc to dc map")
x := uint32(0) x := uint32(0)
cm.Chats[chatId].DataChannels[target] = &DataChannel{DataChannel: dc, bufferedAmountLowThresholdReached: make(<-chan struct{}), l: &x} cm.Chats[chatId].DataChannels[target] = &DataChannel{DataChannel: dc, bufferedAmountLowThresholdReached: make(<-chan struct{}), l: &x}
return return
@ -523,17 +527,17 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
close(reqChan) close(reqChan)
}) })
dc.OnError(func(err error) { dc.OnError(func(err error) {
logger.Println("--------------- error in dc:", err) // logger.Println("--------------- error in dc:", err)
close(reqChan) close(reqChan)
}) })
dc.OnMessage(func(msg webrtc.DataChannelMessage) { dc.OnMessage(func(msg webrtc.DataChannelMessage) {
var req ChatRequest var req ChatRequest
if err := json.Unmarshal(msg.Data, &req); err != nil { if err := json.Unmarshal(msg.Data, &req); err != nil {
logger.Println(err) // logger.Println(err)
return return
} }
fmt.Println("incoming req", req) fmt.Println("incoming req", req)
logger.Println("incoming request", req) // logger.Println("incoming request", req)
go func() { go func() {
reqChan <- &req reqChan <- &req
}() }()
@ -561,7 +565,7 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
catched := scheduler.DispatchDataChannel(context.Background(), datachannel) catched := scheduler.DispatchDataChannel(context.Background(), datachannel)
if !catched { if !catched {
if closeErr := datachannel.DataChannel.Close(); closeErr != nil { if closeErr := datachannel.DataChannel.Close(); closeErr != nil {
logger.Println(closeErr) // logger.Println(closeErr)
} }
} }
} }
@ -570,14 +574,14 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
} }
peerConnection.OnConnectionStateChange(func(pcs webrtc.PeerConnectionState) { peerConnection.OnConnectionStateChange(func(pcs webrtc.PeerConnectionState) {
if pcs == webrtc.PeerConnectionStateDisconnected || pcs == webrtc.PeerConnectionStateFailed { if pcs == webrtc.PeerConnectionStateDisconnected || pcs == webrtc.PeerConnectionStateFailed {
logger.Println(pcs) // logger.Println(pcs)
if err = cm.HandleLeavingMember(target, chatId, true); err != nil { if err = cm.HandleLeavingMember(target, chatId, true); err != nil {
logger.Println(err) // logger.Println(err)
} }
} }
}) })
peerConnection.OnICEConnectionStateChange(func(is webrtc.ICEConnectionState) { peerConnection.OnICEConnectionStateChange(func(is webrtc.ICEConnectionState) {
logger.Printf("ICE connection state has changed %s\n", is.String()) // logger.Printf("ICE connection state has changed %s\n", is.String())
}) })
peerConnection.OnICECandidate(func(i *webrtc.ICECandidate) { peerConnection.OnICECandidate(func(i *webrtc.ICECandidate) {
if i == nil { if i == nil {
@ -586,12 +590,12 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId
_ = atomicallyExecute(cm.candidateFlag, func() (err error) { _ = atomicallyExecute(cm.candidateFlag, func() (err error) {
desc := peerConnection.RemoteDescription() desc := peerConnection.RemoteDescription()
if desc == nil { if desc == nil {
logger.Println("generated candidate appended to list : ", i) // logger.Println("generated candidate appended to list : ", i)
cm.PendingCandidates[target] = append(cm.PendingCandidates[target], i) cm.PendingCandidates[target] = append(cm.PendingCandidates[target], i)
} else { } else {
logger.Println("generated candidate : ", i) // logger.Println("generated candidate : ", i)
if iceCandidateErr := cb(target, i); iceCandidateErr != nil { if iceCandidateErr := cb(target, i); iceCandidateErr != nil {
logger.Println(iceCandidateErr) // logger.Println(iceCandidateErr)
} }
} }
return return
@ -620,7 +624,7 @@ func (cm *ChatsManager) HandleRennegotiationOffer(from, sdp string) (err error)
"to": from, "to": from,
"sdp": localSd.SDP, "sdp": localSd.SDP,
}); err != nil { }); err != nil {
logger.Println(err) // logger.Println(err)
return return
} }
return return
@ -653,7 +657,7 @@ func (cm *ChatsManager) AddCandidate(candidate *webrtc.ICECandidateInit, from st
} }
func (cm *ChatsManager) HandleLeavingMember(id, chatId string, signalLeaving bool) (err error) { func (cm *ChatsManager) HandleLeavingMember(id, chatId string, signalLeaving bool) (err error) {
logger.Println("---------------- handling leaving member", id) // logger.Println("---------------- handling leaving member", id)
if err = atomicallyExecute(cm.peerConnectionFlag, func() (err error) { if err = atomicallyExecute(cm.peerConnectionFlag, func() (err error) {
if _, ok := cm.RTCPeerConnections[id]; !ok { if _, ok := cm.RTCPeerConnections[id]; !ok {
err = fmt.Errorf("no correponding peerconnection for id %s", id) err = fmt.Errorf("no correponding peerconnection for id %s", id)
@ -668,8 +672,8 @@ func (cm *ChatsManager) HandleLeavingMember(id, chatId string, signalLeaving boo
fmt.Println(nerr) fmt.Println(nerr)
} }
err = atomicallyExecute(cm.chatsFlag, func() (err error) { err = atomicallyExecute(cm.chatsFlag, func() (err error) {
logger.Println(err) // logger.Println(err)
logger.Println("---------------- cleaning chat handlers", id) // logger.Println("---------------- cleaning chat handlers", id)
if chat, ok := cm.Chats[chatId]; ok { if chat, ok := cm.Chats[chatId]; ok {
for _, handlersPublishers := range chat.ChatRequestScheduler.handlersPublishers { for _, handlersPublishers := range chat.ChatRequestScheduler.handlersPublishers {
go func(hp chan<- *ChatRequest) { go func(hp chan<- *ChatRequest) {
@ -693,11 +697,11 @@ func (cm *ChatsManager) HandleLeavingMember(id, chatId string, signalLeaving boo
}); err != nil { }); err != nil {
fmt.Println(err) fmt.Println(err)
} }
logger.Println("datachannels cleaned", id) // logger.Println("datachannels cleaned", id)
} else { } else {
err = fmt.Errorf("no corresponding chat for chatId %s", chatId) err = fmt.Errorf("no corresponding chat for chatId %s", chatId)
} }
logger.Println(err) // logger.Println(err)
err = atomicallyExecute(cm.peerConnectionFlag, func() (err error) { err = atomicallyExecute(cm.peerConnectionFlag, func() (err error) {
if _, ok := cm.RTCPeerConnections[id]; ok { if _, ok := cm.RTCPeerConnections[id]; ok {
defer delete(cm.RTCPeerConnections, id) defer delete(cm.RTCPeerConnections, id)
@ -735,7 +739,7 @@ func (cm *ChatsManager) notifyLeavingMember(userId, chatId, hostId string) (err
} }
_, err = HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body)) _, err = HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body))
if err != nil { if err != nil {
logger.Println("error come from there in chat manager") // logger.Println("error come from there in chat manager")
return return
} }
return return

View File

@ -41,7 +41,7 @@ func (fs *NodeChatFSInstance) SetupFileUpload(chatId, filename, userId string, d
return nil, rErr return nil, rErr
} }
if err = os.Remove(concretePath); err != nil { if err = os.Remove(concretePath); err != nil {
logger.Println(err) // logger.Println(err)
} }
file, err := os.OpenFile(concretePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755) file, err := os.OpenFile(concretePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755)
if err != nil { if err != nil {
@ -86,22 +86,22 @@ func (fs *NodeChatFSInstance) SetupFileDownload(chatId, filename, userId string,
buf := make([]byte, 0, 50000) buf := make([]byte, 0, 50000)
sendingLoop: sendingLoop:
for { for {
n, readErr := r.Read(buf[:cap(buf)]) n, _ := r.Read(buf[:cap(buf)])
buf = buf[:n] buf = buf[:n]
if n == 0 { if n == 0 {
if err == nil { if err == nil {
logger.Println("n is 0 weird") // logger.Println("n is 0 weird")
break sendingLoop break sendingLoop
} }
if err == io.EOF { if err == io.EOF {
break sendingLoop break sendingLoop
} }
logger.Println(readErr) // logger.Println(readErr)
return return
} }
if err = dc.Send(buf); err != nil { if err = dc.Send(buf); err != nil {
dc.Close() dc.Close()
logger.Println(err) // logger.Println(err)
break sendingLoop break sendingLoop
} }
if dc.BufferedAmount() > dc. if dc.BufferedAmount() > dc.
@ -109,9 +109,9 @@ func (fs *NodeChatFSInstance) SetupFileDownload(chatId, filename, userId string,
<-bufferedAmountLock <-bufferedAmountLock
} }
} }
logger.Println("done") // logger.Println("done")
if err = dc.SendText("download_done"); err != nil { if err = dc.SendText("download_done"); err != nil {
logger.Println(err) // logger.Println(err)
} }
}(file) }(file)
dc.OnBufferedAmountLow(func() { dc.OnBufferedAmountLow(func() {

View File

@ -6,6 +6,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"net/http"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -56,7 +57,7 @@ func NewNodeChatChannelsHandler(chatID, chatName, initiator, target, initiatorHo
_, err = os.ReadDir(filepath.Join(dataPath, "data", "chats", chatID)) _, err = os.ReadDir(filepath.Join(dataPath, "data", "chats", chatID))
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
logger.Printf("creating chat directory for chat %s...\n", chatID) // logger.Printf("creating chat directory for chat %s...\n", chatID)
mkdirErr := os.MkdirAll(filepath.Join(dataPath, "data", "chats", chatID), 0700) mkdirErr := os.MkdirAll(filepath.Join(dataPath, "data", "chats", chatID), 0700)
if mkdirErr != nil { if mkdirErr != nil {
return nil, mkdirErr return nil, mkdirErr
@ -100,7 +101,7 @@ func NewNodeChatChannelsHandler(chatID, chatName, initiator, target, initiatorHo
if err != nil { if err != nil {
return nil, err return nil, err
} }
logger.Println(string(bs)) // logger.Println(string(bs))
var c NodeChatChannel var c NodeChatChannel
if err = json.Unmarshal(bs, &c); err != nil { if err = json.Unmarshal(bs, &c); err != nil {
return nil, err return nil, err
@ -109,7 +110,7 @@ func NewNodeChatChannelsHandler(chatID, chatName, initiator, target, initiatorHo
if err != nil { if err != nil {
return nil, err return nil, err
} }
logger.Println("chats data :", c.ID, c.Initiator, c.InitiatorHost, c.Target) // logger.Println("chats data :", c.ID, c.Initiator, c.InitiatorHost, c.Target)
c.DB = nodeChatDBHandler c.DB = nodeChatDBHandler
c.Tracking = nodeChatTracking c.Tracking = nodeChatTracking
chats[c.ID] = &c chats[c.ID] = &c
@ -175,7 +176,7 @@ func (zch *NodeChatChannelsHandler[T]) sendDataChannelMessage(reqType string, fr
func (zch *NodeChatChannelsHandler[T]) Init(ctx context.Context, initiator, target, initiatorNodeID, targetNodeID string) (err error) { func (zch *NodeChatChannelsHandler[T]) Init(ctx context.Context, initiator, target, initiatorNodeID, targetNodeID string) (err error) {
// for _, member := range authorizedMembers { // for _, member := range authorizedMembers {
// if serr := zch.SetAllPublicChatForUser(member); serr != nil { // if serr := zch.SetAllPublicChatForUser(member); serr != nil {
// logger.Println(serr) // // logger.Println(serr)
// } // }
// } // }
zch.init = true zch.init = true
@ -471,11 +472,6 @@ func (zch *NodeChatChannelsHandler[T]) AddChatMessage(userId, chatID, content st
} }
}() }()
fmt.Println("done without error 1") fmt.Println("done without error 1")
go func() {
if e := zch.signalLastInteractionTime(context.Background(), dateTime); e != nil {
fmt.Println(e)
}
}()
fmt.Println("done without error 2") fmt.Println("done without error 2")
fmt.Println("sending notification") fmt.Println("sending notification")
@ -492,6 +488,11 @@ func (zch *NodeChatChannelsHandler[T]) AddChatMessage(userId, chatID, content st
"chatMessage": chatMessage, "chatMessage": chatMessage,
"chatId": chatID, "chatId": chatID,
}) })
go func() {
if e := zch.signalLastInteractionTime(context.Background(), dateTime); e != nil {
fmt.Println(e)
}
}()
if userId == chat.Target { if userId == chat.Target {
go notifyActivity(d2, e2, chat.Initiator) go notifyActivity(d2, e2, chat.Initiator)
} else { } else {
@ -508,9 +509,9 @@ func (zch *NodeChatChannelsHandler[T]) RemoveAllUserChat(userId string) (err err
for _, chat := range chats { for _, chat := range chats {
if chat.Initiator == userId || chat.Target == userId { if chat.Initiator == userId || chat.Target == userId {
if derr := zch.DeleteChat(chat.ID); derr != nil { if derr := zch.DeleteChat(chat.ID); derr != nil {
logger.Println("**************", derr) // logger.Println("**************", derr)
} }
logger.Println("deleted chat", chat.ID) // logger.Println("deleted chat", chat.ID)
} }
} }
return return
@ -533,8 +534,8 @@ func (zch *NodeChatChannelsHandler[T]) DeleteChatMessage(key uint64, chatID stri
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
@ -574,8 +575,8 @@ func (zch *NodeChatChannelsHandler[T]) UpdateChatMessage(key uint64, chatID, new
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
@ -602,8 +603,8 @@ func (zch *NodeChatChannelsHandler[T]) DeleteChatFile(key uint64, fileName, chat
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
@ -623,37 +624,37 @@ func (zch *NodeChatChannelsHandler[T]) chatFileUpload(chatID string, filename st
done = true done = true
} }
dc.DataChannel.OnError(func(err error) { dc.DataChannel.OnError(func(err error) {
logger.Println(err) // logger.Println(err)
logger.Println("abort...") // logger.Println("abort...")
if !done { if !done {
uploadDone() uploadDone()
} }
if fufErr := zch.ChatFSInstance.FileUploadFailed(chatID, filename, userId); fufErr != nil { if fufErr := zch.ChatFSInstance.FileUploadFailed(chatID, filename, userId); fufErr != nil {
logger.Println(fufErr) // logger.Println(fufErr)
} }
}) })
dc.DataChannel.OnClose(func() { dc.DataChannel.OnClose(func() {
if done { if done {
logger.Println("closing gracefully...") // logger.Println("closing gracefully...")
} else { } else {
logger.Println("abort...") // logger.Println("abort...")
uploadDone() uploadDone()
if fufErr := zch.ChatFSInstance.FileUploadFailed(chatID, filename, userId); fufErr != nil { if fufErr := zch.ChatFSInstance.FileUploadFailed(chatID, filename, userId); fufErr != nil {
logger.Println(fufErr) // logger.Println(fufErr)
} }
} }
}) })
dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) { dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) {
if msg.IsString { if msg.IsString {
if string(msg.Data) == "init_upload" { if string(msg.Data) == "init_upload" {
logger.Println("init upload....") // logger.Println("init upload....")
var initErr error var initErr error
if writePipe, initErr = zch.ChatFSInstance.SetupFileUpload(chatID, filename, userId, dc.DataChannel); initErr != nil { if writePipe, initErr = zch.ChatFSInstance.SetupFileUpload(chatID, filename, userId, dc.DataChannel); initErr != nil {
_ = dc.DataChannel.SendText("abort") _ = dc.DataChannel.SendText("abort")
_ = dc.DataChannel.Close() _ = dc.DataChannel.Close()
return return
} }
logger.Println("upload ready !") // logger.Println("upload ready !")
_ = dc.DataChannel.SendText("upload_ready") _ = dc.DataChannel.SendText("upload_ready")
} else if string(msg.Data) == "upload_done" { } else if string(msg.Data) == "upload_done" {
uploadDone() uploadDone()
@ -671,31 +672,31 @@ func (zch *NodeChatChannelsHandler[T]) chatFileDownload(chatID string, filename
var done bool var done bool
dc.DataChannel.OnError(func(err error) { dc.DataChannel.OnError(func(err error) {
if !done { if !done {
logger.Println("abort...") // logger.Println("abort...")
if fdf := zch.ChatFSInstance.FileDownloadFailed(chatID, filename, userId); fdf != nil { if fdf := zch.ChatFSInstance.FileDownloadFailed(chatID, filename, userId); fdf != nil {
logger.Println(fdf) // logger.Println(fdf)
} }
} }
}) })
dc.DataChannel.OnClose(func() { dc.DataChannel.OnClose(func() {
if !done { if !done {
logger.Println("abort...") // logger.Println("abort...")
if fdf := zch.ChatFSInstance.FileDownloadFailed(chatID, filename, userId); fdf != nil { if fdf := zch.ChatFSInstance.FileDownloadFailed(chatID, filename, userId); fdf != nil {
logger.Println(fdf) // logger.Println(fdf)
} }
} }
}) })
dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) { dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) {
if msg.IsString { if msg.IsString {
if string(msg.Data) == "init_download" { if string(msg.Data) == "init_download" {
logger.Println("init download....") // logger.Println("init download....")
var initErr error var initErr error
if initErr = zch.ChatFSInstance.SetupFileDownload(chatID, filename, userId, dc.DataChannel); initErr != nil { if initErr = zch.ChatFSInstance.SetupFileDownload(chatID, filename, userId, dc.DataChannel); initErr != nil {
_ = dc.DataChannel.SendText("abort") _ = dc.DataChannel.SendText("abort")
_ = dc.DataChannel.Close() _ = dc.DataChannel.Close()
return return
} }
logger.Println("download started !") // logger.Println("download started !")
} else if string(msg.Data) == "download_done" { } else if string(msg.Data) == "download_done" {
done = true done = true
} }
@ -718,12 +719,12 @@ func (zch *NodeChatChannelsHandler[T]) handleDataChannel(ctx context.Context, dc
catched = true catched = true
go zch.chatFileUpload(command[1], command[2], command[3], dc) go zch.chatFileUpload(command[1], command[2], command[3], dc)
} }
logger.Println(command) // logger.Println(command)
} else if strings.Contains(label, "chat_download") { } else if strings.Contains(label, "chat_download") {
command := strings.Split(label, "|") command := strings.Split(label, "|")
catched = true catched = true
go zch.chatFileDownload(command[1], command[2], command[3], dc) go zch.chatFileDownload(command[1], command[2], command[3], dc)
logger.Println(command) // logger.Println(command)
} else if strings.Contains(label, "chat_data") { } else if strings.Contains(label, "chat_data") {
command := strings.Split(label, "|") command := strings.Split(label, "|")
catched = true catched = true
@ -785,9 +786,9 @@ func (zch *NodeChatChannelsHandler[T]) signalUnreadCount(ctx context.Context, us
if err != nil { if err != nil {
return return
} }
_, err = HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body)) _, err = http.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body))
if err != nil { if err != nil {
logger.Println("error come from there inn chat manager") // logger.Println("error come from there inn chat manager")
return return
} }
return return
@ -810,9 +811,9 @@ func (zch *NodeChatChannelsHandler[T]) signalLastInteractionTime(ctx context.Con
if err != nil { if err != nil {
return return
} }
res, err := HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body)) res, err := http.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body))
if err != nil { if err != nil {
logger.Println("error come from there inn chat manager") // logger.Println("error come from there inn chat manager")
return return
} }
_, err = io.ReadAll(res.Body) _, err = io.ReadAll(res.Body)
@ -823,7 +824,7 @@ func (zch *NodeChatChannelsHandler[T]) signalLastInteractionTime(ctx context.Con
} }
func (zch *NodeChatChannelsHandler[T]) handleChatRequest(ctx context.Context, req *ChatRequest) (err error) { func (zch *NodeChatChannelsHandler[T]) handleChatRequest(ctx context.Context, req *ChatRequest) (err error) {
logger.Println("got request in zone chat handler", req) // logger.Println("got request in zone chat handler", req)
fmt.Println(req) fmt.Println(req)
switch req.ReqType { switch req.ReqType {
@ -871,7 +872,7 @@ func (zch *NodeChatChannelsHandler[T]) handleChatRequest(ctx context.Context, re
} }
err = zch.ReadLastMessage(req.From, req.Payload["chatId"].(string)) err = zch.ReadLastMessage(req.From, req.Payload["chatId"].(string))
case ADD_CHAT_MESSAGE: case ADD_CHAT_MESSAGE:
logger.Println("got request in zone chat handler", req) // logger.Println("got request in zone chat handler", req)
if err = VerifyFieldsString(req.Payload, "chatId", "content"); err != nil { if err = VerifyFieldsString(req.Payload, "chatId", "content"); err != nil {
return return
} }

View File

@ -99,7 +99,7 @@ func (znh *ChatNotificationsHandler) PushNotification(notificationType, title, b
_, err = http.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(b)) _, err = http.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(b))
if err != nil { if err != nil {
fmt.Println("error inn notification sender", err) fmt.Println("error inn notification sender", err)
logger.Println("error come from there in zone manager") // logger.Println("error come from there in zone manager")
return return
} }
return return

View File

@ -63,15 +63,15 @@ func NewChatRequestScheduler(initiator, target, initiatorNodeID, targetNodeID st
select { select {
case <-done: case <-done:
return return
case e := <-errCh: case <-errCh:
logger.Println(e) // logger.Println(e)
} }
} }
}(reqChan) }(reqChan)
} }
for _, handler := range handlers { for _, handler := range handlers {
if ierr := handler.Init(context.Background(), initiator, target, initiatorNodeID, targetNodeID); ierr != nil { if ierr := handler.Init(context.Background(), initiator, target, initiatorNodeID, targetNodeID); ierr != nil {
logger.Println(ierr) // logger.Println(ierr)
} }
} }
return return

View File

@ -1,32 +1,32 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFJTCCBA2gAwIBAgISA3dQ2zpBeZnE7w8niLNHfyCoMA0GCSqGSIb3DQEBCwUA MIIFJTCCBA2gAwIBAgISBPadBO03QkICD+vXyXyTn/keMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMjAxMDcxMzI1NDdaFw0yMjA0MDcxMzI1NDZaMBsxGTAXBgNVBAMT EwJSMzAeFw0yMzAyMTQxMTUyMzVaFw0yMzA1MTUxMTUyMzRaMBsxGTAXBgNVBAMT
EGRldi56aXBweXRhbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB EGRldi56aXBweXRhbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCyC2CiD7Gfog06nKiibkStV5VJDGAMLTj7G3GxS2OUWqY9FtjyvMxUNQZ7xHA4 AQDZvlYAoMicvfR0AUVzlh0ESPlH0BmDxbaotJiAA4Oi2jQtH0oMDOrz8i0BxRFd
/QXbn/TUPcZxlKJymUgE0pqueAxlxnHvft80Bz35g1G5kJMNp349uBHKUArlDwqm 378R8Tu33wCF116SDJqMD0B0ZiwIepSzYyuueZ6sbcvp2/Sj85Sphu3PA42JFTBp
/B4BrUrKzMj5O4YJTrPdyAMx3aRquWNysh8deqyZLXKvpT1f33WopyWwbC6AySMb 7usemWDYsKc/Cy5yWLRHpwMK75VZXrwQ7zlBftolQqIS9qwqjhz9qvLSfwLl0Jhf
tkZaq0NycMc2kszr0eqcJU9+ZDrkAYwLIeIOp4DLL+N5N/YEEPNGyKyth1DtNV6z Tr7U5xKSpt+1Pq1/e/2CiB3IDxKN3oIW9oCl8oVMeWgtwafu8hmJTgO29nJeSJLA
VPv0yLKY6nTEJWnp2GaQCvMs0g8ImrSEWeoz+QBQ0w79Pll78ldrVPoPBtlGSP/N 75yebpCecc19aTQTXt268TgNyuS/vRS0HE+uPIYLUzhWE84vfoAXM+EHSIYGLTlU
6q6FuFF2IiXlbCvgZxJ5hKKxAgMBAAGjggJKMIICRjAOBgNVHQ8BAf8EBAMCBaAw FPVzZ441BAflsiCPwG2Xdg6TAgMBAAGjggJKMIICRjAOBgNVHQ8BAf8EBAMCBaAw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYD HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYD
VR0OBBYEFCcpVUqr+wzOcbciHnVozpCHq3+4MB8GA1UdIwQYMBaAFBQusxe3WFbL VR0OBBYEFDCknZOFSUJBeihtZ9rLqf/ImyqGMB8GA1UdIwQYMBaAFBQusxe3WFbL
rlAJQOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDov rlAJQOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDov
L3IzLm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5v L3IzLm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5v
cmcvMBsGA1UdEQQUMBKCEGRldi56aXBweXRhbC5jb20wTAYDVR0gBEUwQzAIBgZn cmcvMBsGA1UdEQQUMBKCEGRldi56aXBweXRhbC5jb20wTAYDVR0gBEUwQzAIBgZn
gQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s gQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
ZXRzZW5jcnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdQBGpVXrdfqR ZXRzZW5jcnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdQC3Pvsk35xN
IDC1oolp9PN9ESxBdL79SbiFq/L8cP5tRwAAAX407m0nAAAEAwBGMEQCIDq4+2nG unXyOcW6WPRsXfxCz3qfNcSeHQmBJe20mQAAAYZP++yrAAAEAwBGMEQCIEYNligg
dTMFrcMHhn5yPUTtJM/dL2HG235w1oMjyCOvAiAu7MDKRTXhmt3+8l1m/sAxghlf JBY2b1Gw+ksj6Q0nFgBvIy+z4+EGruX27clMAiBvoR58IOBYkxJyy2HeBM7V05uQ
c89zbySAiLAuOgQIaQB2AG9Tdqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kT vq6wgijT/ICV+syyvwB2AHoyjFTYty22IOo44FIe6YQWcDIThU070ivBOlejUutS
AAABfjTubfcAAAQDAEcwRQIhAMcjPDuJA/RuNGBgY7kdjyucSnRzE7VPvqWfOmyy AAABhk/77MoAAAQDAEcwRQIhAN3/uLBljNpjenO2Xujt1R22C8UUYs/YN6MuNyj+
xQyxAiBobnPO5S/YU2ug0gnvls2WHI0U/vYz79UrQXVexKLDQTANBgkqhkiG9w0B KPocAiAGEEAPdZcBLulJygmak0hBVi1mIuTg9zDfGTzlE+22wzANBgkqhkiG9w0B
AQsFAAOCAQEALPoLXardrWCT9kVAc+uM9mwrwmwNHb1NXp1HPzasZphd9HM0tTIt AQsFAAOCAQEAkfYqlMvFxFpOOMxQc3bthaqV/p6nBuSzgcGswoO8BTsHgc7I25Ir
5jWSWwPPO1JJROiwSjepjls/auDuujhooYjQ00cG8Et4IWMpkd2gb4kqvDdsGEr/ fCFcASPoK5wBvbnMhr4BSGpepvwx15EbO6J3nSLWAAycVCGj/Pclc4ueAtUR5Z3O
yLreBgEa04oSMKdauSHy5Wb9OOfYEMLYqZsPu46ILAwebsxCjfkTWMi8zh1O5ePf 0e48nLtRdgpX87dHTDxv7w4gvcR9/YOBqI04EAIyg/TnEGcCh+l87Vcfu28KXY6a
AZhrZiiTTYKeuIihoTdYYGpc8vUC9iksPeY3U6g6O/6mCdbr8PN7EVaCfXd6Z7H8 jVEbPzAG9Q5FcdPoCKIxcAxk/XalkRk1Y+Sv13MFXkUC4LoT5B5e+otOr8XruBQI
LMq1P/BaotdHwJovKghtkOa2hwvEjdnw+jAj7YysNs3kX8L6nH2eIgzicNK41khV oBOrubQJE4eFHBp24gwtvQ+n0GP+NqlFcJZPjLLEniyNNbGDseuzYvOXt+Xzqq7Y
mk7aUfZCfc1r/fqHHTYmNb5cUa9MMcEUyQ== c1dHBpAYQSU3DjoDJELW9mJOAUAGEK+9fw==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
@ -89,4 +89,4 @@ MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5 Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1 +0,0 @@
 P^í·ŒTÖã# çHello Badger

View File

@ -1 +0,0 @@
{"chatId":"general 💬","chatType":"public","owner":"Dev","members":["Dev","Loïs","Pascal","Dev2"]}

View File

@ -1 +0,0 @@
Y(2ë…0ïÆD bHello Badger

View File

@ -1 +0,0 @@
§ŠM}ïÇF¸ŸýíÔáSoHello Badger

View File

@ -1,8 +0,0 @@
{
"chatId": "test",
"chatType": "private",
"owner": "Dev2",
"members": [
"Dev2"
]
}

View File

@ -1 +0,0 @@
•‡Ì\³ ƯªŽWœ0xHello Badger

View File

@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA21eYnSK/8vlKju2JskviAmf4RjMH/hhDmcA2nIWXn17Sh3re
L7dcL0p3OO9Up/iQ9tDpL63UMPkX3JW7SC8JxAtbhpPLOtqDbAxrtLnth3m+t8e9
pdVQVVor7UdDg8VRJotN9OYIe4/9k/Fv9w3qFnLpSLh6VSHGb8MsrcJH7RoHL5F9
LBb5m6iYjq6SfhPFbSgMJ86CPXtOMFtY0uXmaWaG9yGLrCYa8ZKoXCXkrTBYok5g
Z//sR/py8KqeS7q1FUSPRyp9JoA8Kyy+7Oqgb7Ehw4/9FASeAN808cn2+C19Jl3T
QBw/CshFwSVJmE3DzTvNfpIaGLSChKA54Jh4YwIDAQABAoIBACpkIZCs+KAC4hAB
hI068TE52tfmYPMQyW/boDJb91PLxbB9ZJegPma9Y5FTX+8esRWiho66b7oPSjdN
kOaAgMis0UGPKsXzGVc2h1JkZK28L8nhBpwYP/Be/wJatYewCOEEJ0rfcmA/EekX
zmXXAJjaGI//Z1Uws+NBu07Rr4j5FRYczV2nFMSWAlo4k8/beaIFACNnpnYnx+tL
BREgA7x9PMRhFXt1POJ+fTN0YZrp7i2QYT5y1fYCT6BvJpQeAGm/uaXGUTvHjQOo
N8ztLjVphgopR/Zg7Zg0gLovfthXh3C4qBPcIHmRGNDErxJEf6oTlQZNGpW0cF4B
9YB9KmECgYEA+a+/IDL9WCk55v1eJPlVUzW8qVRq3mG6JZMeklLGWs6nz/wNkUA3
YM9ljWSgjSjY0OMSwdAel1Hrgj6obWUSM5pV0sRVT/xnzSmy8syHmqKsD0eT7G4d
3aQlQ0Hs/370OVVykuGZ3sl5gG/NL5hvY4KTri4MlgP9RgKl1ex5MRsCgYEA4ONt
PCPmNDCblbYe8vyxpG6qSARYkRsiF4iu9q6WiKS1tyZ0gvXNKz4zvavba/w/F7RE
Vacy8CDxHYJ0hxkYOYgwRkiLD3ORpY16DQXjybhUHFBCroxBTMT5yzsJIN7CWCTV
5FCuMB4G5ABtU7Rd6aNR6vgIWQ3na1li+aGvklkCgYB5RIhZRSqSpQNAUxJkdsyg
K1tECoIVG/Xixf91Jcq8093hQBP+1eePl2tFLvhjVtFnMsIra79P0zPFAFWhPBOJ
CI5iXYTp4jcwB+6nyfqaeiODEEqh7CGJQm3uqphGxwwqxHtvJy8qa0Qdwy8uzKRc
+lBrqmXmfm2GkUamDcIWvQKBgEZ/BH8VwdQaaKtFq+3/yLADAN4SfrD+EHHQJwit
MgMjntMK+vsSkn47wXxzoxT2vdBwcftnrlAYA318p4qyEyX1yyw9EVqGn+GFt/zd
G8rgPX2iq0SMMuwd0zAiEXp8We/HnEU2BWSQBRj0CVFz+PyEdelyVyuTcDf2jVAz
nxYBAoGACqeABt+gN/7TwSNPVveFVx5ms67pAVYqe6Pamk+ECbJDWHajrANGu5GM
Ib5f1Y3VExMiUT/jRo1mbyKO1tWff4I252v1xwZFgcfF/YfoqNQr7VomfizyyYx2
oyS7VhWDP25Q7/ofhbJKvhd899nVDOQ8gHLiQNycpwWv0ieIwgQ=
-----END RSA PRIVATE KEY-----

View File

@ -1 +0,0 @@
½XñÔ LPENQˆHello Badger

View File

@ -1 +1 @@
C<EFBFBD>Ü ÜÌxžðµYª¿PHello Badger uäe>Š}G˜í=ôµìHello Badger

View File

@ -1 +1 @@
ûcŸçª1[ :>õªžHello Badger íÙ3à÷'ÂêSÀ°5@Hello Badger

File diff suppressed because it is too large Load Diff

View File

@ -19,11 +19,11 @@ func main() {
if err = os.Chdir(nodePath); err != nil { if err = os.Chdir(nodePath); err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
config, err := localserver.NewLocalServerConfig(nodePath,nodePath) config, err := localserver.NewLocalServerConfig(nodePath, nodePath)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
localserver, err := localserver.NewLocalServer(2448,".", config.NodeId, config.Token) localserver, err := localserver.NewLocalServer(2448, ".", config.NodeId, config.Token)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }

BIN
cmd/node

Binary file not shown.

Binary file not shown.

View File

@ -29,9 +29,8 @@ type LocalServerConfig struct {
} }
var configPath = "" var configPath = ""
var certificatePath = ""
func NewLocalServerConfig(appCertificatePath, appConfigPath string) (localServerConfig *LocalServerConfig, err error) { func NewLocalServerConfig(appConfigPath string) (localServerConfig *LocalServerConfig, err error) {
HTTPClient = &http.Client{ HTTPClient = &http.Client{
Transport: &http.Transport{ Transport: &http.Transport{
DisableKeepAlives: true, DisableKeepAlives: true,
@ -42,7 +41,6 @@ func NewLocalServerConfig(appCertificatePath, appConfigPath string) (localServer
Timeout: 10 * time.Second, Timeout: 10 * time.Second,
} }
configPath = appConfigPath configPath = appConfigPath
certificatePath = appCertificatePath
logFile, err := os.OpenFile(filepath.Join(configPath, "local_server.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0755) logFile, err := os.OpenFile(filepath.Join(configPath, "local_server.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0755)
if err != nil { if err != nil {
return return
@ -99,7 +97,7 @@ func (l *LocalServerConfig) startup() (err error) {
Type: "RSA PUBLIC KEY", Type: "RSA PUBLIC KEY",
Bytes: key_bytes, Bytes: key_bytes,
}) })
logger.Println(string(key)) // logger.Println(string(key))
l.NodeId = id l.NodeId = id
l.PrivateKeyPath = "" l.PrivateKeyPath = ""
l.Token = "" l.Token = ""
@ -120,10 +118,12 @@ func (l *LocalServerConfig) startup() (err error) {
} }
res, postErr := HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewBuffer(bss)) res, postErr := HTTPClient.Post("https://dev.zippytal.com/req", "application/json", bytes.NewBuffer(bss))
if postErr != nil { if postErr != nil {
logger.Println("e") // logger.Println("e")
fmt.Println("error is from there")
return postErr return postErr
} }
logger.Println(res) // logger.Println(res)
fmt.Println(res)
if err = file.Close(); err != nil { if err = file.Close(); err != nil {
return return
} }
@ -140,7 +140,7 @@ func (l *LocalServerConfig) startup() (err error) {
if err != nil { if err != nil {
return return
} }
logger.Println(config) // logger.Println(config)
NodeID = l.NodeId NodeID = l.NodeId
l.NodeId = config["nodeId"] l.NodeId = config["nodeId"]
l.PrivateKeyPath = config["privKeyPath"] l.PrivateKeyPath = config["privKeyPath"]
@ -160,6 +160,7 @@ func (l *LocalServerConfig) authenticate() (err error) {
return return
} }
em := NewEncryptionManager() em := NewEncryptionManager()
fmt.Println("-----------", l.NodeId)
sig, err := em.SignRequest(string(buff), l.NodeId) sig, err := em.SignRequest(string(buff), l.NodeId)
if err != nil { if err != nil {
return return
@ -194,6 +195,7 @@ func (l *LocalServerConfig) authenticate() (err error) {
} }
func (l *LocalServerConfig) handleLoginResponse(res map[string]any) (err error) { func (l *LocalServerConfig) handleLoginResponse(res map[string]any) (err error) {
fmt.Println("----------", res)
if _, ok := res["token"]; !ok { if _, ok := res["token"]; !ok {
err = fmt.Errorf("no field token in res") err = fmt.Errorf("no field token in res")
return return

View File

@ -84,7 +84,7 @@ func (em *EncryptionManager) LoadPrivKey(privKeyPath string, password string) (e
privPem, _ := pem.Decode(buff) privPem, _ := pem.Decode(buff)
var privePemBytes []byte var privePemBytes []byte
if privPem.Type != PEM_PRIVATE_KEY && privPem.Type != OPENSSH_PRIVATE_KEY { if privPem.Type != PEM_PRIVATE_KEY && privPem.Type != OPENSSH_PRIVATE_KEY {
logger.Println(privPem.Type) // logger.Println(privPem.Type)
err = fmt.Errorf("RSA Private key is of wrong type") err = fmt.Errorf("RSA Private key is of wrong type")
return return
} }
@ -98,9 +98,9 @@ func (em *EncryptionManager) LoadPrivKey(privKeyPath string, password string) (e
} }
var parsedKey interface{} var parsedKey interface{}
if parsedKey, err = x509.ParsePKCS1PrivateKey(privePemBytes); err != nil { if parsedKey, err = x509.ParsePKCS1PrivateKey(privePemBytes); err != nil {
logger.Printf("error one %v\n", err) // logger.Printf("error one %v\n", err)
if parsedKey, err = x509.ParsePKCS8PrivateKey(privePemBytes); err != nil { if parsedKey, err = x509.ParsePKCS8PrivateKey(privePemBytes); err != nil {
logger.Printf("error on parsing %v\n", err) // logger.Printf("error on parsing %v\n", err)
if parsedKey, err = x509.ParseECPrivateKey(privePemBytes); err != nil { if parsedKey, err = x509.ParseECPrivateKey(privePemBytes); err != nil {
return return
} }

19
go.mod
View File

@ -16,17 +16,13 @@ require (
github.com/cespare/xxhash/v2 v2.1.1 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect
github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgraph-io/ristretto v0.1.0 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect
github.com/fogleman/gg v1.3.0 // indirect
github.com/goccy/go-graphviz v0.0.9 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect
github.com/golang/protobuf v1.5.2 // indirect github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.3 // indirect github.com/golang/snappy v0.0.4 // indirect
github.com/google/flatbuffers v1.12.1 // indirect github.com/google/flatbuffers v1.12.1 // indirect
github.com/klauspost/compress v1.12.3 // indirect github.com/klauspost/compress v1.12.3 // indirect
github.com/ofabry/go-callvis v0.6.1 // indirect
github.com/pion/datachannel v1.5.2 // indirect github.com/pion/datachannel v1.5.2 // indirect
github.com/pion/dtls/v2 v2.0.10 // indirect github.com/pion/dtls/v2 v2.0.10 // indirect
github.com/pion/ice/v2 v2.1.14 // indirect github.com/pion/ice/v2 v2.1.14 // indirect
@ -42,16 +38,13 @@ require (
github.com/pion/transport v0.12.3 // indirect github.com/pion/transport v0.12.3 // indirect
github.com/pion/turn/v2 v2.0.5 // indirect github.com/pion/turn/v2 v2.0.5 // indirect
github.com/pion/udp v0.1.1 // indirect github.com/pion/udp v0.1.1 // indirect
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/stretchr/testify v1.8.0 // indirect
go.opencensus.io v0.22.5 // indirect go.opencensus.io v0.22.5 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect golang.org/x/crypto v0.5.0 // indirect
golang.org/x/image v0.1.0 // indirect golang.org/x/net v0.5.0 // indirect
golang.org/x/mod v0.7.0 // indirect golang.org/x/sys v0.4.0 // indirect
golang.org/x/net v0.2.0 // indirect golang.org/x/text v0.6.0 // indirect
golang.org/x/sys v0.2.0 // indirect
golang.org/x/text v0.4.0 // indirect
golang.org/x/tools v0.3.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
) )

64
go.sum
View File

@ -20,7 +20,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@ -39,19 +38,12 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/goccy/go-graphviz v0.0.6/go.mod h1:wXVsXxmyMQU6TN3zGRttjNn3h+iCAS7xQFC6TlNvLhk=
github.com/goccy/go-graphviz v0.0.9 h1:s/FMMJ1Joj6La3S5ApO3Jk2cwM4LpXECC2muFx3IPQQ=
github.com/goccy/go-graphviz v0.0.9/go.mod h1:wXVsXxmyMQU6TN3zGRttjNn3h+iCAS7xQFC6TlNvLhk=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
@ -72,8 +64,9 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@ -91,7 +84,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU= github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU=
@ -102,11 +94,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/ofabry/go-callvis v0.6.1 h1:JSVl4QdS5+997C38Bu0lMPXOs5NLOoKaY32sgKcgdUI=
github.com/ofabry/go-callvis v0.6.1/go.mod h1:0rRJ5J4UM3gOuKEWcoSng8RJmDUGJCJRAd+nY+zT2KE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
@ -153,9 +142,6 @@ github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o=
github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M=
github.com/pion/webrtc/v3 v3.1.11 h1:8Q5BEsxvlDn3botM8U8n/Haln745FBa5TWgm8v2c2FA= github.com/pion/webrtc/v3 v3.1.11 h1:8Q5BEsxvlDn3botM8U8n/Haln745FBa5TWgm8v2c2FA=
github.com/pion/webrtc/v3 v3.1.11/go.mod h1:h9pbP+CADYb/99s5rfjflEcBLgdVKm55Rm7heQ/gIvY= github.com/pion/webrtc/v3 v3.1.11/go.mod h1:h9pbP+CADYb/99s5rfjflEcBLgdVKm55Rm7heQ/gIvY=
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@ -174,40 +160,36 @@ github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb6
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk=
golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -228,11 +210,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211005001312-d4b1ae081e3b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211005001312-d4b1ae081e3b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211020060615-d418f374d309 h1:A0lJIi+hcTR6aajJH4YqKWwohY4aW9RO7oRMcdv+HKI=
golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -242,7 +222,6 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -260,39 +239,27 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 h1:2B5p2L5IfGiD7+b9BOoRMC6DgObAVZV+Fsp050NqXik=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200305224536-de023d59a5d1/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM=
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
@ -335,7 +302,8 @@ gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

View File

@ -15,9 +15,9 @@ package localserver
// func (lm *LogMiddleware) Process(ctx context.Context, req *http.Request, w http.ResponseWriter) (err error) { // func (lm *LogMiddleware) Process(ctx context.Context, req *http.Request, w http.ResponseWriter) (err error) {
// done, errCh := make(chan struct{}), make(chan error) // done, errCh := make(chan struct{}), make(chan error)
// go func() { // go func() {
// logger.Println("received a request") // // logger.Println("received a request")
// lm.menuItem.AddSubMenuItemCheckbox(filepath.Join("remote addr : %s", req.RemoteAddr), "remote", false) // lm.menuItem.AddSubMenuItemCheckbox(filepath.Join("remote addr : %s", req.RemoteAddr), "remote", false)
// logger.Printf("from %s\n", req.RemoteAddr) // // logger.Printf("from %s\n", req.RemoteAddr)
// done <- struct{}{} // done <- struct{}{}
// }() // }()
// select { // select {

View File

@ -68,28 +68,28 @@ func (pdm *P2PFSDatachannelManager) HandleMessage(message *DatachannelMessage, c
go func() { go func() {
switch message.Type { switch message.Type {
case FS_GET_FOLDER: case FS_GET_FOLDER:
logger.Println("try to get folder") // logger.Println("try to get folder")
done, err := pdm.handleGetFolder(message.Payload.Path, channel) done, err := pdm.handleGetFolder(message.Payload.Path, channel)
select { select {
case <-done: case <-done:
logger.Println("operation succeed") // logger.Println("operation succeed")
case e := <-err: case e := <-err:
errChan <- e errChan <- e
return return
} }
case FS_DOWNLOAD_FILE: case FS_DOWNLOAD_FILE:
logger.Println("tried to download a file") // logger.Println("tried to download a file")
done, err := pdm.sendFile(message.Payload.Path, channel) done, err := pdm.sendFile(message.Payload.Path, channel)
select { select {
case <-done: case <-done:
logger.Println("operation succeed") // logger.Println("operation succeed")
case e := <-err: case e := <-err:
errChan <- e errChan <- e
return return
} }
case FS_UPLOAD_FILE_INIT: case FS_UPLOAD_FILE_INIT:
logger.Println("tried to upload a file") // logger.Println("tried to upload a file")
if err := pdm.downloadFileInit(message.Payload.Path); err != nil { if err := pdm.downloadFileInit(message.Payload.Path); err != nil {
errChan <- err errChan <- err
return return
@ -110,7 +110,7 @@ func (pdm *P2PFSDatachannelManager) HandleMessage(message *DatachannelMessage, c
return return
} }
default: default:
logger.Printf("got a new message from %s with payload %v\n", message.From, message.Payload) // logger.Printf("got a new message from %s with payload %v\n", message.From, message.Payload)
} }
done <- struct{}{} done <- struct{}{}
}() }()
@ -123,7 +123,7 @@ func (pdm *P2PFSDatachannelManager) handleGetFolder(path string, channel *webrtc
var dirPath string var dirPath string
if path == HOME { if path == HOME {
homeDir, err := os.UserHomeDir() homeDir, err := os.UserHomeDir()
logger.Println(homeDir) // logger.Println(homeDir)
if err != nil { if err != nil {
errCh <- err errCh <- err
return return
@ -150,7 +150,7 @@ func (pdm *P2PFSDatachannelManager) handleGetFolder(path string, channel *webrtc
f := &FSResultInfo{} f := &FSResultInfo{}
info, err := d.Info() info, err := d.Info()
if err != nil { if err != nil {
logger.Println(err) // logger.Println(err)
continue continue
} }
f.ModTime = fmt.Sprintf("%s at %s", info.ModTime().Format("January 2, 2006"), info.ModTime().Format("15:04:05")) f.ModTime = fmt.Sprintf("%s at %s", info.ModTime().Format("January 2, 2006"), info.ModTime().Format("15:04:05"))
@ -166,7 +166,7 @@ func (pdm *P2PFSDatachannelManager) handleGetFolder(path string, channel *webrtc
} }
if len(dirs) < 100 { if len(dirs) < 100 {
logger.Println("dir smaller than 100") // logger.Println("dir smaller than 100")
bs, err := json.Marshal(map[string]interface{}{ bs, err := json.Marshal(map[string]interface{}{
"type": FS_GET_FOLDER_RESPONSE, "type": FS_GET_FOLDER_RESPONSE,
"from": "lolo_local_serv", "from": "lolo_local_serv",
@ -184,13 +184,13 @@ func (pdm *P2PFSDatachannelManager) handleGetFolder(path string, channel *webrtc
return return
} }
} else { } else {
logger.Println("dir greater than 10000") // logger.Println("dir greater than 10000")
reste := len(dirs) % 100 reste := len(dirs) % 100
x := (len(dirs) - reste) / 100 x := (len(dirs) - reste) / 100
for j := 0; j < x; j++ { for j := 0; j < x; j++ {
logger.Println("dir sending packet than 100") // logger.Println("dir sending packet than 100")
d := dirs[j*100 : (j+1)*100] d := dirs[j*100 : (j+1)*100]
logger.Println("length of d :", len(d)) // logger.Println("length of d :", len(d))
bs, err := json.Marshal(map[string]interface{}{ bs, err := json.Marshal(map[string]interface{}{
"type": FS_GET_FOLDER_RESPONSE, "type": FS_GET_FOLDER_RESPONSE,
"from": "lolo_local_serv", "from": "lolo_local_serv",
@ -305,7 +305,7 @@ func (pdm *P2PFSDatachannelManager) sendFile(path string, channel *webrtc.DataCh
} }
func (pdm *P2PFSDatachannelManager) downloadFileInit(path string) (err error) { func (pdm *P2PFSDatachannelManager) downloadFileInit(path string) (err error) {
logger.Println("upload path name is", path) // logger.Println("upload path name is", path)
if _, ok := pdm.uploadFile[path]; ok { if _, ok := pdm.uploadFile[path]; ok {
err = fmt.Errorf("the file %s is already being uploaded", path) err = fmt.Errorf("the file %s is already being uploaded", path)
return return
@ -323,8 +323,8 @@ func (pdm *P2PFSDatachannelManager) downloadFileInit(path string) (err error) {
} }
} }
} }
logger.Println(path) // logger.Println(path)
logger.Println(path[index+1:]) // logger.Println(path[index+1:])
pdm.uploadFile[path[index+1:]] = file pdm.uploadFile[path[index+1:]] = file
return return
} }
@ -339,7 +339,7 @@ func (pdm *P2PFSDatachannelManager) downloadFile(path string, content []byte) (e
} }
func (pdm *P2PFSDatachannelManager) downloadFileEnd(path string) (err error) { func (pdm *P2PFSDatachannelManager) downloadFileEnd(path string) (err error) {
logger.Println("closing file") // logger.Println("closing file")
if _, ok := pdm.uploadFile[path]; !ok { if _, ok := pdm.uploadFile[path]; !ok {
err = fmt.Errorf("no upload file open for path %s", path) err = fmt.Errorf("no upload file open for path %s", path)
return return

View File

@ -2,10 +2,12 @@ package localserver
import ( import (
"context" "context"
"crypto/x509"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"log" "log"
"path/filepath" "net/http"
"sync" "sync"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -132,12 +134,20 @@ func NewGrpcClientManager(addr uint, id string, middleware ...SignalingClientMan
} }
func NewGrpcConn(addr string, id string) (conn grpc.ClientConnInterface, signalingClient SignalingServiceClient, signalingLinkClient SignalingService_LinkClient, err error) { func NewGrpcConn(addr string, id string) (conn grpc.ClientConnInterface, signalingClient SignalingServiceClient, signalingLinkClient SignalingService_LinkClient, err error) {
var cert = filepath.Join(certificatePath, "config", "fullchain.pem") res, err := http.Get("https://zippytal.com/certificate")
creds, err := credentials.NewClientTLSFromFile(cert, "dev.zippytal.com")
if err != nil { if err != nil {
fmt.Println("there")
return return
} }
bytes, err := io.ReadAll(res.Body)
if err != nil {
return
}
cp := x509.NewCertPool()
if !cp.AppendCertsFromPEM(bytes) {
err = fmt.Errorf("certificate format not supported")
return
}
creds := credentials.NewClientTLSFromCert(cp, "dev.zippytal.com")
var opts []grpc.DialOption = []grpc.DialOption{grpc.WithTransportCredentials(creds)} var opts []grpc.DialOption = []grpc.DialOption{grpc.WithTransportCredentials(creds)}
conn, err = grpc.Dial(addr, opts...) conn, err = grpc.Dial(addr, opts...)
if err != nil { if err != nil {
@ -148,7 +158,7 @@ func NewGrpcConn(addr string, id string) (conn grpc.ClientConnInterface, signali
signalingLinkClient, err = signalingClient.Link(context.Background()) signalingLinkClient, err = signalingClient.Link(context.Background())
if err != nil { if err != nil {
fmt.Println("really there") fmt.Println("really there")
logger.Println(err) // logger.Println(err)
return return
} }
payload := map[string]any{ payload := map[string]any{
@ -156,7 +166,7 @@ func NewGrpcConn(addr string, id string) (conn grpc.ClientConnInterface, signali
} }
bs, err := json.Marshal(payload) bs, err := json.Marshal(payload)
if err != nil { if err != nil {
logger.Println(err) // logger.Println(err)
return return
} }
if err = signalingLinkClient.Send(&SignalingMessage{ if err = signalingLinkClient.Send(&SignalingMessage{
@ -197,7 +207,7 @@ func NewGrpcConn(addr string, id string) (conn grpc.ClientConnInterface, signali
// case <-req.Context().Done(): // case <-req.Context().Done():
// case <-done: // case <-done:
// case err := <-errCh: // case err := <-errCh:
// logger.Println(err) // // logger.Println(err)
// } // }
// } // }
@ -216,7 +226,7 @@ func (gcm *SignalingClientManager) Handle(ctx context.Context) (err error) {
go func(m SignalingClientManagerMiddleware) { go func(m SignalingClientManagerMiddleware) {
defer wg.Done() defer wg.Done()
if err := m.Process(ctx, res, gcm.GrpcLinkClient); err != nil { if err := m.Process(ctx, res, gcm.GrpcLinkClient); err != nil {
logger.Println(err) // logger.Println(err)
} }
}(middleware) }(middleware)
} }
@ -225,18 +235,18 @@ func (gcm *SignalingClientManager) Handle(ctx context.Context) (err error) {
}() }()
select { select {
case <-gcm.GrpcLinkClient.Context().Done(): case <-gcm.GrpcLinkClient.Context().Done():
logger.Println("grpc context") // logger.Println("grpc context")
err = gcm.GrpcLinkClient.Context().Err() err = gcm.GrpcLinkClient.Context().Err()
return return
case <-ctx.Done(): case <-ctx.Done():
logger.Println("app context") // logger.Println("app context")
err = ctx.Err() err = ctx.Err()
return return
case <-done: case <-done:
logger.Println("done") // logger.Println("done")
return return
case err = <-errCh: case err = <-errCh:
logger.Println("done with error") // logger.Println("done with error")
if closeErr := gcm.GrpcLinkClient.CloseSend(); closeErr != nil { if closeErr := gcm.GrpcLinkClient.CloseSend(); closeErr != nil {
return closeErr return closeErr
} }

View File

@ -55,7 +55,7 @@ func (fs *SquadFSInstance) SetupFileUpload(chatId, filename, userId string, dc *
return nil, rErr return nil, rErr
} }
if err = os.Remove(concretePath); err != nil { if err = os.Remove(concretePath); err != nil {
logger.Println(err) // logger.Println(err)
} }
file, err := os.OpenFile(concretePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755) file, err := os.OpenFile(concretePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755)
if err != nil { if err != nil {
@ -100,22 +100,22 @@ func (fs *SquadFSInstance) SetupFileDownload(chatId, filename, userId string, dc
buf := make([]byte, 0, 50000) buf := make([]byte, 0, 50000)
sendingLoop: sendingLoop:
for { for {
n, readErr := r.Read(buf[:cap(buf)]) n, _ := r.Read(buf[:cap(buf)])
buf = buf[:n] buf = buf[:n]
if n == 0 { if n == 0 {
if err == nil { if err == nil {
logger.Println("n is 0 weird") // logger.Println("n is 0 weird")
break sendingLoop break sendingLoop
} }
if err == io.EOF { if err == io.EOF {
break sendingLoop break sendingLoop
} }
logger.Println(readErr) // logger.Println(readErr)
return return
} }
if err = dc.Send(buf); err != nil { if err = dc.Send(buf); err != nil {
dc.Close() dc.Close()
logger.Println(err) // logger.Println(err)
break sendingLoop break sendingLoop
} }
if dc.BufferedAmount() > dc. if dc.BufferedAmount() > dc.
@ -123,9 +123,9 @@ func (fs *SquadFSInstance) SetupFileDownload(chatId, filename, userId string, dc
<-bufferedAmountLock <-bufferedAmountLock
} }
} }
logger.Println("done") // logger.Println("done")
if err = dc.SendText("download_done"); err != nil { if err = dc.SendText("download_done"); err != nil {
logger.Println(err) // logger.Println(err)
} }
}(file) }(file)
dc.OnBufferedAmountLow(func() { dc.OnBufferedAmountLow(func() {

View File

@ -1,9 +1,12 @@
package localserver package localserver
import ( import (
"bytes"
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"net/http"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -52,7 +55,7 @@ func NewSquadChatsHandler(hostId, squadId, squadName, owner string, authorizedMe
_, err = os.ReadDir(filepath.Join(dataPath, "data", "squads", squadId, "chat")) _, err = os.ReadDir(filepath.Join(dataPath, "data", "squads", squadId, "chat"))
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
logger.Printf("creating chat directory for squad %s...\n", squadId) // logger.Printf("creating chat directory for squad %s...\n", squadId)
mkdirErr := os.MkdirAll(filepath.Join(dataPath, "data", "squads", squadId, "chat"), 0700) mkdirErr := os.MkdirAll(filepath.Join(dataPath, "data", "squads", squadId, "chat"), 0700)
if mkdirErr != nil { if mkdirErr != nil {
return nil, mkdirErr return nil, mkdirErr
@ -92,7 +95,7 @@ func NewSquadChatsHandler(hostId, squadId, squadName, owner string, authorizedMe
if err != nil { if err != nil {
return nil, err return nil, err
} }
logger.Println(string(bs)) // logger.Println(string(bs))
var c SquadChat var c SquadChat
if err = json.Unmarshal(bs, &c); err != nil { if err = json.Unmarshal(bs, &c); err != nil {
return nil, err return nil, err
@ -101,7 +104,7 @@ func NewSquadChatsHandler(hostId, squadId, squadName, owner string, authorizedMe
if err != nil { if err != nil {
return nil, err return nil, err
} }
logger.Println("chats data :", c.ChatId, c.ChatType, c.Owner, c.Members) // logger.Println("chats data :", c.ChatId, c.ChatType, c.Owner, c.Members)
c.DB = squadChatDBHandler c.DB = squadChatDBHandler
c.Tracking = squadChatTracking c.Tracking = squadChatTracking
@ -253,6 +256,7 @@ func (sch *SquadChatsHandler[T]) ListLatestChatFiles(userId, chatId string, last
} }
func (sch *SquadChatsHandler[T]) AddChatMessage(userId, chatId, content string, isResponse bool, chatResponseId uint64, file *ChatFile) (err error) { func (sch *SquadChatsHandler[T]) AddChatMessage(userId, chatId, content string, isResponse bool, chatResponseId uint64, file *ChatFile) (err error) {
dateTime := time.Now().Format(time.RFC3339)
chatMessage := &ChatMessage{ chatMessage := &ChatMessage{
Content: content, Content: content,
From: userId, From: userId,
@ -260,7 +264,7 @@ func (sch *SquadChatsHandler[T]) AddChatMessage(userId, chatId, content string,
ResponseOf: nil, ResponseOf: nil,
File: file, File: file,
Tags: make([]string, 0), Tags: make([]string, 0),
Date: time.Now().Format(time.RFC3339), Date: dateTime,
} }
if err = atomicallyExecute(sch.ChatFlag, func() (err error) { if err = atomicallyExecute(sch.ChatFlag, func() (err error) {
if isResponse { if isResponse {
@ -276,56 +280,59 @@ func (sch *SquadChatsHandler[T]) AddChatMessage(userId, chatId, content string,
return return
} }
chatMessage.ID = sch.Chat.DB.PreviousId chatMessage.ID = sch.Chat.DB.PreviousId
_ = sch.Chat.Tracking.SetUserLastIndex(userId, chatMessage.ID)
return return
}); err != nil { }); err != nil {
return return
} }
notifyActivity := func(done <-chan struct{}, e <-chan error, member string) { notifyActivity := func(member string) {
select { chat := sch.Chat
case <-done: _ = atomicallyExecute(sch.ChatFlag, func() (err error) {
case <-e: li, err := chat.Tracking.GetUserLastIndex(member)
chat := sch.Chat if err != nil {
_ = atomicallyExecute(sch.ChatFlag, func() (err error) { return err
}
li, err := chat.Tracking.GetUserLastIndex(member) count, err := chat.DB.calculateNewChatCount(uint64(li))
if err != nil {
return err
}
if count == 1 {
bs, err := json.Marshal(map[string]any{
"squadId": sch.SquadId,
"squadHost": NodeID,
})
if err != nil { if err != nil {
return err return err
} }
count, err := chat.DB.calculateNewChatCount(uint64(li)) sch.sendSquadRequest(CREATE_NOTIFICATION, "node", map[string]interface{}{
if err != nil { "type": NEW_SQUAD_CHAT_ACTIVITY,
return err "title": "Unread messages 👀",
} "body": fmt.Sprintf("New messages in %s", sch.SquadName),
if count == 1 { "isPushed": true,
bs, err := json.Marshal(map[string]any{ "payload": string(bs),
"squadId": sch.SquadId, "recipients": []string{member},
"chatId": chatId, })
"squadHost": NodeID, }
}) return
if err != nil { })
return err
}
sch.sendSquadRequest(CREATE_NOTIFICATION, "node", map[string]interface{}{
"type": "new_chat_activity",
"title": "Unread messages 👀",
"body": fmt.Sprintf("New messages in %s", sch.SquadName),
"isPushed": true,
"payload": string(bs),
"recipients": []string{member},
})
}
return
})
}
} }
go func() {
if e := sch.signaSquadLastInteractionTime(context.Background(), dateTime); e != nil {
fmt.Println(e)
}
}()
for _, v := range sch.SquadMembersId { for _, v := range sch.SquadMembersId {
done, e := sch.sendDataChannelMessage(NEW_CHAT_MESSAGE, "node", v, map[string]interface{}{ done, e := sch.sendDataChannelMessage(NEW_CHAT_MESSAGE, "node", v, map[string]interface{}{
"chatMessage": chatMessage, "chatMessage": chatMessage,
"chatId": chatId, "chatId": chatId,
}) })
go notifyActivity(done, e, v) select {
case <-done:
case _ = <-e:
go notifyActivity(v)
}
} }
return return
} }
@ -362,8 +369,8 @@ func (sch *SquadChatsHandler[T]) DeleteChatMessage(key uint64, chatId string) (e
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} else { } else {
@ -374,8 +381,8 @@ func (sch *SquadChatsHandler[T]) DeleteChatMessage(key uint64, chatId string) (e
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} }
@ -412,8 +419,8 @@ func (sch *SquadChatsHandler[T]) UpdateChatMessage(key uint64, chatId, newConten
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} else { } else {
@ -425,8 +432,8 @@ func (sch *SquadChatsHandler[T]) UpdateChatMessage(key uint64, chatId, newConten
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} }
@ -450,8 +457,8 @@ func (sch *SquadChatsHandler[T]) DeleteChatFile(key uint64, fileName, chatId str
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} else { } else {
@ -463,8 +470,8 @@ func (sch *SquadChatsHandler[T]) DeleteChatFile(key uint64, fileName, chatId str
}) })
select { select {
case <-d: case <-d:
case tempErr := <-e: case <-e:
logger.Println(tempErr) // logger.Println(tempErr)
} }
} }
} }
@ -484,37 +491,37 @@ func (sch *SquadChatsHandler[T]) chatFileUpload(chatId string, filename string,
done = true done = true
} }
dc.DataChannel.OnError(func(err error) { dc.DataChannel.OnError(func(err error) {
logger.Println(err) // logger.Println(err)
logger.Println("abort...") // logger.Println("abort...")
if !done { if !done {
uploadDone() uploadDone()
} }
if fufErr := sch.ChatFSInstance.FileUploadFailed(chatId, filename, userId); fufErr != nil { if fufErr := sch.ChatFSInstance.FileUploadFailed(chatId, filename, userId); fufErr != nil {
logger.Println(fufErr) // logger.Println(fufErr)
} }
}) })
dc.DataChannel.OnClose(func() { dc.DataChannel.OnClose(func() {
if done { if done {
logger.Println("closing gracefully...") // logger.Println("closing gracefully...")
} else { } else {
logger.Println("abort...") // logger.Println("abort...")
uploadDone() uploadDone()
if fufErr := sch.ChatFSInstance.FileUploadFailed(chatId, filename, userId); fufErr != nil { if fufErr := sch.ChatFSInstance.FileUploadFailed(chatId, filename, userId); fufErr != nil {
logger.Println(fufErr) // logger.Println(fufErr)
} }
} }
}) })
dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) { dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) {
if msg.IsString { if msg.IsString {
if string(msg.Data) == "init_upload" { if string(msg.Data) == "init_upload" {
logger.Println("init upload....") // logger.Println("init upload....")
var initErr error var initErr error
if writePipe, initErr = sch.ChatFSInstance.SetupFileUpload(chatId, filename, userId, dc.DataChannel); initErr != nil { if writePipe, initErr = sch.ChatFSInstance.SetupFileUpload(chatId, filename, userId, dc.DataChannel); initErr != nil {
_ = dc.DataChannel.SendText("abort") _ = dc.DataChannel.SendText("abort")
_ = dc.DataChannel.Close() _ = dc.DataChannel.Close()
return return
} }
logger.Println("upload ready !") // logger.Println("upload ready !")
_ = dc.DataChannel.SendText("upload_ready") _ = dc.DataChannel.SendText("upload_ready")
} else if string(msg.Data) == "upload_done" { } else if string(msg.Data) == "upload_done" {
uploadDone() uploadDone()
@ -532,24 +539,24 @@ func (sch *SquadChatsHandler[T]) chatFileDownload(chatId string, filename string
var done bool var done bool
dc.DataChannel.OnError(func(err error) { dc.DataChannel.OnError(func(err error) {
if !done { if !done {
logger.Println("abort...") // logger.Println("abort...")
if fdf := sch.ChatFSInstance.FileDownloadFailed(chatId, filename, userId); fdf != nil { if fdf := sch.ChatFSInstance.FileDownloadFailed(chatId, filename, userId); fdf != nil {
logger.Println(fdf) // logger.Println(fdf)
} }
} }
}) })
dc.DataChannel.OnClose(func() { dc.DataChannel.OnClose(func() {
if !done { if !done {
logger.Println("abort...") // logger.Println("abort...")
if fdf := sch.ChatFSInstance.FileDownloadFailed(chatId, filename, userId); fdf != nil { if fdf := sch.ChatFSInstance.FileDownloadFailed(chatId, filename, userId); fdf != nil {
logger.Println(fdf) // logger.Println(fdf)
} }
} }
}) })
dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) { dc.DataChannel.OnMessage(func(msg webrtc.DataChannelMessage) {
if msg.IsString { if msg.IsString {
if string(msg.Data) == "init_download" { if string(msg.Data) == "init_download" {
logger.Println("init download....") // logger.Println("init download....")
var initErr error var initErr error
if initErr = sch.ChatFSInstance.SetupFileDownload(chatId, filename, userId, dc.DataChannel); initErr != nil { if initErr = sch.ChatFSInstance.SetupFileDownload(chatId, filename, userId, dc.DataChannel); initErr != nil {
fmt.Println("uwuwuwuwuwuwuwuwu") fmt.Println("uwuwuwuwuwuwuwuwu")
@ -558,7 +565,7 @@ func (sch *SquadChatsHandler[T]) chatFileDownload(chatId string, filename string
_ = dc.DataChannel.Close() _ = dc.DataChannel.Close()
return return
} }
logger.Println("download started !") // logger.Println("download started !")
} else if string(msg.Data) == "download_done" { } else if string(msg.Data) == "download_done" {
done = true done = true
} }
@ -581,12 +588,12 @@ func (sch *SquadChatsHandler[T]) handleDataChannel(ctx context.Context, dc *Data
catched = true catched = true
go sch.chatFileUpload(command[1], command[2], command[3], dc) go sch.chatFileUpload(command[1], command[2], command[3], dc)
} }
logger.Println(command) // logger.Println(command)
} else if strings.Contains(label, "chat_download") { } else if strings.Contains(label, "chat_download") {
command := strings.Split(label, "|") command := strings.Split(label, "|")
catched = true catched = true
go sch.chatFileDownload(command[1], command[2], command[3], dc) go sch.chatFileDownload(command[1], command[2], command[3], dc)
logger.Println(command) // logger.Println(command)
} else if strings.Contains(label, "chat_data") { } else if strings.Contains(label, "chat_data") {
command := strings.Split(label, "|") command := strings.Split(label, "|")
catched = true catched = true
@ -627,8 +634,37 @@ func (sch *SquadChatsHandler[T]) handleDataChannel(ctx context.Context, dc *Data
return return
} }
func (sch *SquadChatsHandler[T]) signaSquadLastInteractionTime(ctx context.Context, dateTime string) (err error) {
fmt.Println("this function has been called too")
em := NewEncryptionManager()
sig := em.SignRequestHMAC(NodeID)
body, err := json.Marshal(map[string]interface{}{
"type": UPDATE_SQUAD_LAST_INTERACTION_TIME,
"mac": sig,
"from": NodeID,
"peerType": "node",
"payload": map[string]string{
"squadId": sch.SquadId,
"lastInteractionTime": dateTime,
},
})
if err != nil {
return
}
res, err := http.Post("https://dev.zippytal.com/req", "application/json", bytes.NewReader(body))
if err != nil {
// logger.Println("error come from there inn chat manager")
return
}
_, err = io.ReadAll(res.Body)
if err != nil {
return
}
return
}
func (sch *SquadChatsHandler[T]) handleSquadRequest(ctx context.Context, req *SquadRequest) (err error) { func (sch *SquadChatsHandler[T]) handleSquadRequest(ctx context.Context, req *SquadRequest) (err error) {
logger.Println("got request in squad chat handler", req) // logger.Println("got request in squad chat handler", req)
switch req.ReqType { switch req.ReqType {
case LEAVE_ZONE: case LEAVE_ZONE:
if err = VerifyFieldsString(req.Payload, "userId"); err != nil { if err = VerifyFieldsString(req.Payload, "userId"); err != nil {
@ -648,6 +684,7 @@ func (sch *SquadChatsHandler[T]) handleSquadRequest(ctx context.Context, req *Sq
} }
if !contain { if !contain {
sch.SquadMembersId = append(sch.SquadMembersId, req.Payload["userId"].(string)) sch.SquadMembersId = append(sch.SquadMembersId, req.Payload["userId"].(string))
fmt.Println("squad member added")
} }
return return
case string(REMOVED_SQUAD_AUTHORIZED_MEMBER): case string(REMOVED_SQUAD_AUTHORIZED_MEMBER):
@ -668,6 +705,7 @@ func (sch *SquadChatsHandler[T]) handleSquadRequest(ctx context.Context, req *Sq
return return
} }
sch.SquadMembersId = append(sch.SquadMembersId[:index], sch.SquadMembersId[index+1:]...) sch.SquadMembersId = append(sch.SquadMembersId[:index], sch.SquadMembersId[index+1:]...)
fmt.Println("squad member removed")
return return
case LIST_LATEST_CHATS: case LIST_LATEST_CHATS:
if err = VerifyFieldsString(req.Payload, "chatId"); err != nil { if err = VerifyFieldsString(req.Payload, "chatId"); err != nil {
@ -693,7 +731,7 @@ func (sch *SquadChatsHandler[T]) handleSquadRequest(ctx context.Context, req *Sq
} }
err = sch.ReadLastMessage(req.From, req.Payload["chatId"].(string)) err = sch.ReadLastMessage(req.From, req.Payload["chatId"].(string))
case ADD_CHAT_MESSAGE: case ADD_CHAT_MESSAGE:
logger.Println("got request in squad chat handler", req) // logger.Println("got request in squad chat handler", req)
if err = VerifyFieldsString(req.Payload, "chatId", "content"); err != nil { if err = VerifyFieldsString(req.Payload, "chatId", "content"); err != nil {
return return
} }

Some files were not shown because too many files have changed in this diff Show More