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 __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 __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 __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 __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__)
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']))
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']))
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)
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']))
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']))
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)
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))