mirror of
https://github.com/famedly/ansible-collection-matrix
synced 2024-12-12 12:22:26 +00:00
Initial commit
this commit imports the matrix module from the ansible library and contains two new modules, one for login and one for logout, based on the imported module
This commit is contained in:
commit
8eb03ab1e1
3 changed files with 339 additions and 0 deletions
105
matrix-login.py
Normal file
105
matrix-login.py
Normal file
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
|
||||
# (c) 2018, Jan Christian Grünhage <jan.christian@gruenhage.xyz>
|
||||
# (c) 2020, Famedly GmbH
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
ANSIBLE_METADATA = {
|
||||
'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'
|
||||
}
|
||||
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
author: "Jan Christian Grünhage (@jcgruenhage)"
|
||||
module: matrix-login
|
||||
short_description: Get a matrix access token
|
||||
description:
|
||||
- Log in to a matrix homeserver and get an access token back
|
||||
options:
|
||||
hs_url:
|
||||
description:
|
||||
- URL of the homeserver, where the CS-API is reachable
|
||||
required: true
|
||||
user_id:
|
||||
description:
|
||||
- The user id of the user
|
||||
required: true
|
||||
password:
|
||||
description:
|
||||
- The password to log in with
|
||||
required: true
|
||||
requirements:
|
||||
- matrix-client (Python library)
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: Log in to matrix
|
||||
matrix:
|
||||
hs_url: "https://matrix.org"
|
||||
user_id: "{{ matrix_auth_user }}"
|
||||
password: "{{ matrix_auth_password }}"
|
||||
'''
|
||||
|
||||
RETURN = '''
|
||||
token:
|
||||
description: The access token aquired by logging in
|
||||
returned: When login was successful
|
||||
type: str
|
||||
'''
|
||||
import traceback
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||
|
||||
MATRIX_IMP_ERR = None
|
||||
try:
|
||||
from matrix_client.client import MatrixClient
|
||||
except ImportError:
|
||||
MATRIX_IMP_ERR = traceback.format_exc()
|
||||
matrix_found = False
|
||||
else:
|
||||
matrix_found = True
|
||||
|
||||
|
||||
def run_module():
|
||||
module_args = dict(
|
||||
hs_url=dict(type='str', required=True),
|
||||
user_id=dict(type='str', required=True),
|
||||
password=dict(type='str', required=True, no_log=True),
|
||||
)
|
||||
|
||||
result = dict(
|
||||
changed=False,
|
||||
)
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=module_args,
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
||||
if not matrix_found:
|
||||
module.fail_json(msg=missing_required_lib('matrix-client'), exception=MATRIX_IMP_ERR)
|
||||
|
||||
if module.check_mode:
|
||||
return result
|
||||
|
||||
# create a client object
|
||||
client = MatrixClient(module.params['hs_url'])
|
||||
token = client.login(module.params['user_id'], module.params['password'], sync=False)
|
||||
|
||||
result['token'] = token
|
||||
|
||||
module.exit_json(**result)
|
||||
|
||||
|
||||
def main():
|
||||
run_module()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
95
matrix-logout.py
Normal file
95
matrix-logout.py
Normal file
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
|
||||
# (c) 2018, Jan Christian Grünhage <jan.christian@gruenhage.xyz>
|
||||
# (c) 2020, Famedly GmbH
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
ANSIBLE_METADATA = {
|
||||
'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'
|
||||
}
|
||||
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
author: "Jan Christian Grünhage (@jcgruenhage)"
|
||||
module: matrix
|
||||
short_description: Log out of matrix
|
||||
description:
|
||||
- Invalidate an access token by logging out
|
||||
options:
|
||||
hs_url:
|
||||
description:
|
||||
- URL of the homeserver, where the CS-API is reachable
|
||||
required: true
|
||||
token:
|
||||
description:
|
||||
- Authentication token for the API call
|
||||
required: true
|
||||
requirements:
|
||||
- matrix-client (Python library)
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: Invalidate access token
|
||||
matrix:
|
||||
hs_url: "https://matrix.org"
|
||||
token: "{{ matrix_auth_token }}"
|
||||
'''
|
||||
|
||||
RETURN = '''
|
||||
'''
|
||||
import traceback
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||
|
||||
MATRIX_IMP_ERR = None
|
||||
try:
|
||||
from matrix_client.client import MatrixClient
|
||||
except ImportError:
|
||||
MATRIX_IMP_ERR = traceback.format_exc()
|
||||
matrix_found = False
|
||||
else:
|
||||
matrix_found = True
|
||||
|
||||
|
||||
def run_module():
|
||||
module_args = dict(
|
||||
hs_url=dict(type='str', required=True),
|
||||
token=dict(type='str', required=True, no_log=True),
|
||||
)
|
||||
|
||||
result = dict(
|
||||
changed=False,
|
||||
)
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=module_args,
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
||||
if not matrix_found:
|
||||
module.fail_json(msg=missing_required_lib('matrix-client'), exception=MATRIX_IMP_ERR)
|
||||
|
||||
if module.check_mode:
|
||||
return result
|
||||
|
||||
# create a client object
|
||||
client = MatrixClient(module.params['hs_url'])
|
||||
client.api.token = module.params['token']
|
||||
|
||||
client.logout()
|
||||
|
||||
module.exit_json(**result)
|
||||
|
||||
|
||||
def main():
|
||||
run_module()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
139
matrix.py
Normal file
139
matrix.py
Normal file
|
@ -0,0 +1,139 @@
|
|||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
|
||||
# (c) 2018, Jan Christian Grünhage <jan.christian@gruenhage.xyz>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
ANSIBLE_METADATA = {
|
||||
'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'
|
||||
}
|
||||
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
author: "Jan Christian Grünhage (@jcgruenhage)"
|
||||
module: matrix
|
||||
short_description: Send notifications to matrix
|
||||
description:
|
||||
- This module sends html formatted notifications to matrix rooms.
|
||||
version_added: "2.8"
|
||||
options:
|
||||
msg_plain:
|
||||
description:
|
||||
- Plain text form of the message to send to matrix, usually markdown
|
||||
required: true
|
||||
msg_html:
|
||||
description:
|
||||
- HTML form of the message to send to matrix
|
||||
required: true
|
||||
room_id:
|
||||
description:
|
||||
- ID of the room to send the notification to
|
||||
required: true
|
||||
hs_url:
|
||||
description:
|
||||
- URL of the homeserver, where the CS-API is reachable
|
||||
required: true
|
||||
token:
|
||||
description:
|
||||
- Authentication token for the API call. If provided, user_id and password are not required
|
||||
user_id:
|
||||
description:
|
||||
- The user id of the user
|
||||
password:
|
||||
description:
|
||||
- The password to log in with
|
||||
requirements:
|
||||
- matrix-client (Python library)
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: Send matrix notification with token
|
||||
matrix:
|
||||
msg_plain: "**hello world**"
|
||||
msg_html: "<b>hello world</b>"
|
||||
room_id: "!12345678:server.tld"
|
||||
hs_url: "https://matrix.org"
|
||||
token: "{{ matrix_auth_token }}"
|
||||
|
||||
- name: Send matrix notification with user_id and password
|
||||
matrix:
|
||||
msg_plain: "**hello world**"
|
||||
msg_html: "<b>hello world</b>"
|
||||
room_id: "!12345678:server.tld"
|
||||
hs_url: "https://matrix.org"
|
||||
user_id: "ansible_notification_bot"
|
||||
password: "{{ matrix_auth_password }}"
|
||||
'''
|
||||
|
||||
RETURN = '''
|
||||
'''
|
||||
import traceback
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||
|
||||
MATRIX_IMP_ERR = None
|
||||
try:
|
||||
from matrix_client.client import MatrixClient
|
||||
except ImportError:
|
||||
MATRIX_IMP_ERR = traceback.format_exc()
|
||||
matrix_found = False
|
||||
else:
|
||||
matrix_found = True
|
||||
|
||||
|
||||
def run_module():
|
||||
module_args = dict(
|
||||
msg_plain=dict(type='str', required=True),
|
||||
msg_html=dict(type='str', required=True),
|
||||
room_id=dict(type='str', required=True),
|
||||
hs_url=dict(type='str', required=True),
|
||||
token=dict(type='str', required=False, no_log=True),
|
||||
user_id=dict(type='str', required=False),
|
||||
password=dict(type='str', required=False, no_log=True),
|
||||
)
|
||||
|
||||
result = dict(
|
||||
changed=False,
|
||||
message=''
|
||||
)
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=module_args,
|
||||
mutually_exclusive=[['password', 'token']],
|
||||
required_one_of=[['password', 'token']],
|
||||
required_together=[['user_id', 'password']],
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
||||
if not matrix_found:
|
||||
module.fail_json(msg=missing_required_lib('matrix-client'), exception=MATRIX_IMP_ERR)
|
||||
|
||||
if module.check_mode:
|
||||
return result
|
||||
|
||||
# create a client object
|
||||
client = MatrixClient(module.params['hs_url'])
|
||||
if module.params['token'] is not None:
|
||||
client.api.token = module.params['token']
|
||||
else:
|
||||
client.login(module.params['user_id'], module.params['password'], sync=False)
|
||||
|
||||
# make sure we are in a given room and return a room object for it
|
||||
room = client.join_room(module.params['room_id'])
|
||||
# send an html formatted messages
|
||||
room.send_html(module.params['msg_html'], module.params['msg_plain'])
|
||||
|
||||
module.exit_json(**result)
|
||||
|
||||
|
||||
def main():
|
||||
run_module()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in a new issue