adds ical form and form visualization in calendar.html

This commit is contained in:
Raphael Maenle 2020-07-25 10:50:02 +02:00
parent 38e16f92e8
commit 2add28fa00
4 changed files with 67 additions and 32 deletions

View File

@ -2,9 +2,10 @@ FROM python:3.8-slim-buster
RUN apt-get update && apt-get upgrade RUN apt-get update && apt-get upgrade
RUN pip3 install flask Flask-SQLAlchemy flask_migrate flask_login flask_wtf python-dotenv RUN pip3 install flask Flask-SQLAlchemy flask_migrate flask_login flask_wtf python-dotenv
RUN apt-get install gcc libpcre3 libpcre3-dev libmariadbclient-dev -y RUN apt-get install gcc libpcre3 libpcre3-dev libmariadbclient-dev -y
RUN pip3 install uwsgi email-validator RandomWords RUN pip3 install uwsgi email-validator RandomWords icalevents
RUN pip3 install google google-oauth google-auth-oauthlib google-api-python-client mysqlclient RUN pip3 install google google-oauth google-auth-oauthlib google-api-python-client mysqlclient
COPY docker-entrypoint.sh /usr/local/bin/ COPY docker-entrypoint.sh /usr/local/bin/
EXPOSE 8084 EXPOSE 8084
EXPOSE 3001 EXPOSE 3001
ENTRYPOINT ["docker-entrypoint.sh"] ENTRYPOINT ["docker-entrypoint.sh"]
# CMD tail -f /dev/null

View File

@ -46,3 +46,12 @@ class DeviceForm(FlaskForm):
device = Device.query.filter_by(deviceName=deviceName.data).first() device = Device.query.filter_by(deviceName=deviceName.data).first()
if device is None: if device is None:
raise ValidationError('Device not Found') raise ValidationError('Device not Found')
class CalendarForm(FlaskForm):
iCalURL = StringField('New ical URL', validators=[DataRequired()])
submit = SubmitField('Add URL')
def validate_iCalURL (self, iCalURL):
return None

View File

@ -20,7 +20,7 @@ import requests
import server.googleHandler as google import server.googleHandler as google
from server import login_manager, app, db from server import login_manager, app, db
from server.forms import LoginForm, RegistrationForm, DeviceForm from server.forms import LoginForm, RegistrationForm, DeviceForm, CalendarForm
import backend import backend
from database.models import User, Calendar, Device, GoogleToken from database.models import User, Calendar, Device, GoogleToken
@ -94,11 +94,51 @@ def devices():
form=form) form=form)
@app.route("/calendar") @app.route("/calendar", methods=['GET', 'POST', 'DELETE'])
@login_required @login_required
def calendar(): def calendar():
calendars = backend.calendarsFromDb(current_user) calendars = backend.calendarsFromDb(current_user)
return flask.render_template('calendar.html', calendars=calendars)
form = CalendarForm()
if request.method == 'POST':
if form.validate_on_submit():
# try to add the submitted ical as a calendar
print(form.iCalURL.data, flush=True)
# otherwise it is a javascript POST
else:
calId = request.json.get('calendar_id')
color = request.json.get('color', None)
toggle = request.json.get('toggle', None)
if color != None:
current_user.updateCalendar(calId, color=color)
if toggle != None:
current_user.updateCalendar(calId, toggle=toggle)
# toggle specific calendar of user
calId = request.json.get('calendar_id')
color = request.json.get('color', None)
toggle = request.json.get('toggle', None)
if color != None:
current_user.updateCalendar(calId, color=color)
if toggle != None:
current_user.updateCalendar(calId, toggle=toggle)
# toggle specific calendar of user
return 'OK'
elif request.method == 'DELETE':
# do nothing
return 'NONE'
else:
# POST Error 405
print("405")
return flask.render_template('calendar.html', calendars=calendars, form=form)
# POST
@app.route('/login/email', methods=['GET', 'POST']) @app.route('/login/email', methods=['GET', 'POST'])
def emaillogin(): def emaillogin():
@ -243,27 +283,3 @@ def generateDeviceFingerprint():
# Send to Device # Send to Device
return jsonify(deviceName=fingerprint) return jsonify(deviceName=fingerprint)
# POST
@app.route('/calendar', methods = ['POST', 'DELETE'])
@login_required
def user():
if request.method == 'POST':
calId = request.json.get('calendar_id')
color = request.json.get('color', None)
toggle = request.json.get('toggle', None)
if color != None:
current_user.updateCalendar(calId, color=color)
if toggle != None:
current_user.updateCalendar(calId, toggle=toggle)
# toggle specific calendar of user
elif request.method == 'DELETE':
# do nothing
return 'NONE'
else:
# POST Error 405
print("405")
return 'OK'

View File

@ -32,12 +32,21 @@
</div> </div>
{% endfor %} {% endfor %}
<div id=calendars class="container"> <div id=calendars class="container">
<a class="button" href="login/google">Google Calendar</a>
<a class="button" href="#" >Nextcloud Calendar</a>
</div> </div>
<div class="container"> <form action="" method="post">
<a class="button addcalendar" href="/login/google" style="width: auto; margin: 4rem">Add Calendar</a> <div class="container grey" style="margin-top: 3rem;">
<div>{{ form.hidden_tag() }}</div>
<div style="margin: 1rem">{{ form.iCalURL.label }}</div>
<div style="margin: 1rem">{{ form.iCalURL(size=24) }}</div>
<div style="with: 8rem; margin: 1rem">{{ form.submit() }}</div>
{% for error in form.iCalURL.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div> </div>
</form>
<!--div class="container">
<a class="button addcalendar" href="/login/google" style="width: auto; margin: 4rem">Add Calendar</a>
</div-->
<script type="text/javascript"> <script type="text/javascript">