def post(self): """ create a new push task for a decoded video in queue to be worked off (only available for PRO clients) """ """ retrieve client role """ AuthUser = g.get('clientrole') if AuthUser is None: api.abort(401, __class__._responses['post'][401]) if AuthUser != 'PRO': api.abort(403, __class__._responses['post'][403]) """ parse request data and use model attribute info""" requestbody = request.json log.debug(requestbody) """ further validations: test connection to ftp destination server """ validftp, validftpmessage = test_ftpconnection( requestbody['Server'], requestbody['Port'], requestbody['User'], requestbody['Password'], requestbody['ServerPath']) if not validftp: log.error(validftpmessage) api.abort( 403, __class__._responses['post'][403] + ': ' + validftpmessage) """ create jobchain DownloadMessage -----------------------------------------------------------------""" Content = {} for key, value in requestbody.items(): if key in video.keys(): Content[video[key].attribute] = value message = PushVideoMessage(**Content) """ update otrkey filename as output """ message.otrkeyfile = os.path.splitext( os.path.basename(message.sourcelink))[0] message.videofile = os.path.splitext( os.path.basename(message.otrkeyfile))[0] """ put download queue message """ message = queue.put(message) if message is None: api.abort(403, __class__._responses['post'][403]) """ prepare return data """ message.otrpassword = '******' message.password = '******' """ add history entry """ recording = db.get( Recording(PartitionKey='top', RowKey=str(data['epgid']))) AddHistory(g.user, message.id, 'torrent', recording.Id, recording.beginn, recording.sender, recording.titel, recording.genre, recording.previewimagelink, data['resolution'], message.sourcefile, request.remote_addr, request.user_agent.platform, request.user_agent.browser, request.user_agent.version, request.user_agent.language) return message, 200
def PushVideo(epgid, resolution, sourcefile, sourcelink, user: User): """ create a push queue message for torrent push """ ErrorMessage = '' job = None """ further validations: test connection to ftp destination server """ validftp, validftpmessage = test_ftpconnection(user.Server, user.Port, user.FtpUser, user.FtpPassword, user.ServerPath) if not validftp: log.error(validftpmessage) ErrorMessage = validftpmessage else: """ init a PushMessage instance and put it into queue """ """ update otrkey filename as output """ otrkeyfile = os.path.splitext(os.path.basename(sourcelink))[0] videofile = os.path.splitext(os.path.basename(otrkeyfile))[0] job = queue.put( PushVideoMessage(epgid=epgid, resolution=resolution, sourcefile=sourcefile, sourcelink=sourcelink, protocol=user.Protocol, server=user.Server, port=user.Port, user=user.FtpUser, password=user.FtpPassword, destpath=user.ServerPath, otrkeyfile=otrkeyfile, videofile=videofile, otruser=user.OtrUser, otrpassword=user.OtrPassword, usecutlist=user.UseCutlist, usesubfolder=user.UseSubfolder)) if job is None: ErrorMessage = 'Fehler beim Erstellen der Push Aufgabe' else: """ success """ log.debug('mesage input: {!s}, {!s}, {!s}'.format( job.getmessage(), job.id, job.insertion_time)) return job, ErrorMessage
def post(self): """ create push job in queue for torrent/video file """ """ parse request data and use model attribute info""" data = request.json log.debug(data) for key, value in push.items(): if key in data: data[value.attribute] = data.pop(key) """ further validations: test connection to ftp destination server """ validftp, validftpmessage = test_ftpconnection(data['server'], data['port'], data['user'], data['password'], data['destpath']) if not validftp: log.error(validftpmessage) api.abort( 403, __class__._responses['post'][403] + ': ' + validftpmessage) """ init a PushMessage instance and put it into queue """ message = PushMessage(**data) message = queue.put(message) if message is None: api.abort(403, __class__._responses['post'][403]) """ return message """ message.password = '******' """ add history """ recording = db.get( Recording(PartitionKey='top', RowKey=str(data['epgid']))) AddHistory(g.user, message.id, 'torrent', recording.Id, recording.beginn, recording.sender, recording.titel, recording.genre, recording.previewimagelink, data['resolution'], message.sourcefile, request.remote_addr, request.user_agent.platform, request.user_agent.browser, request.user_agent.version, request.user_agent.language) log.debug('mesage input: {!s}, {!s}, {!s}'.format( message.getmessage(), message.id, message.insertion_time)) return message, 200
def PushTorrent(epgid, resolution, sourcefile, sourcelink, user: User): """ create a push queue message for torrent push """ ErrorMessage = '' job = None """ further validations: test connection to ftp destination server """ validftp, validftpmessage = test_ftpconnection(user.Server, user.Port, user.FtpUser, user.FtpPassword, user.ServerPath) if not validftp: log.error(validftpmessage) ErrorMessage = validftpmessage else: """ init a PushMessage instance and put it into queue """ job = queue.put( PushMessage(epgid=epgid, resolution=resolution, sourcefile=sourcefile, sourcelink=sourcelink, protocol=user.Protocol, server=user.Server, port=user.Port, user=user.FtpUser, password=user.FtpPassword, destpath=user.ServerPath)) if job is None: ErrorMessage = 'Fehler beim Erstellen der Push Aufgabe' else: """ success """ log.debug('mesage input: {!s}, {!s}, {!s}'.format( job.getmessage(), job.id, job.insertion_time)) return job, ErrorMessage
def settings(): """ validate settings form at POST request """ """ get request data """ form = Settings() """ init values in get method """ if form.validate_on_submit() or form.is_submitted(): """ save form data to userprofile """ if (g.user.PushVideo != form.PushVideo.data): g.user.PushVideo = form.PushVideo.data if (g.user.OtrUser != form.OtrUser.data): g.user.OtrUser = form.OtrUser.data if (g.user.UseCutlist != form.UseCutlist.data): g.user.UseCutlist = form.UseCutlist.data if (g.user.Protocol != form.Protocol.data): g.user.Protocol = form.Protocol.data g.user.FtpConnectionChecked = False if (g.user.Server != form.Server.data): g.user.Server = form.Server.data g.user.FtpConnectionChecked = False if (g.user.Port != form.Port.data): g.user.Port = form.Port.data g.user.FtpConnectionChecked = False if (g.user.FtpUser != form.FtpUser.data): g.user.FtpUser = form.FtpUser.data g.user.FtpConnectionChecked = False if (g.user.ServerPath != form.ServerPath.data): g.user.ServerPath = form.ServerPath.data g.user.FtpConnectionChecked = False if (form.OtrPassword.data not in [ '*****' ]) and (g.user.OtrPassword != form.OtrPassword.data): g.user.OtrPassword = form.OtrPassword.data if (form.FtpPassword.data not in [ '*****' ]) and (g.user.FtpPassword != form.FtpPassword.data): g.user.FtpPassword = form.FtpPassword.data g.user.FtpConnectionChecked = False if (g.user.EMailEndpoint != form.EMailEndpoint.data): g.user.EMailEndpoint = form.EMailEndpoint.data """ check ftp Connection """ if not g.user.FtpConnectionChecked: g.user.FtpConnectionChecked, validftpmessage = test_ftpconnection( g.user.Server, g.user.Port, g.user.FtpUser, g.user.FtpPassword, g.user.ServerPath) if not g.user.FtpConnectionChecked: log.error(validftpmessage) """ check otr credentials """ if not g.user.OtrCredentialsChecked: pass """ update user """ g.user.updated = datetime.now() db.insert(g.user) else: form.PushVideo.data = g.user.PushVideo form.OtrUser.data = g.user.OtrUser if g.user.OtrPassword != '': form.OtrPassword.data = '*****' else: form.OtrPassword.data = '' form.UseCutlist.data = g.user.UseCutlist form.Protocol.data = g.user.Protocol form.Server.data = g.user.Server form.Port.data = g.user.Port form.FtpUser.data = g.user.FtpUser if g.user.FtpPassword != '': form.FtpPassword.data = '*****' else: form.FtpPassword.data = '' form.ServerPath.data = g.user.ServerPath form.EMailEndpoint.data = g.user.EMailEndpoint """ return """ pathtemplate = g.platform + '/' + 'settings.html' return render_template(pathtemplate, title='Einstellungen', pagetitle='settings', form=form, User=g.user, message=g.message)