Beispiel #1
0
    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")
Beispiel #2
0
    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")            
Beispiel #3
0
    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")
Beispiel #4
0
    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")
Beispiel #5
0
    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")
Beispiel #6
0
    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")
Beispiel #7
0
    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")
Beispiel #8
0
    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
        )
Beispiel #9
0
    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")
Beispiel #10
0
    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")