~emersion/public-inbox

soju: Allow users to change password in client v1 APPLIED

Thorben Günther: 1
 Allow users to change password in client

 2 files changed, 31 insertions(+), 0 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~emersion/public-inbox/patches/10147/mbox | git am -3
Learn more about email & git
View this thread in the archives

[PATCH soju] Allow users to change password in client Export this patch

Added a BouncerServ command for that.
---
 service.go | 23 +++++++++++++++++++++++
 user.go    |  8 ++++++++
 2 files changed, 31 insertions(+)

diff --git a/service.go b/service.go
index fc3773e..4a614d2 100644
--- a/service.go
+++ b/service.go
@@ -7,6 +7,7 @@ import (
	"strings"

	"github.com/google/shlex"
	"golang.org/x/crypto/bcrypt"
	"gopkg.in/irc.v3"
)

@@ -118,6 +119,11 @@ func init() {
				},
			},
		},
		"change-password": {
			usage:  "<new password>",
			desc:   "change your password",
			handle: handlePasswordChange,
		},
	}
}

@@ -254,3 +260,20 @@ func handleServiceNetworkDelete(dc *downstreamConn, params []string) error {
	sendServicePRIVMSG(dc, fmt.Sprintf("deleted network %q", net.GetName()))
	return nil
}

func handlePasswordChange(dc *downstreamConn, params []string) error {
	if len(params) != 1 {
		return fmt.Errorf("expected exactly one argument")
	}

	hashed, err := bcrypt.GenerateFromPassword([]byte(params[0]), bcrypt.DefaultCost)
	if err != nil {
		return fmt.Errorf("failed to hash password: %v", err)
	}
	if err := dc.user.updatePassword(string(hashed)); err != nil {
		return err
	}

	sendServicePRIVMSG(dc, fmt.Sprint("updated password"))
	return nil
}
diff --git a/user.go b/user.go
index 018009b..a2e9841 100644
--- a/user.go
+++ b/user.go
@@ -369,3 +369,11 @@ func (u *user) deleteNetwork(id int64) error {

	panic("tried deleting a non-existing network")
}

func (u *user) updatePassword(hashed string) error {
	u.User.Password = hashed
	if err := u.srv.db.UpdatePassword(&u.User); err != nil {
		return err
	}
	return nil
}
-- 
2.26.0
Both patches LGTM. Pushed, thanks for your contribution!