change muxrpc room.registerAlias to return the resolve URL
This commit is contained in:
parent
6e6a8e4910
commit
0065312db1
|
@ -123,8 +123,11 @@ func runroomsrv() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
if httpsDomain == "" && !development {
|
||||
return fmt.Errorf("https-domain can't be empty. See '%s -h' for a full list of options", os.Args[0])
|
||||
if httpsDomain == "" {
|
||||
if !development {
|
||||
return fmt.Errorf("https-domain can't be empty. See '%s -h' for a full list of options", os.Args[0])
|
||||
}
|
||||
httpsDomain = "dev.testing.local"
|
||||
}
|
||||
|
||||
// validate listen addresses to bail out on invalid flag input before doing anything else
|
||||
|
@ -204,6 +207,7 @@ func runroomsrv() error {
|
|||
roomsrv, err := mksrv.New(
|
||||
db.Members,
|
||||
db.Aliases,
|
||||
httpsDomain,
|
||||
opts...)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to instantiate ssb server: %w", err)
|
||||
|
|
|
@ -10,6 +10,8 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/web/router"
|
||||
|
||||
kitlog "github.com/go-kit/kit/log"
|
||||
"go.cryptoscope.co/muxrpc/v2"
|
||||
|
||||
|
@ -25,12 +27,16 @@ type Handler struct {
|
|||
self refs.FeedRef
|
||||
|
||||
db roomdb.AliasesService
|
||||
|
||||
roomDomain string // the http(s) domain of the room to signal alias addresses
|
||||
}
|
||||
|
||||
// New returns a fresh alias muxrpc handler
|
||||
func New(log kitlog.Logger, self refs.FeedRef, aliasesDB roomdb.AliasesService) Handler {
|
||||
func New(log kitlog.Logger, self refs.FeedRef, aliasesDB roomdb.AliasesService, roomDomain string) Handler {
|
||||
|
||||
var h Handler
|
||||
h.self = self
|
||||
h.roomDomain = roomDomain
|
||||
h.logger = log
|
||||
h.db = aliasesDB
|
||||
|
||||
|
@ -39,6 +45,8 @@ func New(log kitlog.Logger, self refs.FeedRef, aliasesDB roomdb.AliasesService)
|
|||
|
||||
const sigSuffix = ".sig.ed25519"
|
||||
|
||||
var httpRouter = router.CompleteApp()
|
||||
|
||||
// Register is an async muxrpc method handler for registering aliases.
|
||||
// It receives two string arguments over muxrpc (alias and signature),
|
||||
// checks the signature confirmation is correct (for this room and signed by the key of theconnection)
|
||||
|
@ -93,7 +101,14 @@ func (h Handler) Register(ctx context.Context, req *muxrpc.Request) (interface{}
|
|||
return nil, fmt.Errorf("registerAlias: could not register alias: %w", err)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
resolveURL, err := httpRouter.Get(router.CompleteAliasResolve).URL("alias", confirmation.Alias)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resolveURL.Host = h.roomDomain
|
||||
resolveURL.Scheme = "https"
|
||||
|
||||
return resolveURL.String(), nil
|
||||
}
|
||||
|
||||
// Revoke checks that the alias is from that user before revoking the alias from the database.
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"context"
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -96,10 +97,16 @@ func TestAliasRegister(t *testing.T) {
|
|||
// encode the signature as base64
|
||||
sig := base64.StdEncoding.EncodeToString(confirmation.Signature) + ".sig.ed25519"
|
||||
|
||||
var worked bool
|
||||
err = clientForServer.Async(ctx, &worked, muxrpc.TypeJSON, muxrpc.Method{"room", "registerAlias"}, "bob", sig)
|
||||
var registerResponse string
|
||||
err = clientForServer.Async(ctx, ®isterResponse, muxrpc.TypeString, muxrpc.Method{"room", "registerAlias"}, "bob", sig)
|
||||
r.NoError(err)
|
||||
a.True(worked)
|
||||
a.NotEqual("", registerResponse, "response isn't empty")
|
||||
|
||||
resolveURL, err := url.Parse(registerResponse)
|
||||
r.NoError(err)
|
||||
t.Log("got URL:", resolveURL)
|
||||
a.Equal("srv", resolveURL.Host)
|
||||
a.Equal("/bob", resolveURL.Path)
|
||||
|
||||
// server should have the alias now
|
||||
alias, err := serv.Aliases.Resolve(ctx, "bob")
|
||||
|
|
|
@ -88,7 +88,7 @@ func makeNamedTestBot(t testing.TB, name string, opts []roomsrv.Option) (roomdb.
|
|||
t.Log("db close failed: ", err)
|
||||
}
|
||||
})
|
||||
theBot, err := roomsrv.New(db.Members, db.Aliases, botOptions...)
|
||||
theBot, err := roomsrv.New(db.Members, db.Aliases, name, botOptions...)
|
||||
r.NoError(err)
|
||||
return db.Members, theBot
|
||||
}
|
||||
|
|
|
@ -26,12 +26,21 @@ func TestGoServerJSClientAliases(t *testing.T) {
|
|||
// allow all peers (there arent any we dont want to allow)
|
||||
membersDB.GetByFeedReturns(roomdb.Member{Nickname: "free4all"}, nil)
|
||||
|
||||
// setup mocks for this test
|
||||
aliasesDB.RegisterReturns(nil)
|
||||
|
||||
alice := ts.startJSClient("alice", "./testscripts/modern_aliases.js",
|
||||
srv.Network.GetListenAddr(),
|
||||
srv.Whoami(),
|
||||
)
|
||||
|
||||
time.Sleep(10 * time.Second)
|
||||
// the revoke call checks who the alias belongs to
|
||||
aliasesDB.ResolveReturns(roomdb.Alias{
|
||||
Name: "alice",
|
||||
Feed: alice,
|
||||
}, nil)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
// wait for both to exit
|
||||
ts.wait()
|
||||
|
|
|
@ -19,21 +19,18 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/roomdb"
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
"github.com/go-kit/kit/log"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.cryptoscope.co/muxrpc/v2/debug"
|
||||
"go.cryptoscope.co/netwrap"
|
||||
refs "go.mindeco.de/ssb-refs"
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/maybemod/testutils"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/roomdb"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/roomsrv"
|
||||
refs "go.mindeco.de/ssb-refs"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -120,7 +117,7 @@ func (ts *testSession) startGoServer(
|
|||
}),
|
||||
)
|
||||
|
||||
srv, err := roomsrv.New(membersDB, aliasDB, opts...)
|
||||
srv, err := roomsrv.New(membersDB, aliasDB, "go.test.room.server", opts...)
|
||||
r.NoError(err, "failed to init tees a server")
|
||||
ts.t.Logf("go server: %s", srv.Whoami().Ref())
|
||||
ts.t.Cleanup(func() {
|
||||
|
|
|
@ -28,6 +28,7 @@ func (s *Server) initHandlers(aliasDB roomdb.AliasesService) {
|
|||
kitlog.With(s.logger, "unit", "aliases"),
|
||||
s.Whoami(),
|
||||
aliasDB,
|
||||
s.domain,
|
||||
)
|
||||
|
||||
// register muxrpc commands
|
||||
|
|
|
@ -45,6 +45,8 @@ type Server struct {
|
|||
wsAddr string
|
||||
dialer netwrap.Dialer
|
||||
|
||||
domain string // the DNS domain name of the room
|
||||
|
||||
loadUnixSock bool
|
||||
|
||||
repo repo.Interface
|
||||
|
@ -73,6 +75,7 @@ func (s Server) Whoami() refs.FeedRef {
|
|||
func New(
|
||||
membersdb roomdb.MembersService,
|
||||
aliasdb roomdb.AliasesService,
|
||||
domainName string,
|
||||
opts ...Option,
|
||||
) (*Server, error) {
|
||||
var s Server
|
||||
|
@ -81,6 +84,8 @@ func New(
|
|||
s.Members = membersdb
|
||||
s.Aliases = aliasdb
|
||||
|
||||
s.domain = domainName
|
||||
|
||||
for i, opt := range opts {
|
||||
err := opt(&s)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue