3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-22 18:52:41 +01:00

better UX for cancelling channel transfers

This commit is contained in:
Shivaram Lingamneni 2019-12-25 15:56:57 -05:00
parent f05c6ae6e0
commit 8c1db7a2f5
2 changed files with 14 additions and 10 deletions

View File

@ -780,6 +780,7 @@ func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount,
} }
result, err = am.deserializeRawAccount(raw) result, err = am.deserializeRawAccount(raw)
result.NameCasefolded = casefoldedAccount
return return
} }
@ -1367,7 +1368,7 @@ type AccountSettings struct {
type ClientAccount struct { type ClientAccount struct {
// Name of the account. // Name of the account.
Name string Name string
// RegisteredAt represents the time that the account was registered. NameCasefolded string
RegisteredAt time.Time RegisteredAt time.Time
Credentials AccountCredentials Credentials AccountCredentials
Verified bool Verified bool

View File

@ -98,7 +98,8 @@ To prevent accidental transfers, a verification code is required. For
example, $bTRANSFER #channel alice$b displays the required confirmation example, $bTRANSFER #channel alice$b displays the required confirmation
code, then $bTRANSFER #channel alice 2930242125$b initiates the transfer. code, then $bTRANSFER #channel alice 2930242125$b initiates the transfer.
Unless you are an IRC operator with the correct permissions, alice must Unless you are an IRC operator with the correct permissions, alice must
then accept the transfer, which she can do with $bTRANSFER accept #channel$b.`, then accept the transfer, which she can do with $bTRANSFER accept #channel$b.
To cancel a pending transfer, transfer the channel to yourself.`,
helpShort: `$bTRANSFER$b transfers ownership of a channel to another user.`, helpShort: `$bTRANSFER$b transfers ownership of a channel to another user.`,
enabled: chanregEnabled, enabled: chanregEnabled,
minParams: 2, minParams: 2,
@ -418,11 +419,12 @@ func csTransferHandler(server *Server, client *Client, command string, params []
return return
} }
target := params[1] target := params[1]
_, err := server.accounts.LoadAccount(params[1]) targetAccount, err := server.accounts.LoadAccount(params[1])
if err != nil { if err != nil {
csNotice(rb, client.t("Account does not exist")) csNotice(rb, client.t("Account does not exist"))
return return
} }
if targetAccount.NameCasefolded != account {
expectedCode := unregisterConfirmationCode(regInfo.Name, regInfo.RegisteredAt) expectedCode := unregisterConfirmationCode(regInfo.Name, regInfo.RegisteredAt)
codeValidated := 2 < len(params) && params[2] == expectedCode codeValidated := 2 < len(params) && params[2] == expectedCode
if !codeValidated { if !codeValidated {
@ -430,6 +432,7 @@ func csTransferHandler(server *Server, client *Client, command string, params []
csNotice(rb, fmt.Sprintf(client.t("To confirm your channel transfer, type: /CS TRANSFER %[1]s %[2]s %[3]s"), chname, target, expectedCode)) csNotice(rb, fmt.Sprintf(client.t("To confirm your channel transfer, type: /CS TRANSFER %[1]s %[2]s %[3]s"), chname, target, expectedCode))
return return
} }
}
status, err := channel.Transfer(client, target, hasPrivs) status, err := channel.Transfer(client, target, hasPrivs)
if err == nil { if err == nil {
switch status { switch status {