def edit_snippet(snippet_uuid): """Route allows a user to modify a snippet if he or she is the owner""" snippet = get_snippet_by_uuid(snippet_uuid) if current_user != snippet.user: raise Unauthorized("You must be the creator or a snippet to edit it.") snippet_form = SnippetForm() populate_choice_field(snippet_form) if snippet_form.validate_on_submit(): snippet.body = snippet_form.snippet.data if snippet_form.title.data: snippet.title = snippet_form.title.data snippet.language = Language.query.get(snippet_form.language.data) snippet.private = snippet_form.private.data db.session.add(snippet) db.session.commit() return redirect( url_for('snippets.show_snippet', snippet_uuid=snippet.get_uuid())) snippet_form.title.default = snippet.title snippet_form.snippet.default = snippet.body snippet_form.language.default = snippet.language_id snippet_form.private.default = snippet.is_private() snippet_form.process() return render_template('snippets/compose.html', form=snippet_form, snippet=snippet)
def ajax_delete(): snip_uuid = request.form.get('snip_uuid', None) snippet = get_snippet_by_uuid(snip_uuid) if current_user == snippet.user: db.session.delete(snippet) db.session.commit() return Response('Delete Successful.', status=200) return Response('Delete Unsuccessful.', status=401)
def fork_snippet(snippet_uuid): to_fork = get_snippet_by_uuid(snippet_uuid) if to_fork.is_private() and to_fork.user != current_user: raise Unauthorized("This snippet is private.") new_snippet = Snippet(to_fork.body) new_snippet.title = to_fork.title new_snippet.language = to_fork.language new_snippet.parent_fork = to_fork new_snippet.user = current_user db.session.add(new_snippet) db.session.commit() return redirect( url_for('snippets.show_snippet', snippet_uuid=new_snippet.get_uuid()))
def show_snippet(snippet_uuid): """Route shows a snippet given it's unique identifier - displayed in a read only codemirror textarea""" snippet = get_snippet_by_uuid(snippet_uuid) if snippet.is_private() and snippet.user != current_user: raise Unauthorized("This snippet is private.") snippet.hits = snippet.hits + 1 db.session.add(snippet) db.session.commit() return render_template('snippets/view.html', snippet=snippet)
def download_snippet(snippet_uuid): """Route returns a downloadable file containing the raw text of a snippet""" snippet = get_snippet_by_uuid(snippet_uuid) body = snippet.body ext = snippet.language.extension response = make_response(body) response.headers['Content-Disposition'] =\ "attachment; filename={}{}".format(snippet_uuid, ext) return response
def delete_snippet(snippet_uuid): """Route lets the owner of a snippet delete the snippet""" snippet = get_snippet_by_uuid(snippet_uuid) if current_user != snippet.user: message = "You are not authorized to edit this snippet." return render_template('errorpages/401.html', message=message), 401 form = DeleteForm() if form.validate_on_submit(): db.session.delete(snippet) db.session.commit() return redirect( url_for('user.snippets', username=current_user.username)) return render_template('snippets/delete.html', form=form, snippet=snippet)
def raw_snippet(snippet_uuid): """Route returns the raw text of a snippet in a blank page in the browser""" snippet = get_snippet_by_uuid(snippet_uuid) return Response(snippet.body, mimetype='text/plain')