Broadcast new orders to allowed rooms
This commit is contained in:
parent
b2a097c6ae
commit
8e608f0f17
|
@ -120,6 +120,52 @@ func (c *Client) Sync(ctx context.Context, wg *sync.WaitGroup) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Broadcast(message *event.MessageEventContent) {
|
||||||
|
content := event.Content{Parsed: message}
|
||||||
|
|
||||||
|
for _, roomID := range c.store.FindAllSharedRooms(c.userID) {
|
||||||
|
allowed := false
|
||||||
|
for _, room := range c.config.AllowedRooms {
|
||||||
|
if room == roomID.String() {
|
||||||
|
allowed = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !allowed {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.store.IsEncrypted(roomID) {
|
||||||
|
encrypted, err := c.olmMachine.EncryptMegolmEvent(roomID, event.EventMessage, &content)
|
||||||
|
if err == crypto.NoGroupSession || err == crypto.SessionExpired || err == crypto.SessionNotShared {
|
||||||
|
err = c.olmMachine.ShareGroupSession(roomID, c.store.GetRoomMembers(roomID))
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
encrypted, err = c.olmMachine.EncryptMegolmEvent(roomID, event.EventMessage, &content)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = c.client.SendMessageEvent(roomID, event.EventEncrypted, encrypted)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_, err := c.client.SendMessageEvent(roomID, event.EventMessage, &content)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) handleMemberEvent(source mautrix.EventSource, evt *event.Event) {
|
func (c *Client) handleMemberEvent(source mautrix.EventSource, evt *event.Event) {
|
||||||
if c.olmMachine != nil {
|
if c.olmMachine != nil {
|
||||||
c.olmMachine.HandleMemberEvent(evt)
|
c.olmMachine.HandleMemberEvent(evt)
|
||||||
|
|
|
@ -156,6 +156,50 @@ func (s sqlStore) FindSharedRooms(userID id.UserID) (sharedRooms []id.RoomID) {
|
||||||
return sharedRooms
|
return sharedRooms
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s sqlStore) FindAllSharedRooms(userID id.UserID) (sharedRooms []id.RoomID) {
|
||||||
|
rows, err := s.db.Query("SELECT room_id FROM room_members GROUP BY room_id HAVING COUNT(*) > 1;")
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var roomID string
|
||||||
|
if err := rows.Scan(&roomID); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sharedRooms = append(sharedRooms, id.RoomID(roomID))
|
||||||
|
}
|
||||||
|
if rows.Err() != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return sharedRooms
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s sqlStore) GetRoomMembers(roomID id.RoomID) (roomMembers []id.UserID) {
|
||||||
|
rows, err := s.db.Query("SELECT user_id FROM room_members WHERE room_id = ?;", roomID)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var userID string
|
||||||
|
if err := rows.Scan(&userID); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
roomMembers = append(roomMembers, id.UserID(userID))
|
||||||
|
}
|
||||||
|
if rows.Err() != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return roomMembers
|
||||||
|
}
|
||||||
|
|
||||||
func (s sqlStore) SetMembership(roomID id.RoomID, userID string, membership event.Membership) {
|
func (s sqlStore) SetMembership(roomID id.RoomID, userID string, membership event.Membership) {
|
||||||
if membership.IsInviteOrJoin() {
|
if membership.IsInviteOrJoin() {
|
||||||
_, err := s.db.Exec("INSERT INTO room_members VALUES(?, ?);", roomID, userID)
|
_, err := s.db.Exec("INSERT INTO room_members VALUES(?, ?);", roomID, userID)
|
||||||
|
|
|
@ -3,9 +3,10 @@ package pretix
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"maunium.net/go/mautrix/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -93,6 +94,11 @@ func (s Server) orderPlaced(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if rowsAffected > 0 && order.Datetime.Add(72 * time.Hour).After(time.Now()) { // pretix retries failed webhooks for up to three days
|
if rowsAffected > 0 && order.Datetime.Add(72 * time.Hour).After(time.Now()) { // pretix retries failed webhooks for up to three days
|
||||||
log.Print(order)
|
message := event.MessageEventContent{
|
||||||
|
MsgType: event.MsgText,
|
||||||
|
Body: fmt.Sprintf("%+v", order),
|
||||||
|
}
|
||||||
|
|
||||||
|
s.matrix.Broadcast(&message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue