Add command to reset user password

This commit is contained in:
Frédéric Guillot 2018-01-02 22:18:24 -08:00
parent 320d1b0167
commit 0394c1a2b2
4 changed files with 76 additions and 22 deletions

27
cli/ask_credentials.go Normal file
View file

@ -0,0 +1,27 @@
// Copyright 2018 Frédéric Guillot. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
package cli
import (
"bufio"
"fmt"
"os"
"strings"
"golang.org/x/crypto/ssh/terminal"
)
func askCredentials() (string, string) {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter Username: ")
username, _ := reader.ReadString('\n')
fmt.Print("Enter Password: ")
bytePassword, _ := terminal.ReadPassword(0)
fmt.Printf("\n")
return strings.TrimSpace(username), strings.TrimSpace(string(bytePassword))
}

View file

@ -21,6 +21,7 @@ func Parse() {
flagMigrate := flag.Bool("migrate", false, "Migrate database schema") flagMigrate := flag.Bool("migrate", false, "Migrate database schema")
flagFlushSessions := flag.Bool("flush-sessions", false, "Flush all sessions (disconnect users)") flagFlushSessions := flag.Bool("flush-sessions", false, "Flush all sessions (disconnect users)")
flagCreateAdmin := flag.Bool("create-admin", false, "Create admin user") flagCreateAdmin := flag.Bool("create-admin", false, "Create admin user")
flagResetPassword := flag.Bool("reset-password", false, "Reset user password")
flag.Parse() flag.Parse()
cfg := config.NewConfig() cfg := config.NewConfig()
@ -54,5 +55,10 @@ func Parse() {
return return
} }
if *flagResetPassword {
resetPassword(store)
return
}
daemon.Run(cfg, store) daemon.Run(cfg, store)
} }

View file

@ -5,36 +5,18 @@
package cli package cli
import ( import (
"bufio"
"fmt" "fmt"
"os" "os"
"strings"
"github.com/miniflux/miniflux/model" "github.com/miniflux/miniflux/model"
"github.com/miniflux/miniflux/storage" "github.com/miniflux/miniflux/storage"
"golang.org/x/crypto/ssh/terminal"
) )
func askCredentials() (string, string) {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter Username: ")
username, _ := reader.ReadString('\n')
fmt.Print("Enter Password: ")
bytePassword, _ := terminal.ReadPassword(0)
fmt.Printf("\n")
return strings.TrimSpace(username), strings.TrimSpace(string(bytePassword))
}
func createAdmin(store *storage.Storage) { func createAdmin(store *storage.Storage) {
user := &model.User{ user := model.NewUser()
Username: os.Getenv("ADMIN_USERNAME"), user.Username = os.Getenv("ADMIN_USERNAME")
Password: os.Getenv("ADMIN_PASSWORD"), user.Password = os.Getenv("ADMIN_PASSWORD")
IsAdmin: true, user.IsAdmin = true
}
if user.Username == "" || user.Password == "" { if user.Username == "" || user.Password == "" {
user.Username, user.Password = askCredentials() user.Username, user.Password = askCredentials()

39
cli/reset_password.go Normal file
View file

@ -0,0 +1,39 @@
// Copyright 2018 Frédéric Guillot. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
package cli
import (
"fmt"
"os"
"github.com/miniflux/miniflux/storage"
)
func resetPassword(store *storage.Storage) {
username, password := askCredentials()
user, err := store.UserByUsername(username)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
if user == nil {
fmt.Println("User not found!")
os.Exit(1)
}
user.Password = password
if err := user.ValidatePassword(); err != nil {
fmt.Println(err)
os.Exit(1)
}
if err := store.UpdateUser(user); err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("Password changed!")
}