MeCard ergänzt

This commit is contained in:
2023-11-08 14:10:17 +01:00
parent e1e0944ed4
commit 98f6eb8961
10 changed files with 147 additions and 16 deletions

View File

@@ -7,7 +7,7 @@
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="80" />
<option name="containerPort" value="8002" />
<option name="hostPort" value="8002" />
</DockerPortBindingImpl>
</list>

View File

@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Dockerfile-local" type="docker-deploy" factoryName="dockerfile" server-name="Docker-local">
<configuration default="false" name="Dockerfile-local" type="docker-deploy" factoryName="dockerfile">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="flask-qrcode-gen:latest" />
@@ -7,7 +7,7 @@
<option name="portBindings">
<list>
<DockerPortBindingImpl>
<option name="containerPort" value="80" />
<option name="containerPort" value="8002" />
<option name="hostPort" value="8002" />
</DockerPortBindingImpl>
</list>

65
.idea/workspace.xml generated
View File

@@ -4,9 +4,17 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="3fdfc273-527d-4717-bd6d-4ba98fba7555" name="Changes" comment="VCARD integriert">
<list default="true" id="3fdfc273-527d-4717-bd6d-4ba98fba7555" name="Changes" comment="python3.11 - Kompatibilität wieder hergestellt">
<change afterPath="$PROJECT_DIR$/app/templates/mecard.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/runConfigurations/Dockerfile_Raspi.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/runConfigurations/Dockerfile_Raspi.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/runConfigurations/Dockerfile_local.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/runConfigurations/Dockerfile_local.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dockerfile" beforeDir="false" afterPath="$PROJECT_DIR$/Dockerfile" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Dockerfile-RasPi" beforeDir="false" afterPath="$PROJECT_DIR$/Dockerfile-RasPi" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Flask-QR.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Flask-QR.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/base.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/templates/base.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/templates/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/app/templates/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/readme.md" beforeDir="false" afterPath="$PROJECT_DIR$/readme.md" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -54,7 +62,9 @@
&quot;associatedIndex&quot;: 4
}</component>
<component name="ProjectId" id="2XWrX9sCJFSR4JSbdK3QdicYBvo" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
@@ -66,15 +76,16 @@
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;D:/mager/Documents/IntelliJ/Docker-Flask-QR/app/templates&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/tebarius/IdeaProjects/Docker-Flask-QR/app/templates&quot;,
&quot;project.structure.last.edited&quot;: &quot;Global Libraries&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.lookFeel&quot;
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.keymap&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/app/templates" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR\app\templates" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR" />
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR\templates" />
@@ -86,13 +97,40 @@
<recent name="D:\mager\Documents\IntelliJ\Docker-Flask-QR" />
</key>
</component>
<component name="RunManager" selected="Docker.Dockerfile-local">
<component name="RunManager" selected="Docker.Dockerfile-Raspi">
<configuration name="Flask-QR" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="Docker-Flask-QR" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.12 (Docker-Flask-QR)" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/Flask-QR.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="docker-deploy" factoryName="dockerfile" temporary="true">
<deployment type="dockerfile">
<settings />
</deployment>
<method v="2" />
</configuration>
<list>
<item itemvalue="Docker.Dockerfile-local" />
<item itemvalue="Docker.Dockerfile-Raspi" />
<item itemvalue="Python.Flask-QR" />
</list>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
@@ -135,7 +173,15 @@
<option name="project" value="LOCAL" />
<updated>1699392160202</updated>
</task>
<option name="localTasksCounter" value="5" />
<task id="LOCAL-00005" summary="python3.11 - Kompatibilität wieder hergestellt">
<option name="closed" value="true" />
<created>1699436397080</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1699436397080</updated>
</task>
<option name="localTasksCounter" value="6" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@@ -165,6 +211,11 @@
<MESSAGE value="css,mail,tel,url,calendar fertig" />
<MESSAGE value="VCARD-Inhalt geplant (in Flask-qr.py)" />
<MESSAGE value="VCARD integriert" />
<option name="LAST_COMMIT_MESSAGE" value="VCARD integriert" />
<MESSAGE value="python3.11 - Kompatibilität wieder hergestellt" />
<option name="LAST_COMMIT_MESSAGE" value="python3.11 - Kompatibilität wieder hergestellt" />
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />
<select />
</component>
</project>

View File

@@ -10,6 +10,6 @@ COPY ./app /app/
#RUN pip install --upgrade pip
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
EXPOSE 8002
CMD ["python", "Flask-QR.py"]

View File

@@ -13,6 +13,6 @@ RUN apt-get update && apt-get install -y gcc zlib1g-dev libjpeg-dev
#RUN python -m pip install --upgrade pillow
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
EXPOSE 8002
CMD ["python", "Flask-QR.py"]

View File

