Example #1
0
    def __init__(self,
                 url,
                 username,
                 password,
                 channel_name,
                 team_name,
                 help_text,
                 message_handler,
                 port=8065,
                 scheme='https',
                 debug=False):
        self.username = username
        self.help_text = help_text
        self.message_handler = message_handler
        self.debug = debug

        self.driver = Driver({
            'url': url,
            'port': port,
            'login_id': username,
            'password': password,
            'scheme': scheme,
            'debug': debug,
        })
        self.driver.login()

        # get userid for username since it is not automatically set to driver.client.userid ... for reasons
        res = self.driver.users.get_user_by_username(username)
        self.userid = res['id']

        # get channel id for name
        res = self.driver.channels.get_channel_by_name_and_team_name(
            team_name, channel_name)
        self.channel_id = res['id']
Example #2
0
 def __init__(self, config):
     self.logger = logging.getLogger('lthub.mattermost.sync')
     self.config = config
     self.driver = Driver({
         k: config[k]
         for k in config.keys() & Driver.default_options.keys()
     })
Example #3
0
    def __init__(self, message, filename, format_as_code, user, channel,
                 verbose):
        self.message = self._format_message(message, format_as_code)
        self.filename = filename
        self.user = user
        self.channel = channel
        self.verbose = verbose

        self._check_env_vars()

        self.mm_client = Driver({
            "url": config_vars["MATTERMOST_URL"],
            "login_id": config_vars["MATTERMOST_USERNAME"],
            "password": config_vars["MATTERMOST_PASSWORD"],
            "scheme": "https",
            "port": int(config_vars["MATTERMOST_PORT"]),
            "basepath": "/api/v4",
            "verify": True,
            "timeout": 30,
            "debug": False,
        })
        self.team_name = config_vars["MATTERMOST_TEAM_NAME"]

        try:
            self.mm_client.login()
        except ConnectionError:
            print("Unable to connect to the configured Mattermost server.")
            raise
    def __init__(self,
                 url,
                 token,
                 channel_name,
                 team_name,
                 help_text,
                 message_handler,
                 port=8065,
                 scheme='https',
                 debug=False):
        self.help_text = help_text
        self.message_handler = message_handler
        self.debug = debug

        self.driver = Driver({
            'url': url,
            'port': port,
            'token': token,
            'scheme': scheme,
            'debug': debug,
        })
        user_result = self.driver.login()
        self.username = user_result["username"]
        self.userid = user_result["id"]

        # get channel id for name
        res = self.driver.channels.get_channel_by_name_and_team_name(
            team_name, channel_name)
        self.channel_id = res['id']
Example #5
0
    def serve_once(self):
        self.driver = Driver({
            'scheme': self._scheme,
            'url': self.url,
            'port': self._port,
            'verify': not self.insecure,
            'timeout': self.timeout,
            'login_id': self._login,
            'password': self._password
        })
        self.driver.login()

        self.userid = self.driver.api['users'].get_user(user_id='me')['id']

        self.token = self.driver.client.token

        try:
            loop = self.driver.init_websocket(
                event_handler=self.mattermost_event_handler)
            loop.run_forever()
            # loop.stop()
        except KeyboardInterrupt:
            log.info("Interrupt received, shutting down..")
            Notify.uninit()
            self.driver.logout()
            return True
        except Exception:
            log.exception("Error reading from RTM stream:")
        finally:
            log.debug("Triggering disconnect callback")
	def serve_once(self):
		self.driver = Driver({
			'scheme': self._scheme,
			'url': self.url,
			'port': self._port,
			'verify': not self.insecure,
			'timeout': self.timeout,
			'login_id': self._login,
			'password': self._password,
			'token': self._personal_access_token,
			'mfa_token': self._mfa_token
		})
		self.driver.login()

		self.teamid = self.driver.teams.get_team_by_name(name=self.team)['id']
		userid = self.driver.users.get_user(user_id='me')['id']

		self.token = self.driver.client.token

		self.bot_identifier = MattermostPerson(self.driver, userid=userid, teamid=self.teamid)

		# noinspection PyBroadException
		try:
			loop = self.driver.init_websocket(event_handler=self.mattermost_event_handler)
			self.reset_reconnection_count()
			loop.run_forever()
		except KeyboardInterrupt:
			log.info("Interrupt received, shutting down..")
			return True
		except Exception:
			log.exception("Error reading from RTM stream:")
		finally:
			log.debug("Triggering disconnect callback")
			self.disconnect_callback()
