reset password command
This commit is contained in:
parent
b0a6a0d417
commit
0bbcde6ff6
|
@ -36,6 +36,21 @@ func (s *AuthorService) Create(name string, password string) (*model.Author, err
|
|||
return s.repo.Create(name, hash)
|
||||
}
|
||||
|
||||
func (s *AuthorService) SetPassword(name string, password string) error {
|
||||
hash, err := hashPassword(password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
author, err := s.repo.FindByName(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
author.PasswordHash = hash
|
||||
err = s.repo.Update(author)
|
||||
return err
|
||||
|
||||
}
|
||||
|
||||
func (s *AuthorService) FindByName(name string) (*model.Author, error) {
|
||||
return s.repo.FindByName(name)
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@ type AuthorRepository interface {
|
|||
// Create creates a new author
|
||||
// It returns an error if the name is already taken
|
||||
Create(name string, passwordHash string) (*model.Author, error)
|
||||
|
||||
Update(author *model.Author) error
|
||||
// FindByName finds an author by name
|
||||
// It returns an error if the author is not found
|
||||
FindByName(name string) (*model.Author, error)
|
||||
|
|
|
@ -56,11 +56,13 @@ func getWebmentionService() *app.WebmentionService {
|
|||
|
||||
interactionRepo := infra.NewInteractionRepo(db, interactionRegister)
|
||||
|
||||
configRepo := infra.NewConfigRepo(db)
|
||||
|
||||
bus := app.NewEventBus()
|
||||
|
||||
http := infra.OwlHttpClient{}
|
||||
return app.NewWebmentionService(
|
||||
interactionRepo, entryRepo, &http, bus,
|
||||
configRepo, interactionRepo, entryRepo, &http, bus,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"owl-blogs/infra"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(resetPasswordCmd)
|
||||
|
||||
resetPasswordCmd.Flags().StringVarP(&user, "user", "u", "", "The user name")
|
||||
resetPasswordCmd.MarkFlagRequired("user")
|
||||
resetPasswordCmd.Flags().StringVarP(&password, "password", "p", "", "The new password")
|
||||
resetPasswordCmd.MarkFlagRequired("password")
|
||||
}
|
||||
|
||||
var resetPasswordCmd = &cobra.Command{
|
||||
Use: "reset-password",
|
||||
Short: "Resets the password of an author",
|
||||
Long: `Resets the password of an author`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
db := infra.NewSqliteDB(DbPath)
|
||||
App(db).AuthorService.Create(user, password)
|
||||
},
|
||||
}
|
|
@ -59,3 +59,12 @@ func (r *DefaultAuthorRepo) Create(name string, passwordHash string) (*model.Aut
|
|||
PasswordHash: author.PasswordHash,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *DefaultAuthorRepo) Update(author *model.Author) error {
|
||||
sqlA := sqlAuthor{
|
||||
Name: author.Name,
|
||||
PasswordHash: author.PasswordHash,
|
||||
}
|
||||
_, err := r.db.NamedExec("UPDATE authors SET password_hash = :password_hash WHERE name = :name", sqlA)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -45,3 +45,19 @@ func TestAuthorRepoNoSideEffect(t *testing.T) {
|
|||
require.Equal(t, author2.Name, "name2")
|
||||
require.Equal(t, author2.PasswordHash, "password2")
|
||||
}
|
||||
|
||||
func TestAuthorUpdate(t *testing.T) {
|
||||
repo := setupAutherRepo()
|
||||
|
||||
author, err := repo.Create("name1", "password1")
|
||||
require.NoError(t, err)
|
||||
|
||||
author.PasswordHash = "password2"
|
||||
err = repo.Update(author)
|
||||
require.NoError(t, err)
|
||||
|
||||
author, err = repo.FindByName("name1")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, author.PasswordHash, "password2")
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue