コード例 #1
0
ファイル: mist_verbs.py プロジェクト: wifinigel/mist-utils
    def __init__(self, token, read_only=True):

        self.token = token
        self.read_only = read_only
        self.session = requests.Session()
        self.logger = ScriptLogger('MistVerbs')
        self.response_headers = ''

        # define common headers
        self.headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Token {}'.format(token)
        }
コード例 #2
0
import requests
import logging
import sys
import time
import csv
from datetime import datetime
import argparse

from modules.core.logger import ScriptLogger
from modules.core.mist_verbs import MistVerbs
from modules.core.stopwatch import StopWatch
from modules.core.get_vars import GetVars
from modules.core.banner import header, footer

# set up logging
logger = ScriptLogger('mist_api')

# get requried vars (token & org IDs)
vars_obj = GetVars()
vars_found = vars_obj.find_vars()
api_token = vars_found.get('token')

# create parser args
parse_descr = "Script to list summary of an organisation. (Requires MIST_TOKEN env var, org_id may be passed on CLI or via MIST_ORG_ID env var) \n"
parser = argparse.ArgumentParser(description=parse_descr)
parser.add_argument('org_id', nargs='?', default=vars_found.get('org_id'))

args = parser.parse_args()

# get the site_id passed on the command line
org_id = args.org_id
コード例 #3
0
ファイル: mist_verbs.py プロジェクト: wifinigel/mist-utils
class MistVerbs(object):
    """
    A class to peform read, create, update & delete operations via the
    Mist API.

    Arguments:
        token {mandatory str} -- [API token string]
        read_only {optional boolean} -- [True (default) allows only read operations]
    """
    def __init__(self, token, read_only=True):

        self.token = token
        self.read_only = read_only
        self.session = requests.Session()
        self.logger = ScriptLogger('MistVerbs')
        self.response_headers = ''

        # define common headers
        self.headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Token {}'.format(token)
        }

    def mist_read(self, url):
        """function to get data structure from Mist API using a requests session. This
        provides a read operation via the Mist API to retrieve data.

        Arguments:
            url {str} -- [Full URL of API call]
            session {requests session obj} -- [session object created using requests]

        Raises:
            Exception: [Generic failure message if http request fails]

        Returns:
            [data structure] -- [Data structure returned - varies with API call]
        """

        response = self.session.get(url, headers=self.headers)
        self.response_headers = response.headers

        if response.status_code == 200:
            return json.loads(response.content.decode('utf-8'))
        else:
            print(
                '** Query to Mist API failed: {} (check token or req URL format?) - Bad URL: {}'
                .format(responses[response.status_code], url))
            sys.exit()

    def mist_create(self, url, data=''):
        """function to post data structure to Mist API using a requests session. This
        has the effect of creating new objects via the Mist API

        Arguments:
            url {str} -- [Full URL of API call]
            session {requests session obj} -- [session object created using requests]
            data {dict} -- [data dict structure]

        Raises:
            Exception: [Generic failure message if http post fails]

        Returns:
            [boolean] -- [True = post OK, False = bad post]
        """

        # check if object is read only
        if self.read_only:
            self.logger.error('Object is read only...exiting')
            print(
                '** Object is read-only. If you intend to perform write/update/delete operations, set read_only=False when creating object'
            )
            sys.exit()

        response = None

        if data:
            response = self.session.post(url,
                                         headers=self.headers,
                                         data=json.dumps(data))
            self.response_headers = response.headers
        else:
            response = self.session.post(url, headers=self.headers)
            self.response_headers = response.headers

        if response.status_code == 200:
            return json.loads(response.content.decode('utf-8'))
        else:
            print(
                '** Query to Mist API failed: {} (check token or req URL format?) - bad URL: {}'
                .format(responses[response.status_code], url))
            sys.exit()

    def mist_update(self, url, data):
        """function to put data structure to Mist API using a requests session. This
        hs the effect of doing an update of data sent to the Mist API

        Arguments:
            url {str} -- [Full URL of API call]
            session {requests session obj} -- [session object created using requests]
            data {dict} -- [data dict structure]

        Raises:
            Exception: [Generic failure message if http post fails]

        Returns:
            [boolean] -- [True = post OK, False = bad post]
        """

        # check if object is read only
        if self.read_only:
            self.logger.error('Object is read only...exiting')
            print(
                'Object is read-only. If you intend to perform write/update/delete operations, set read_only=False when creating object'
            )
            sys.exit()

        response = self.session.put(url,
                                    headers=self.headers,
                                    data=json.dumps(data))
        self.response_headers = response.headers

        if response.status_code == 200:
            return json.loads(response.content.decode('utf-8'))
        else:
            print(
                '** Query to Mist API failed: {} (check token or req URL format?)'
                .format(responses[response.status_code]))
            sys.exit()

    def mist_delete(self, url):
        """function to delete object from Mist API using a requests session

        Arguments:
            url {str} -- [Full URL of API call inc ID of object to be deleted]
            session {requests session obj} -- [session object created using requests]

        Raises:
            Exception: [Generic failure message if http delete fails]

        Returns:
            [boolean] -- [True = delete OK, False = bad delete]
        """

        # check if object is read only
        if self.read_only:
            self.logger.error('Object is read only...exiting')
            raise Exception(
                'Object is read-only. If you intend to perform write/update/delete operations, set read_only=False when creating object'
            )

        response = self.session.delete(url, headers=self.headers)
        self.response_headers = response.headers

        if response.status_code == 200:
            return json.loads(response.content.decode('utf-8'))
        else:
            print(
                '** Query to Mist API failed: {} (check token or req URL format?) - Bad URL: {}'
                .format(responses[response.status_code], url))
            sys.exit()
コード例 #4
0
ファイル: token_list.py プロジェクト: wifinigel/mist-utils
script of an accompanying config file. It should be created as an env_var
that is private to your environment, not a global var on the machine that
you are working on.
"""

import os
import sys
from pprint import pprint

from modules.core.logger import ScriptLogger
from modules.core.mist_verbs import MistVerbs
from modules.core.stopwatch import StopWatch
from modules.core.get_vars import GetVars
from modules.core.banner import header, footer

logger = ScriptLogger('mist-api')
logger.info("Starting script...")

# supply required token
vars_obj = GetVars()
vars_found = vars_obj.find_vars()
api_token = vars_found.get('token')

# define URLs
base_url = "https://api.mist.com"
tokens_url = "{}/api/v1/self/apitokens".format(base_url)


def main():

    timer = StopWatch()