Skip to content

Commit

Permalink
Add logout method and update message interface
Browse files Browse the repository at this point in the history
  • Loading branch information
tulir committed Jun 5, 2024
1 parent 69de6af commit 204824b
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 18 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ require (
golang.org/x/net v0.25.0
google.golang.org/protobuf v1.34.1
gopkg.in/yaml.v3 v3.0.1
maunium.net/go/mautrix v0.18.2-0.20240603193336-a599b15466ae
maunium.net/go/mautrix v0.18.2-0.20240605105031-218ed06e73f6
nhooyr.io/websocket v1.8.11
)

Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
maunium.net/go/mautrix v0.18.2-0.20240603193336-a599b15466ae h1:PlT6saNJNjRT3i04LNLsFAC5ewZU1HrxBSM4V/Aze7k=
maunium.net/go/mautrix v0.18.2-0.20240603193336-a599b15466ae/go.mod h1:P/FV8cXY262MezYX7ViuhfzeJ0nK4+M8K6ZmxEC/aEA=
maunium.net/go/mautrix v0.18.2-0.20240605105031-218ed06e73f6 h1:JkMk5Urz1niqsqOVWhoHculon2FSVrITM1g1iVMcxhU=
maunium.net/go/mautrix v0.18.2-0.20240605105031-218ed06e73f6/go.mod h1:P/FV8cXY262MezYX7ViuhfzeJ0nK4+M8K6ZmxEC/aEA=
nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0=
nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=
27 changes: 20 additions & 7 deletions pkg/connector/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,17 @@ type SignalClient struct {
Client *signalmeow.Client
}

func (s *SignalClient) LogoutRemote(ctx context.Context) {
err := s.Client.StopReceiveLoops()
if err != nil {
zerolog.Ctx(ctx).Err(err).Msg("Failed to stop receive loops for logout")
}
err = s.Main.Store.DeleteDevice(context.TODO(), &s.Client.Store.DeviceData)
if err != nil {
zerolog.Ctx(ctx).Err(err).Msg("Failed to delete device from store")
}
}

func (s *SignalClient) contactToUserInfo(contact *types.Recipient) *bridgev2.UserInfo {
isBot := false
ui := &bridgev2.UserInfo{
Expand Down Expand Up @@ -409,10 +420,10 @@ type msgconvContext struct {
ReplyTo *database.Message
}

func (s *SignalClient) convertMessage(ctx context.Context, portal *bridgev2.Portal, data *events.ChatEvent) (*bridgev2.ConvertedMessage, error) {
func (s *SignalClient) convertMessage(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data *events.ChatEvent) (*bridgev2.ConvertedMessage, error) {
mcCtx := &msgconvContext{
Connector: s.Main,
Intent: s.Main.Bridge.Bot, // TODO get correct intent?
Intent: intent,
Client: s,
Portal: portal,
}
Expand All @@ -437,11 +448,11 @@ func (s *SignalClient) convertMessage(ctx context.Context, portal *bridgev2.Port

}
return &bridgev2.ConvertedMessage{
ID: makeMessageID(data.Info.Sender, dataMsg.GetTimestamp()),
EventSender: s.makeEventSender(data.Info.Sender),
Timestamp: time.UnixMilli(int64(converted.Timestamp)),
ReplyTo: replyTo,
Parts: convertedParts,
//ID: makeMessageID(data.Info.Sender, dataMsg.GetTimestamp()),
//EventSender: s.makeEventSender(data.Info.Sender),
Timestamp: time.UnixMilli(int64(converted.Timestamp)),
ReplyTo: replyTo,
Parts: convertedParts,
}, nil
}

Expand All @@ -457,6 +468,8 @@ func (s *SignalClient) handleSignalEvent(rawEvt events.SignalEvent) {
Uint64("message_id", innerEvt.GetTimestamp()).
Stringer("sender_id", evt.Info.Sender)
},
ID: makeMessageID(evt.Info.Sender, innerEvt.GetTimestamp()),
Sender: s.makeEventSender(evt.Info.Sender),
PortalID: s.getPortalID(evt.Info.ChatID),
Data: evt,
CreatePortal: true,
Expand Down
32 changes: 24 additions & 8 deletions pkg/connector/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ func (s *SignalConnector) CreateLogin(ctx context.Context, user *bridgev2.User,

type QRLogin struct {
User *bridgev2.User
Existing *bridgev2.UserLogin
Main *SignalConnector
cancelChan context.CancelFunc
ProvChan chan signalmeow.ProvisioningResponse
Expand Down Expand Up @@ -114,6 +115,10 @@ func (qr *QRLogin) Wait(ctx context.Context) (*bridgev2.LoginStep, error) {
case <-ctx.Done():
return nil, ctx.Err()
}
newLoginID := makeUserLoginID(signalID)
if qr.Existing != nil && qr.Existing.ID != newLoginID {
return nil, fmt.Errorf("user ID mismatch for re-auth")
}

select {
case resp := <-qr.ProvChan:
Expand All @@ -126,14 +131,25 @@ func (qr *QRLogin) Wait(ctx context.Context) (*bridgev2.LoginStep, error) {
return nil, ctx.Err()
}

ul, err := qr.User.NewLogin(ctx, &database.UserLogin{
ID: makeUserLoginID(signalID),
Metadata: map[string]any{
"phone": signalPhone,
},
}, nil)
if err != nil {
return nil, fmt.Errorf("failed to save new login: %w", err)
var ul *bridgev2.UserLogin
var err error
if qr.Existing == nil {
ul, err = qr.User.NewLogin(ctx, &database.UserLogin{
ID: newLoginID,
Metadata: map[string]any{
"phone": signalPhone,
},
}, nil)
if err != nil {
return nil, fmt.Errorf("failed to save new login: %w", err)
}
} else {
ul = qr.Existing
ul.Metadata["phone"] = signalPhone
err = ul.Save(ctx)
if err != nil {
return nil, fmt.Errorf("failed to update existing login: %w", err)
}
}
backgroundCtx := ul.Log.WithContext(context.Background())
err = qr.Main.LoadUserLogin(backgroundCtx, ul)
Expand Down

0 comments on commit 204824b

Please sign in to comment.