Пример #1
0
 async def snapshot(self, request: Request) -> Any:
     custom_name = request.query.get("custom_name", None)
     retain_drive = BoolValidator.strToBool(
         request.query.get("retain_drive", False))
     retain_ha = BoolValidator.strToBool(
         request.query.get("retain_ha", False))
     options = CreateOptions(self._time.now(), custom_name, {
         SOURCE_GOOGLE_DRIVE: retain_drive,
         SOURCE_HA: retain_ha
     })
     snapshot = await self._coord.startSnapshot(options)
     return web.json_response({"message": "Requested snapshot '{0}'".format(snapshot.name())})
Пример #2
0
 async def deleteSnapshot(self, request: Request):
     drive = BoolValidator.strToBool(request.query.get("drive", False))
     ha = BoolValidator.strToBool(request.query.get("ha", False))
     slug = request.query.get("slug", "")
     self._coord.getSnapshot(slug)
     sources = []
     messages = []
     if drive:
         messages.append("Google Drive")
         sources.append(SOURCE_GOOGLE_DRIVE)
     if ha:
         messages.append("Home Assistant")
         sources.append(SOURCE_HA)
     await self._coord.delete(sources, slug)
     return web.json_response({"message": "Deleted from " + " and ".join(messages)})
    async def exposeserver(self, request: Request):
        expose = BoolValidator.strToBool(request.query.get("expose", False))
        if expose:
            update = {Setting.EXPOSE_EXTRA_SERVER: True}
        else:
            update = {
                Setting.EXPOSE_EXTRA_SERVER: False,
                Setting.USE_SSL: False,
                Setting.REQUIRE_LOGIN: False
            }
        validated = self.config.validateUpdate(update)
        await self._updateConfiguration(validated)

        File.touch(self.config.get(Setting.INGRESS_TOKEN_FILE_PATH))
        await self._ha_source.init()

        redirect = ""
        try:
            if request.url.port != self.config.get(Setting.INGRESS_PORT):
                redirect = self._ha_source.getFullAddonUrl()
        except:  # noqa: E722
            # eat the error
            pass
        return web.json_response({
            'message': 'Configuration updated',
            'redirect': redirect
        })
    async def errorreports(self, request: Request):
        send = BoolValidator.strToBool(request.query.get("send", False))

        update = {"send_error_reports": send}
        validated = self.config.validateUpdate(update)
        await self._updateConfiguration(validated)
        return web.json_response({'message': 'Configuration updated'})
    async def log(self, request: Request) -> Any:
        format = request.query.get("format", "download")
        catchup = BoolValidator.strToBool(request.query.get(
            "catchup", "False"))
        if not catchup:
            self.last_log_index = 0
        if format == "view":
            context = {}
            return aiohttp_jinja2.render_template("logs.jinja2", request,
                                                  context)
        resp = web.StreamResponse()
        if format == "html":
            resp.content_type = 'text/html'
        else:
            resp.content_type = 'text/plain'
            resp.headers[
                'Content-Disposition'] = 'attachment; filename="home-assistant-google-drive-backup.log"'

        await resp.prepare(request)

        def content():
            html = format == "colored"
            if format == "html":
                yield "<html><head><title>Home Assistant Google Drive Backup Log</title></head><body><pre>\n"
            for line in getHistory(self.last_log_index, html):
                self.last_log_index = line[0]
                if line:
                    yield line[1].replace("\n", "   \n") + "\n"
            if format == "html":
                yield "</pre></body>\n"

        for line in content():
            await resp.write(line.encode())
        await resp.write_eof()
 async def resolvefolder(self, request: Request):
     use_existing = BoolValidator.strToBool(
         request.query.get("use_existing", False))
     self.folder_finder.resolveExisting(use_existing)
     self._global_info.suppressError()
     self._global_info.setIngoreErrorsForNow(True)
     await self.sync()
     return web.json_response({'message': 'Done'})
    async def callbackupsnapshot(self, request: Request):
        switch = BoolValidator.strToBool(request.query.get("switch", False))

        if switch:
            validated = self.config.validateUpdate({Setting.CALL_BACKUP_SNAPSHOT: False})
            await self._updateConfiguration(validated)
            self._data_cache.addFlag(UpgradeFlags.NOTIFIED_ABOUT_BACKUP_RENAME)
        self._data_cache.addFlag(UpgradeFlags.NOTIFIED_ABOUT_BACKUP_RENAME)
        self._data_cache.saveIfDirty()
        return web.json_response({'message': 'Configuration updated'})
Пример #8
0
 async def confirmdelete(self, request: Request):
     always = BoolValidator.strToBool(request.query.get("always", False))
     self._global_info.allowMultipleDeletes()
     self._global_info.setIngoreErrorsForNow(True)
     if always:
         validated = self.config.validateUpdate(
             {"confirm_multiple_deletes": False})
         await self._updateConfiguration(validated)
         await self.sync()
         return web.json_response({'message': 'Configuration updated, I\'ll never ask again'})
     else:
         await self.sync()
         return web.json_response({'message': 'Snapshots deleted this one time'})
Пример #9
0
    async def retain(self, request: Request):
        drive = BoolValidator.strToBool(request.query.get("drive", False))
        ha = BoolValidator.strToBool(request.query.get("ha", False))
        slug = request.query.get("slug", "")

        snapshot: Snapshot = self._coord.getSnapshot(slug)

        # override create options for future uploads
        options = CreateOptions(self._time.now(), self.config.get(Setting.SNAPSHOT_NAME), {
            SOURCE_GOOGLE_DRIVE: BoolValidator.strToBool(drive),
            SOURCE_HA: BoolValidator.strToBool(ha)
        })
        snapshot.setOptions(options)

        retention = {}
        if snapshot.getSource(SOURCE_GOOGLE_DRIVE) is not None:
            retention[SOURCE_GOOGLE_DRIVE] = BoolValidator.strToBool(drive)
        if snapshot.getSource(SOURCE_HA) is not None:
            retention[SOURCE_HA] = BoolValidator.strToBool(ha)
        await self._coord.retain(retention, slug)
        return web.json_response({'message': "Updated the snapshot's settings"})