74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package linkpearl
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha512"
|
|
"database/sql"
|
|
"encoding/hex"
|
|
|
|
"github.com/rs/zerolog"
|
|
"maunium.net/go/mautrix"
|
|
"maunium.net/go/mautrix/event"
|
|
)
|
|
|
|
// Config represents matrix config
|
|
type Config struct {
|
|
// Homeserver url
|
|
Homeserver string
|
|
// Login is a localpart for password auth or full mxid for shared secret auth (honoroit - for password, @honoroit:example.com - for shared secret)
|
|
Login string
|
|
// Password for login/password auth only
|
|
Password string
|
|
// Shared secret for login/sharedsecret auth only
|
|
SharedSecret string
|
|
|
|
// JoinPermit is a callback function that tells
|
|
// if linkpearl should respond to the given "invite" event
|
|
// and join the room
|
|
JoinPermit func(*event.Event) bool
|
|
|
|
// AutoLeave if true, linkpearl will automatically leave empty rooms
|
|
AutoLeave bool
|
|
|
|
// AccountDataCache size
|
|
AccountDataCache int
|
|
|
|
// AccountDataSecret (Password) for encryption
|
|
AccountDataSecret string
|
|
|
|
// MaxRetries for operations like auto join
|
|
MaxRetries int
|
|
|
|
// Logger
|
|
Logger zerolog.Logger
|
|
|
|
// DB object
|
|
DB *sql.DB
|
|
// Dialect of the DB: postgres, sqlite3
|
|
Dialect string
|
|
}
|
|
|
|
// LoginAs for cryptohelper
|
|
func (cfg *Config) LoginAs() *mautrix.ReqLogin {
|
|
loginReq := mautrix.ReqLogin{
|
|
Identifier: mautrix.UserIdentifier{
|
|
Type: mautrix.IdentifierTypeUser,
|
|
User: cfg.Login,
|
|
},
|
|
StoreCredentials: true,
|
|
StoreHomeserverURL: true,
|
|
}
|
|
|
|
if cfg.SharedSecret != "" {
|
|
loginReq.Type = mautrix.AuthTypeDevtureSharedSecret
|
|
mac := hmac.New(sha512.New, []byte(cfg.SharedSecret))
|
|
mac.Write([]byte(cfg.Login))
|
|
loginReq.Token = hex.EncodeToString(mac.Sum(nil))
|
|
} else {
|
|
loginReq.Type = mautrix.AuthTypePassword
|
|
loginReq.Password = cfg.Password
|
|
}
|
|
|
|
return &loginReq
|
|
}
|