adds ical form and form visualization in calendar.html
This commit is contained in:
		@@ -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">
 | 
				
			||||||
 | 
					    <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> 
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					    <!--div class="container">
 | 
				
			||||||
        <a class="button addcalendar" href="/login/google" style="width: auto; margin: 4rem">Add Calendar</a>
 | 
					        <a class="button addcalendar" href="/login/google" style="width: auto; margin: 4rem">Add Calendar</a>
 | 
				
			||||||
    </div> 
 | 
					    </div--> 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script type="text/javascript">
 | 
					<script type="text/javascript">
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user