Almet/qrcode (#1000)

Add a QRCode utility to join the project.
This commit is contained in:
Alexis Metaireau 2022-05-11 11:20:15 +02:00 committed by GitHub
parent dc6cead5cd
commit 936ea0ea8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 1 deletions

View file

@ -26,6 +26,15 @@
</a> </a>
</td> </td>
</tr> </tr>
<tr>
<td>
<h3>{{ _('Scan QR code') }}</h3>
<p><small>{% trans download_mobile=url_for(".mobile") %}On a mobile device, with <a href="{{ download_mobile }}">a compatible app installed</a>.{% endtrans %}</small></p>
</td>
<td>
{{ qrcode | safe }}
</td>
</tr>
<tr> <tr>
<td> <td>
<h3>{{ _('Send via Emails') }}</h3> <h3>{{ _('Send via Emails') }}</h3>

View file

@ -9,8 +9,10 @@ some shortcuts to make your life better when coding (see `pull_project`
and `add_project_id` for a quick overview) and `add_project_id` for a quick overview)
""" """
from functools import wraps from functools import wraps
from io import StringIO
import json import json
import os import os
from urllib.parse import urlparse, urlunparse
from flask import ( from flask import (
Blueprint, Blueprint,
@ -28,6 +30,8 @@ from flask import (
) )
from flask_babel import gettext as _ from flask_babel import gettext as _
from flask_mail import Message from flask_mail import Message
import qrcode
import qrcode.image.svg
from sqlalchemy_continuum import Operation from sqlalchemy_continuum import Operation
from werkzeug.exceptions import NotFound from werkzeug.exceptions import NotFound
from werkzeug.security import check_password_hash, generate_password_hash from werkzeug.security import check_password_hash, generate_password_hash
@ -586,7 +590,22 @@ def invite():
"Sorry, there was an error while trying to send the invitation emails." "Sorry, there was an error while trying to send the invitation emails."
) )
# Fall-through: we stay on the same page and display the form again # Fall-through: we stay on the same page and display the form again
return render_template("send_invites.html", form=form)
# Generate the SVG QRCode.
invite_link = url_for(
".join_project",
project_id=g.project.id,
token=g.project.generate_token(),
_external=True,
)
invite_link = urlunparse(urlparse(invite_link)._replace(scheme="ihatemoney"))
qr = qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage)
qr.add_data(invite_link)
qr.make(fit=True)
img = qr.make_image(attrib={"class": "qrcode"})
qrcode_svg = img.to_string().decode()
return render_template("send_invites.html", form=form, qrcode=qrcode_svg)
@main.route("/<project_id>/") @main.route("/<project_id>/")

View file

@ -40,6 +40,7 @@ install_requires =
Werkzeug>=2,<2.1 # See https://github.com/spiral-project/ihatemoney/pull/1015 Werkzeug>=2,<2.1 # See https://github.com/spiral-project/ihatemoney/pull/1015
itsdangerous>=2,<3 itsdangerous>=2,<3
Jinja2>=3,<4 Jinja2>=3,<4
qrcode>=7,<8
requests>=2.22,<3 requests>=2.22,<3
SQLAlchemy-Continuum>=1.3.12,<2 SQLAlchemy-Continuum>=1.3.12,<2
SQLAlchemy>=1.3.0,<1.4 # New 1.4 changes API, see #728 SQLAlchemy>=1.3.0,<1.4 # New 1.4 changes API, see #728