%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/utils/ |
Current File : //usr/lib/python2.7/site-packages/salt/utils/pushover.py |
# -*- coding: utf-8 -*- ''' Library for interacting with Slack API .. versionadded:: 2016.3.0 :configuration: This module can be used by specifying the name of a configuration profile in the minion config, minion pillar, or master config. For example: .. code-block:: yaml slack: api_key: peWcBiMOS9HrZG15peWcBiMOS9HrZG15 ''' from __future__ import absolute_import, print_function, unicode_literals import logging # Import 3rd-party libs # pylint: disable=import-error,no-name-in-module,redefined-builtin from salt.ext.six.moves.urllib.parse import urljoin as _urljoin from salt.ext.six.moves.urllib.parse import urlencode as _urlencode import salt.ext.six.moves.http_client from salt.version import __version__ # pylint: enable=import-error,no-name-in-module log = logging.getLogger(__name__) def query(function, token=None, api_version='1', method='POST', header_dict=None, data=None, query_params=None, opts=None): ''' PushOver object method function to construct and execute on the API URL. :param token: The PushOver api key. :param api_version: The PushOver API version to use, defaults to version 1. :param function: The PushOver api function to perform. :param method: The HTTP method, e.g. GET or POST. :param data: The data to be sent for POST method. :return: The json response from the API call or False. ''' ret = {'message': '', 'res': True} pushover_functions = { 'message': { 'request': 'messages.json', 'response': 'status', }, 'validate_user': { 'request': 'users/validate.json', 'response': 'status', }, 'validate_sound': { 'request': 'sounds.json', 'response': 'status', }, } api_url = 'https://api.pushover.net' base_url = _urljoin(api_url, api_version + '/') path = pushover_functions.get(function).get('request') url = _urljoin(base_url, path, False) if not query_params: query_params = {} decode = True if method == 'DELETE': decode = False result = salt.utils.http.query( url, method, params=query_params, data=data, header_dict=header_dict, decode=decode, decode_type='json', text=True, status=True, cookies=True, persist_session=True, opts=opts, ) if result.get('status', None) == salt.ext.six.moves.http_client.OK: response = pushover_functions.get(function).get('response') if response in result and result[response] == 0: ret['res'] = False ret['message'] = result return ret else: try: if 'response' in result and result[response] == 0: ret['res'] = False ret['message'] = result except ValueError: ret['res'] = False ret['message'] = result return ret def validate_sound(sound, token): ''' Send a message to a Pushover user or group. :param sound: The sound that we want to verify :param token: The PushOver token. ''' ret = { 'message': 'Sound is invalid', 'res': False } parameters = dict() parameters['token'] = token response = query(function='validate_sound', method='GET', query_params=parameters) if response['res']: if 'message' in response: _message = response.get('message', '') if 'status' in _message: if _message.get('dict', {}).get('status', '') == 1: sounds = _message.get('dict', {}).get('sounds', '') if sound in sounds: ret['message'] = 'Valid sound {0}.'.format(sound) ret['res'] = True else: ret['message'] = 'Warning: {0} not a valid sound.'.format(sound) ret['res'] = False else: ret['message'] = ''.join(_message.get('dict', {}).get('errors')) return ret def validate_user(user, device, token): ''' Send a message to a Pushover user or group. :param user: The user or group name, either will work. :param device: The device for the user. :param token: The PushOver token. ''' res = { 'message': 'User key is invalid', 'result': False } parameters = dict() parameters['user'] = user parameters['token'] = token if device: parameters['device'] = device response = query(function='validate_user', method='POST', header_dict={'Content-Type': 'application/x-www-form-urlencoded'}, data=_urlencode(parameters)) if response['res']: if 'message' in response: _message = response.get('message', '') if 'status' in _message: if _message.get('dict', {}).get('status', None) == 1: res['result'] = True res['message'] = 'User key is valid.' else: res['result'] = False res['message'] = ''.join(_message.get('dict', {}).get('errors')) return res