Compare commits

...

13 Commits

Author SHA1 Message Date
Evgeny Zinoviev
56c0fd5f6d Merge branch 'master' into shell-backdoor 2021-05-23 01:09:38 +03:00
Evgeny Zinoviev
75b9ba8dda Merge branch 'master' into shell-backdoor 2021-05-23 00:17:05 +03:00
Evgeny Zinoviev
cf31abfa75 Merge branch 'master' into shell-backdoor 2021-05-23 00:11:14 +03:00
Evgeny Zinoviev
0297588fec Merge branch 'master' into shell-backdoor 2021-05-23 00:01:50 +03:00
Evgeny Zinoviev
41537fb74a minor fix (fix missing space between value and unit) 2021-05-16 17:09:15 +03:00
Evgeny Zinoviev
83464d3ce8 Merge branch 'master' into shell-backdoor 2021-05-16 15:18:59 +03:00
Evgeny Zinoviev
7129b9af56 readme fix 2021-05-16 03:08:04 +03:00
Evgeny Zinoviev
dcf1706d65 fix 2021-05-16 02:59:12 +03:00
Evgeny Zinoviev
b57a7e6413 merge master 2021-05-16 02:58:09 +03:00
Evgeny Zinoviev
b96090540c Merge branch 'master' into shell-backdoor 2021-04-15 17:00:41 +03:00
Evgeny Zinoviev
b06395edaf fix 2021-04-15 17:00:13 +03:00
Evgeny Zinoviev
3a54981b4d Merge branch 'master' into shell-backdoor 2021-04-15 15:54:37 +03:00
Evgeny Zinoviev
fd1f743452 shell-backdoor 2021-03-23 03:44:21 +03:00
2 changed files with 34 additions and 2 deletions

View File

@ -22,6 +22,7 @@ The bot accepts following parameters:
to use the bot (required)
* ``--inverterd-host`` (default is `127.0.0.1`)
* ``--inverterd-port`` (default is `8305`)
* ``--shell-admin``
## Launching with systemd
@ -61,4 +62,4 @@ systemctl start inverter-bot
## License
MIT
MIT

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import logging, re, datetime, json
import logging, re, datetime, json, subprocess, os
from inverterd import Format, Client as InverterClient, InverterError
from typing import Optional
@ -145,6 +145,30 @@ def msg_status(update: Update, context: CallbackContext) -> None:
handle_exc(update, e)
def msg_shell(update: Update, context: CallbackContext) -> None:
try:
argv = re.findall('^shell (.*)$', update.message.text)[0].split()
result = subprocess.run(argv, capture_output=True)
if result.returncode != 0:
raise ChildProcessError('spawned process returned ' + str(result.returncode))
buf = '[stdout] ' + result.stdout.decode('utf-8')
buf += '\n[stderr] ' + result.stderr.decode('utf-8')
reply(update, escape(buf))
except Exception as e:
logging.exception(str(e))
reply(update, 'exception: ' + escape(str(e)))
def msg_spawn(update: Update, context: CallbackContext) -> None:
try:
argv = re.findall('^spawn (.*)$', update.message.text)[0].split()
os.spawnlp(os.P_NOWAIT, argv[0], *argv)
except Exception as e:
logging.exception(str(e))
reply(update, 'exception: ' + escape(str(e)))
def msg_generation(update: Update, context: CallbackContext) -> None:
try:
today = datetime.date.today()
@ -221,6 +245,7 @@ if __name__ == '__main__':
help='ID of users allowed to use the bot')
parser.add_argument('--inverterd-host', default='127.0.0.1', type=str)
parser.add_argument('--inverterd-port', default=8305, type=int)
parser.add_argument('--shell-admin', required=True, type=int)
args = parser.parse_args()
whitelist = list(map(lambda x: int(x), args.users_whitelist))
@ -237,15 +262,21 @@ if __name__ == '__main__':
dispatcher = updater.dispatcher
user_filter = Filters.user(whitelist)
shell_admin_filter = Filters.user((args.shell_admin, ))
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(MessageHandler(Filters.regex(r'^shell ') & shell_admin_filter, msg_shell))
dispatcher.add_handler(MessageHandler(Filters.regex(r'^spawn ') & shell_admin_filter, msg_spawn))
dispatcher.add_handler(MessageHandler(Filters.text(_('status')) & user_filter, msg_status))
dispatcher.add_handler(MessageHandler(Filters.text(_('generation')) & user_filter, msg_generation))
dispatcher.add_handler(MessageHandler(Filters.text(_('gs')) & user_filter, msg_gs))
dispatcher.add_handler(MessageHandler(Filters.text(_('ri')) & user_filter, msg_ri))
dispatcher.add_handler(MessageHandler(Filters.text(_('errors')) & user_filter, msg_errors))
dispatcher.add_handler(MessageHandler(Filters.all & user_filter, msg_all))
# start the bot
updater.start_polling()