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)
|
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) {
|
func (s *AuthorService) FindByName(name string) (*model.Author, error) {
|
||||||
return s.repo.FindByName(name)
|
return s.repo.FindByName(name)
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ type AuthorRepository interface {
|
||||||
// Create creates a new author
|
// Create creates a new author
|
||||||
// It returns an error if the name is already taken
|
// It returns an error if the name is already taken
|
||||||
Create(name string, passwordHash string) (*model.Author, error)
|
Create(name string, passwordHash string) (*model.Author, error)
|
||||||
|
|
||||||
|
Update(author *model.Author) error
|
||||||
// FindByName finds an author by name
|
// FindByName finds an author by name
|
||||||
// It returns an error if the author is not found
|
// It returns an error if the author is not found
|
||||||
FindByName(name string) (*model.Author, error)
|
FindByName(name string) (*model.Author, error)
|
||||||
|
|
|
@ -56,11 +56,13 @@ func getWebmentionService() *app.WebmentionService {
|
||||||
|
|
||||||
interactionRepo := infra.NewInteractionRepo(db, interactionRegister)
|
interactionRepo := infra.NewInteractionRepo(db, interactionRegister)
|
||||||
|
|
||||||
|
configRepo := infra.NewConfigRepo(db)
|
||||||
|
|
||||||
bus := app.NewEventBus()
|
bus := app.NewEventBus()
|
||||||
|
|
||||||
http := infra.OwlHttpClient{}
|
http := infra.OwlHttpClient{}
|
||||||
return app.NewWebmentionService(
|
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,
|
PasswordHash: author.PasswordHash,
|
||||||
}, nil
|
}, 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.Name, "name2")
|
||||||
require.Equal(t, author2.PasswordHash, "password2")
|
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