Add --reset-pass option for admin pass reset
Usage: writefreely --reset-pass <username> This closes #25, closes T534
This commit is contained in:
parent
8c851545f6
commit
9016f87041
|
@ -0,0 +1,21 @@
|
||||||
|
package writefreely
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/writeas/impart"
|
||||||
|
"github.com/writeas/web-core/auth"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func adminResetPassword(app *app, u *User, newPass string) error {
|
||||||
|
hashedPass, err := auth.HashPass([]byte(newPass))
|
||||||
|
if err != nil {
|
||||||
|
return impart.HTTPError{http.StatusInternalServerError, fmt.Sprintf("Could not create password hash: %v", err)}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = app.db.ChangePassphrase(u.ID, true, "", hashedPass)
|
||||||
|
if err != nil {
|
||||||
|
return impart.HTTPError{http.StatusInternalServerError, fmt.Sprintf("Could not update passphrase: %v", err)}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
44
app.go
44
app.go
|
@ -18,6 +18,7 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gorilla/schema"
|
"github.com/gorilla/schema"
|
||||||
"github.com/gorilla/sessions"
|
"github.com/gorilla/sessions"
|
||||||
|
"github.com/manifoldco/promptui"
|
||||||
"github.com/writeas/web-core/converter"
|
"github.com/writeas/web-core/converter"
|
||||||
"github.com/writeas/web-core/log"
|
"github.com/writeas/web-core/log"
|
||||||
"github.com/writeas/writefreely/config"
|
"github.com/writeas/writefreely/config"
|
||||||
|
@ -129,6 +130,7 @@ func Serve() {
|
||||||
doConfig := flag.Bool("config", false, "Run the configuration process")
|
doConfig := flag.Bool("config", false, "Run the configuration process")
|
||||||
genKeys := flag.Bool("gen-keys", false, "Generate encryption and authentication keys")
|
genKeys := flag.Bool("gen-keys", false, "Generate encryption and authentication keys")
|
||||||
createSchema := flag.Bool("init-db", false, "Initialize app database")
|
createSchema := flag.Bool("init-db", false, "Initialize app database")
|
||||||
|
resetPassUser := flag.String("reset-pass", "", "Reset the given user's password")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
debugging = *debugPtr
|
debugging = *debugPtr
|
||||||
|
@ -227,6 +229,48 @@ func Serve() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
} else if *resetPassUser != "" {
|
||||||
|
// Connect to the database
|
||||||
|
log.Info("Loading configuration...")
|
||||||
|
cfg, err := config.Load()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Unable to load configuration: %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
app.cfg = cfg
|
||||||
|
connectToDatabase(app)
|
||||||
|
defer shutdown(app)
|
||||||
|
|
||||||
|
// Fetch user
|
||||||
|
u, err := app.db.GetUserForAuth(*resetPassUser)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Get user: %s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prompt for new password
|
||||||
|
prompt := promptui.Prompt{
|
||||||
|
Templates: &promptui.PromptTemplates{
|
||||||
|
Success: "{{ . | bold | faint }}: ",
|
||||||
|
},
|
||||||
|
Label: "New password",
|
||||||
|
Mask: '*',
|
||||||
|
}
|
||||||
|
newPass, err := prompt.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("%s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do the update
|
||||||
|
log.Info("Updating...")
|
||||||
|
err = adminResetPassword(app, u, newPass)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("%s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
log.Info("Success.")
|
||||||
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("Initializing...")
|
log.Info("Initializing...")
|
||||||
|
|
Loading…
Reference in New Issue