adding secret cwtch features
This commit is contained in:
parent
bab572a164
commit
17fb22a6e0
87
main.go
87
main.go
|
@ -17,6 +17,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"cwtch.im/cwtch/peer/connections"
|
"cwtch.im/cwtch/peer/connections"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"encoding/base32"
|
||||||
)
|
)
|
||||||
|
|
||||||
func driftoff() {
|
func driftoff() {
|
||||||
|
@ -25,9 +26,15 @@ func driftoff() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func addContactEntry(peer libpeer.CwtchPeer, name string, onion string) {
|
func addContactEntry(peer libpeer.CwtchPeer, name string, onion string) {
|
||||||
|
decodedPub, err := base32.StdEncoding.DecodeString(strings.ToUpper(onion[:56]))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("couldn't extract public key from %v.onion\n", onion)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
pp := model.PublicProfile{
|
pp := model.PublicProfile{
|
||||||
name,
|
name,
|
||||||
nil,
|
decodedPub[:32],
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
onion}
|
onion}
|
||||||
|
@ -39,6 +46,7 @@ func addContactEntry(peer libpeer.CwtchPeer, name string, onion string) {
|
||||||
peer.GetProfile().Contacts[onion] = &pp
|
peer.GetProfile().Contacts[onion] = &pp
|
||||||
peer.GetProfile().SetCustomAttribute(onion+"_name", name)
|
peer.GetProfile().SetCustomAttribute(onion+"_name", name)
|
||||||
peer.GetProfile().SetCustomAttribute(name+"_onion", onion)
|
peer.GetProfile().SetCustomAttribute(name+"_onion", onion)
|
||||||
|
peer.GetProfile().TrustPeer(onion)
|
||||||
}
|
}
|
||||||
|
|
||||||
func exitOnEnter() {
|
func exitOnEnter() {
|
||||||
|
@ -139,7 +147,7 @@ func main() {
|
||||||
contacts := peer.GetContacts()
|
contacts := peer.GetContacts()
|
||||||
for i := range contacts {
|
for i := range contacts {
|
||||||
attr, _ := peer.GetProfile().GetCustomAttribute(contacts[i] + "_name")
|
attr, _ := peer.GetProfile().GetCustomAttribute(contacts[i] + "_name")
|
||||||
fmt.Printf("%v <%v>\n", attr, contacts[i])
|
fmt.Printf("%v <%v> %v\n", attr, contacts[i], peer.GetContact(contacts[i]).Trusted)
|
||||||
}
|
}
|
||||||
case "add":
|
case "add":
|
||||||
if len(os.Args) != 4 {
|
if len(os.Args) != 4 {
|
||||||
|
@ -230,7 +238,7 @@ func main() {
|
||||||
secret = strings.Join(suggestedSecret, " ")
|
secret = strings.Join(suggestedSecret, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("okay, now please wait a moment while some magic happens...")
|
fmt.Println("please wait a moment while some magic happens...")
|
||||||
ephemeralPeer, err := libpeer.NewCwtchPeer("Alice", "alicepass", "")
|
ephemeralPeer, err := libpeer.NewCwtchPeer("Alice", "alicepass", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("couldn't create an ephemeral onion address: %v\n", err)
|
fmt.Printf("couldn't create an ephemeral onion address: %v\n", err)
|
||||||
|
@ -340,7 +348,7 @@ func main() {
|
||||||
for i := range groups {
|
for i := range groups {
|
||||||
g := peer.GetGroup(groups[i])
|
g := peer.GetGroup(groups[i])
|
||||||
groupName, _ := peer.GetProfile().GetCustomAttribute(g.GroupID + "_groupname")
|
groupName, _ := peer.GetProfile().GetCustomAttribute(g.GroupID + "_groupname")
|
||||||
fmt.Printf("%v <%v@%v>\n", groupName, g.GroupID, g.GroupServer)
|
fmt.Printf("%v <%v@%v> %v\n", groupName, g.GroupID, g.GroupServer, g.Accepted)
|
||||||
}
|
}
|
||||||
case "create":
|
case "create":
|
||||||
if len(os.Args) != 4 {
|
if len(os.Args) != 4 {
|
||||||
|
@ -461,6 +469,77 @@ func main() {
|
||||||
m := <-group.NewMessage
|
m := <-group.NewMessage
|
||||||
fmt.Printf("%v\n", m.Message)
|
fmt.Printf("%v\n", m.Message)
|
||||||
}
|
}
|
||||||
|
case "invite":
|
||||||
|
if len(os.Args) != 5 {
|
||||||
|
fmt.Println("example: sendafriend group invite [friendname] [groupname]")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
onion, exists := peer.GetProfile().GetCustomAttribute(os.Args[3] + "_onion")
|
||||||
|
if !exists {
|
||||||
|
fmt.Fprintf(os.Stderr, "hmm you don't have a contact named %v\n", os.Args[3])
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
groupId, exists := peer.GetProfile().GetCustomAttribute(os.Args[4] + "_groupid")
|
||||||
|
if !exists {
|
||||||
|
fmt.Printf("you don't seem to have a group called %v\n", os.Args[4])
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("attempting to connect to %v...\n", os.Args[3])
|
||||||
|
peer.PeerWithOnion(onion)
|
||||||
|
mp := peer.GetPeers()
|
||||||
|
for ; mp[onion] != connections.AUTHENTICATED; mp = peer.GetPeers() {
|
||||||
|
time.Sleep(time.Millisecond * 500)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = peer.InviteOnionToGroup(onion, groupId)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Trusted: %v\n", peer.GetContact(onion).Trusted)
|
||||||
|
fmt.Printf("failed to invite %v to %v: %v\n", os.Args[3], os.Args[4], err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
case "accept":
|
||||||
|
if len(os.Args) != 5 {
|
||||||
|
fmt.Println("example: sendafriend group accept [friendname] [groupname]")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
onion, exists := peer.GetProfile().GetCustomAttribute(os.Args[3] + "_onion")
|
||||||
|
if !exists {
|
||||||
|
fmt.Fprintf(os.Stderr, "hmm you don't have a contact named %v\n", os.Args[3])
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, exists = peer.GetProfile().GetCustomAttribute(os.Args[4] + "_groupid")
|
||||||
|
if exists {
|
||||||
|
fmt.Printf("oops, you already have a group called %v\n", os.Args[4])
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
s := len(peer.GetGroups())
|
||||||
|
go peer.Listen()
|
||||||
|
fmt.Println("okay, have a friend run \"sendafriend group invite [yourname] [groupname]\"")
|
||||||
|
for {
|
||||||
|
n := len(peer.GetGroups())
|
||||||
|
if n == s {
|
||||||
|
time.Sleep(time.Millisecond * 500)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
groups := peer.GetGroups()
|
||||||
|
for i := range groups {
|
||||||
|
if peer.GetGroup(groups[i]).Owner == onion && !peer.GetGroup(groups[i]).Accepted {
|
||||||
|
fmt.Printf("adding group %v!\n", os.Args[4])
|
||||||
|
peer.AcceptInvite(groups[i])
|
||||||
|
peer.GetProfile().SetCustomAttribute(os.Args[4] + "_groupid", groups[i])
|
||||||
|
peer.GetProfile().SetCustomAttribute(groups[i] + "_groupname", os.Args[4])
|
||||||
|
peer.Save()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue