Skip to content
This repository has been archived by the owner on Jan 2, 2025. It is now read-only.

Commit

Permalink
wip(daemon): backend cleanup + daemon API
Browse files Browse the repository at this point in the history
  • Loading branch information
juligasa committed Jun 21, 2024
1 parent e142c03 commit 1df0a2c
Show file tree
Hide file tree
Showing 73 changed files with 2,620 additions and 1,877 deletions.
10 changes: 6 additions & 4 deletions backend/cmd/mkdb/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"fmt"
"os"
"seed/backend/config"
"seed/backend/core"
"seed/backend/core/coretest"
"seed/backend/daemon"
"seed/backend/daemon/storage"
Expand Down Expand Up @@ -39,17 +40,18 @@ func run() error {
return err
}

dir, err := storage.InitRepo(cfg.Base.DataDir, alice.Device.Wrapped(), cfg.LogLevel)
dir, err := storage.Open(cfg.Base.DataDir, alice.Device.Wrapped(), core.NewMemoryKeyStore(), cfg.LogLevel)
if err != nil {
return err
}
defer dir.Close()

app, err := daemon.Load(ctx, cfg, dir, "debug")
if err != nil {
if err := dir.KeyStore().StoreKey(ctx, "main", alice.Account); err != nil {
return err
}

if err := app.RPC.Daemon.RegisterAccount(ctx, alice.Account); err != nil {
app, err := daemon.Load(ctx, cfg, dir)
if err != nil {
return err
}

Expand Down
File renamed without changes.
23 changes: 16 additions & 7 deletions backend/cmd/seed-daemon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
_ "net/http/pprof"

Check failure on line 11 in backend/cmd/seed-daemon/main.go

View workflow job for this annotation

GitHub Actions / lint-go

G108: Profiling endpoint is automatically exposed on /debug/pprof (gosec)

"seed/backend/config"
"seed/backend/core"
"seed/backend/daemon"
"seed/backend/daemon/storage"
"seed/backend/logging"
Expand Down Expand Up @@ -61,25 +62,33 @@ func main() {
return err
}

log := logging.New("seedd", cfg.LogLevel)
log := logging.New("seed-daemon", cfg.LogLevel)
if err := sentry.Init(sentry.ClientOptions{}); err != nil {
log.Debug("SentryInitError", zap.Error(err))
} else {
defer sentry.Flush(2 * time.Second)
}

dir, err := storage.InitRepo(cfg.Base.DataDir, nil, cfg.LogLevel)
keyStoreEnvironment := cfg.P2P.TestnetName
if keyStoreEnvironment == "" {
keyStoreEnvironment = "main"
}
ks := core.NewOSKeyStore(keyStoreEnvironment)

dir, err := storage.Open(cfg.Base.DataDir, nil, ks, cfg.LogLevel)
if err != nil {
return err
}
app, err := daemon.Load(ctx, cfg, dir, cfg.LogLevel,
grpc.ChainUnaryInterceptor(
defer dir.Close()

app, err := daemon.Load(ctx, cfg, dir,
daemon.WithGRPCServerOption(grpc.ChainUnaryInterceptor(
otelgrpc.UnaryServerInterceptor(),
daemon.GRPCDebugLoggingInterceptor(),
),
grpc.ChainStreamInterceptor(
)),
daemon.WithGRPCServerOption(grpc.ChainStreamInterceptor(
otelgrpc.StreamServerInterceptor(),
),
)),
)
if err != nil {
return err
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"os"

"seed/backend/cmd/seed-site/sites"
"seed/backend/core"
"seed/backend/daemon/storage"

"github.com/burdiyan/go/mainutil"
Expand Down Expand Up @@ -59,10 +60,17 @@ Flags:
return err
}

dir, err := storage.InitRepo(cfg.Base.DataDir, nil, cfg.LogLevel)
keyStoreEnvironment := cfg.P2P.TestnetName
if keyStoreEnvironment == "" {
keyStoreEnvironment = "main"
}
ks := core.NewOSKeyStore(keyStoreEnvironment)

dir, err := storage.Open(cfg.Base.DataDir, nil, ks, cfg.LogLevel)
if err != nil {
return err
}
defer dir.Close()

app, err := sites.Load(ctx, rawURL, cfg, dir)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"seed/backend/daemon"
"seed/backend/daemon/storage"
accounts "seed/backend/genproto/accounts/v1alpha"
groups "seed/backend/genproto/groups/v1alpha"
"seed/backend/hyper"
"seed/backend/mttnet"
"seed/backend/pkg/colx"
Expand All @@ -18,6 +19,7 @@ import (

"crawshaw.io/sqlite/sqlitex"
"github.com/multiformats/go-multiaddr"
"google.golang.org/grpc"
)

// App is the site daemon app.
Expand All @@ -30,7 +32,7 @@ type App struct {
}

// Load the site daemon.
func Load(ctx context.Context, address string, cfg config.Config, dir *storage.Dir) (*App, error) {
func Load(ctx context.Context, address string, cfg config.Config, dir *storage.Store) (*App, error) {
u, err := url.Parse(address)
if err != nil {
return nil, fmt.Errorf("failed to parse address: %w", err)
Expand All @@ -55,18 +57,18 @@ func Load(ctx context.Context, address string, cfg config.Config, dir *storage.D

site := NewServer(address, blobsPromise.ReadOnly, nodePromise.ReadOnly, dbPromise.ReadOnly, cfg.Syncing.AllowPush)

app, err := daemon.Load(ctx, cfg, dir, site, daemon.GenericHandler{
Path: "/.well-known/hypermedia-site",
Handler: site,
Mode: daemon.RouteNav,
})
app, err := daemon.Load(ctx, cfg, dir,
daemon.WithHTTPHandler("/.well-known/hypermedia-site", site, daemon.RouteNav),
daemon.WithP2PService(func(srv grpc.ServiceRegistrar) { groups.RegisterWebsiteServer(srv, site) }),
)

if err != nil {
return nil, err
}

// This is some ugly stuff. Site server needs some stuff that are passed from the daemon.
go func() {
if err := dbPromise.Resolve(app.DB); err != nil {
if err := dbPromise.Resolve(app.Storage.DB()); err != nil {
panic(err)
}

Expand All @@ -84,13 +86,14 @@ func Load(ctx context.Context, address string, cfg config.Config, dir *storage.D
}
}()

if _, ok := dir.Identity().Get(); !ok {
// If we don't have the key stored yet, we generate a new one and store it.
if _, err := app.Storage.KeyStore().GetKey(ctx, "main"); err != nil {
account, err := core.NewKeyPairRandom()
if err != nil {
return nil, fmt.Errorf("failed to generate random account key pair: %w", err)
}

if err := app.RPC.Daemon.RegisterAccount(ctx, account); err != nil {
if err := app.RPC.Daemon.RegisterAccount(ctx, "main", account); err != nil {
return nil, fmt.Errorf("failed to create registration: %w", err)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"errors"
"net"
"seed/backend/config"
"seed/backend/core"
"seed/backend/core/coretest"
"seed/backend/daemon"
"seed/backend/daemon/storage"
Expand Down Expand Up @@ -81,7 +82,7 @@ func TestSiteSync(t *testing.T) {
group, err = alice.RPC.Groups.UpdateGroup(ctx, &groups.UpdateGroupRequest{
Id: group.Id,
UpdatedMembers: map[string]groups.Role{
bob.Storage.Identity().MustGet().Account().Principal().String(): groups.Role_EDITOR,
must.Do2(bob.Storage.KeyStore().GetKey(ctx, "main")).String(): groups.Role_EDITOR,
},
})
require.NoError(t, err)
Expand Down Expand Up @@ -110,7 +111,7 @@ func TestSiteSync(t *testing.T) {
// Make sure referenced materials are correctly published.

bobOnSite, err := site.RPC.Accounts.GetAccount(ctx, &accounts.GetAccountRequest{
Id: bob.Storage.Identity().MustGet().Account().Principal().String(),
Id: must.Do2(bob.Storage.KeyStore().GetKey(ctx, "main")).String(),
})
require.NoError(t, err, "site must get bob's account from the group")
require.NotEqual(t, "", bobOnSite.Profile.Alias, "site must have bob's account because he's a member of the group")
Expand All @@ -122,12 +123,14 @@ func makeTestSite(t *testing.T, name string) *App {
user := coretest.NewTester(name)

cfg := testConfig(t)
dir, err := storage.InitRepo(cfg.Base.DataDir, user.Device.Wrapped(), "debug")
dir, err := storage.Open(cfg.Base.DataDir, user.Device.Wrapped(), core.NewMemoryKeyStore(), "debug")
require.NoError(t, err)

app, err := Load(ctx, "http://127.0.0.1:"+strconv.Itoa(cfg.HTTP.Port), cfg, dir)
require.NoError(t, err)
t.Cleanup(func() {
defer dir.Close()

cancel()
err := app.Wait()
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion backend/core/identity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ func TestSLIP10Derivation(t *testing.T) {
k, err := slip10.DeriveForPath(keyDerivationPath, seed)
require.NoError(t, err)

require.Equal(t, "6dba7f7e7d2e1e51072c601e2e35cdd7025cea3978c4ecc54068b84f0f666a40", hex.EncodeToString(k.Seed()))
require.Equal(t, "0dd692e7e203e73ef684b767e35396472c73c030593b6c1d05792c09331fb1fa", hex.EncodeToString(k.Seed()))
}
Loading

0 comments on commit 1df0a2c

Please sign in to comment.