Esempio n. 1
0
    def register_web_hook(self, web_hook_dict, add_by_uid):
        """
        register an web hook and send an initial keep alive event
        :param web_hook_dict:
        :param add_by_uid:
        :return:
        """
        session = SessionManager.Session()
        try:
            web_hook = WebHook(
                name=web_hook_dict.get('name'),
                description=bleach.clean(web_hook_dict.get('description'),
                                         tags=self.ALLOWED_TAGS),
                url=web_hook_dict.get('url'),
                shared_secret=web_hook_dict.get('shared_secret'),
                created_by_uid=add_by_uid,
                permissions=web_hook_dict.get('permissions'))
            session.add(web_hook)
            session.commit()
            web_hook_id = str(web_hook.id)

            # send event via rpc
            rpc_request.send(
                'initialize_web_hook', {
                    'web_hook_id': web_hook_id,
                    'web_hook_url': web_hook.url,
                    'shared_secret': web_hook.shared_secret
                })

            return json_resp({'data': web_hook_id})
        finally:
            SessionManager.Session.remove()
Esempio n. 2
0
    def register_web_hook(self, web_hook_dict, add_by_uid):
        """
        register an web hook and send an initial keep alive event
        :param web_hook_dict:
        :param add_by_uid:
        :return:
        """
        session = SessionManager.Session()
        try:
            web_hook = WebHook(name=web_hook_dict.get('name'),
                               description=bleach.clean(web_hook_dict.get('description'), tags=self.ALLOWED_TAGS),
                               url=web_hook_dict.get('url'),
                               shared_secret=web_hook_dict.get('shared_secret'),
                               created_by_uid=add_by_uid,
                               permissions=web_hook_dict.get('permissions'))
            session.add(web_hook)
            session.commit()
            web_hook_id = str(web_hook.id)

            # send event via rpc
            rpc_request.send('initialize_web_hook', {
                'web_hook_id': web_hook_id,
                'web_hook_url': web_hook.url,
                'shared_secret': web_hook.shared_secret
            })

            return json_resp({'data': web_hook_id})
        finally:
            SessionManager.Session.remove()
Esempio n. 3
0
    def add_web_hook_token(self, token_id, web_hook_id, user):
        session = SessionManager.Session()
        try:
            web_hook = session.query(WebHook).filter(
                WebHook.id == web_hook_id).one()
            web_hook_token = WebHookToken(web_hook_id=web_hook_id,
                                          user_id=user.id,
                                          token_id=token_id)
            session.add(web_hook_token)
            session.commit()
            method_args = {
                'web_hook_id': web_hook_id,
                'token_id': token_id,
                'user_id': user.id,
                'email': None
            }
            if web_hook.has_permission(
                    WebHook.PERMISSION_EMAIL
            ) and user.email is not None and user.email_confirmed:
                method_args['email'] = user.email

            rpc_request.send('token_add', method_args)

            return json_resp({'message': 'ok'})
        except NoResultFound:
            raise ClientError('web hook not existed')
        finally:
            SessionManager.Session.remove()
Esempio n. 4
0
    def add_web_hook_token(self, token_id, web_hook_id, user):
        session = SessionManager.Session()
        try:
            web_hook = session.query(WebHook).filter(WebHook.id == web_hook_id).one()
            web_hook_token = WebHookToken(web_hook_id=web_hook_id,
                                          user_id=user.id,
                                          token_id=token_id)
            session.add(web_hook_token)
            session.commit()
            method_args = {
                'web_hook_id': web_hook_id,
                'token_id': token_id,
                'user_id': user.id,
                'email': None
            }
            if web_hook.has_permission(WebHook.PERMISSION_EMAIL) and user.email is not None and user.email_confirmed:
                method_args['email'] = user.email

            rpc_request.send('token_add', method_args)

            return json_resp({'message': 'ok'})
        except NoResultFound:
            raise ClientError('web hook not existed')
        finally:
            SessionManager.Session.remove()
