def post(self, _id, _buuid): try: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) board = project.get_board_by_id(_buuid) to_jid = board['jid'] params = ujson.loads(self.request.body.decode('utf-8')) logging.info(params) cmd = project.get_command(params['cmd_type']) commander.send_command(cmd.name, to_jid, values=params['values'], cmd=cmd) self.write(json_encode({ 'status': 200, })) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def put(self, _id, messagetype): try: logging.info('message definition request') message = ujson.loads(self.request.body.decode('utf-8')) logging.info(message) project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) project.remove_message(message['metadata']['type']) message = project.add_message(message) write_result = yield dbapi.update_by_id('projects', _id, { "messages": project.value["messages"], "fwcode": project.value["fwcode"], }) logging.info(write_result) self.set_status(200) self.write(json.dumps(project.value, default=json_util.default)) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def delete(self, _id, messagetype): try: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) logging.info(project.value) #delete board ID message = project.remove_message(messagetype) logging.info('remove message: {}'.format(message)) write_result = yield dbapi.update_by_id('projects', _id, { "messages": project.value["messages"], "fwcode": project.value["fwcode"], }) logging.info(write_result) self.set_status(200) self.write(json.dumps(project.value, default=json_util.default)) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def get(self, _id): try: if _id: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) logging.info(project.value) self.write(json.dumps(project.value, default=json_util.default)) self.set_header("Content-Type", "application/json") else: projects = yield dbapi.find_all("projects", sort=[('name', pymongo.ASCENDING)], limit=10) logging.info(projects) projects_val = [] for project in projects: project_val = projectmanager.Project(project) projects_val.append(project_val.value) self.write(json.dumps(projects_val, default=json_util.default)) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def delete(self, _id): try: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) logging.info(project.value) #remove registered boards from broker if "boards" in project.value.keys(): for board in project.value["boards"]: apiresult = yield brokerapi.delete_user(board["ID"]) #remove over the air fw repo path: fwdir = os.path.join(settings.FIRMWARE_DIR, str(_id)) if os.path.exists(fwdir): shutil.rmtree(fwdir) #remove installer: installerdir = os.path.join( settings.DEVICE_INSTALLERS_REPO_PATH, settings.DEVICE_INSTALLER_NAME_TEMPLATE.format(str(_id))) if os.path.exists(installerdir): os.remove(installerdir) delete_result = yield dbapi.remove_by_id('projects', _id) logging.info(delete_result) self.set_status(200) except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def put(self, _id): logging.info(_id) try: update = ujson.loads(self.request.body.decode('utf-8')) if not "filter" in update.keys(): update.update({"filter": {}}) write_result = yield dbapi.update_by_id('projects', _id, update["document"], update["filter"]) logging.info(write_result) project = yield dbapi.find_one_by_id("projects", _id) #TODO: schema validation after update is bad ... project = projectmanager.Project(project) self.set_status(200) self.write(json.dumps(project.value, default=json_util.default)) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def get(self, _id, macaddress): try: dispatch_board = {'registration': {'new': False}} logging.info('device registration request for mac {}'.format(macaddress)) project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) #get board ID board = project.get_board_by_mac(macaddress) if not board: #create board ID logging.info('New board') board = project.add_board(macaddress) apiresult = yield brokerapi.create_user(board["ID"], board["password"], settings.XMPP_USER) write_result = yield dbapi.update_by_id('projects', _id, {"boards": project.value["boards"]}) logging.info(write_result) dispatch_board.update({'registration': {'new': True}}) logging.info(board) #allways return board ID in case the board has been re-installed but was already registered device_params = { "IOTTLY_XMPP_DEVICE_PASSWORD": board["password"], "IOTTLY_XMPP_DEVICE_USER": board["jid"], "IOTTLY_XMPP_SERVER_HOST": settings.PUBLIC_XMPP_HOST, "IOTTLY_XMPP_SERVER_PORT": settings.PUBLIC_XMPP_PORT, "IOTTLY_XMPP_SERVER_USER": settings.XMPP_USER, "IOTTLY_PROJECT_ID": _id, "IOTTLY_SECRET_SALT": project.value["secretsalt"] } logging.info(device_params) self.write(json.dumps(device_params, default=json_util.default)) self.set_header("Content-Type", "application/json") del board['password'] dispatch_board['registration'].update({'board': board}) self._broadcast(dispatch_board) except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def get(self, _id): project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) for ib in project.value["boards"]: ib['hash'] = hashlib.md5(ib['macaddress']).hexdigest() self.render('admin.html', ib_boards=project.value["boards"], commands=ibcommands.commands, CommandWithCustomUI=ibcommands.CommandWithCustomUI, sms_commands=ibcommands.sms_commands, js_includes=ibcommands.js_includes )
def post(self, _id, _buuid): try: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) board = project.get_board_by_id(_buuid) to_jid = board['jid'] params = {} reqbody = self.request.body.decode('utf-8') if reqbody: ujson.loads(reqbody) logging.info(params) filename = params.get("filename", None) if not filename: filename = project.fwcode.generateFullFw() firmwares = flashmanager.list_firmwares(_id, project.value['secretsalt'], project.value['fwextension']) #get md5 md5 = [fw["md5"] for fw in firmwares if fw['filename'] == filename][0] #prepare and send command cmd_name = "Upload Firmware" values = {'fw.file': filename, 'fw.md5': md5} cmd = ibcommands.commands_by_name[cmd_name] commander.send_command(cmd_name, to_jid, values=values, cmd=cmd) self.write(json_encode({ 'status': 200, })) self.set_header("Content-Type", "application/json") except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")
def delete(self, _id, macaddress): try: project = yield dbapi.find_one_by_id("projects", _id) project = projectmanager.Project(project) logging.info(project.value) #delete board ID board = project.remove_board(macaddress) logging.info('remove board: {}'.format(board)) apiresult = yield brokerapi.delete_user(board["ID"]) write_result = yield dbapi.update_by_id('projects', _id, {"boards": project.value["boards"]}) logging.info(write_result) except Exception as e: logging.error(e) self.set_status(500) error = {'error': '{}'.format(e)} self.write(json.dumps(error, default=json_util.default)) self.set_header("Content-Type", "application/json")