Example #7
0
def mattermost(reportFile, issueList, target):
    accessToken = configs("mattermost")['accesstoken']
    reportFile = os.path.join(tempfile.gettempdir(), reportFile)
    issueList = '\n'.join('{}: {}'.format(*k) for k in enumerate(issueList, 1))
    mmost = Driver({
        'url': 'mattermost.viidakko.fi',
        'token': accessToken,
        'scheme': 'https',
        'port': 443,
        'basepath': '/api/v4',
        'verify': True,
        'timeout': 30,
        # 'mfa_token': 'TheMfaToken'
    })
    mmost.login()
    channel_id = mmost.api['channels'].get_channel_by_name_and_team_name(
        'development', 'burp-scan-reports')['id']
    file_id = mmost.api['files'].upload_file(
        channel_id=channel_id,
        files={'files': (reportFile, open(reportFile))})['file_infos'][0]['id']

    mmost.api['posts'].create_post(
        options={
            'channel_id': channel_id,
            'message': ':bell: **Scan result for ' + target + '**\n' +
            issueList,
            'file_ids': [file_id]
        })
    print(
        "\033[32m[+]\x1b[0m " +
        "Mattermost message sent, 'Burp Scan Report' channel, report file: \033[32m{}\x1b[0m"
        .format(reportFileName))
Example #8
0
    def __init__(self, config, opsdroid=None):
        """Create the connector."""
        super().__init__(config, opsdroid=opsdroid)
        _LOGGER.debug(_("Starting Mattermost connector"))
        self.name = config.get("name", "mattermost")
        self.token = config["token"]
        self.url = config["url"]
        self.team_name = config["team-name"]
        self.scheme = config.get("scheme", "https")
        self.port = config.get("port", 8065)
        self.verify = config.get("ssl-verify", True)
        self.timeout = config.get("connect-timeout", 30)
        self.request_timeout = None
        self.mfa_token = None
        self.debug = False
        self.listening = True
        self.bot_id = None

        self.mm_driver = Driver({
            "url": self.url,
            "token": self.token,
            "scheme": self.scheme,
            "port": self.port,
            "verify": self.verify,
            "timeout": self.timeout,
            "request_timeout": self.request_timeout,
            "mfa_token": self.mfa_token,
            "debug": self.debug,
        })
Example #9
0
def main():
    print("Creating Mattermost Driver...")
    driver_options = {
        'url': config.URL,
        'login_id': config.USERNAME,
        'password': config.PASSWORD,
        'port': config.PORT
    }
    driver = Driver(driver_options)

    print("Authenticating...")
    driver.login()
    driver.users.get_user('me')
    print("Successfully authenticated.")

    print("Retrieving Coffee Buddies participants...")
    team_name = config.TEAM_NAME
    channel_name = config.CHANNEL_NAME
    members = utils.get_channel_members(driver, team_name, channel_name)
    print("Successfully retrieved Coffee Buddies participants.")

    print("Preparing participants database...")
    utils.create_users(members)
    utils.create_pairs(members)
    print("Succesfully prepared participants database.")

    print("Pairing Coffee Buddies participants...")
    pairs = utils.get_pairs(members)
    print("Successfully paired Coffee Buddies participants.")

    print("Messaging paired Coffee Buddies participants...")
    utils.message_pairs(driver, pairs)
    print("Successfully messaged paired Coffee Buddies participants.")
Example #10
0
def init_mattermost_driver():
    driver = Driver({
        'url': webhook.url,
        'scheme': webhook.scheme,
        'port': webhook.port,
        'verify': webhook.verify
    })
    return driver
Example #11
0
 def create_driver(self):
     self.driver = Driver({
         'url': self.host,
         'login_id': self.username,
         'password': self.passwd,
         'scheme': 'https' if self.https else 'http',
         'port': self.port
     })
Example #12
0
 def __init__(self):
     connection_parameters = {
         'url': settings.MATTERMOST_SERVER,
         'port': settings.MATTERMOST_PORT,
         'username': settings.MATTERMOST_LOGIN_ID,
         'token': settings.MATTERMOST_ACCESS_TOKEN
     }
     self.mattermost_connection = Driver(connection_parameters)
