adds device generation and connection
- fingerprint generated first time device connects - saved to database and served to device - connection status set to true, once device requests first package - user can link device via online form
This commit is contained in:
parent
7b82086ff0
commit
87dedb8e02
@ -2,8 +2,7 @@ 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
|
RUN pip3 install uwsgi email-validator random-word
|
||||||
RUN pip3 install email-validator
|
|
||||||
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
|
||||||
|
BIN
server/.routes.py.swp
Normal file
BIN
server/.routes.py.swp
Normal file
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import StringField, PasswordField, BooleanField, SubmitField
|
from wtforms import StringField, PasswordField, BooleanField, SubmitField
|
||||||
from wtforms.validators import DataRequired, ValidationError, Email, EqualTo
|
from wtforms.validators import DataRequired, ValidationError, Email, EqualTo
|
||||||
from database.models import User
|
from database.models import User, Device
|
||||||
import email_validator
|
import email_validator
|
||||||
|
|
||||||
class LoginForm(FlaskForm):
|
class LoginForm(FlaskForm):
|
||||||
@ -31,3 +31,8 @@ class RegistrationForm(FlaskForm):
|
|||||||
class DeviceForm(FlaskForm):
|
class DeviceForm(FlaskForm):
|
||||||
deviceName=StringField('New Device ID', validators=[DataRequired()])
|
deviceName=StringField('New Device ID', validators=[DataRequired()])
|
||||||
submit = SubmitField('Add New Device')
|
submit = SubmitField('Add New Device')
|
||||||
|
|
||||||
|
def validate_deviceName (self, deviceName):
|
||||||
|
device = Device.query.filter_by(deviceName=deviceName.data).first()
|
||||||
|
if device is None:
|
||||||
|
raise ValidationError('Device not Found')
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# Python standard libraries
|
# Python standard libraries
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sqlite3
|
|
||||||
|
|
||||||
# Third-party libraries
|
# Third-party libraries
|
||||||
import flask
|
import flask
|
||||||
@ -14,6 +13,7 @@ from flask_login import (
|
|||||||
login_user,
|
login_user,
|
||||||
logout_user,
|
logout_user,
|
||||||
)
|
)
|
||||||
|
from random_word import RandomWords
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
import server.googleHandler as google
|
import server.googleHandler as google
|
||||||
@ -64,14 +64,10 @@ def devices():
|
|||||||
# TODO add this device to the user - do not create new device
|
# TODO add this device to the user - do not create new device
|
||||||
form = DeviceForm()
|
form = DeviceForm()
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
print(form.deviceName.data, flush=True)
|
device = db.session.query(Device).filter(Device.deviceName==form.deviceName.data).first()
|
||||||
device = Device()
|
|
||||||
device.deviceName = form.deviceName.data
|
|
||||||
device.connection = False
|
|
||||||
db.session.add(device)
|
|
||||||
current_user.devices.append(device)
|
current_user.devices.append(device)
|
||||||
# TODO add device to database here
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return flask.render_template('devices.html',
|
return flask.render_template('devices.html',
|
||||||
devices=current_user.devices,
|
devices=current_user.devices,
|
||||||
form=form)
|
form=form)
|
||||||
@ -187,17 +183,21 @@ def credentials_to_dict(credentials):
|
|||||||
'scopes': credentials.scopes}
|
'scopes': credentials.scopes}
|
||||||
|
|
||||||
|
|
||||||
@app.route("/userinfo/<path:device>/calendarevents.json")
|
@app.route("/device/<path:device>/calendarevents.json")
|
||||||
def downloader(device):
|
def downloader(device):
|
||||||
path = "/home/calendarwatch/userinfo/" + device + "/"
|
path = "/home/calendarwatch/device/" + device + "/"
|
||||||
# return flask.send_from_directory(path, "calendarevents.json")
|
# TODO change search for device (also in tizen)
|
||||||
request_user = db.session.query(User).filter(User.userid==device).first()
|
request_device = db.session.query(Device).filter(Device.deviceName==device).first()
|
||||||
print(device, flush=True)
|
if request_device == None:
|
||||||
if request_user == None:
|
return jsonify(kind="not found")
|
||||||
|
if request_device.user_id == None:
|
||||||
return jsonify(kind="unregistered")
|
return jsonify(kind="unregistered")
|
||||||
|
|
||||||
routine = Routine()
|
request_device.connection=True
|
||||||
|
db.session.commit()
|
||||||
|
request_user = db.session.query(User).filter(User.id==request_device.user_id).first()
|
||||||
|
|
||||||
|
routine = Routine()
|
||||||
client_token = google.GC.build_credentials(request_user.google_token.token,
|
client_token = google.GC.build_credentials(request_user.google_token.token,
|
||||||
request_user.google_token.refresh_token)
|
request_user.google_token.refresh_token)
|
||||||
calendarjson = routine.updateCalendar(request_user, client_token)
|
calendarjson = routine.updateCalendar(request_user, client_token)
|
||||||
@ -206,10 +206,28 @@ def downloader(device):
|
|||||||
@app.route("/devicefingerprint.json")
|
@app.route("/devicefingerprint.json")
|
||||||
def generateDeviceFingerprint():
|
def generateDeviceFingerprint():
|
||||||
# Create Three Random Words
|
# Create Three Random Words
|
||||||
|
r = RandomWords()
|
||||||
|
while True:
|
||||||
|
fingerprint = ""
|
||||||
|
length = 3
|
||||||
|
randos = r.get_random_words(limit=length, hasDictionaryDef="true",
|
||||||
|
includePartOfSpeech="noun", minDictionaryCount=1,
|
||||||
|
maxDictionaryCount=10, minLength=5, maxLength=10)
|
||||||
|
for i in range(len(randos)):
|
||||||
|
fingerprint += randos[i]
|
||||||
|
if i < length-1:
|
||||||
|
fingerprint += "-"
|
||||||
|
|
||||||
# check not in Device Database
|
# check not in Device Database
|
||||||
|
if not db.session.query(Device).filter(Device.deviceName==fingerprint).first():
|
||||||
# Save as new Device
|
# Save as new Device
|
||||||
# Send to User
|
device = Device(deviceName=fingerprint, connection=False)
|
||||||
return jsonify(deviceName="Carrot-Enamel-Storm")
|
db.session.add(device)
|
||||||
|
db.session.commit()
|
||||||
|
break;
|
||||||
|
|
||||||
|
# Send to Device
|
||||||
|
return jsonify(deviceName=fingerprint)
|
||||||
|
|
||||||
# POST
|
# POST
|
||||||
|
|
||||||
@ -221,7 +239,6 @@ def user():
|
|||||||
color = request.json.get('color', None)
|
color = request.json.get('color', None)
|
||||||
toggle = request.json.get('toggle', None)
|
toggle = request.json.get('toggle', None)
|
||||||
|
|
||||||
print(request.json, flush=True)
|
|
||||||
if color != None:
|
if color != None:
|
||||||
current_user.updateCalendar(calId, color=color)
|
current_user.updateCalendar(calId, color=color)
|
||||||
if toggle != None:
|
if toggle != None:
|
||||||
|
@ -37,6 +37,9 @@
|
|||||||
<div style="width: 7rem; margin: 1rem">{{ form.deviceName.label }}</div>
|
<div style="width: 7rem; margin: 1rem">{{ form.deviceName.label }}</div>
|
||||||
<div style="width: 12rem; margin: 1rem">{{ form.deviceName(size=24) }}</div>
|
<div style="width: 12rem; margin: 1rem">{{ form.deviceName(size=24) }}</div>
|
||||||
<div style="with: 7rem; margin: 1rem">{{ form.submit() }}</div>
|
<div style="with: 7rem; margin: 1rem">{{ form.submit() }}</div>
|
||||||
|
{% for error in form.deviceName.errors %}
|
||||||
|
<span style="color: red;">[{{ error }}]</span>
|
||||||
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user