Procházet zdrojové kódy

Add command to reset user password

Frédéric Guillot před 8 roky
rodič
revize
0394c1a2b2
4 změnil soubory, kde provedl 76 přidání a 22 odebrání
  1. 27 0
      cli/ask_credentials.go
  2. 6 0
      cli/cli.go
  3. 4 22
      cli/create_admin.go
  4. 39 0
      cli/reset_password.go

+ 27 - 0
cli/ask_credentials.go

@@ -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))
+}

+ 6 - 0
cli/cli.go

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

+ 4 - 22
cli/create_admin.go

@@ -5,36 +5,18 @@
 package cli
 
 import (
-	"bufio"
 	"fmt"
 	"os"
-	"strings"
 
 	"github.com/miniflux/miniflux/model"
 	"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) {
-	user := &model.User{
-		Username: os.Getenv("ADMIN_USERNAME"),
-		Password: os.Getenv("ADMIN_PASSWORD"),
-		IsAdmin:  true,
-	}
+	user := model.NewUser()
+	user.Username = os.Getenv("ADMIN_USERNAME")
+	user.Password = os.Getenv("ADMIN_PASSWORD")
+	user.IsAdmin = true
 
 	if user.Username == "" || user.Password == "" {
 		user.Username, user.Password = askCredentials()

+ 39 - 0
cli/reset_password.go

@@ -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!")
+}