Example #13
0
    def initialize(self):
        self.state = "idle"
        self.mm = None
        # login data
        self.username = self.settings.get("username", "")
        self.token = self.settings.get("token", "")
        self.login_id = self.settings.get("login_id", "")
        self.password = self.settings.get("password", "")
        # monitoring
        self.ttl = self.settings.get("ttl", 10) * 60
        self.notify_on_updates = self.settings.get("notify_on_updates", False)
        LOG.debug("username: {}".format(self.username))

        mm_driver_config = {
            'url': self.settings.get("url", "chat.mycroft.ai"),
            'scheme': self.settings.get("scheme", "https"),
            'port': self.settings.get("port", 443),
            'verify': self.settings.get("verify", True)
        }

        if self.token:
            mm_driver_config['token'] = self.token
        elif self.login_id and self.password:
            mm_driver_config['login_id'] = self.login_id
            mm_driver_config['password'] = self.password

        if self.username:
            self.mm = Driver(mm_driver_config)
            try:
                self.mm.login()
                self.userid = \
                    self.mm.users.get_user_by_username(self.username)['id']
                # TODO check if user is member of several teams?
                self.teamid = self.mm.teams.get_team_members_for_user(
                    self.userid)[0]['team_id']
                LOG.debug("userid: {} teamid: {}".format(
                    self.userid, self.teamid))
            except (mme.ResourceNotFound, mme.HTTPError,
                    mme.NoAccessTokenProvided, mme.NotEnoughPermissions,
                    mme.InvalidOrMissingParameters) as e:
                LOG.debug("Exception: {}".format(e))
                self.mm = None
                self.speak_dialog("mattermost.error", {'exception': e})
            if self.mm:
                # info on all subscribed public channels as returned by MM
                self.channel_subscriptions = None
                self.channel_subs_ts = 0
                # basic info of channels
                # channel_id, display_name, (unread) msg_count, mentions
                self.channel_info = None
                self.channel_info_ts = 0
                self.usercache = {}
                self.prev_unread = 0
                self.prev_mentions = 0
                self.monitoring = False

        # Check and then monitor for credential changes
        self.settings.set_changed_callback(self.on_websettings_changed)
Example #14
0
def upload_file(connector=Driver(), channel_id="", path=None):
    if path is not None:
        f = connector.files.upload_file(channel_id, {
            "files": open(path, "rb"),
            "filename": path
        })
        return f["file_infos"][0]["id"]
    else:
        return None
Example #15
0
def connect(host: str, login_token: str = None, username: str = None, password: str = None) -> Driver:
    d = Driver({
        "url": host,
        "port": 443,
        "token": login_token,
        "username": username,
        "password": password
    })
    d.login()
    return d
Example #16
0
 def __init__(self, user_session: UserSession):
     self.user_session = user_session
     self.driver = Driver({
         'login_id': self.user_session.username,
         'password': self.user_session.password,
         'verify': False,
         'scheme': os.getenv('MATTERMOST_SCHEME'),
         'url': os.getenv('MATTERMOST_URL_WITH_PORT')
     })
     self.driver.login()
Example #17
0
def get_driver():
    return Driver({
        'url': config.get('myvars','HOST'),
        'scheme': 'http',
        'port': 8065,
        'basepath': '/api/v4',
        'verify': True,
        'token': config.get('myvars','BOTTOKEN'),
        'debug': False
    });
Example #18
0
    def upload(src: str) -> None:
        driver = Driver({
            'scheme': 'https',
            'url': MattermostImport._getHost(),
            'token': MattermostImport._getToken(),
            'port': 443,
        })

        driver.login()
        print(driver.emoji.get_custom_emoji_by_name("doge"))
Example #19
0
    def __init__(self, settings):
        assert Connection.instance is None
        self.driver = Driver(settings)
        #self.driver.client.activate_verbose_logging()
        self.bot = Bot(convert_to_mmpy_bot(settings))
        Connection.instance = self

        # workaround for python versions < 3.7
        if sys.version_info.major < 3 or sys.version_info.minor < 7:
            api.load_driver_attributes()
Example #20
0
 def __init__(self, mail, pswd, url, tags=None, debug=False):
     self.debug = debug
     self.config = {"url": url,
                    "login_id": mail,
                    "password": pswd,
                    "scheme": "https",
                    "port": 443,
                    "verify": True,
                    "debug": debug}
     self.driver = Driver(self.config)
     self.tags = tags or []
Example #21
0
def get_driver():
    my_driver = Driver({
        'url': params['MM_IP'],
        'token': params['PLOT_BOT_TOKEN'],
        'scheme': 'http',
        'port': 8065,
        'basepath': '/api/v4',
        'debug': False
    })
    my_driver.login()
    return my_driver
Example #22
0
 def mattermost_login(self):
     mm = Driver({
         'url': os.environ['MATTERMOST_ADDRESS'],
         'login_id': os.environ['MATTERMOST_LOGIN_ID'],
         'password': os.environ['MATTERMOST_PASSWORD'],
         'scheme': 'http',
         'port': int(os.environ['MATTERMOST_PORT']),
         'basepath': '/api/v3',
         'timeout': 30,
     })
     mm.login()
     return mm
