Removed support for password login (use access token). Removed logout functionality as it's also unnecessary. Fixes #56.

This commit is contained in:
Ville Ranki 2020-03-10 20:11:19 +02:00
parent 55d9c55948
commit 1a74091e04
3 changed files with 9 additions and 37 deletions

View File

@ -262,12 +262,11 @@ docker-compose up
`MATRIX_USER`, `MATRIX_ACCESS_TOKEN` and `MATRIX_SERVER` should be self-explanatory.
Set `JOIN_ON_INVITE` to anything if you want the bot to join invites automatically (do not set it if you don't want it to join).
You can set `MATRIX_PASSWORD` if you want to get an access token automatically with a login.
Normally you can use Riot to get it.
You can get access token by logging in with Riot and looking from Settings / Help & About.
`BOT_OWNERS` is a comma-separated list of matrix id's for the owners of the bot.
Some commands require sender to be bot owner.
Typically set your own id into it.
`BOT_OWNERS` is a comma-separated list of matrix id's for the owners of the bot.
Some commands require sender to be bot owner.
Typically set your own id into it.
__*ATTENTION:*__ Don't include bot itself in `BOT_OWNERS` if cron or any other module that can cause bot to send custom commands is used, as it could potentially be used to run owner commands as the bot itself.

36
bot.py
View File

@ -19,7 +19,7 @@ import datetime
from importlib import reload
import requests
from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LogoutResponse, LoginError
from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LoginError
# Couple of custom exceptions
@ -37,7 +37,7 @@ class Bot:
def __init__(self):
self.appid = 'org.vranki.hemppa'
self.version = '1.3'
self.version = '1.4'
self.client = None
self.join_on_invite = False
self.modules = dict()
@ -268,33 +268,26 @@ class Bot:
def __handle_error_response(self, response):
if response.status_code == 401:
self.logger.error("access token is invalid or missing")
self.logger.info("NOTE: check MATRIX_ACCESS_TOKEN or set MATRIX_PASSWORD")
self.logger.info("NOTE: check MATRIX_ACCESS_TOKEN")
sys.exit(2)
def init(self):
self.matrix_user = os.getenv('MATRIX_USER')
self.matrix_pass = os.getenv('MATRIX_PASSWORD')
matrix_server = os.getenv('MATRIX_SERVER')
bot_owners = os.getenv('BOT_OWNERS')
access_token = os.getenv('MATRIX_ACCESS_TOKEN')
join_on_invite = os.getenv('JOIN_ON_INVITE')
if matrix_server and self.matrix_user and bot_owners:
if matrix_server and self.matrix_user and bot_owners and access_token:
self.client = AsyncClient(matrix_server, self.matrix_user)
self.client.access_token = access_token
if self.client.access_token is None:
if self.matrix_pass is None:
self.logger.error("Either MATRIX_ACCESS_TOKEN or MATRIX_PASSWORD need to be set")
sys.exit(1)
self.join_on_invite = join_on_invite is not None
self.owners = bot_owners.split(',')
self.get_modules()
else:
self.logger.error("The environment variables MATRIX_SERVER, MATRIX_USER and BOT_OWNERS are mandatory")
self.logger.error("The environment variables MATRIX_SERVER, MATRIX_USER, MATRIX_ACCESS_TOKEN and BOT_OWNERS are mandatory")
sys.exit(1)
def start(self):
@ -317,16 +310,6 @@ class Bot:
traceback.print_exc(file=sys.stderr)
async def run(self):
if not self.client.access_token:
login_response = await self.client.login(self.matrix_pass)
if isinstance(login_response, LoginError):
self.logger.error(f"Failed to login: {login_response.message}")
return
last_16 = self.client.access_token[-16:]
self.logger.info(f"Logged in with password, access token: ...{last_16}")
await self.client.sync()
for roomid, room in self.client.rooms.items():
self.logger.info(f"Bot is on '{room.display_name}'({roomid}) with {len(room.users)} users")
@ -352,17 +335,8 @@ class Bot:
self.logger.error('Client was not able to log in, check env variables!')
async def shutdown(self):
await self.logout()
await self.close()
async def logout(self):
if self.matrix_pass is not None and self.client.logged_in:
response = await self.client.logout()
if isinstance(response, LogoutResponse):
self.logger.info("Logout successful")
else:
self.logger.error(f"Logout unsuccessful. msg: {response.message}")
async def close(self):
try:
await self.client.close()

View File

@ -9,7 +9,6 @@ services:
environment:
- MATRIX_ACCESS_TOKEN
- MATRIX_USER
- MATRIX_PASSWORD
- MATRIX_SERVER
- JOIN_ON_INVITE
- BOT_OWNERS