From 2a3ae55f5205989c6d5f61b06004b5f2e6c6a0c2 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 22 Jul 2020 12:16:13 +0200 Subject: [PATCH] Add a `sasl set-plain` command This allows to manually set the SASL credentials for a network. --- doc/soju.1.scd | 3 +++ service.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/doc/soju.1.scd b/doc/soju.1.scd index 6d55706..4de01b8 100644 --- a/doc/soju.1.scd +++ b/doc/soju.1.scd @@ -173,6 +173,9 @@ abbreviated form, for instance *network* can be abbreviated as *net* or just *certfp reset* Disable SASL EXTERNAL authentication and remove stored certificate. +*sasl set-plain* + Set SASL PLAIN credentials. + *user create* -username -password [-admin] Create a new soju user. Only admin users can create new accounts. diff --git a/service.go b/service.go index 2fcab32..4c6573a 100644 --- a/service.go +++ b/service.go @@ -187,6 +187,15 @@ func init() { }, }, }, + "sasl": { + children: serviceCommandSet{ + "set-plain": { + usage: " ", + desc: "set SASL PLAIN credentials", + handle: handleServiceSASLSetPlain, + }, + }, + }, "user": { children: serviceCommandSet{ "create": { @@ -588,6 +597,28 @@ func handleServiceCertfpReset(dc *downstreamConn, params []string) error { return nil } +func handleServiceSASLSetPlain(dc *downstreamConn, params []string) error { + if len(params) != 3 { + return fmt.Errorf("expected exactly 3 arguments") + } + + net := dc.user.getNetwork(params[0]) + if net == nil { + return fmt.Errorf("unknown network %q", params[0]) + } + + net.SASL.Plain.Username = params[1] + net.SASL.Plain.Password = params[2] + net.SASL.Mechanism = "PLAIN" + + if err := dc.srv.db.StoreNetwork(net.Username, &net.Network); err != nil { + return err + } + + sendServicePRIVMSG(dc, "credentials saved") + return nil +} + func handlePasswordChange(dc *downstreamConn, params []string) error { if len(params) != 1 { return fmt.Errorf("expected exactly one argument")