Changeset 568 in code
- Timestamp:
- Jun 25, 2021, 6:33:13 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/db.go
r542 r568 31 31 Username string 32 32 Password string // hashed 33 Realname string 33 34 Admin bool 34 35 } … … 93 94 } 94 95 95 func (net *Network) GetRealname() string {96 func GetRealname(user *User, net *Network) string { 96 97 if net.Realname != "" { 97 98 return net.Realname 99 } 100 if user.Realname != "" { 101 return user.Realname 98 102 } 99 103 return net.Nick -
trunk/db_sqlite.go
r542 r568 17 17 username VARCHAR(255) NOT NULL UNIQUE, 18 18 password VARCHAR(255), 19 admin INTEGER NOT NULL DEFAULT 0 19 admin INTEGER NOT NULL DEFAULT 0, 20 realname VARCHAR(255) 20 21 ); 21 22 … … 134 135 "ALTER TABLE Channel ADD COLUMN detached_internal_msgid VARCHAR(255)", 135 136 "ALTER TABLE Network ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1", 137 "ALTER TABLE User ADD COLUMN realname VARCHAR(255)", 136 138 } 137 139 … … 243 245 user := &User{Username: username} 244 246 245 var password sql.NullString246 row := db.db.QueryRow("SELECT id, password, admin FROM User WHERE username = ?", username)247 if err := row.Scan(&user.ID, &password, &user.Admin ); err != nil {247 var password, realname sql.NullString 248 row := db.db.QueryRow("SELECT id, password, admin, realname FROM User WHERE username = ?", username) 249 if err := row.Scan(&user.ID, &password, &user.Admin, &realname); err != nil { 248 250 return nil, err 249 251 } 250 252 user.Password = password.String 253 user.Realname = realname.String 251 254 return user, nil 252 255 } … … 257 260 258 261 password := toNullString(user.Password) 262 realname := toNullString(user.Realname) 259 263 260 264 var err error 261 265 if user.ID != 0 { 262 _, err = db.db.Exec("UPDATE User SET password = ?, admin = ? WHERE username = ?",263 password, user.Admin, user.Username)266 _, err = db.db.Exec("UPDATE User SET password = ?, admin = ?, realname = ? WHERE username = ?", 267 password, user.Admin, realname, user.Username) 264 268 } else { 265 269 var res sql.Result 266 res, err = db.db.Exec("INSERT INTO User(username, password, admin ) VALUES (?, ?, ?)",267 user.Username, password, user.Admin )270 res, err = db.db.Exec("INSERT INTO User(username, password, admin, realname) VALUES (?, ?, ?, ?)", 271 user.Username, password, user.Admin, realname) 268 272 if err != nil { 269 273 return err -
trunk/doc/soju.1.scd
r564 r568 161 161 162 162 *-realname* <realname> 163 Connect with the specified real name. By default, the nickname is used. 163 Connect with the specified real name. By default, the account's realname 164 is used if set, otherwise the network's nickname is used. 164 165 165 166 *-nick* <nickname> … … 297 298 Disable SASL authentication and remove stored credentials. 298 299 299 *user create* -username <username> -password <password> [ -admin]300 *user create* -username <username> -password <password> [options...] 300 301 Create a new soju user. Only admin users can create new accounts. 302 303 Options: 304 305 *-admin* 306 Make the new user an administrator. 307 308 *-realname* <realname> 309 Set the user's realname. This is used as a fallback if there is no 310 realname set for a network. 311 312 *user update* [-realname <realname>] 313 Update the current user. 301 314 302 315 *user delete* <username> -
trunk/downstream.go
r565 r568 84 84 attrs["username"] = irc.TagValue(network.Username) 85 85 } 86 if network.Realname != "" {87 attrs["realname"] = irc.TagValue( network.Realname)86 if realname := GetRealname(&network.user.User, &network.Network); realname != "" { 87 attrs["realname"] = irc.TagValue(realname) 88 88 } 89 89 … … 1388 1388 } 1389 1389 1390 // If the client just resets to the default, just wipe the per-network 1391 // preference 1392 storeRealname := realname 1393 if realname == dc.user.Realname { 1394 storeRealname = "" 1395 } 1396 1390 1397 var storeErr error 1391 1398 var needUpdate []Network … … 1399 1406 }) 1400 1407 1401 n.Realname = realname1408 n.Realname = storeRealname 1402 1409 if err := dc.srv.db.StoreNetwork(dc.user.ID, &n.Network); err != nil { 1403 1410 dc.logger.Printf("failed to store network realname: %v", err) … … 1408 1415 1409 1416 record := n.Network // copy network record because we'll mutate it 1410 record.Realname = realname1417 record.Realname = storeRealname 1411 1418 needUpdate = append(needUpdate, record) 1412 1419 }) … … 2224 2231 pass, _ := attrs.GetTag("pass") 2225 2232 2233 if realname == dc.user.Realname { 2234 realname = "" 2235 } 2236 2226 2237 // TODO: reject unknown attributes 2227 2238 -
trunk/service.go
r566 r568 255 255 children: serviceCommandSet{ 256 256 "create": { 257 usage: "-username <username> -password <password> [- admin]",257 usage: "-username <username> -password <password> [-realname <realname>] [-admin]", 258 258 desc: "create a new soju user", 259 259 handle: handleUserCreate, 260 260 admin: true, 261 }, 262 "update": { 263 usage: "[-realname <realname>]", 264 desc: "update the current user", 265 handle: handleUserUpdate, 261 266 }, 262 267 "delete": { … … 267 272 }, 268 273 }, 269 admin: true,270 274 }, 271 275 "change-password": { … … 752 756 username := fs.String("username", "", "") 753 757 password := fs.String("password", "", "") 758 realname := fs.String("realname", "", "") 754 759 admin := fs.Bool("admin", false, "") 755 760 … … 772 777 Username: *username, 773 778 Password: string(hashed), 779 Realname: *realname, 774 780 Admin: *admin, 775 781 } … … 779 785 780 786 sendServicePRIVMSG(dc, fmt.Sprintf("created user %q", *username)) 787 return nil 788 } 789 790 func handleUserUpdate(dc *downstreamConn, params []string) error { 791 fs := newFlagSet() 792 realname := fs.String("realname", "", "") 793 794 if err := fs.Parse(params); err != nil { 795 return err 796 } 797 798 if err := dc.user.updateRealname(*realname); err != nil { 799 return err 800 } 801 802 sendServicePRIVMSG(dc, fmt.Sprintf("updated user %q", dc.user.Username)) 781 803 return nil 782 804 } -
trunk/upstream.go
r563 r568 1672 1672 uc.nickCM = uc.network.casemap(uc.nick) 1673 1673 uc.username = uc.network.GetUsername() 1674 uc.realname = uc.network.GetRealname()1674 uc.realname = GetRealname(&uc.user.User, &uc.network.Network) 1675 1675 1676 1676 uc.SendMessage(&irc.Message{ -
trunk/user.go
r563 r568 764 764 } 765 765 766 // If the realname is reset to the default, just wipe the per-network 767 // setting 768 if record.Realname == u.Realname { 769 record.Realname = "" 770 } 771 766 772 if err := u.checkNetwork(record); err != nil { 767 773 return nil, err … … 856 862 } 857 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 { 867 return fmt.Errorf("failed to update user %q: %v", u.Username, err) 868 } 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 886 } 887 858 888 func (u *user) stop() { 859 889 u.events <- eventStop{}
Note:
See TracChangeset
for help on using the changeset viewer.