Example #23
0
def get_standup_members(server_config: Dict) -> List[str]:
    d = Driver(server_config)

    d.login()

    channel_id = d.channels.get_channel_by_name_and_team_name(
        'team_name', 'channel')['id']

    channel_members = d.channels.get_channel_members(channel_id)

    d.logout()

    return channel_members
Example #24
0
def login(url, port, username, password, token):
    driver = Driver({
        'url': url,
        'port': int(port),
        'login_id': username,
        'password': password,
        'basepath': '/api/v4',
        'scheme': 'http',
        'token': token
    })

    driver.login()
    return driver
Example #25
0
 def __init__(self, mattermost_setting, username, mattermost_user_setting, selector: MattermostChannelSelect):
     self.driver = Driver({
         'url': mattermost_setting['url'],
         'token': mattermost_user_setting['token'],
         'scheme': mattermost_setting['scheme'],
         'port': mattermost_setting['port'],
         'basepath': mattermost_setting['basepath'],
         'timeout': mattermost_setting['timeout']
     })
     self.username = username
     team_name = mattermost_user_setting['team_name']
     self.driver.login()
     self.selector = selector
     self.team_id = self.driver.teams.get_team_by_name(team_name)['id']
Example #26
0
def post_message(connector=Driver(),
                 msg="",
                 channel_id="",
                 mention="@channel",
                 files=list()):
    file_ids = list()

    for f in files:
        file_ids.append(upload_file(connector, channel_id, f))

    connector.posts.create_post({
        "message": mention + " " + msg,
        "channel_id": channel_id,
        "file_ids": file_ids
    })
def post_mattermost(msg, hashtag="", data=None):
    """
    Post a message to a mattermost server.

    Optionally pass a dictionary to print as a table.

    All messages prefixed with #API

    :param msg: String message
    :param hashtag: e.g. #Oncore
    :param data: Dictionary
    :return:
    """
    try:
        driver = Driver(
            dict(url=MATTERMOST_URL,
                 login_id=MATTERMOST_USER,
                 password=MATTERMOST_PW,
                 scheme='https',
                 verify=False,
                 port=443))

        if data is not None:
            msg = f'| #API  {hashtag} | {msg} |\n' \
                  f'| :--- | :--- |\n'
            for k in data:
                v = data[k]
                if isinstance(v, str) and v is not "":
                    msg += f'| {k} | {v} |\n'
                elif isinstance(v, dict):
                    for inner_key in v:
                        inner_val = v[inner_key]
                        if isinstance(inner_val, str) and inner_val is not "":
                            msg += f'| {inner_key} | {v[inner_key]} |\n'
        else:
            msg = f'#API {hashtag} {msg}'

        driver.login()
        channel_id = driver.channels.get_channel_by_name_and_team_name(
            MATTERMOST_TEAM, MATTERMOST_CHANNEL)['id']
        driver.posts.create_post(options={
            'channel_id': channel_id,
            'message': msg
        })
        driver.logout()
    except Exception as e:
        logging.error("Error while posting to mattermost")
        logging.error(e)
Example #28
0
    def __init__(self):
        with open('settings.yaml', "r") as file:
            self.parsed_data = yaml.safe_load(file)

        self.matt = Driver({
            'url':
            self.parsed_data["Raccooner"]["mattermost"]["general"]["url"],
            'token':
            self.parsed_data["Raccooner"]["mattermost"]["general"]
            ["access_token"],
            'port':
            self.parsed_data["Raccooner"]["mattermost"]["general"]["port"],
            'debug':
            False
        })
        self.matt.login()  # Automatic login
        self.raccoon_stats = {}  # Create an empty dictionary
Example #29
0
 def __init__(self, **kwargs):
     """Initialize Mattermost class which extends Chat ABC
     Args:
         **kwargs (dict): args to pass to Chat ABC
         team_channel (str): required for posting to channel
         channel_name (str): required for posting to channel
     """
     super().__init__(**kwargs)
     self.inst = Driver({
         'url': self.url,
         'verify': False,
         'token': self.api_key,
         'username': self.username,
         'port': kwargs.get('port', 8065)
     })
     self.team_name = kwargs.get("team_name", None)
     self.channel_name = kwargs.get("channel_name", None)
     self.filepath = kwargs.get("filepath", None)
Example #30
0
    def __init__(self, username, password, scheme='https', debug=False):
        self.subscriptions = set()

        self.username = username
        self.debug = debug

        self.driver = Driver({
            'url': "192.168.122.254",
            'login_id': username,
            'password': password,
            'scheme': scheme,
            'debug': debug,
        })
        self.driver.login()

        # get userid for username since it is not automatically set to driver.client.userid ... for reasons
        res = self.driver.users.get_user_by_username('bot')
        self.userid = res['id']