Store a profiler attachment (plaintext on disk). Profiler *text fields* remain encrypted in the database; only binary attachments are stored without encryption (per your request).
(eid: int, file_storage)
| 15439 | |
| 15440 | Returns: |
| 15441 | Varies. |
| 15442 | """ |
| 15443 | me = current_user() |
| 15444 | if group_role(gid, me) != "owner": |
| 15445 | abort(403) |
| 15446 | username = (request.form.get("username") or "").strip() |
| 15447 | if not username: |
| 15448 | return redirect(url_for("group_chat", gid=gid)) |
| 15449 | if group_role(gid, username) != "member": |
| 15450 | return redirect(url_for("group_chat", gid=gid)) |
| 15451 | conn = db_connect() |
| 15452 | conn.execute("UPDATE group_members SET role='admin' WHERE group_id=? AND username=?", (gid, username)) |
| 15453 | conn.commit() |
| 15454 | conn.close() |
| 15455 | flash("Promoted to admin.") |
| 15456 | return redirect(url_for("group_chat", gid=gid)) |
| 15457 | |
| 15458 | @app.route("/groups/<int:gid>/admins/demote", methods=["POST"]) |
| 15459 | @login_required |
| 15460 | def group_demote_admin(gid: int): |
| 15461 | """group_demote_admin. |
| 15462 | |
| 15463 | Admin-only route handler. |
| 15464 | |
| 15465 | This docstring was expanded to make future maintenance easier. |
| 15466 | |
| 15467 | Args: |
| 15468 | gid: Parameter. |
| 15469 | |
| 15470 | Returns: |
| 15471 | Varies. |
| 15472 | """ |
| 15473 | me = current_user() |
| 15474 | if group_role(gid, me) != "owner": |
| 15475 | abort(403) |
| 15476 | username = (request.form.get("username") or "").strip() |
| 15477 | if not username: |
| 15478 | return redirect(url_for("group_chat", gid=gid)) |
| 15479 | if group_role(gid, username) != "admin": |
| 15480 | return redirect(url_for("group_chat", gid=gid)) |
| 15481 | conn = db_connect() |
| 15482 | conn.execute("UPDATE group_members SET role='member' WHERE group_id=? AND username=?", (gid, username)) |
no test coverage detected