Changeset 572 in code for trunk/user.go


Ignore:
Timestamp:
Jun 28, 2021, 4:05:03 PM (4 years ago)
Author:
contact
Message:

Introduce user.updateUser

Unify updatePassword and updateRealname into a single function. This
allows "user update" to be atomic.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/user.go

    r568 r572  
    857857}
    858858
    859 func (u *user) updatePassword(hashed string) error {
    860         u.User.Password = hashed
    861         return u.srv.db.StoreUser(&u.User)
    862 }
    863 
    864 func (u *user) updateRealname(realname string) error {
    865         u.User.Realname = realname
    866         if err := u.srv.db.StoreUser(&u.User); err != nil {
     859func (u *user) updateUser(record *User) error {
     860        if u.ID != record.ID {
     861                panic("ID mismatch when updating user")
     862        }
     863
     864        realnameUpdated := u.Realname != record.Realname
     865        if err := u.srv.db.StoreUser(record); err != nil {
    867866                return fmt.Errorf("failed to update user %q: %v", u.Username, err)
    868867        }
    869 
    870         // Re-connect to networks which use the default realname
    871         var needUpdate []Network
    872         u.forEachNetwork(func(net *network) {
    873                 if net.Realname == "" {
    874                         needUpdate = append(needUpdate, net.Network)
    875                 }
    876         })
    877 
    878         var netErr error
    879         for _, net := range needUpdate {
    880                 if _, err := u.updateNetwork(&net); err != nil {
    881                         netErr = err
    882                 }
    883         }
    884 
    885         return netErr
     868        u.User = *record
     869
     870        if realnameUpdated {
     871                // Re-connect to networks which use the default realname
     872                var needUpdate []Network
     873                u.forEachNetwork(func(net *network) {
     874                        if net.Realname == "" {
     875                                needUpdate = append(needUpdate, net.Network)
     876                        }
     877                })
     878
     879                var netErr error
     880                for _, net := range needUpdate {
     881                        if _, err := u.updateNetwork(&net); err != nil {
     882                                netErr = err
     883                        }
     884                }
     885                if netErr != nil {
     886                        return netErr
     887                }
     888        }
     889
     890        return nil
    886891}
    887892
Note: See TracChangeset for help on using the changeset viewer.