Esempio n. 1
0
    def on_patch_potential(self, req: Request, resp: Response, id: int):
        token = req.get_param('token', required=True)
        vote = req.get_param_as_int('vote', required=True, min_value=-1, max_value=1)
        user_data = get_user_data(token)
        if not user_data:
            raise HTTPUnauthorized('Invalid user token provided',
                                   'Invalid user token provided')
        with self.uowm.start() as uow:
            template = uow.meme_template_potential.get_by_id(id)
            if not template:
                raise HTTPNotFound(title=f'Unable to find template with ID {id}',
                                   description=f'Unable to find template with ID {id}')

            existing_vote = next((x for x in template.votes if x.user == user_data['name']), None)
            if existing_vote and existing_vote.vote == vote:
                raise HTTPBadRequest(title='Invalid vote', description='You have already cast a vote for this template')
            elif existing_vote:
                template.vote_total += vote
                existing_vote.vote = vote
            else:
                template.vote_total += vote
                template.votes.append(
                    MemeTemplatePotentialVote(
                        post_id=template.post_id,
                        user=user_data['name'],
                        vote=vote,
                        meme_template_potential_id=template.id
                    )
                )
            uow.commit()
Esempio n. 2
0
 def on_get_all(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     if not is_site_admin(user_data, self.uowm):
         raise HTTPUnauthorized(
             f'Not authorized to make this request',
             f'You are not authorized to make this request')
     with self.uowm.start() as uow:
         templates = uow.config_message_template.get_all()
         resp.body = json.dumps([temp.to_dict() for temp in templates])
Esempio n. 3
0
 def on_post(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     data = json.load(req.bounded_stream)
     with self.uowm.start() as uow:
         watch = RepostWatch(post_id=data['post_id'],
                             user=user_data['name'],
                             source='site')
         uow.repostwatch.add(watch)
         uow.commit()
Esempio n. 4
0
 def on_delete_potential(self, req: Request, resp: Response, id: int):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     if not is_site_admin(user_data, self.uowm):
         raise HTTPUnauthorized(f'Not authorized to make this request',
                                f'You are not authorized to make this request')
     with self.uowm.start() as uow:
         template = uow.meme_template_potential.get_by_id(id)
         if not template:
             raise HTTPNotFound(title=f'Unable to find template with ID {id}',
                                description=f'Unable to find template with ID {id}')
         uow.meme_template_potential.remove(template)
         uow.commit()
Esempio n. 5
0
 def on_post(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     data = json.load(req.bounded_stream)
     with self.uowm.start() as uow:
         post = uow.posts.get_by_post_id(data['post_id'])
         if not post:
             raise HTTPNotFound(title='Failed to create meme template', description=f'Failed to create meme template.  Cannot find post {data["post_id"]}')
         template = MemeTemplate(
             post_id=data['post_id'],
             dhash_h=post.dhash_h
         )
         uow.repostwatch.add(template)
         uow.commit()
Esempio n. 6
0
 def on_get(self, req: Request, resp: Response, id: int):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     if not is_site_admin(user_data, self.uowm):
         raise HTTPUnauthorized(
             f'Not authorized to make this request',
             f'You are not authorized to make this request')
     with self.uowm.start() as uow:
         template = uow.config_message_template.get_by_id(id)
         if not template:
             raise HTTPNotFound(
                 title=f'Message template {id} not found',
                 description=f'Unable to find message template with ID {id}'
             )
         resp.body = json.dumps(template.to_dict())
Esempio n. 7
0
 def on_delete(self, req: Request, resp: Response, subreddit: Text):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     if not is_site_admin(user_data, self.uowm):
         raise HTTPUnauthorized(
             f'Not authorized to make this request',
             f'You are not authorized to make this request')
     with self.uowm.start() as uow:
         sub = uow.monitored_sub.get_by_sub(subreddit)
         if not sub:
             raise HTTPNotFound(
                 title=f'Subreddit {subreddit} Not Found',
                 description=f'Subreddit {subreddit} Not Found')
         uow.monitored_sub.remove(sub)
         uow.commit()
Esempio n. 8
0
 def on_get_potential(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     with self.uowm.start() as uow:
         results = []
         templates = uow.meme_template_potential.get_all()
         for template in templates:
             if next((x for x in template.votes if x.user == user_data['name']), None):
                 continue
             template_dict = template.to_dict()
             post = uow.posts.get_by_post_id(template.post_id)
             if not post:
                 continue
             template_dict['url'] = post.url
             results.append(template_dict)
         resp.body = json.dumps(results)
    def on_get(self, req: Request, resp: Response):
        token = req.get_param('token', required=True)
        user_data = get_user_data(token)
        if not user_data:
            raise HTTPNotFound(
                title=f'No admin found for provided token',
                description=f'No admin found for provided token')
        with self.uowm.start() as uow:
            admin = uow.site_admin.get_by_username(user_data['name'])

        if not admin:
            raise HTTPNotFound(
                title=f'No admin found for provided token',
                description=f'No admin found for provided token')

        resp.body = json.dumps(admin.to_dict())
 def on_post_potential(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     post_id = req.get_param('post_id', required=True)
     user_data = get_user_data(token)
     if not user_data:
         raise HTTPUnauthorized('Invalid user token provided',
                                'Invalid user token provided')
     with self.uowm.start() as uow:
         template = MemeTemplatePotential(post_id=post_id,
                                          submitted_by=user_data['name'],
                                          vote_total=1)
         template.votes.append(
             MemeTemplatePotentialVote(post_id=template.post_id,
                                       user=user_data['name'],
                                       vote=1))
         uow.meme_template_potential.add(template)
         uow.commit()
Esempio n. 11
0
 def on_delete(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     watch_id = req.get_param_as_int('watch_id', required=True)
     user_data = get_user_data(token)
     with self.uowm.start() as uow:
         watch = uow.repostwatch.get_by_id(watch_id)
         if not watch:
             raise HTTPNotFound(
                 title='No watch found',
                 description=f'Failed to find watch with ID {watch_id}')
         if watch.user.lower() != user_data['name'].lower():
             if not is_sleuth_admin(token, user_data):
                 raise HTTPUnauthorized(
                     title='You are not authorized to delete this watch',
                     description=
                     'You are not authorized to delete this post watch')
         uow.repostwatch.remove(watch)
         uow.commit()
Esempio n. 12
0
    def on_patch(self, req: Request, resp: Response, subreddit: Text):
        token = req.get_param('token', required=True)
        user_data = get_user_data(token)
        if not is_sub_mod_token(token, subreddit,
                                self.config.reddit_useragent):
            raise HTTPUnauthorized(
                f'Not authorized to make changes to {subreddit}',
                f'You\'re not a moderator on {subreddit}')
        with self.uowm.start() as uow:
            monitored_sub = uow.monitored_sub.get_by_sub(subreddit)
            if not monitored_sub:
                raise HTTPNotFound(
                    title=f'Subreddit {subreddit} Not Found',
                    description=f'Subreddit {subreddit} Not Found')
            raw = json.load(req.bounded_stream)
            for k, v in raw.items():
                if k not in self.config.sub_monitor_exposed_config_options:
                    continue
                if hasattr(monitored_sub, k):
                    if getattr(monitored_sub, k) != v:
                        log.debug('Update %s config | %s: %s => %s', subreddit,
                                  k, getattr(monitored_sub, k), v)
                        uow.monitored_sub_config_change.add(
                            MonitoredSubConfigChange(
                                source='site',
                                subreddit=subreddit,
                                config_key=k,
                                old_value=str(getattr(monitored_sub, k)),
                                new_value=str(v),
                                updated_by=user_data['name']))
                        setattr(monitored_sub, k, v)
            try:
                uow.commit()
            except Exception as e:
                log.exception('Problem saving config', exc_info=True)
                raise HTTPInternalServerError(
                    title='Problem Saving Config',
                    description='Something went t**s up when saving the config'
                )

        celery.send_task(
            'redditrepostsleuth.core.celery.admin_tasks.update_subreddit_config_from_database',
            args=[monitored_sub, user_data],
            queue='monitored_sub_config_update')
Esempio n. 13
0
 def on_patch(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     data = json.load(req.bounded_stream)
     with self.uowm.start() as uow:
         watch = uow.repostwatch.get_by_id(data['id'])
         if not watch:
             raise HTTPNotFound(
                 title=f'Post Watch Not Found',
                 description=
                 f'Unable to find post watch with ID {data["id"]}')
         if watch.user.lower() != user_data['name'].lower():
             if not is_sleuth_admin(token, user_data):
                 raise HTTPUnauthorized(
                     title='You are not authorized to make this change',
                     description=
                     'You are not authorized to modify this post watch')
         watch.enabled = data['enabled']
         uow.commit()
Esempio n. 14
0
 def on_post(self, req: Request, resp: Response):
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     raw = json.load(req.bounded_stream)
     if not is_site_admin(user_data, self.uowm):
         raise HTTPUnauthorized(
             f'Not authorized to make this request',
             f'You are not authorized to make this request')
     with self.uowm.start() as uow:
         new_template = ConfigMessageTemplate(
             template_name=raw['template_name'],
             template=raw['template'],
             template_slug=raw['template_slug'])
         uow.config_message_template.add(new_template)
         try:
             resp.body = json.dumps(new_template.to_dict())
             uow.commit()
         except IntegrityError as e:
             raise HTTPInternalServerError(
                 title='Failed to save message template',
                 description=str(e))
Esempio n. 15
0
 def on_get_user(self, req: Request, resp: Response, user: Text):
     results = []
     token = req.get_param('token', required=True)
     user_data = get_user_data(token)
     if user.lower() != user_data['name'].lower():
         if not is_sleuth_admin(token, user_data):
             raise HTTPUnauthorized(
                 title='You are not authorized to views these watches',
                 description=
                 f'You are not authorized to view watches for {user}')
     with self.uowm.start() as uow:
         watches = uow.repostwatch.get_all_by_user(user_data['name'])
         for watch in watches:
             post = uow.posts.get_by_post_id(watch.post_id)
             if not post:
                 continue
             results.append({
                 'watch': watch.to_dict(),
                 'post': post.to_dict()
             })
     resp.body = json.dumps(results)