|
|
|
@ -6,7 +6,6 @@ import ( |
|
|
|
|
"net" |
|
|
|
|
"net/http" |
|
|
|
|
"os/signal" |
|
|
|
|
"path" |
|
|
|
|
"path/filepath" |
|
|
|
|
"syscall" |
|
|
|
|
"time" |
|
|
|
@ -109,9 +108,7 @@ func (s *Server) Run() (err error) { |
|
|
|
|
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) |
|
|
|
|
defer cancel() |
|
|
|
|
|
|
|
|
|
if s.svc != nil { |
|
|
|
|
s.svc.Run(ctx) |
|
|
|
|
} |
|
|
|
|
go s.svc.Run(ctx) |
|
|
|
|
|
|
|
|
|
<-ctx.Done() |
|
|
|
|
log.Infof("Received signal %s", ctx.Err()) |
|
|
|
@ -225,53 +222,36 @@ func (s *Server) setupCronJobs() error { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (s *Server) setupSvcUser() { |
|
|
|
|
func (s *Server) setupServiceUser() error { |
|
|
|
|
log.Infof("starting service user %s", s.config.SvcUser) |
|
|
|
|
|
|
|
|
|
// create our addr
|
|
|
|
|
me, err := saltyim.ParseAddr(s.config.SvcUser) |
|
|
|
|
if err != nil { |
|
|
|
|
log.WithError(err).Error("error parsing svc user addr: %w", err) |
|
|
|
|
return |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// create or load client for services user
|
|
|
|
|
fn := filepath.Join(s.config.Data, servicesIdentity) |
|
|
|
|
ident, err := saltyim.GetOrCreateIdentity( |
|
|
|
|
id, err := saltyim.GetOrCreateIdentity( |
|
|
|
|
saltyim.WithIdentityPath(fn), |
|
|
|
|
saltyim.WithIdentityAddr(me), |
|
|
|
|
) |
|
|
|
|
if err != nil { |
|
|
|
|
log.WithError(err).Error("error getting or creating svc user's identity") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := CreateConfig(s.config, me.Hash(), ident.Key().ID().String()); err != nil { |
|
|
|
|
log.WithError(err).Error("error creating service config") |
|
|
|
|
return |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var cli *saltyim.Client |
|
|
|
|
|
|
|
|
|
for { |
|
|
|
|
cli, err = saltyim.NewClient(me, saltyim.WithIdentity(ident)) |
|
|
|
|
if err != nil { |
|
|
|
|
log.WithError(err).Warn("error creating svc user's client") |
|
|
|
|
time.Sleep(time.Second * 3) |
|
|
|
|
continue |
|
|
|
|
} else { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
if err := CreateConfig(s.config, me.Hash(), id.Key().ID().String()); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
svc, err := saltyim.NewService(cli) |
|
|
|
|
svc, err := saltyim.NewService(me, id) |
|
|
|
|
if err != nil { |
|
|
|
|
log.WithError(err).Errorf("error creating service") |
|
|
|
|
return |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
s.svc = svc |
|
|
|
|
|
|
|
|
|
svc.TextFunc("register", func(ctx context.Context, bot *saltyim.Service, key *keys.EdX25519PublicKey, msg *lextwt.SaltyText) error { |
|
|
|
|
svc.TextFunc("register", func(ctx context.Context, svc *saltyim.Service, key *keys.EdX25519PublicKey, msg *lextwt.SaltyText) error { |
|
|
|
|
addr, err := saltyim.ParseAddr(msg.User.String()) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
@ -282,18 +262,13 @@ func (s *Server) setupSvcUser() { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return bot.SendWithConfig(msg.User.String(), &saltyim.Config{ |
|
|
|
|
Endpoint: s.config.BaseURL + "/" + path.Join("inbox", key.String()), |
|
|
|
|
Key: key.String(), |
|
|
|
|
}, "OK") |
|
|
|
|
return svc.Respond(msg.User.String(), "OK") |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
log.Println(s.svc) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (s *Server) runStartupJobs() { |
|
|
|
|
// time.Sleep(time.Second * 5)
|
|
|
|
|
|
|
|
|
|
log.Info("running startup jobs") |
|
|
|
|
for name, jobSpec := range StartupJobs { |
|
|
|
|
job := jobSpec.Factory(s.config, s.db) |
|
|
|
@ -433,6 +408,12 @@ func NewServer(bind string, options ...Option) (*Server, error) { |
|
|
|
|
server.cron.Start() |
|
|
|
|
log.Info("started background jobs") |
|
|
|
|
|
|
|
|
|
if err := server.setupServiceUser(); err != nil { |
|
|
|
|
log.WithError(err).Error("error setting up service user") |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
log.Info("succeessfully setup service user") |
|
|
|
|
|
|
|
|
|
server.setupMetrics() |
|
|
|
|
log.Infof("serving metrics endpoint at http://%s/metrics", server.bind) |
|
|
|
|
|
|
|
|
@ -447,7 +428,6 @@ func NewServer(bind string, options ...Option) (*Server, error) { |
|
|
|
|
server.initRoutes() |
|
|
|
|
|
|
|
|
|
go server.runStartupJobs() |
|
|
|
|
go server.setupSvcUser() |
|
|
|
|
|
|
|
|
|
return server, nil |
|
|
|
|
} |
|
|
|
|