async def get(self, request: HTTPConnection): id = request.path_params["id"] challenge = await Challenge.get(id) if challenge is None: return abort(404, "Challenge not found") if not can_edit(request): return abort(400) form = ChallengeForm( title=challenge.title, content=challenge.content, flag_or_answer=challenge.flag or challenge.answer, is_flag=challenge.flag is not None, hidden=challenge.hidden, depreciated=challenge.depreciated, points=challenge.points, tags=challenge.tags, ) images = await encoded_existing_images(request) tags = orjson.dumps(await get_all_tags(include_hidden=True)) return templates.TemplateResponse( "challenge/edit.j2", { "request": request, "form": form, "challenge": challenge, "existing_images": images, "existing_tags": tags, }, )
async def get(self, request: HTTPConnection): id = request.path_params["id"] blog = await Blog.get(id) if blog is None: return abort(404, "Blog not found") if not can_edit(request): return abort(400) form = PostForm(title=blog.title, tags=blog.tags, content=blog.content) images = await encoded_existing_images(request) tags = ujson.dumps(await get_all_tags()) return templates.TemplateResponse( "blog/edit.j2", { "request": request, "form": form, "blog": blog, "existing_images": images, "existing_tags": tags, }, )
async def get(self, request: HTTPConnection): id = request.path_params["id"] writeup = await Writeup.get(id) if writeup is None: return abort(404, "Writeup not found") if not can_edit(request, writeup.author_id): return abort(400) form = WriteupForm( title=writeup.title, tags=writeup.tags, content=writeup.content, private=writeup.private, ) images = await encoded_existing_images(request) tags = orjson.dumps(await get_all_tags(True)) return templates.TemplateResponse( "writeups/edit.j2", { "request": request, "form": form, "writeup": writeup, "existing_images": images, "existing_tags": tags, }, )
async def post(self, request: HTTPConnection): id = request.path_params["id"] blog = await Blog.get(id) if blog is None: return abort(404, "Blog not found") if not can_edit(request, blog.author_id): return abort(400) form = await request.form() form = PostForm(form) is_valid = form.validate() if not slug(form.title.data): is_valid = False form.title.errors.append( "A valid url-safe name cannot be generated for this title.") if blog.title != blog.title.data: if (await Blog.query.where( sa.or_(Blog.title == form.title.data, Blog.slug == slug(form.title.data))).gino.first() is not None): is_valid = False form.title.errors.append( f"A blog with the title '{form.title.data}' already exists." ) if is_valid: await blog.update_auto(title=form.title.data, tags=form.tags.data, content=form.content.data).apply() url = request.url_for("blog_view", slug=blog.slug) await log_edit("blog", blog.title, request.user.username, url) return redirect_response(url=url) images = await encoded_existing_images(request) tags = orjson.dumps(await get_all_tags()) return templates.TemplateResponse( "blog/edit.j2", { "request": request, "form": form, "blog": blog, "existing_images": images, "existing_tags": tags, }, )
async def delete(self, request: HTTPConnection): uuid, ext = request.path_params["file_name"] image = await Image.get(uuid) if image.filetype != ext: return abort(404) if not can_edit(request, image.author_id): return abort(400) await image.delete() return Response()
async def challenge_delete(request: HTTPConnection): id = request.path_params["id"] challenge = await Challenge.get(id) if challenge is None: return abort(404, "Challenge not found") if not can_edit(request): return abort(400) await challenge.delete() await log_delete("challenge", challenge.title, request.user.username) return redirect_response(url=request.url_for("challenge_index"))
async def blog_delete(request: HTTPConnection): id = request.path_params["id"] blog = await Blog.get(id) if blog is None: return abort(404, "Blog not found") if not can_edit(request): return abort(400) await blog.delete() await log_delete("blog", blog.name, request.user.username) return RedirectResponse(url=request.url_for("blog_index"))
async def writeups_delete(request: HTTPConnection): id = request.path_params["id"] writeup = await Writeup.get(id) if writeup is None: return abort(404, "Writeup not found") if not can_edit(request, writeup.author_id): return abort(400) await writeup.delete() await log_delete("writeup", writeup.title, request.user.username) return redirect_response(url=request.url_for("writeups_index"))
async def post(self, request: HTTPConnection): id = request.path_params["id"] writeup = await Writeup.get(id) if writeup is None: return abort(404, "Writeup not found") if not can_edit(request, writeup.author_id): return abort(400) form = await request.form() form = PostForm(form) if form.validate(): await writeup.update_auto( author_id=request.user.discord_id, title=form.title.data, tags=form.tags.data, content=form.content.data, ).apply() url = request.url_for("writeups_view", slug=writeup.slug) await log_edit("writeup", writeup.title, request.user.username, url) return RedirectResponse(url=url) images = await encoded_existing_images(request) tags = ujson.dumps(await get_all_tags()) return templates.TemplateResponse( "writeups/edit.j2", { "request": request, "form": form, "writeup": writeup, "existing_images": images, "existing_tags": tags, }, )
async def post(self, request: HTTPConnection): id = request.path_params["id"] blog = await Blog.get(id) if blog is None: return abort(404, "Blog not found") if not can_edit(request): return abort(400) form = await request.form() form = PostForm(form) if form.validate(): await blog.update_auto( title=form.title.data, tags=form.tags.data, content=form.content.data ).apply() url = request.url_for("blog_view", slug=blog.slug) await log_edit("blog", blog.name, request.user.username, url) return RedirectResponse(url=url) images = await encoded_existing_images(request) tags = ujson.dumps(await get_all_tags()) return templates.TemplateResponse( "blog/edit.j2", { "request": request, "form": form, "blog": blog, "existing_images": images, "existing_tags": tags, }, )
async def post(self, request: HTTPConnection): id = request.path_params["id"] challenge = await Challenge.get(id) if challenge is None: return abort(404, "Challenge not found") if not can_edit(request): return abort(400) form = await request.form() form = ChallengeForm(form) is_valid = form.validate() if not slug(form.title.data): is_valid = False form.title.errors.append( "A valid url-safe name cannot be generated for this title.") if challenge.title != form.title.data: if (await Challenge.query.where( sa.or_( Challenge.title == form.title.data, Challenge.slug == slug(form.title.data), )).gino.first() is not None): is_valid = False form.title.errors.append( f"A challenge with the title conflicting with '{form.title.data}' already exists." ) if is_valid: f_a = form.flag_or_answer.data flag, answer = (f_a, None) if form.is_flag.data else (None, f_a) await challenge.update_auto( title=form.title.data, content=form.content.data, flag=flag, answer=answer, hidden=form.hidden.data, depreciated=form.depreciated.data, points=form.points.data, tags=form.tags.data, ).apply() url = request.url_for("challenge_view", slug=challenge.slug) if not challenge.hidden: await log_edit("challenge", challenge.title, request.user.username, url) return redirect_response(url=url) images = await encoded_existing_images(request) tags = orjson.dumps(await get_all_tags(include_hidden=True)) return templates.TemplateResponse( "challenge/edit.j2", { "request": request, "form": form, "challenge": challenge, "existing_images": images, "existing_tags": tags, }, )
async def post(self, request: HTTPConnection): id = request.path_params["id"] writeup = await Writeup.get(id) if writeup is None: return abort(404, "Writeup not found") if not can_edit(request, writeup.author_id): return abort(400) form = await request.form() form = WriteupForm(form) is_valid = form.validate() if not slug(form.title.data): is_valid = False form.title.errors.append( "A valid url-safe name cannot be generated for this title." ) if writeup.title != form.title.data: if ( await Writeup.query.where( sa.or_( Writeup.title == form.title.data, Writeup.slug == slug(form.title.data), ) ).gino.first() is not None ): is_valid = False form.title.errors.append( f"A writeup with the title conflicting with '{form.title.data}' already exists." ) if is_valid: await writeup.update_auto( title=form.title.data, tags=form.tags.data, content=form.content.data, private=form.private.data, ).apply() url = request.url_for("writeups_view", slug=writeup.slug) await log_edit("writeup", writeup.title, request.user.username, url) return redirect_response(url=url) images = await encoded_existing_images(request) tags = orjson.dumps(await get_all_tags(True)) return templates.TemplateResponse( "writeups/edit.j2", { "request": request, "form": form, "writeup": writeup, "existing_images": images, "existing_tags": tags, }, )