move NetworkInfo to network package
... and implement MultiserverAddress() there.
This commit is contained in:
parent
52e8ad078d
commit
921626b829
|
@ -31,6 +31,7 @@ import (
|
|||
"github.com/unrolled/secure"
|
||||
"go.cryptoscope.co/muxrpc/v2/debug"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/repo"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/signinwithssb"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/roomdb/sqlite"
|
||||
|
@ -248,7 +249,7 @@ func runroomsrv() error {
|
|||
webHandler, err := handlers.New(
|
||||
kitlog.With(log, "package", "web"),
|
||||
repo.New(repoDir),
|
||||
handlers.NetworkInfo{
|
||||
network.ServerEndpointDetails{
|
||||
Domain: httpsDomain,
|
||||
PortHTTPS: uint(portHTTP),
|
||||
PortMUXRPC: uint(portMUXRPC),
|
||||
|
|
|
@ -4,7 +4,9 @@ package network
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
|
@ -16,6 +18,24 @@ import (
|
|||
refs "go.mindeco.de/ssb-refs"
|
||||
)
|
||||
|
||||
// ServerEndpointDetails encapsulates the endpoint information.
|
||||
// Like domain name of the room, it's ssb/secret-handshake public key and the HTTP and MUXRPC TCP ports.
|
||||
type ServerEndpointDetails struct {
|
||||
PortMUXRPC uint
|
||||
PortHTTPS uint // 0 assumes default (443)
|
||||
|
||||
RoomID refs.FeedRef
|
||||
|
||||
Domain string
|
||||
}
|
||||
|
||||
// MultiserverAddress returns net:domain:muxport~shs:roomPubKeyInBase64
|
||||
// ie: the room servers https://github.com/ssbc/multiserver-address
|
||||
func (sed ServerEndpointDetails) MultiserverAddress() string {
|
||||
var roomPubKey = base64.StdEncoding.EncodeToString(sed.RoomID.PubKey())
|
||||
return fmt.Sprintf("net:%s:%d~shs:%s", sed.Domain, sed.PortMUXRPC, roomPubKey)
|
||||
}
|
||||
|
||||
// EndpointStat gives some information about a connected peer
|
||||
type EndpointStat struct {
|
||||
ID *refs.FeedRef
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package network
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
refs "go.mindeco.de/ssb-refs"
|
||||
)
|
||||
|
||||
func TestMultiserverAddress(t *testing.T) {
|
||||
a := assert.New(t)
|
||||
|
||||
var sed ServerEndpointDetails
|
||||
sed.Domain = "the.ho.st"
|
||||
sed.PortMUXRPC = 8008
|
||||
|
||||
sed.RoomID = refs.FeedRef{
|
||||
ID: bytes.Repeat([]byte("ohai"), 8),
|
||||
Algo: "doesnt-matter", // not part of msaddr v1
|
||||
}
|
||||
|
||||
gotMultiAddr := sed.MultiserverAddress()
|
||||
|
||||
a.Equal("net:the.ho.st:8008~shs:b2hhaW9oYWlvaGFpb2hhaW9oYWlvaGFpb2hhaW9oYWk=", gotMultiAddr)
|
||||
a.True(strings.HasPrefix(gotMultiAddr, "net:the.ho.st:8008~shs:"), "not for the test host? %s", gotMultiAddr)
|
||||
a.True(strings.HasSuffix(gotMultiAddr, base64.StdEncoding.EncodeToString(sed.RoomID.PubKey())), "public key missing? %s", gotMultiAddr)
|
||||
|
||||
}
|
|
@ -11,9 +11,9 @@ import (
|
|||
|
||||
"github.com/gorilla/mux"
|
||||
"go.mindeco.de/http/render"
|
||||
refs "go.mindeco.de/ssb-refs"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/aliases"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/roomdb"
|
||||
)
|
||||
|
||||
|
@ -23,8 +23,7 @@ type aliasHandler struct {
|
|||
|
||||
db roomdb.AliasesService
|
||||
|
||||
muxrpcHostAndPort string
|
||||
roomID refs.FeedRef
|
||||
roomEndpoint network.ServerEndpointDetails
|
||||
}
|
||||
|
||||
func (a aliasHandler) resolve(rw http.ResponseWriter, req *http.Request) {
|
||||
|
@ -38,7 +37,7 @@ func (a aliasHandler) resolve(rw http.ResponseWriter, req *http.Request) {
|
|||
ar = newAliasHTMLResponder(a.r, rw, req)
|
||||
}
|
||||
|
||||
ar.UpdateRoomInfo(a.muxrpcHostAndPort, a.roomID)
|
||||
ar.UpdateRoomInfo(a.roomEndpoint)
|
||||
|
||||
name := mux.Vars(req)["alias"]
|
||||
if name == "" && !aliases.IsValid(name) {
|
||||
|
@ -61,7 +60,7 @@ type aliasResponder interface {
|
|||
SendConfirmation(roomdb.Alias)
|
||||
SendError(error)
|
||||
|
||||
UpdateRoomInfo(hostAndPort string, roomID refs.FeedRef)
|
||||
UpdateRoomInfo(netInfo network.ServerEndpointDetails)
|
||||
}
|
||||
|
||||
// aliasJSONResponse dictates the field names and format of the JSON response for the alias web endpoint
|
||||
|
@ -78,8 +77,7 @@ type aliasJSONResponse struct {
|
|||
type aliasJSONResponder struct {
|
||||
enc *json.Encoder
|
||||
|
||||
roomID refs.FeedRef
|
||||
multiservAddr string
|
||||
netInfo network.ServerEndpointDetails
|
||||
}
|
||||
|
||||
func newAliasJSONResponder(rw http.ResponseWriter) aliasResponder {
|
||||
|
@ -89,18 +87,15 @@ func newAliasJSONResponder(rw http.ResponseWriter) aliasResponder {
|
|||
}
|
||||
}
|
||||
|
||||
func (json *aliasJSONResponder) UpdateRoomInfo(hostAndPort string, roomID refs.FeedRef) {
|
||||
json.roomID = roomID
|
||||
|
||||
roomPubKey := base64.StdEncoding.EncodeToString(roomID.PubKey())
|
||||
json.multiservAddr = fmt.Sprintf("net:%s~shs:%s", hostAndPort, roomPubKey)
|
||||
func (json *aliasJSONResponder) UpdateRoomInfo(netInfo network.ServerEndpointDetails) {
|
||||
json.netInfo = netInfo
|
||||
}
|
||||
|
||||
func (json aliasJSONResponder) SendConfirmation(alias roomdb.Alias) {
|
||||
var resp = aliasJSONResponse{
|
||||
Status: "successful",
|
||||
RoomID: json.roomID.Ref(),
|
||||
Address: json.multiservAddr,
|
||||
RoomID: json.netInfo.RoomID.Ref(),
|
||||
Address: json.netInfo.MultiserverAddress(),
|
||||
Alias: alias.Name,
|
||||
UserID: alias.Feed.Ref(),
|
||||
Signature: base64.StdEncoding.EncodeToString(alias.Signature),
|
||||
|
@ -121,8 +116,7 @@ type aliasHTMLResponder struct {
|
|||
rw http.ResponseWriter
|
||||
req *http.Request
|
||||
|
||||
roomID refs.FeedRef
|
||||
multiservAddr string
|
||||
netInfo network.ServerEndpointDetails
|
||||
}
|
||||
|
||||
func newAliasHTMLResponder(r *render.Renderer, rw http.ResponseWriter, req *http.Request) aliasResponder {
|
||||
|
@ -133,11 +127,8 @@ func newAliasHTMLResponder(r *render.Renderer, rw http.ResponseWriter, req *http
|
|||
}
|
||||
}
|
||||
|
||||
func (html *aliasHTMLResponder) UpdateRoomInfo(hostAndPort string, roomID refs.FeedRef) {
|
||||
html.roomID = roomID
|
||||
|
||||
roomPubKey := base64.StdEncoding.EncodeToString(roomID.PubKey())
|
||||
html.multiservAddr = fmt.Sprintf("net:%s~shs:%s", hostAndPort, roomPubKey)
|
||||
func (html *aliasHTMLResponder) UpdateRoomInfo(netInfo network.ServerEndpointDetails) {
|
||||
html.netInfo = netInfo
|
||||
}
|
||||
|
||||
func (html aliasHTMLResponder) SendConfirmation(alias roomdb.Alias) {
|
||||
|
@ -145,11 +136,11 @@ func (html aliasHTMLResponder) SendConfirmation(alias roomdb.Alias) {
|
|||
// construct the ssb:experimental?action=consume-alias&... uri for linking into apps
|
||||
queryParams := url.Values{}
|
||||
queryParams.Set("action", "consume-alias")
|
||||
queryParams.Set("roomId", html.roomID.Ref())
|
||||
queryParams.Set("roomId", html.netInfo.RoomID.Ref())
|
||||
queryParams.Set("alias", alias.Name)
|
||||
queryParams.Set("userId", alias.Feed.Ref())
|
||||
queryParams.Set("signature", base64.URLEncoding.EncodeToString(alias.Signature))
|
||||
queryParams.Set("multiserverAddress", html.multiservAddr)
|
||||
queryParams.Set("multiserverAddress", html.netInfo.MultiserverAddress())
|
||||
|
||||
// html.multiservAddr
|
||||
ssbURI := url.URL{
|
||||
|
|
|
@ -60,8 +60,10 @@ const sessionLifetime = time.Hour * 24
|
|||
type WithSSBHandler struct {
|
||||
render *render.Renderer
|
||||
|
||||
roomID refs.FeedRef
|
||||
muxrpcHostAndPort string
|
||||
// roomID refs.FeedRef
|
||||
// muxrpcHostAndPort string
|
||||
|
||||
netInfo network.ServerEndpointDetails
|
||||
|
||||
membersdb roomdb.MembersService
|
||||
aliasesdb roomdb.AliasesService
|
||||
|
@ -77,8 +79,7 @@ type WithSSBHandler struct {
|
|||
func NewWithSSBHandler(
|
||||
m *mux.Router,
|
||||
r *render.Renderer,
|
||||
roomID refs.FeedRef,
|
||||
muxrpcHostAndPort string,
|
||||
netInfo network.ServerEndpointDetails,
|
||||
endpoints network.Endpoints,
|
||||
aliasDB roomdb.AliasesService,
|
||||
membersDB roomdb.MembersService,
|
||||
|
@ -89,8 +90,7 @@ func NewWithSSBHandler(
|
|||
|
||||
var ssb WithSSBHandler
|
||||
ssb.render = r
|
||||
ssb.roomID = roomID
|
||||
ssb.muxrpcHostAndPort = muxrpcHostAndPort
|
||||
ssb.netInfo = netInfo
|
||||
ssb.aliasesdb = aliasDB
|
||||
ssb.membersdb = membersDB
|
||||
ssb.endpoints = endpoints
|
||||
|
@ -261,7 +261,7 @@ func (h WithSSBHandler) clientInitiated(w http.ResponseWriter, req *http.Request
|
|||
queryParams := req.URL.Query()
|
||||
|
||||
var payload signinwithssb.ClientPayload
|
||||
payload.ServerID = h.roomID // fill in the server
|
||||
payload.ServerID = h.netInfo.RoomID // fill in the server
|
||||
|
||||
// validate and update client challenge
|
||||
cc := queryParams.Get("cc")
|
||||
|
@ -345,11 +345,9 @@ func (h WithSSBHandler) serverInitiated() (templateData, error) {
|
|||
// https://ssb-ngi-pointer.github.io/ssb-http-auth-spec/#list-of-new-ssb-uris
|
||||
var queryParams = make(url.Values)
|
||||
queryParams.Set("action", "start-http-auth")
|
||||
queryParams.Set("sid", h.roomID.Ref())
|
||||
queryParams.Set("sid", h.netInfo.RoomID.Ref())
|
||||
queryParams.Set("sc", sc)
|
||||
var roomPubKey = base64.StdEncoding.EncodeToString(h.roomID.PubKey())
|
||||
var msaddr = fmt.Sprintf("net:%s~shs:%s", h.muxrpcHostAndPort, roomPubKey)
|
||||
queryParams.Set("multiserverAddress", msaddr)
|
||||
queryParams.Set("multiserverAddress", h.netInfo.MultiserverAddress())
|
||||
|
||||
var startAuthURI url.URL
|
||||
startAuthURI.Scheme = "ssb"
|
||||
|
|
|
@ -30,7 +30,6 @@ import (
|
|||
"github.com/ssb-ngi-pointer/go-ssb-room/web/i18n"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/web/members"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/web/router"
|
||||
refs "go.mindeco.de/ssb-refs"
|
||||
)
|
||||
|
||||
var HTMLTemplates = []string{
|
||||
|
@ -57,21 +56,11 @@ type Databases struct {
|
|||
PinnedNotices roomdb.PinnedNoticesService
|
||||
}
|
||||
|
||||
// NetworkInfo encapsulates the domain name of the room, it's ssb/secret-handshake public key and the HTTP and MUXRPC TCP ports.
|
||||
type NetworkInfo struct {
|
||||
PortMUXRPC uint
|
||||
PortHTTPS uint // 0 assumes default (443)
|
||||
|
||||
RoomID refs.FeedRef
|
||||
|
||||
Domain string
|
||||
}
|
||||
|
||||
// New initializes the whole web stack for rooms, with all the sub-modules and routing.
|
||||
func New(
|
||||
logger logging.Interface,
|
||||
repo repo.Interface,
|
||||
netInfo NetworkInfo,
|
||||
netInfo network.ServerEndpointDetails,
|
||||
roomState *roomstate.Manager,
|
||||
roomEndpoints network.Endpoints,
|
||||
bridge *signinwithssb.SignalBridge,
|
||||
|
@ -236,8 +225,7 @@ func New(
|
|||
authWithSSB := roomsAuth.NewWithSSBHandler(
|
||||
m,
|
||||
r,
|
||||
netInfo.RoomID,
|
||||
muxrpcHostAndPort,
|
||||
netInfo,
|
||||
roomEndpoints,
|
||||
dbs.Aliases,
|
||||
dbs.Members,
|
||||
|
@ -306,8 +294,7 @@ func New(
|
|||
|
||||
db: dbs.Aliases,
|
||||
|
||||
roomID: netInfo.RoomID,
|
||||
muxrpcHostAndPort: muxrpcHostAndPort,
|
||||
roomEndpoint: netInfo,
|
||||
}
|
||||
m.Get(router.CompleteAliasResolve).HandlerFunc(ah.resolve)
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"go.mindeco.de/http/tester"
|
||||
"go.mindeco.de/logging/logtest"
|
||||
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/network/mocked"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/repo"
|
||||
"github.com/ssb-ngi-pointer/go-ssb-room/internal/signinwithssb"
|
||||
|
@ -49,7 +50,7 @@ type testSession struct {
|
|||
|
||||
SignalBridge *signinwithssb.SignalBridge
|
||||
|
||||
NetworkInfo NetworkInfo
|
||||
NetworkInfo network.ServerEndpointDetails
|
||||
}
|
||||
|
||||
var testI18N = justTheKeys()
|
||||
|
@ -85,7 +86,7 @@ func setup(t *testing.T) *testSession {
|
|||
|
||||
ts.MockedEndpoints = new(mocked.FakeEndpoints)
|
||||
|
||||
ts.NetworkInfo = NetworkInfo{
|
||||
ts.NetworkInfo = network.ServerEndpointDetails{
|
||||
Domain: "localhost",
|
||||
PortMUXRPC: 8008,
|
||||
PortHTTPS: 443,
|
||||
|
|
Loading…
Reference in New Issue