adds ical form and form visualization in calendar.html
This commit is contained in:
parent
38e16f92e8
commit
2add28fa00
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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'
|
|
||||||
|
@ -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">
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user