Esempio n. 5
0
    def delete_episode(self, episode_id):
        session = SessionManager.Session()
        try:
            (episode, bangumi) = session.query(Episode, Bangumi).\
                join(Bangumi).\
                filter(Episode.id == episode_id).one()

            # remove files of episode
            bangumi_folder_path = '{0}/{1}'.format(self.base_path,
                                                   str(episode.bangumi_id))

            video_file_list = session.query(VideoFile). \
                filter(VideoFile.episode_id == episode_id). \
                all()

            watch_progress_list = session.query(WatchProgress).filter(
                WatchProgress.episode_id == episode_id).all()

            for video_file in video_file_list:
                # remove torrent
                try:
                    file_path = '{0}/{1}'.format(bangumi_folder_path,
                                                 video_file.file_path)
                    os.remove(file_path)
                except Exception as error:
                    logger.error(error)
                # remove torrent from deluge
                rpc_request.send('delete_deluge_torrent',
                                 {'torrent_id': video_file.torrent_id})
                # remove video_file
                session.delete(video_file)

            # remove watch-progress
            for watch_progress in watch_progress_list:
                session.delete(watch_progress)

            # remove image
            if episode.thumbnail_image_id is not None:
                image = session.query(Image).filter(
                    Image.id == episode.thumbnail_image_id).one()
                session.delete(image)

            # remove episode
            session.delete(episode)

            bangumi.eps = bangumi.eps - 1

            session.commit()
            return json_resp({'message': 'ok'})
        finally:
            SessionManager.Session.remove()
Esempio n. 6
0
    def delete_episode(self, episode_id):
        session = SessionManager.Session()
        try:
            (episode, bangumi) = session.query(Episode, Bangumi).\
                join(Bangumi).\
                filter(Episode.id == episode_id).one()

            # remove files of episode
            bangumi_folder_path = '{0}/{1}'.format(self.base_path, str(episode.bangumi_id))

            video_file_list = session.query(VideoFile). \
                filter(VideoFile.episode_id == episode_id). \
                all()

            watch_progress_list = session.query(WatchProgress).filter(
                WatchProgress.episode_id == episode_id).all()

            for video_file in video_file_list:
                # remove torrent
                try:
                    file_path = '{0}/{1}'.format(bangumi_folder_path, video_file.file_path)
                    os.remove(file_path)
                except Exception as error:
                    logger.error(error)
                # remove torrent from deluge
                rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id})
                # remove video_file
                session.delete(video_file)

            # remove watch-progress
            for watch_progress in watch_progress_list:
                session.delete(watch_progress)

            # remove image
            if episode.thumbnail_image_id is not None:
                image = session.query(Image).filter(Image.id == episode.thumbnail_image_id).one()
                session.delete(image)

            # remove episode
            session.delete(episode)

            bangumi.eps = bangumi.eps - 1

            session.commit()
            return json_resp({'message': 'ok'})
        finally:
            SessionManager.Session.remove()
Esempio n. 7
0
    def delete_bangumi_favorite(self, bangumi_id, user_id):
        session = SessionManager.Session()
        try:
            favorite = session.query(Favorites). \
                filter(Favorites.bangumi_id == bangumi_id). \
                filter(Favorites.user_id == user_id). \
                first()
            if not favorite:
                raise ClientError(ClientError.NOT_FOUND, 404, {bangumi_id: bangumi_id})
            else:
                session.delete(favorite)

            session.commit()

            rpc_request.send('user_favorite_update', {'user_id': str(user_id)})

            return json_resp({'message': 'ok', 'status': 0})
        finally:
            SessionManager.Session.remove()
Esempio n. 8
0
    def delete_video_file(self, video_file_id):
        try:
            session = SessionManager.Session()
            video_file = session.query(VideoFile).filter(VideoFile.id == video_file_id).one()
            if video_file.file_path is not None and video_file.status == VideoFile.STATUS_DOWNLOADED:
                file_abs_path = u'{0}/{1}/{2}'.format(self.base_path, str(video_file.bangumi_id), video_file.file_path)
                try:
                    os.remove(file_abs_path)
                except Exception as error:
                    logger.warn(error)

            rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id})
            session.delete(video_file)

            session.commit()
            return json_resp({'msg': 'ok'})
        except NoResultFound:
            raise ClientError(ClientError.NOT_FOUND, 404)
        finally:
            SessionManager.Session.remove()
Esempio n. 9
0
    def delete_bangumi_favorite(self, bangumi_id, user_id):
        session = SessionManager.Session()
        try:
            favorite = session.query(Favorites). \
                filter(Favorites.bangumi_id == bangumi_id). \
                filter(Favorites.user_id == user_id). \
                first()
            if not favorite:
                raise ClientError(ClientError.NOT_FOUND, 404,
                                  {bangumi_id: bangumi_id})
            else:
                session.delete(favorite)

            session.commit()

            rpc_request.send('user_favorite_update', {'user_id': str(user_id)})

            return json_resp({'message': 'ok', 'status': 0})
        finally:
            SessionManager.Session.remove()
