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()
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])
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()
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()
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()
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())
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()
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()
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()
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')
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()
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))
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)