aboutsummaryrefslogtreecommitdiff
path: root/telegram
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2023-06-16 07:34:49 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2023-06-16 07:34:49 +0300
commitfdd867cf7a435346a552a8da7f446b59b5e1213e (patch)
tree2bab821cf7419a5b9f16c43cab137a13fb4490ad /telegram
parentedf2c08a5b46e48277a5173653cfe8b156a412e5 (diff)
Add /cancelauth command
Diffstat (limited to 'telegram')
-rw-r--r--telegram/commands.go10
-rw-r--r--telegram/connect.go30
2 files changed, 34 insertions, 6 deletions
diff --git a/telegram/commands.go b/telegram/commands.go
index 5e16a6a..cafeb0a 100644
--- a/telegram/commands.go
+++ b/telegram/commands.go
@@ -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() {
diff --git a/telegram/connect.go b/telegram/connect.go
index 2633980..8324319 100644
--- a/telegram/connect.go
+++ b/telegram/connect.go
@@ -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