示例#1
0
    def __init__(self,
                 CB_PROTOCOL=None,
                 CB_HOST=None,
                 CB_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.CB_PROTOCOL = CB_PROTOCOL
        self.CB_HOST = CB_HOST
        self.CB_PORT = CB_PORT

        self.CBRestOperations = RestOperations("ORION", CB_PROTOCOL, CB_HOST,
                                               CB_PORT, CORRELATOR_ID,
                                               TRANSACTION_ID)
示例#2
0
    def __init__(self,
                 PERSEO_PROTOCOL=None,
                 PERSEO_HOST=None,
                 PERSEO_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.PERSEO_PROTOCOL = PERSEO_PROTOCOL
        self.PERSEO_HOST = PERSEO_HOST
        self.PERSEO_PORT = PERSEO_PORT

        self.PerseoRestOperations = RestOperations("PERSEO", PERSEO_PROTOCOL,
                                                   PERSEO_HOST, PERSEO_PORT,
                                                   CORRELATOR_ID,
                                                   TRANSACTION_ID)
示例#3
0
    def __init__(self,
                 IOTA_PROTOCOL=None,
                 IOTA_HOST=None,
                 IOTA_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.IOTA_PROTOCOL = IOTA_PROTOCOL
        self.IOTA_HOST = IOTA_HOST
        self.IOTA_PORT = IOTA_PORT

        self.IoTACppRestOperations = RestOperations("IOTA", IOTA_PROTOCOL,
                                                    IOTA_HOST, IOTA_PORT,
                                                    CORRELATOR_ID,
                                                    TRANSACTION_ID)
示例#4
0
    def __init__(self,
                 KEYPASS_PROTOCOL=None,
                 KEYPASS_HOST=None,
                 KEYPASS_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.KEYPASS_PROTOCOL = KEYPASS_PROTOCOL
        self.KEYPASS_HOST = KEYPASS_HOST
        self.KEYPASS_PORT = KEYPASS_PORT

        self.AccessControlRestOperations = RestOperations(
            "KEYPASS", KEYPASS_PROTOCOL, KEYPASS_HOST, KEYPASS_PORT,
            CORRELATOR_ID, TRANSACTION_ID)

        self.policy_dir = os.path.dirname(policies.__file__)
示例#5
0
    def __init__(self,
                 CB_PROTOCOL=None,
                 CB_HOST=None,
                 CB_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.CB_PROTOCOL = CB_PROTOCOL
        self.CB_HOST = CB_HOST
        self.CB_PORT = CB_PORT

        self.CBRestOperations = RestOperations("ORION",
                                               CB_PROTOCOL,
                                               CB_HOST,
                                               CB_PORT,
                                               CORRELATOR_ID,
                                               TRANSACTION_ID)
示例#6
0
    def __init__(self,
                 PERSEO_PROTOCOL=None,
                 PERSEO_HOST=None,
                 PERSEO_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.PERSEO_PROTOCOL = PERSEO_PROTOCOL
        self.PERSEO_HOST = PERSEO_HOST
        self.PERSEO_PORT = PERSEO_PORT

        self.PerseoRestOperations = RestOperations("PERSEO",
                                                   PERSEO_PROTOCOL,
                                                   PERSEO_HOST,
                                                   PERSEO_PORT,
                                                   CORRELATOR_ID,
                                                   TRANSACTION_ID)
示例#7
0
    def __init__(self,
                 KEYPASS_PROTOCOL=None,
                 KEYPASS_HOST=None,
                 KEYPASS_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.KEYPASS_PROTOCOL = KEYPASS_PROTOCOL
        self.KEYPASS_HOST = KEYPASS_HOST
        self.KEYPASS_PORT = KEYPASS_PORT

        self.AccessControlRestOperations = RestOperations("KEYPASS",
                                                          KEYPASS_PROTOCOL,
                                                          KEYPASS_HOST,
                                                          KEYPASS_PORT,
                                                          CORRELATOR_ID,
                                                          TRANSACTION_ID)

        self.policy_dir = os.path.dirname(policies.__file__)
示例#8
0
class PerseoOperations(object):
    '''
       IoT platform: Perseo rules
    '''
    def __init__(self,
                 PERSEO_PROTOCOL=None,
                 PERSEO_HOST=None,
                 PERSEO_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.PERSEO_PROTOCOL = PERSEO_PROTOCOL
        self.PERSEO_HOST = PERSEO_HOST
        self.PERSEO_PORT = PERSEO_PORT

        self.PerseoRestOperations = RestOperations("PERSEO", PERSEO_PROTOCOL,
                                                   PERSEO_HOST, PERSEO_PORT,
                                                   CORRELATOR_ID,
                                                   TRANSACTION_ID)

    def checkPERSEO(self):
        res = self.PerseoRestOperations.rest_request(url='/m2m/vrules',
                                                     method='GET',
                                                     data=None)
        assert res.code == 404, (res.code, res.msg)
        pass

    def deleteAllRules(self, SERVICE_USER_TOKEN, SERVICE_NAME,
                       SUBSERVICE_NAME):

        rules_deleted = []
        logger.debug("Getting rules for %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME))

        try:

            # GET all rules: /perseo-core/rules
            body_data = {}
            logger.debug("GET %s/%s to /m2m/vrules" %
                         (SERVICE_NAME, SUBSERVICE_NAME))
            res = self.PerseoRestOperations.rest_request(
                url='/m2m/vrules',
                method='GET',
                data=body_data,
                auth_token=SERVICE_USER_TOKEN,
                fiware_service=SERVICE_NAME,
                fiware_service_path='/' + SUBSERVICE_NAME)

            assert res.code == 200, (res.code, res.msg)
            data = res.read()
            rules = json.loads(data)
            logger.debug("rules: %s" % json.dumps(rules, indent=3))

        except Exception, ex:
            logger.warn("%s trying getRules from PERSEO: %s/%s" %
                        (ex, SERVICE_NAME, SUBSERVICE_NAME))
            return rules_deleted

        for rule in rules['data']:
            # DELETE /perseo-core/rules/{name}: removes a rule
            try:
                logger.debug("DELETE %s/%s to /m2m/vrules/{name} with: %s" %
                             (SERVICE_NAME, SUBSERVICE_NAME, rule['name']))
                res = self.PerseoRestOperations.rest_request(
                    url='/m2m/vrules/' + rule['name'],
                    method='DELETE',
                    data=body_data,
                    auth_token=SERVICE_USER_TOKEN,
                    fiware_service=SERVICE_NAME,
                    fiware_service_path='/' + SUBSERVICE_NAME)
                assert res.code == 204, (res.code, res.msg)
                rules_deleted.append(rule['name'])
            except Exception, ex:
                logger.warn("%s trying to remove rule: %s" %
                            (ex, rule['name']))
示例#9
0
class CBOrionOperations(object):
    '''
       IoT platform: Orion Context Broker
    '''

    def __init__(self,
                 CB_PROTOCOL=None,
                 CB_HOST=None,
                 CB_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.CB_PROTOCOL = CB_PROTOCOL
        self.CB_HOST = CB_HOST
        self.CB_PORT = CB_PORT

        self.CBRestOperations = RestOperations("ORION",
                                               CB_PROTOCOL,
                                               CB_HOST,
                                               CB_PORT,
                                               CORRELATOR_ID,
                                               TRANSACTION_ID)


    def checkCB(self):
        res = self.CBRestOperations.rest_request(
            url='/version',
            method='GET',
            data=None)
        # Expecting also headers about
        #  fiware-service, fiware-servicepath and x-auth-token
        assert res.code == 400, (res.code, res.msg)
        pass

    def registerContext(self,
                        SERVICE_USER_TOKEN,
                        SERVICE_NAME,
                        SUBSERVICE_NAME,
                        ENTITIES=[],
                        ATTRIBUTES=[],
                        APP="",
                        DURATION="P1M"):
        body_data = {
            "contextRegistrations": [
                {
                    "entities": ENTITIES,
                    "attributes": ATTRIBUTES,
                    "providingApplication": APP
                }
            ],
            "duration": DURATION
        }

        logger.debug("POST %s/%s to /v1/registry/registerContext with: %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            json.dumps(body_data, indent=3))
        )
        res = self.CBRestOperations.rest_request(
            url='/v1/registry/registerContext',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        return json_body_response


    def updateContext(self,
                      SERVICE_USER_TOKEN,
                      SERVICE_NAME,
                      SUBSERVICE_NAME,
                      ENTITY_TYPE,
                      ENTITY_ID,
                      ACTION="APPEND",
                      IS_PATTERN="false",
                      ATTRIBUTES=[]):

        body_data = {
            "contextElements": [
                {
                    "type": ENTITY_TYPE,
                    "id": ENTITY_ID,
                    "isPattern": IS_PATTERN,
                    "attributes": ATTRIBUTES
                }
            ],
            "updateAction": ACTION
        }

        logger.debug("POST %s/%s to /v1/updateContext with: %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            json.dumps(body_data, indent=3))
        )
        res = self.CBRestOperations.rest_request(
            url='/v1/updateContext',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        return json_body_response


    def getContextTypes(self,
                        SERVICE_USER_TOKEN,
                        SERVICE_NAME,
                        SUBSERVICE_NAME,
                        ENTITY_TYPE=None):

        logger.debug("Getting ContextTyesy for %s %s %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            ENTITY_TYPE)
        )
        res = self.CBRestOperations.rest_request(
            url='/v1/contextTypes%s?details=on&offset=0&limit=1000' % (
                '/' + ENTITY_TYPE if ENTITY_TYPE else ""),
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        if 'statusCode' in json_body_response:
            if (int(json_body_response['statusCode']['code']) != 200):
                return []

        return json_body_response


    def subscribeContext(self,
                         SERVICE_USER_TOKEN,
                         SERVICE_NAME,
                         SUBSERVICE_NAME,
                         REFERENCE_URL,
                         DURATION="P50Y",
                         ENTITIES=[],
                         ATTRIBUTES=[],
                         NOTIFY_CONDITIONS=[]):
        body_data = {
            "entities": ENTITIES,
            "attributes": ATTRIBUTES,
            "reference": REFERENCE_URL, # like http://<sth.host>:<sth.port>/notify
            "duration": DURATION,
            "notifyConditions": NOTIFY_CONDITIONS
        }
        logger.debug("POST %s/%s to /v1/subscribeContext with: %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            json.dumps(body_data, indent=3))
        )

        #TODO: v1/registry/subscribeContextAvailability ?
        res = self.CBRestOperations.rest_request(
            url='/v1/subscribeContext',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        return json_body_response


    def unsubscribeContext(self,
                           SERVICE_USER_TOKEN,
                           SERVICE_NAME,
                           SUBSERVICE_NAME,
                           SUBSCRIPTION_ID):

        body_data = {
            "subscriptionId": SUBSCRIPTION_ID
        }

        logger.debug("POST %s/%s to /v1/unsubscribeContext with: %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            json.dumps(body_data, indent=3))
        )

        res = self.CBRestOperations.rest_request(
            url='/v1/unsubscribeContext',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        return json_body_response

    def getContextEntity(self,
                         SERVICE_USER_TOKEN,
                         SERVICE_NAME,
                         SUBSERVICE_NAME,
                         ENTITY_ID):
        logger.debug("Getting ContextEntity for %s %s %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            ENTITY_ID)
        )
        res = self.CBRestOperations.rest_request(
            url='/v1/contextEntities/%s' % ENTITY_ID ,
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/'+SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" % json.dumps(json_body_response,
                                                      indent=3))
        return json_body_response


    def getListSubscriptions(self,
                             SERVICE_USER_TOKEN,
                             SERVICE_NAME,
                             SUBSERVICE_NAME,
                             ENTITY_ID=None):

        logger.debug("Getting subscriptions for %s %s %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME,
            ENTITY_ID)
        )
        offset = 0
        page = 40
        fiware_total_count = page
        subscriptions_related = []

        while (offset + page <= fiware_total_count):
            url='/v2/subscriptions?offset=%s&limit=%s&options=count' % (offset, page)
            res = self.CBRestOperations.rest_request(
                url=url,
                method='GET',
                data=None,
                auth_token=SERVICE_USER_TOKEN,
                fiware_service=SERVICE_NAME,
                fiware_service_path='/'+SUBSERVICE_NAME)

            assert res.code == 200, (res.code, res.msg)
            data = res.read()
            json_body_response = json.loads(data)
            logger.debug("json response: %s" % json.dumps(json_body_response,
                                                          indent=3))

            # ensure subcrtiptions is an array
            if isinstance(json_body_response, list):
                for subscription in json_body_response:
                    for entity in subscription['subject']['entities']:
                        if ( ((not 'idPattern' in entity) or
                              ('idPattern' in entity and not entity['idPattern'])) and
                             entity['id'] == ENTITY_ID):
                            subscriptions_related.append(subscription)
                        if ('idPattern' in entity and entity['idPattern'] and
                            entity['idPattern'] in [".*", "*"]):
                            subscriptions_related.append(subscription)

            fiware_total_count = int(res.headers.get('Fiware-Total-Count', 0))
            offset += page

        return subscriptions_related


    def deleteAllSubscriptions(self,
                               SERVICE_USER_TOKEN,
                               SERVICE_NAME,
                               SUBSERVICE_NAME=""):

        subscriptions_deleted = []
        logger.debug("Removing all subscriptions for %s %s" % (
            SERVICE_NAME,
            SUBSERVICE_NAME)
        )
        try:
            subscriptions = self.getListSubscriptions(SERVICE_USER_TOKEN,
                                                      SERVICE_NAME,
                                                      SUBSERVICE_NAME)
            logger.debug("subscriptions: %s" % json.dumps(subscriptions,
                                                          indent=3))
        except Exception, ex:
            logger.warn("%s trying getListSubscriptions from CB: %s/%s" % (ex,
                                SERVICE_NAME,
                                SUBSERVICE_NAME))
            return subscriptions_deleted

        for subscription in subscriptions:
            try:
                self.unsubscribeContext(SERVICE_USER_TOKEN,
                                        SERVICE_NAME,
                                        SUBSERVICE_NAME,
                                        subscription['id'])
                subscriptions_deleted.append(subscription['id'])
            except Exception, ex:
                logger.warn("%s trying to unsubscribe context: %s" % (ex,
                                                        subscription['id']))
示例#10
0
class AccCKeypassOperations(AccCOperations):
    '''
       IoT Access Control: Keypass
    '''
    def __init__(self,
                 KEYPASS_PROTOCOL=None,
                 KEYPASS_HOST=None,
                 KEYPASS_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.KEYPASS_PROTOCOL = KEYPASS_PROTOCOL
        self.KEYPASS_HOST = KEYPASS_HOST
        self.KEYPASS_PORT = KEYPASS_PORT

        self.AccessControlRestOperations = RestOperations(
            "KEYPASS", KEYPASS_PROTOCOL, KEYPASS_HOST, KEYPASS_PORT,
            CORRELATOR_ID, TRANSACTION_ID)

        self.policy_dir = os.path.dirname(policies.__file__)

    def checkAccC(self):
        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/', method='GET', data=None)
        assert res.code == 404, (res.code, res.msg)

    def provisionPolicy(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                        SERVICE_ROLE_ID, POLICY_FILE_NAME):

        xml_data = open(self.policy_dir + '/' + POLICY_FILE_NAME)
        body_data = xml_data.read()
        logger.debug("data response: %s" % body_data)
        xml_data.close()
        self.provisionPolicyByContent(SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                                      SERVICE_ROLE_ID, body_data)

    def provisionPolicyByContent(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                                 SERVICE_ROLE_ID, POLICY_CONTENT):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/' + SERVICE_ROLE_ID,
            method='POST',
            json_data=False,
            data=POLICY_CONTENT,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 201, (res.code, res.msg)
        # TODO: return ?

    def deleteTenantPolicies(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1',
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)

    def getRolePolicies(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                        SERVICE_ROLE_ID):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/' + SERVICE_ROLE_ID,
            method='GET',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        body_data = res.read()
        logger.debug("data response: %s" % body_data)
        return body_data

    def getRolePolicy(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN, SERVICE_ROLE_ID,
                      POLICY_NAME):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/' + SERVICE_ROLE_ID + '/policy/' +
            POLICY_NAME,
            method='GET',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        body_data = res.read()
        logger.debug("data response: %s" % body_data)
        return body_data

    def deleteRolePolicies(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                           SERVICE_ROLE_ID):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/' + SERVICE_ROLE_ID,
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)

    def deleteRolePolicy(self, SERVICE_NAME, SERVICE_ADMIN_TOKEN,
                         SERVICE_ROLE_ID, POLICY_NAME):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/' + SERVICE_ROLE_ID + '/policy/' +
            POLICY_NAME,
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)
示例#11
0
class CBOrionOperations(object):
    '''
       IoT platform: Orion Context Broker
    '''
    def __init__(self,
                 CB_PROTOCOL=None,
                 CB_HOST=None,
                 CB_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.CB_PROTOCOL = CB_PROTOCOL
        self.CB_HOST = CB_HOST
        self.CB_PORT = CB_PORT

        self.CBRestOperations = RestOperations("ORION", CB_PROTOCOL, CB_HOST,
                                               CB_PORT, CORRELATOR_ID,
                                               TRANSACTION_ID)

    def checkCB(self):
        res = self.CBRestOperations.rest_request(url='/version',
                                                 method='GET',
                                                 data=None)
        # Expecting also headers about
        #  fiware-service, fiware-servicepath and x-auth-token
        assert res.code == 400, (res.code, res.msg)
        pass

    def registerContext(self,
                        SERVICE_USER_TOKEN,
                        SERVICE_NAME,
                        SUBSERVICE_NAME,
                        ENTITIES=[],
                        ATTRIBUTES=[],
                        APP="",
                        DURATION="P1M"):
        body_data = {
            "contextRegistrations": [{
                "entities": ENTITIES,
                "attributes": ATTRIBUTES,
                "providingApplication": APP
            }],
            "duration":
            DURATION
        }

        logger.debug(
            "POST %s/%s to /v1/registry/registerContext with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))
        res = self.CBRestOperations.rest_request(
            url='/v1/registry/registerContext',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def updateContext(self,
                      SERVICE_USER_TOKEN,
                      SERVICE_NAME,
                      SUBSERVICE_NAME,
                      ENTITY_TYPE,
                      ENTITY_ID,
                      ACTION="APPEND",
                      IS_PATTERN="false",
                      ATTRIBUTES=[]):

        body_data = {
            "contextElements": [{
                "type": ENTITY_TYPE,
                "id": ENTITY_ID,
                "isPattern": IS_PATTERN,
                "attributes": ATTRIBUTES
            }],
            "updateAction":
            ACTION
        }

        logger.debug(
            "POST %s/%s to /v1/updateContext with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))
        res = self.CBRestOperations.rest_request(url='/v1/updateContext',
                                                 method='POST',
                                                 data=body_data,
                                                 auth_token=SERVICE_USER_TOKEN,
                                                 fiware_service=SERVICE_NAME,
                                                 fiware_service_path='/' +
                                                 SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def getContextTypes(self,
                        SERVICE_USER_TOKEN,
                        SERVICE_NAME,
                        SUBSERVICE_NAME,
                        ENTITY_TYPE=None):

        logger.debug("Getting ContextTyesy for %s %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME, ENTITY_TYPE))
        res = self.CBRestOperations.rest_request(
            url='/v1/contextTypes%s?details=on&offset=0&limit=1000' %
            ('/' + ENTITY_TYPE if ENTITY_TYPE else ""),
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        if 'statusCode' in json_body_response:
            if (int(json_body_response['statusCode']['code']) != 200):
                return []

        return json_body_response

    def subscribeContext(self,
                         SERVICE_USER_TOKEN,
                         SERVICE_NAME,
                         SUBSERVICE_NAME,
                         REFERENCE_URL,
                         DURATION="P50Y",
                         ENTITIES=[],
                         ATTRIBUTES=[],
                         NOTIFY_CONDITIONS=[]):
        body_data = {
            "entities": ENTITIES,
            "attributes": ATTRIBUTES,
            "reference":
            REFERENCE_URL,  # like http://<sth.host>:<sth.port>/notify
            "duration": DURATION,
            "notifyConditions": NOTIFY_CONDITIONS
        }
        logger.debug(
            "POST %s/%s to /v1/subscribeContext with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))

        #TODO: v1/registry/subscribeContextAvailability ?
        res = self.CBRestOperations.rest_request(url='/v1/subscribeContext',
                                                 method='POST',
                                                 data=body_data,
                                                 auth_token=SERVICE_USER_TOKEN,
                                                 fiware_service=SERVICE_NAME,
                                                 fiware_service_path='/' +
                                                 SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def unsubscribeContext(self, SERVICE_USER_TOKEN, SERVICE_NAME,
                           SUBSERVICE_NAME, SUBSCRIPTION_ID):

        body_data = {"subscriptionId": SUBSCRIPTION_ID}

        logger.debug(
            "POST %s/%s to /v1/unsubscribeContext with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))

        res = self.CBRestOperations.rest_request(url='/v1/unsubscribeContext',
                                                 method='POST',
                                                 data=body_data,
                                                 auth_token=SERVICE_USER_TOKEN,
                                                 fiware_service=SERVICE_NAME,
                                                 fiware_service_path='/' +
                                                 SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def getContextEntity(self, SERVICE_USER_TOKEN, SERVICE_NAME,
                         SUBSERVICE_NAME, ENTITY_ID):
        logger.debug("Getting ContextEntity for %s %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME, ENTITY_ID))
        res = self.CBRestOperations.rest_request(
            url='/v1/contextEntities/%s' % ENTITY_ID,
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def getListSubscriptions(self,
                             SERVICE_USER_TOKEN,
                             SERVICE_NAME,
                             SUBSERVICE_NAME,
                             ENTITY_ID=None):

        logger.debug("Getting subscriptions for %s %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME, ENTITY_ID))
        offset = 0
        page = 40
        fiware_total_count = page
        subscriptions_related = []

        while (offset + page <= fiware_total_count):
            url = '/v2/subscriptions?offset=%s&limit=%s&options=count' % (
                offset, page)
            res = self.CBRestOperations.rest_request(
                url=url,
                method='GET',
                data=None,
                auth_token=SERVICE_USER_TOKEN,
                fiware_service=SERVICE_NAME,
                fiware_service_path='/' + SUBSERVICE_NAME)

            assert res.code == 200, (res.code, res.msg)
            data = res.read()
            json_body_response = json.loads(data)
            logger.debug("json response: %s" %
                         json.dumps(json_body_response, indent=3))

            # ensure subcrtiptions is an array
            if isinstance(json_body_response, list):
                for subscription in json_body_response:
                    for entity in subscription['subject']['entities']:
                        if (((not 'idPattern' in entity) or
                             ('idPattern' in entity
                              and not entity['idPattern']))
                                and entity['id'] == ENTITY_ID):
                            subscriptions_related.append(subscription)
                        if ('idPattern' in entity and entity['idPattern']
                                and entity['idPattern'] in [".*", "*"]):
                            subscriptions_related.append(subscription)

            fiware_total_count = int(res.headers.get('Fiware-Total-Count', 0))
            offset += page

        return subscriptions_related

    def deleteAllSubscriptions(self,
                               SERVICE_USER_TOKEN,
                               SERVICE_NAME,
                               SUBSERVICE_NAME=""):

        subscriptions_deleted = []
        logger.debug("Removing all subscriptions for %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME))
        try:
            subscriptions = self.getListSubscriptions(SERVICE_USER_TOKEN,
                                                      SERVICE_NAME,
                                                      SUBSERVICE_NAME)
            logger.debug("subscriptions: %s" %
                         json.dumps(subscriptions, indent=3))
        except Exception, ex:
            logger.warn("%s trying getListSubscriptions from CB: %s/%s" %
                        (ex, SERVICE_NAME, SUBSERVICE_NAME))
            return subscriptions_deleted

        for subscription in subscriptions:
            try:
                self.unsubscribeContext(SERVICE_USER_TOKEN, SERVICE_NAME,
                                        SUBSERVICE_NAME, subscription['id'])
                subscriptions_deleted.append(subscription['id'])
            except Exception, ex:
                logger.warn("%s trying to unsubscribe context: %s" %
                            (ex, subscription['id']))
示例#12
0
class PerseoOperations(object):
    '''
       IoT platform: Perseo rules
    '''

    def __init__(self,
                 PERSEO_PROTOCOL=None,
                 PERSEO_HOST=None,
                 PERSEO_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.PERSEO_PROTOCOL = PERSEO_PROTOCOL
        self.PERSEO_HOST = PERSEO_HOST
        self.PERSEO_PORT = PERSEO_PORT

        self.PerseoRestOperations = RestOperations("PERSEO",
                                                   PERSEO_PROTOCOL,
                                                   PERSEO_HOST,
                                                   PERSEO_PORT,
                                                   CORRELATOR_ID,
                                                   TRANSACTION_ID)


    def checkPERSEO(self):
        res = self.PerseoRestOperations.rest_request(
            url='/m2m/vrules',
            method='GET',
            data=None)
        assert res.code == 200, (res.code, res.msg)
        pass


    def deleteAllRules(self,
                       SERVICE_USER_TOKEN,
                       SERVICE_NAME,
                       SUBSERVICE_NAME):

        rules_deleted = []
        logger.debug("Getting rules for %s %s" % (SERVICE_NAME,
                                                  SUBSERVICE_NAME))

        try:

            # GET all rules: /perseo-core/rules
            body_data = {}
            logger.debug("GET %s/%s to /m2m/vrules" % (
                SERVICE_NAME,
                SUBSERVICE_NAME))
            res = self.PerseoRestOperations.rest_request(
                url='/m2m/vrules',
                method='GET',
                data=body_data,
                auth_token=SERVICE_USER_TOKEN,
                fiware_service=SERVICE_NAME,
                fiware_service_path='/'+SUBSERVICE_NAME)

            assert res.code == 200, (res.code, res.msg)
            data = res.read()
            rules = json.loads(data)
            logger.debug("rules: %s" % json.dumps(rules, indent=3))

        except Exception, ex:
            logger.warn("%s trying getRules from PERSEO: %s/%s" % (ex,
                                                                    SERVICE_NAME,
                                                                    SUBSERVICE_NAME))
            return rules_deleted

        for rule in rules['data']:
            # DELETE /perseo-core/rules/{name}: removes a rule
            try:
                logger.debug("DELETE %s/%s to /m2m/vrules/{name} with: %s" % (
                    SERVICE_NAME,
                    SUBSERVICE_NAME,
                    rule['name'])
                )
                res = self.PerseoRestOperations.rest_request(
                    url='/m2m/vrules/'+ rule['name'],
                    method='DELETE',
                    data=body_data,
                    auth_token=SERVICE_USER_TOKEN,
                    fiware_service=SERVICE_NAME,
                    fiware_service_path='/'+SUBSERVICE_NAME)
                assert res.code == 204, (res.code, res.msg)
                rules_deleted.append(rule['name'])
            except Exception, ex:
                logger.warn("%s trying to remove rule: %s" % (ex,
                                                               rule['name']))
示例#13
0
class AccCKeypassOperations(AccCOperations):
    '''
       IoT Access Control: Keypass
    '''
    def __init__(self,
                 KEYPASS_PROTOCOL=None,
                 KEYPASS_HOST=None,
                 KEYPASS_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.KEYPASS_PROTOCOL = KEYPASS_PROTOCOL
        self.KEYPASS_HOST = KEYPASS_HOST
        self.KEYPASS_PORT = KEYPASS_PORT

        self.AccessControlRestOperations = RestOperations("KEYPASS",
                                                          KEYPASS_PROTOCOL,
                                                          KEYPASS_HOST,
                                                          KEYPASS_PORT,
                                                          CORRELATOR_ID,
                                                          TRANSACTION_ID)

        self.policy_dir = os.path.dirname(policies.__file__)

    def checkAccC(self):
        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/',
            method='GET',
            data=None)
        assert res.code == 404, (res.code, res.msg)

    def provisionPolicy(self,
                        SERVICE_NAME,
                        SERVICE_ADMIN_TOKEN,
                        SERVICE_ROLE_ID,
                        POLICY_FILE_NAME):

        xml_data = open(self.policy_dir + '/' + POLICY_FILE_NAME)
        body_data = xml_data.read()
        logger.debug("data response: %s" % body_data)
        xml_data.close()
        self.provisionPolicyByContent(SERVICE_NAME,
                                      SERVICE_ADMIN_TOKEN,
                                      SERVICE_ROLE_ID,
                                      body_data)

    def provisionPolicyByContent(self,
                                 SERVICE_NAME,
                                 SERVICE_ADMIN_TOKEN,
                                 SERVICE_ROLE_ID,
                                 POLICY_CONTENT):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/'+SERVICE_ROLE_ID,
            method='POST',
            json_data=False,
            data=POLICY_CONTENT,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 201, (res.code, res.msg)
        # TODO: return ?

    def deleteTenantPolicies(self,
                             SERVICE_NAME,
                             SERVICE_ADMIN_TOKEN):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1',
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)

    def getRolePolicies(self,
                        SERVICE_NAME,
                        SERVICE_ADMIN_TOKEN,
                        SERVICE_ROLE_ID):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/'+SERVICE_ROLE_ID,
            method='GET',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        body_data = res.read()
        logger.debug("data response: %s" % body_data)
        return body_data

    def getRolePolicy(self,
                      SERVICE_NAME,
                      SERVICE_ADMIN_TOKEN,
                      SERVICE_ROLE_ID,
                      POLICY_NAME):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/'+ SERVICE_ROLE_ID + '/policy/' + POLICY_NAME,
            method='GET',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        body_data = res.read()
        logger.debug("data response: %s" % body_data)
        return body_data

    def deleteRolePolicies(self,
                           SERVICE_NAME,
                           SERVICE_ADMIN_TOKEN,
                           SERVICE_ROLE_ID):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/'+SERVICE_ROLE_ID,
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)

    def deleteRolePolicy(self,
                         SERVICE_NAME,
                         SERVICE_ADMIN_TOKEN,
                         SERVICE_ROLE_ID,
                         POLICY_NAME):

        res = self.AccessControlRestOperations.rest_request(
            url='/pap/v1/subject/'+ SERVICE_ROLE_ID + '/policy/' + POLICY_NAME,
            method='DELETE',
            json_data=False,
            auth_token=SERVICE_ADMIN_TOKEN,
            fiware_service=SERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)
示例#14
0
class IoTACppOperations(object):
    '''
       IoT platform: IoTAgent
    '''
    def __init__(self,
                 IOTA_PROTOCOL=None,
                 IOTA_HOST=None,
                 IOTA_PORT=None,
                 CORRELATOR_ID=None,
                 TRANSACTION_ID=None):

        self.IOTA_PROTOCOL = IOTA_PROTOCOL
        self.IOTA_HOST = IOTA_HOST
        self.IOTA_PORT = IOTA_PORT

        self.IoTACppRestOperations = RestOperations("IOTA", IOTA_PROTOCOL,
                                                    IOTA_HOST, IOTA_PORT,
                                                    CORRELATOR_ID,
                                                    TRANSACTION_ID)

    def checkIoTA(self):
        res = self.IoTACppRestOperations.rest_request(url='/iot/',
                                                      method='GET',
                                                      data=None)
        assert res.code == 404, (res.code, res.msg)
        pass

    def registerService(self,
                        SERVICE_USER_TOKEN,
                        SERVICE_NAME,
                        SUBSERVICE_NAME,
                        PROTOCOL,
                        ENTITY_TYPE,
                        APIKEY,
                        TRUSTTOKENID,
                        CBROKER_ENDPOINT,
                        MAPPING_ATTRIBUTES=[],
                        STATIC_ATTRIBUTES=[]):
        body_data = {
            "services": [{
                "protocol": [PROTOCOL],
                "entity_type": ENTITY_TYPE,
                "apikey": APIKEY,
                "token": TRUSTTOKENID,
                "cbroker": CBROKER_ENDPOINT,
                "attributes": MAPPING_ATTRIBUTES,
                "static_attributes": STATIC_ATTRIBUTES,
            }]
        }

        logger.debug(
            "POST %s/%s to iot/services with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))

        res = self.IoTACppRestOperations.rest_request(
            url='/iot/services',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 201, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def getServices(self, SERVICE_USER_TOKEN, SERVICE_NAME, SUBSERVICE_NAME):

        logger.debug("GET %s/%s to iot/services " %
                     (SERVICE_NAME, SUBSERVICE_NAME))
        res = self.IoTACppRestOperations.rest_request(
            url='/iot/services',
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def registerDevice(self,
                       SERVICE_USER_TOKEN,
                       SERVICE_NAME,
                       SUBSERVICE_NAME,
                       DEVICE_ID,
                       PROTOCOL,
                       ENTITY_NAME,
                       ENTITY_TYPE,
                       TIMEZONE,
                       ATTRIBUTES=[],
                       STATIC_ATTRIBUTES=[],
                       COMMANDS=[],
                       INTERNAL_ATTRIBUTES=[],
                       LAZY=[]):

        body_data = {
            "devices": [{
                "device_id": DEVICE_ID,
                "protocol": PROTOCOL,
                "service": SERVICE_NAME,
                "service_path": SUBSERVICE_NAME,
                "entity_name": ENTITY_NAME,
                "entity_type": ENTITY_TYPE,
                "timezone": TIMEZONE,
                "attributes": ATTRIBUTES,
                "static_attributes": STATIC_ATTRIBUTES,
                "commands": COMMANDS,
                "internal_attributes": INTERNAL_ATTRIBUTES,
                "lazy": LAZY
            }]
        }

        logger.debug(
            "POST %s/%s to iot/devices with: %s" %
            (SERVICE_NAME, SUBSERVICE_NAME, json.dumps(body_data, indent=3)))

        res = self.IoTACppRestOperations.rest_request(
            url='/iot/devices',
            method='POST',
            data=body_data,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 201, (res.code, res.msg)

        # TODO get Location ?
        # TODO return something?
        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def getDevices(self, SERVICE_USER_TOKEN, SERVICE_NAME, SUBSERVICE_NAME):

        logger.debug("GET %s/%s to iot/devices" %
                     (SERVICE_NAME, SUBSERVICE_NAME))

        res = self.IoTACppRestOperations.rest_request(
            url='/iot/devices',
            method='GET',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 200, (res.code, res.msg)

        data = res.read()
        json_body_response = json.loads(data)
        logger.debug("json response: %s" %
                     json.dumps(json_body_response, indent=3))
        return json_body_response

    def unregisterDevice(self, SERVICE_USER_TOKEN, SERVICE_NAME,
                         SUBSERVICE_NAME, DEVICE_ID):

        logger.debug("DELETE %s/%s to iot/devices with: %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME, DEVICE_ID))

        res = self.IoTACppRestOperations.rest_request(
            url='/iot/devices/%s' % DEVICE_ID,
            method='DELETE',
            data=None,
            auth_token=SERVICE_USER_TOKEN,
            fiware_service=SERVICE_NAME,
            fiware_service_path='/' + SUBSERVICE_NAME)

        assert res.code == 204, (res.code, res.msg)

    def deleteAllDevices(self,
                         SERVICE_USER_TOKEN,
                         SERVICE_NAME,
                         SUBSERVICE_NAME=""):
        #
        # 1. Get devices
        #
        devices_deleted = []

        logger.debug("Getting devices for %s %s" %
                     (SERVICE_NAME, SUBSERVICE_NAME))
        try:
            devices = self.getDevices(SERVICE_USER_TOKEN, SERVICE_NAME,
                                      SUBSERVICE_NAME)
            # Check devices returned: IOTA returns devices into dict before some versions
            if 'devices' in devices:
                devices = devices['devices']
        except Exception, ex:
            logger.warn("%s trying getDevices from IOTA: %s/%s" %
                        (ex, SERVICE_NAME, SUBSERVICE_NAME))
            return devices_deleted

        for device in devices:
            #
            # 2. Unregister each device
            #
            # Get device_id: IOTA returns device_id in a field depending on version
            device_id = None
            if 'device_id' in device:
                device_id = device['device_id']
            if 'id' in device:
                device_id = device['id']

            logger.debug("Unregistering device: %s" % device_id)
            try:
                self.unregisterDevice(SERVICE_USER_TOKEN, SERVICE_NAME,
                                      SUBSERVICE_NAME, device_id)
                devices_deleted.append(device_id)
            except Exception, ex:
                logger.warn("%s trying to unregister device: %s" %
                            (ex, device_id))