Add command to reset user password
This commit is contained in:
parent
320d1b0167
commit
0394c1a2b2
4 changed files with 76 additions and 22 deletions
27
cli/ask_credentials.go
Normal file
27
cli/ask_credentials.go
Normal 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))
|
||||||
|
}
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
39
cli/reset_password.go
Normal 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!")
|
||||||
|
}
|
Loading…
Reference in a new issue