Add /cancelauth command

message-nick
Bohdan Horbeshko 11 months ago
parent edf2c08a5b
commit fdd867cf7a

@ -44,6 +44,7 @@ var permissionsReadonly = client.ChatPermissions{}
var transportCommands = map[string]command{
"login": command{"phone", "sign in"},
"logout": command{"", "sign out"},
"cancelauth": command{"", "quit the signin wizard"},
"code": command{"", "check one-time code"},
"password": command{"", "check 2fa password"},
"setusername": command{"", "update @username"},
@ -230,7 +231,7 @@ func (c *Client) ProcessTransportCommand(cmdline string, resource string) string
switch cmd {
case "login", "code", "password":
if cmd == "login" && c.Session.Login != "" {
return ""
return "Phone number already provided, use /cancelauth to start over"
}
if len(args) < 1 {
@ -286,6 +287,13 @@ func (c *Client) ProcessTransportCommand(cmdline string, resource string) string
}
c.Session.Login = ""
// cancel auth
case "cancelauth":
if c.Online() {
return "Not allowed when online"
}
c.cancelAuth()
return "Cancelled"
// set @username
case "setusername":
if !c.Online() {

@ -24,6 +24,9 @@ type clientAuthorizer struct {
}
func (stateHandler *clientAuthorizer) Handle(c *client.Client, state client.AuthorizationState) error {
if stateHandler.isClosed {
return errors.New("Channel is closed")
}
stateHandler.State <- state
switch state.AuthorizationStateType() {
@ -84,6 +87,9 @@ func (stateHandler *clientAuthorizer) Handle(c *client.Client, state client.Auth
}
func (stateHandler *clientAuthorizer) Close() {
if stateHandler.isClosed {
return
}
stateHandler.isClosed = true
close(stateHandler.TdlibParameters)
close(stateHandler.PhoneNumber)
@ -191,11 +197,7 @@ func (c *Client) Disconnect(resource string, quit bool) bool {
)
}
_, err := c.client.Close()
if err != nil {
log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c)
}
c.forceClose()
c.close()
return true
}
@ -242,6 +244,24 @@ func (c *Client) forceClose() {
c.authorizer = nil
}
func (c *Client) close() {
if c.authorizer != nil && !c.authorizer.isClosed {
c.authorizer.Close()
}
if c.client != nil {
_, err := c.client.Close()
if err != nil {
log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c)
}
}
c.forceClose()
}
func (c *Client) cancelAuth() {
c.close()
c.Session.Login = ""
}
// Online checks if the updates listener is alive
func (c *Client) Online() bool {
return c.online

Loading…
Cancel
Save