bot: Add linking command

This commit is contained in:
Kevin Kandlbinder 2022-03-24 16:45:27 +01:00
parent 4f587820d1
commit 01fc6a3a1f
2 changed files with 53 additions and 0 deletions

View file

@ -19,7 +19,9 @@ package bot
import (
"context"
"github.com/Unkn0wnCat/matrix-veles/internal/db"
"github.com/Unkn0wnCat/matrix-veles/internal/tracer"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.opentelemetry.io/otel/attribute"
"log"
"maunium.net/go/mautrix"
@ -61,11 +63,46 @@ func handleCommand(command string, sender id.UserID, id id.RoomID, client *mautr
return
}
if strings.HasPrefix(command, "link ") {
commandLink(sender, id, client, strings.TrimPrefix(command, "link "))
return
}
// No match :( - display help
commandHelp(sender, id, client)
return
}
func commandLink(userId id.UserID, id id.RoomID, client *mautrix.Client, linkId string) {
linkId = strings.Trim(linkId, " \n\r")
linkIdP, err := primitive.ObjectIDFromHex(linkId)
if err != nil {
_, _ = client.SendNotice(id, "Invalid Link ID")
return
}
user, err := db.GetUserByID(linkIdP)
if err != nil {
_, _ = client.SendNotice(id, "Invalid Link ID")
return
}
err = user.ValidateMXID(userId.String())
if err != nil {
_, _ = client.SendNotice(id, "No matching link request pending")
return
}
err = db.SaveUser(user)
if err != nil {
_, _ = client.SendNotice(id, "Database error")
return
}
_, _ = client.SendNotice(id, "Successfully linked")
}
func commandHelp(_ id.UserID, id id.RoomID, client *mautrix.Client) {
// TODO: Improve help message

View file

@ -2,8 +2,10 @@ package model
import (
"encoding/base64"
"errors"
"go.mongodb.org/mongo-driver/bson/primitive"
"golang.org/x/crypto/bcrypt"
"strings"
)
type DBUser struct {
@ -20,6 +22,20 @@ type DBUser struct {
Password *string `bson:"-" json:"-"` // Password may never be sent out!
}
func (usr *DBUser) ValidateMXID(mxid string) error {
for i, pendingMxid := range usr.PendingMatrixLinks {
if strings.EqualFold(*pendingMxid, mxid) {
usr.PendingMatrixLinks = append(usr.PendingMatrixLinks[:i], usr.PendingMatrixLinks[i+1:]...)
usr.MatrixLinks = append(usr.MatrixLinks, &mxid)
return nil
}
}
return errors.New("not pending")
}
func (usr *DBUser) HashPassword() error {
if usr.Password == nil {
return nil