Load users from the database during startup

This commit is contained in:
Gary Kramlich
2022-01-05 14:59:35 -06:00
parent aa7059b1e3
commit de1f524e25
5 changed files with 60 additions and 8 deletions

View File

@@ -141,6 +141,8 @@ func (b *Bridge) Start() error {
go b.updateBotProfile()
go b.startUsers()
// Finally tell the appservice we're ready
b.as.Ready = true

View File

@@ -123,7 +123,7 @@ func (l *loginCmd) Run(g *globals) error {
return err
}
if err := g.user.login(user.Token); err != nil {
if err := g.user.Login(user.Token); err != nil {
fmt.Println(g.context.Stdout, "failed to login", err)
return err

View File

@@ -74,6 +74,36 @@ func (b *Bridge) NewUser(dbUser *database.User) *User {
return user
}
func (b *Bridge) getAllUsers() []*User {
b.usersLock.Lock()
defer b.usersLock.Unlock()
dbUsers := b.db.User.GetAll()
users := make([]*User, len(dbUsers))
for idx, dbUser := range dbUsers {
user, ok := b.usersByMXID[dbUser.MXID]
if !ok {
user = b.loadUser(dbUser, nil)
}
users[idx] = user
}
return users
}
func (b *Bridge) startUsers() {
b.log.Debugln("Starting users")
for _, user := range b.getAllUsers() {
// if user.ID != "" {
// haveSessions = true
// }
go user.Connect()
}
}
func (u *User) SetManagementRoom(roomID id.RoomID) {
u.bridge.managementRoomsLock.Lock()
defer u.bridge.managementRoomsLock.Unlock()
@@ -137,12 +167,16 @@ func (u *User) uploadQRCode(code string) (id.ContentURI, error) {
return resp.ContentURI, nil
}
func (u *User) login(token string) error {
err := u.User.Login(token)
func (u *User) Login(token string) error {
err := u.User.NewSession(token)
if err != nil {
return err
}
return u.Connect()
}
func (u *User) Connect() error {
u.User.Session.AddHandler(u.messageHandler)
u.log.Warnln("logged in, opening websocket")