diff --git a/apprise/plugins/matrix.py b/apprise/plugins/matrix.py index 3dde574e..85a182f1 100644 --- a/apprise/plugins/matrix.py +++ b/apprise/plugins/matrix.py @@ -201,9 +201,11 @@ class NotifyMatrix(NotifyBase): '{schema}://{token}', '{schema}://{user}@{token}', - # Disabled webhook + # Matrix Server '{schema}://{user}:{password}@{host}/{targets}', '{schema}://{user}:{password}@{host}:{port}/{targets}', + '{schema}://{token}@{host}/{targets}', + '{schema}://{token}@{host}:{port}/{targets}', # Webhook mode '{schema}://{user}:{token}@{host}/{targets}', @@ -890,32 +892,40 @@ class NotifyMatrix(NotifyBase): # Login not required; silently skip-over return True - if not (self.user and self.password): + if (self.user and self.password): + # Prepare our Authentication Payload + if self.version == MatrixVersion.V3: + payload = { + 'type': 'm.login.password', + 'identifier': { + 'type': 'm.id.user', + 'user': self.user, + }, + 'password': self.password, + } + + else: + payload = { + 'type': 'm.login.password', + 'user': self.user, + 'password': self.password, + } + + elif self.password: + # token + payload = { + 'type': 'm.login.token', + 'token': self.password, + } + + else: # It's not possible to register since we need these 2 values to # make the action possible. self.logger.warning( 'Failed to login to Matrix server: ' - 'user/pass combo is missing.') + 'token or user/pass combo is missing.') return False - # Prepare our Authentication Payload - if self.version == MatrixVersion.V3: - payload = { - 'type': 'm.login.password', - 'identifier': { - 'type': 'm.id.user', - 'user': self.user, - }, - 'password': self.password, - } - - else: - payload = { - 'type': 'm.login.password', - 'user': self.user, - 'password': self.password, - } - # Build our URL postokay, response = self._fetch('/login', payload=payload) if not (postokay and isinstance(response, dict)): @@ -1483,9 +1493,10 @@ class NotifyMatrix(NotifyBase): safe=''), ) - elif self.user: - auth = '{user}@'.format( - user=NotifyMatrix.quote(self.user, safe=''), + elif self.user or self.password: + auth = '{value}@'.format( + value=NotifyMatrix.quote( + self.user if self.user else self.password, safe=''), ) default_port = 443 if self.secure else 80 @@ -1567,6 +1578,11 @@ class NotifyMatrix(NotifyBase): if 'token' in results['qsd'] and len(results['qsd']['token']): results['password'] = NotifyMatrix.unquote(results['qsd']['token']) + elif not results['password'] and results['user']: + # swap + results['password'] = results['user'] + results['user'] = None + # Support the use of the version= or v= keyword if 'version' in results['qsd'] and len(results['qsd']['version']): results['version'] = \