Esempio n. 10
0
    def delete_video_file(self, video_file_id):
        try:
            session = SessionManager.Session()
            video_file = session.query(VideoFile).filter(VideoFile.id == video_file_id).one()
            if video_file.file_path is not None and video_file.status == VideoFile.STATUS_DOWNLOADED:
                file_abs_path = u'{0}/{1}/{2}'.format(self.base_path, str(video_file.bangumi_id), video_file.file_path)
                try:
                    os.remove(file_abs_path)
                except Exception as error:
                    logger.warn(error)

            rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id})
            session.delete(video_file)

            session.commit()
            return json_resp({'msg': 'ok'})
        except NoResultFound:
            raise ClientError(ClientError.NOT_FOUND, 404)
        finally:
            SessionManager.Session.remove()
Esempio n. 11
0
    def delete_web_hook_token(self, web_hook_id, user_id):
        session = SessionManager.Session()
        try:
            web_hook_token = session.query(WebHookToken).\
                filter(WebHookToken.web_hook_id == web_hook_id).\
                filter(WebHookToken.user_id == user_id).\
                one()

            token_id = web_hook_token.token_id

            session.delete(web_hook_token)
            session.commit()

            rpc_request.send('token_remove', {'web_hook_id': web_hook_id, 'token_id': token_id})

            return json_resp({'message': 'ok'})
        except NoResultFound:
            raise ClientError(ClientError.NOT_FOUND, 404)
        finally:
            SessionManager.Session.remove()
Esempio n. 12
0
    def delete_web_hook_token(self, web_hook_id, user_id):
        session = SessionManager.Session()
        try:
            web_hook_token = session.query(WebHookToken).\
                filter(WebHookToken.web_hook_id == web_hook_id).\
                filter(WebHookToken.user_id == user_id).\
                one()

            token_id = web_hook_token.token_id

            session.delete(web_hook_token)
            session.commit()

            rpc_request.send('token_remove', {'web_hook_id': web_hook_id, 'token_id': token_id})

            return json_resp({'message': 'ok'})
        except NoResultFound:
            raise ClientError(ClientError.NOT_FOUND, 404)
        finally:
            SessionManager.Session.remove()
Esempio n. 13
0
    def favorite_bangumi(self, bangumi_id, user_id, status):
        session = SessionManager.Session()
        try:
            favorite = session.query(Favorites).\
                filter(Favorites.bangumi_id == bangumi_id).\
                filter(Favorites.user_id == user_id).\
                first()
            if not favorite:
                favorite = Favorites(bangumi_id=bangumi_id, user_id=user_id, status=status)
                session.add(favorite)
            else:
                favorite.status = status
                favorite.update_time = datetime.utcnow()

            session.commit()

            rpc_request.send('user_favorite_update', {'user_id': str(user_id)})

            return json_resp({'message': 'ok', 'status': 0})
        finally:
            SessionManager.Session.remove()
Esempio n. 14
0
    def favorite_bangumi(self, bangumi_id, user_id, status):
        session = SessionManager.Session()
        try:
            favorite = session.query(Favorites).\
                filter(Favorites.bangumi_id == bangumi_id).\
                filter(Favorites.user_id == user_id).\
                first()
            if not favorite:
                favorite = Favorites(bangumi_id=bangumi_id,
                                     user_id=user_id,
                                     status=status)
                session.add(favorite)
            else:
                favorite.status = status

            session.commit()

            rpc_request.send('user_favorite_update', {'user_id': str(user_id)})

            return json_resp({'message': 'ok', 'status': 0})
        finally:
            SessionManager.Session.remove()
Esempio n. 15
0
 def confirm_token(self, token, expiration=3600):
     from server import app
     serializer = URLSafeTimedSerializer(app.config['SECRET_KEY'])
     session = SessionManager.Session()
     try:
         email = serializer.loads(token,
                                  salt=app.config['SECRET_PASSWORD_SALT'],
                                  max_age=expiration)
         if (email == self.email) and (not self.email_confirmed):
             self.email_confirmed = True
             user = session.query(User).filter(User.id == self.id).one()
             user.email_confirmed = True
             session.commit()
             rpc_request.send('email_changed', {
                 'email': self.email,
                 'user_id': user.id
             })
             return json_resp({'message': 'ok'})
         else:
             raise ClientError('Invalid Token')
     except:
         raise ClientError('Invalid Token')
     finally:
         SessionManager.Session.remove()