+ return _('Error, proxy not found.'), 400
+
+ p = db.prepare("SELECT * FROM vote WHERE motion_id = $1 AND voter_id = $2")
+ rv = p(id, voterid)
+ if len(rv) == 0:
+ db.prepare("INSERT INTO vote(motion_id, voter_id, result, proxy_id) VALUES($1,$2,$3,$4)")(id, voterid, v, g.voter)
+ else:
+ db.prepare("UPDATE vote SET result=$3, entered=CURRENT_TIMESTAMP, proxy_id=$4 WHERE motion_id=$1 AND voter_id = $2")(id, voterid, v, g.voter)
+ return motion_edited(motion)
+
+@app.route("/proxy")
+def proxy():
+ if not may_admin("proxyadmin"):
+ return _('Forbidden'), 403
+ return render_template('proxy.html', voters=get_voters(), proxies=get_all_proxies(), may_proxyadmin=may_admin("proxyadmin"), languages=get_languages())
+
+@app.route("/proxy/add", methods=['POST'])
+def add_proxy():
+ if not may_admin("proxyadmin"):
+ return _('Forbidden'), 403
+ voter=request.form.get("voter", "")
+ proxy=request.form.get("proxy", "")
+ if voter == proxy :
+ return _('Error, voter equals proxy.'), 400
+ rv = get_db().prepare("SELECT id FROM voter WHERE email=$1 AND host=$2")(voter, request.host);
+ if len(rv) == 0:
+ return _('Error, voter not found.'), 400
+ voterid = rv[0].get("id")
+ rv = get_db().prepare("SELECT id, host FROM voter WHERE email=$1 AND host=$2")(proxy, request.host);
+ if len(rv) == 0:
+ return _('Error, proxy not found.'), 400
+ proxyid = rv[0].get("id")
+ rv = get_db().prepare("SELECT id FROM proxy WHERE voter_id=$1 AND revoked is NULL")(voterid);
+ if len(rv) != 0:
+ return _('Error, proxy allready given.'), 400
+ rv = get_db().prepare("SELECT COUNT(id) as c FROM proxy WHERE proxy_id=$1 AND revoked is NULL GROUP BY proxy_id")(proxyid);
+ if len(rv) != 0:
+ if rv[0].get("c") is None or rv[0].get("c") >= max_proxy:
+ return _("Error, Max proxy for '%s' reached.") % (proxy), 400
+ rv = get_db().prepare("INSERT INTO proxy(voter_id, proxy_id, granted_by) VALUES ($1,$2,$3)")(voterid, proxyid, g.voter)
+ write_proxy_log(voterid, 'proxygranted', 'proxy: '+str(proxyid))
+ return rel_redirect("/proxy")
+
+@app.route("/proxy/revoke", methods=['POST'])
+def revoke_proxy():
+ if not may_admin("proxyadmin"):
+ return _('Forbidden'), 403
+ id=request.form.get("id", "")
+ rv = get_db().prepare("UPDATE proxy SET revoked=CURRENT_TIMESTAMP, revoked_by=$1 WHERE id=$2")(g.voter, int(id))
+ write_proxy_log(int(id), 'proxyrevoked', '')
+ return rel_redirect("/proxy")
+
+@app.route("/proxy/revokeall", methods=['POST'])
+def revoke_proxy_all():
+ if not may_admin("proxyadmin"):
+ return _('Forbidden'), 403
+ rv = get_db().prepare("UPDATE proxy SET revoked=CURRENT_TIMESTAMP, revoked_by=$1 WHERE revoked IS NULL")(g.voter)
+ write_proxy_log(g.voter, 'proxyrevokedall', '')
+ return rel_redirect("/proxy")
+
+@app.route("/language/<string:language>")
+def set_language(language):
+ lang.change_language(language)
+ return rel_redirect("/")
+
+@app.cli.command("create-user")
+@click.argument("email")
+@click.argument("host")
+def create_user(email, host):
+ db = get_db()
+ with db.xact():
+ rv = db.prepare("SELECT id FROM voter WHERE lower(email)=lower($1) AND host=$2")(email, host)
+ messagetext=_("User '%s' already exists on %s.") % (email, host)