@@ -33,6 +33,11 @@ def vcard():
return render_template('vcard.html')
@app.route("/mecard.html")
def mecard():
return render_template('mecard.html')
@app.route("/geo.html")
def geo():
return render_template('geo.html')
@@ -65,6 +70,31 @@ def makeqr():
elif request.args.get('type') == "tel":
data = f"tel:{request.args.get('tel')}"
elif request.args.get('type') == "mecard":
titel = request.args.get("titel")
if titel != "":
titel += " "
data = (f"MECARD:N:{request.args.get('nname')},{titel}{request.args.get('vname')};"
f"ADR:{request.args.get('pbox')},{request.args.get('adresszusatz')},"
f"{request.args.get('strasse')},{request.args.get('ort')},{request.args.get('bland')},"
f"{request.args.get('plz')},{request.args.get('land')};")
if request.args.get('tel') != "":
data += f"TEL:{request.args.get('tel')};"
if request.args.get('mail') != "":
data += f"EMAIL:{request.args.get('mail')};"
if request.args.get('url') != "":
data += f"URL:{request.args.get('url')};"
if request.args.get('tel') != "":
data += f"TEL:{request.args.get('tel')};"
if request.args.get('nickname') != "":
data += f"NICKNAME:{request.args.get('nickname')};"
if request.args.get('gebdate') != "":
data += f"BDAY:{request.args.get('gebdate').replace('-','')};"
if request.args.get('note') != "":
data += f"NOTE:{request.args.get('note')};"
elif request.args.get('type') == "vcard":
# BEGIN:VCARD
# VERSION:3.0
@@ -191,4 +221,4 @@ def makeqr():
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
app.run(host='0.0.0.0', port=8002, debug=True)

View File

@@ -1,6 +1,7 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>QR-Code-Generator</title>
<!--suppress HtmlUnknownTarget -->
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

View File

@@ -11,4 +11,5 @@
<div><button><a href="./wifi.html">WIFI</a></button></div>
<div><button><a href="./cal.html">Kalender-Termin</a></button></div>
<div><button><a href="./vcard.html">Visitenkarte (vCard)</a></button></div>
<div><button><a href="./mecard.html">Visitenkarte (MeCard)</a></button></div>
{% endblock %}

49
app/templates/mecard.html Normal file
View File

@@ -0,0 +1,49 @@
{% extends "base.html" %}
{% block inhalt %}
<form action="qr.html">
<label>Gebe bitte Details für die Visitenkarte an!</label><br />
<input type="hidden" name="type" value="mecard">
<label for="vname">Vorname:</label>
<input type="text" name="vname" id="vname" size="30" maxlength="60" required><br />
<label for="nname">Nachname:</label>
<input type="text" name="nname" id="nname" size="30" maxlength="60" required><br />
<label><i><u>optionale Angaben:</u></i></label><br />
<label for="titel">Titel (z.B. Dr.,Prof.):</label>
<input type="text" name="titel" id="titel" size="10" maxlength="60"><br />
<label for="tel">Telefon:</label>
<input type="tel" name="tel" id="tel" size="20" maxlength="24"><br />
<label for="mail">EMail:</label>
<input type="email" name="mail" id="mail" size="30" maxlength="120"><br />
<label for="url">Webseite:</label>
<input type="url" name="url" id="url" size="30" maxlength="120"><br />
<label for="nickname">Spitzname &#47; Pseudonym:</label>
<input type="text" name="nickname" id="nickname" size="20" maxlength="60"><br />
<label for="gebdate">Geburtsdatum</label>
<input type="date" name="gebdate" id="gebdate"><br />
<label for="note">freie Notiz:</label>
<input type="text" name="note" id="note" size="30" maxlength="240"><br />
<br />
<label for="strasse">Strasse:</label>
<input type="text" name="strasse" id="strasse" size="30" maxlength="120"><br />
<label for="plz">Postleitzahl:</label>
<input type="text" name="plz" id="plz" size="10" maxlength="20"><br />
<label for="ort">Ort:</label>
<input type="text" name="ort" id="ort" size="30" maxlength="120"><br />
<label for="land">Land:</label>
<input type="text" name="land" id="land" size="30" maxlength="120"><br />
<label for="adresszusatz">Adresszusatz &#47; Wohnungsnummer:</label>
<input type="text" name="adresszusatz" id="adresszusatz" size="20" maxlength="120"><br />
<label for="pbox">Postfach:</label>
<input type="text" name="pbox" id="pbox" size="20" maxlength="60"><br />
<label for="bland">Bundesland:</label>
<input type="text" name="bland" id="bland" size="30" maxlength="120"><br />
<br />
<br />
<button type="reset">Eingaben zur&uuml;cksetzen</button>
<button type="submit">Eingaben absenden</button>
</form>
{% endblock %}

View File

@@ -1,10 +1,9 @@
# Flask QR-Code-Generator
Dieses Programm benötigt Python und das Flask-Framework um einen kleinen Server auf Port 80
aufzumachen.
Dieses Programm benötigt Python und das Flask-Framework um einen kleinen Server auf Port 8002 aufzumachen.
pip install Flask-QRcode
... installiert alles Notwendige nach damit das Programm läuft
... installiert alles Notwendige
## Docker
2 unterschiedliche Dockerfile's, da obwohl bei beiden python:slim als Basis genutzt wird,