def resetPassword(params): email = params['email'] user = getOneByFields(User, email=email) if not user: return createAnswer('User with this email not exist', err=True) token = createHash(email, timeSalt=True) tokenObj = getOneByFields(Token, user_id=user.id) if tokenObj: tokenId = updateDbByDict({ 'token': token, 'user_id': user.id }, tokenObj) else: tokenId = updateDbByDict({ 'token': token, 'user_id': user.id }, Token, insert=True) if not tokenId: return createAnswer('Something went wrong, sorry', err=True) try: sendMail( email, 'HyperTube Project | Password Reset', '<h2>Recovery your password</h2><br>' f'<a href="{request.host_url}user/reset/verify/?token={token}">Verify Link</a><br><br>' f'<b>Please verify your email by the link</b>') except: return createAnswer('Messages send blocked (spam policy)', err=True) return createAnswer('Verify link successful sent')
def authUserGoogle(params): token = params['id_token'] url = f'https://www.googleapis.com/oauth2/v3/tokeninfo' googleUserInfo = getData(url) if not googleUserInfo['error']: googleUserInfo = googleUserInfo['data'] else: return createAnswer('Auth failed', err=True) updateDbByDict( { 'firstName': googleUserInfo['given_name'], 'lastName': googleUserInfo['family_name'], 'email': googleUserInfo['email'], 'userPhoto': googleUserInfo['picture'], 'login': googleUserInfo['sub'] }, User, insert=True) user = getOneByFields(User, login=googleUserInfo['sub']) if user: session['login'] = googleUserInfo['sub'] else: user = getOneByFields(User, email=googleUserInfo['email']) session['login'] = user.login return getUserInfo(user)
def createCommentary(params) -> dict: commentary = params['commentary'] IMDBid = params['IMDBid'] movie = getOneByFields(Movie, imdb_id=IMDBid) if not movie: return createAnswer('Movie not found', True) if answer := checkAuthed(): return answer
def verifyReset(params): verifyToken = params['token'] token = getOneByFields(Token, token=verifyToken) if token: session['reset'] = True session['login'] = token.user.login deleteById('Token', token.id) redirect('/restore') return redirect('/')
def createMovie(IMDBid): movieId = updateDbByDict({'imdb_id': IMDBid}, Movie, insert=True) if not movieId: return movieId movie = getOneByFields(Movie, id=movieId) user = getUserByFields(login=session['login']) try: updateDbByDict({ 'user_id': user.id, 'movie_imdb_id': IMDBid }, UserWatchHistory, insert=True) except: pass if movie: updateDbByDict({'watch_count': movie.watch_count + 1}, movie) return movieId
def getMovieSubtitles(params): IMDBid = params['IMDBid'] createMovie(IMDBid) subtitles = [] languages = {'en', 'ru', 'fr'} for language in languages: subtitleDB = getOneByFields(Subtitle, language=language, movie_imdb_id=IMDBid) if subtitleDB: subtitles.append({language: f'/{subtitleDB.path}'}) continue subtitleObj = getSubtitles( {'params': { 'imdb_id': IMDBid, 'languages': language }})['data'] if not subtitleObj: continue subtitlePath = saveSubtitles(subtitleObj, language, IMDBid) if subtitlePath: subtitles.append(subtitlePath) return createAnswer('data', False, {'subtitlesPath': subtitles})
def getUserByFields(**fields) -> User: user = getOneByFields(User, **fields) return user