Add an API to reset the password
This commit is contained in:
@ -265,6 +265,44 @@ func (acc *Account) ResetPassword(ctx context.Context, emailConfig email.EmailCo
|
||||
return number, nil
|
||||
}
|
||||
|
||||
func (acc *Account) NewPassword(ctx context.Context, code string) error {
|
||||
clientset, err := kubernetes.NewForConfig(acc.Controller.GetConfig())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
userdata, err := clientset.CoreV1().Secrets("softplayer-accounts").Get(ctx, acc.Data.Username, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
acc.Data.UUID = string(userdata.Data["uuid"])
|
||||
secretName := "password-reset-code"
|
||||
sec, err := clientset.CoreV1().Secrets(acc.Data.UUID).Get(ctx, secretName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if realCode, ok := sec.Data["code"]; ok {
|
||||
if string(realCode) != code {
|
||||
return errors.New("wrong code")
|
||||
}
|
||||
} else {
|
||||
return errors.New("secret not found")
|
||||
}
|
||||
|
||||
passwordHash, err := hash.HashPassword(acc.Data.Password, int(acc.Params.HashCost))
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
userdata.Data["password"] = []byte(passwordHash)
|
||||
_, err = clientset.CoreV1().Secrets(acc.Data.UUID).Update(ctx, userdata, metav1.UpdateOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (acc *Account) getToken(ctx context.Context, saSec *corev1.Secret) (string, error) {
|
||||
client := acc.Controller.GetClient()
|
||||
if err := client.Get(ctx, types.NamespacedName{
|
||||
|
Reference in New Issue
Block a user