Changeset 251 in code


Ignore:
Timestamp:
Apr 10, 2020, 8:09:02 AM (5 years ago)
Author:
admin
Message:

Add ability to change password

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/cmd/sojuctl/main.go

    r98 r251  
    1515const usage = `usage: sojuctl [-config path] <action> [options...]
    1616
    17   create-user <username>  Create a new user
    18   help                    Show this help message
     17  create-user <username>        Create a new user
     18  change-password <username>    Change password for a user
     19  help                          Show this help message
    1920`
    2021
     
    7374                        log.Fatalf("failed to create user: %v", err)
    7475                }
     76        case "change-password":
     77                username := flag.Arg(1)
     78                if username == "" {
     79                        flag.Usage()
     80                        os.Exit(1)
     81                }
     82
     83                fmt.Printf("New password: ")
     84                password, err := terminal.ReadPassword(int(os.Stdin.Fd()))
     85                if err != nil {
     86                        log.Fatalf("failed to read new password: %v", err)
     87                }
     88                fmt.Printf("\n")
     89
     90                hashed, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
     91                if err != nil {
     92                        log.Fatalf("failed to hash password: %v", err)
     93                }
     94
     95                user := soju.User{
     96                        Username: username,
     97                        Password: string(hashed),
     98                }
     99                if err := db.UpdatePassword(&user); err != nil {
     100                        log.Fatalf("failed to update password: %v", err)
     101                }
     102
    75103        default:
    76104                flag.Usage()
  • trunk/db.go

    r207 r251  
    130130        password := toStringPtr(user.Password)
    131131        _, err := db.db.Exec("INSERT INTO User(username, password) VALUES (?, ?)", user.Username, password)
     132        return err
     133}
     134
     135func (db *DB) UpdatePassword(user *User) error {
     136        db.lock.Lock()
     137        defer db.lock.Unlock()
     138
     139        password := toStringPtr(user.Password)
     140        _, err := db.db.Exec(`UPDATE User
     141        SET password = ?
     142        WHERE username = ?`,
     143                password, user.Username)
    132144        return err
    133145}
Note: See TracChangeset for help on using the changeset viewer.