1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package registration
- import (
- "fmt"
- "os"
- "regexp"
- "maunium.net/go/mautrix/appservice"
- "go.mau.fi/mautrix-discord/config"
- "go.mau.fi/mautrix-discord/globals"
- )
- type Cmd struct {
- Filename string `kong:"flag,help='The filename to store the registration into',name='REGISTRATION',short='r',default='registration.yaml'"`
- Force bool `kong:"flag,help='Overwrite an existing registration file if it already exists',short='f',default='0'"`
- }
- func (c *Cmd) Run(g *globals.Globals) error {
- // Check if the file exists before blinding overwriting it.
- if _, err := os.Stat(c.Filename); err == nil {
- if c.Force == false {
- return fmt.Errorf("file %q exists, use -f to overwrite", c.Filename)
- }
- }
- cfg, err := config.FromFile(g.Config)
- if err != nil {
- return err
- }
- registration := appservice.CreateRegistration()
- // Load existing values from the config into the registration.
- if err := cfg.CopyToRegistration(registration); err != nil {
- return err
- }
- // Save the new App and Server tokens in the config.
- cfg.Appservice.ASToken = registration.AppToken
- cfg.Appservice.HSToken = registration.ServerToken
- // Workaround for https://github.com/matrix-org/synapse/pull/5758
- registration.SenderLocalpart = appservice.RandomString(32)
- // Register the bot's user.
- pattern := fmt.Sprintf(
- "^@%s:%s$",
- cfg.Appservice.Bot.Username,
- cfg.Homeserver.Domain,
- )
- botRegex, err := regexp.Compile(pattern)
- if err != nil {
- return err
- }
- registration.Namespaces.RegisterUserIDs(botRegex, true)
- // Finally save the registration and the updated config file.
- if err := registration.Save(c.Filename); err != nil {
- return err
- }
- if err := cfg.Save(g.Config); err != nil {
- return err
- }
- return nil
- }
|