cwtch/server/server.go

78 lines
2.1 KiB
Go
Raw Normal View History

2018-03-09 20:44:13 +00:00
package server
import (
//"crypto/rsa"
"git.mascherari.press/cwtch/server/fetch"
"git.mascherari.press/cwtch/server/listen"
"git.mascherari.press/cwtch/server/send"
"git.mascherari.press/cwtch/storage"
"github.com/s-rah/go-ricochet/application"
"github.com/s-rah/go-ricochet/channels"
"github.com/s-rah/go-ricochet/utils"
"log"
2018-04-20 21:12:11 +00:00
"io/ioutil"
2018-03-09 20:44:13 +00:00
)
type Server struct {
}
func (s *Server) Run(privateKeyFile string) {
cwtchserver := new(application.RicochetApplication)
pk, err := utils.LoadPrivateKeyFromFile(privateKeyFile)
if err != nil {
2018-04-20 21:12:11 +00:00
log.Printf("no private key found!")
log.Printf("generating new private key...")
var pk_err error = nil
pk, pk_err = utils.GeneratePrivateKey()
if pk_err != nil {
log.Fatalf("error generating new private key: %v", err)
}
ioutil.WriteFile(privateKeyFile, []byte(utils.PrivateKeyToString(pk)), 0400)
2018-03-09 20:44:13 +00:00
}
l, err := application.SetupOnion("127.0.0.1:9051", "tcp4", "", pk, 9878)
if err != nil {
log.Fatalf("error setting up onion service: %v", err)
}
af := application.ApplicationInstanceFactory{}
af.Init()
ms := new(storage.MessageStore)
ms.Init("cwtch.messages")
af.AddHandler("im.cwtch.server.listen", func(rai *application.ApplicationInstance) func() channels.Handler {
2018-03-14 22:23:35 +00:00
si := new(Instance)
2018-03-09 20:44:13 +00:00
si.Init(rai, cwtchserver, ms)
return func() channels.Handler {
cslc := new(listen.CwtchServerListenChannel)
return cslc
}
})
af.AddHandler("im.cwtch.server.fetch", func(rai *application.ApplicationInstance) func() channels.Handler {
2018-03-14 22:23:35 +00:00
si := new(Instance)
2018-03-09 20:44:13 +00:00
si.Init(rai, cwtchserver, ms)
return func() channels.Handler {
cssc := new(fetch.CwtchServerFetchChannel)
cssc.Handler = si
return cssc
}
})
af.AddHandler("im.cwtch.server.send", func(rai *application.ApplicationInstance) func() channels.Handler {
2018-03-14 22:23:35 +00:00
si := new(Instance)
2018-03-09 20:44:13 +00:00
si.Init(rai, cwtchserver, ms)
return func() channels.Handler {
cssc := new(send.CwtchServerSendChannel)
cssc.Handler = si
return cssc
}
})
cwtchserver.Init(pk, af, new(application.AcceptAllContactManager))
2018-03-30 21:16:51 +00:00
log.Printf("cwtch server running on cwtch:%s", l.Addr().String()[0:16])
2018-03-09 20:44:13 +00:00
cwtchserver.Run(l)
}