diff --git a/app.py b/app.py index 6492b6a..062a0e5 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,4 @@ -from flask import Flask, render_template, request, json, session, redirect, Blueprint, url_for +from flask import Flask, render_template, request, json, session, redirect, Blueprint, url_for, flash, Response, send_from_directory from flask_wtf import Form from wtforms.fields import StringField, SubmitField from wtforms.validators import Required @@ -13,8 +13,12 @@ from flask_socketio import emit, join_room, leave_room import smtplib from oauth2client import file, client, tools from googleapiclient.discovery import build +from googleapiclient.http import MediaFileUpload from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials +import os +from werkzeug.utils import secure_filename +from camera import VideoCamera @@ -34,7 +38,14 @@ socketio.init_app(app) #app.config['MYSQL_DATABASE_HOST'] = 'localhost' #mysql = MySQL() #mysql.init_app(app) + +UPLOAD_FOLDER = './uploads' +ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) +app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/groupChat', methods=['GET', 'POST']) def indexChat(): @@ -99,7 +110,10 @@ class LoginForm(Form): faces_list = [] testing_face = 0 service = None -SCOPES = "https://www.googleapis.com/auth/calendar.events" +drive_service = None +CALENDAR_SCOPES = "https://www.googleapis.com/auth/calendar.events" +DRIVE_SCOPES = "https://www.googleapis.com/auth/drive" + @socketio.on('message') def handleMessage(msg): @@ -111,9 +125,15 @@ def main(): store = file.Storage('token.json') creds = store.get() if not creds or creds.invalid: - flow = client.flow_from_clientsecrets('credentials.json', SCOPES) + flow = client.flow_from_clientsecrets('credentials.json', CALENDAR_SCOPES) creds = tools.run_flow(flow, store) service = build('calendar', 'v3', http=creds.authorize(Http())) + + if not creds or creds.invalid: + flow = client.flow_from_clientsecrets('credentials.json', DRIVE_SCOPES) + creds = tools.run_flow(flow, store) + drive_service = build('drive', 'v3', http=creds.authorize(Http())) + return render_template('index.html', info="Witaj!") @app.route("/indexENG") @@ -636,13 +656,181 @@ def addEvent(): service.events().insert(calendarId='primary', body=event).execute() return render_template('userHome.html', user=session['user'].split('@')[0], calendar_src="https://calendar.google.com/calendar/embed?src=" + session.get("user")) +@app.route('/streaming') +def streaming(): + return render_template('streaming.html') + @app.route('/toAddEvent') def toAddEvent(): if session.get('user'): return render_template('addEvent.html') else: return render_template('error.html',error = 'Nieautoryzowany dostęp!') + +def gen(camera): + while True: + frame = camera.get_frame() + yield (b'--frame\r\n' + b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') + +@app.route('/stream') +def stream(): + return Response(gen(VideoCamera()), + mimetype='multipart/x-mixed-replace; boundary=frame') + +def make_tree(path=app.config['UPLOAD_FOLDER']): + tree = dict(name=path, children=[]) + try: lst = os.listdir(path) + except OSError: + pass #ignore errors + else: + for name in lst: + fn = os.path.join(path, name) + if os.path.isdir(fn): + tree['children'].append(make_tree(fn)) + else: + tree['children'].append(dict(name=fn)) + return tree + +@app.route('/uploads/') +def download_file(filename): + return send_from_directory(app.config['UPLOAD_FOLDER'], + filename, as_attachment=True) +@app.route('/toResources') +def toResources(): + if session.get('user'): + files = make_tree() + # list_of_files = {} + # path = app.config['UPLOAD_FOLDER'] + # for filename in os.listdir(path): + # print (filename) + # print () + # list_of_files[filename] = filename.file.name + print (files) + # items_keys = [] + # for key, value in files.items(): + # if key == "children": + # for k, v in value[0].items(): + # items_keys.append(v) + # items_values = [] + # for item in items_keys: + # items_values.append(item.indexOf("\\")) + + return render_template('resources.html', items=files) + else: + return render_template('error.html',error = 'Nieautoryzowany dostęp!') + +@app.route('/resources', methods=['POST']) +def resources(): + if request.method == 'POST': + # check if the post request has the file part + #if 'file' not in request.files: + # flash('No file part') + # return redirect(request.url) + file = request.files['fileToUpload'] + #file = request.form["fileToUpload"] + filename = secure_filename(file.filename) + file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) + return render_template('userHome.html', user=session['user'].split('@')[0], calendar_src="https://calendar.google.com/calendar/embed?src=" + session.get("user")) + +@app.route('/showResources') +def showResources(): + path = app.config['UPLOAD_FOLDER'] + for filename in os.listdir(path): + list_of_files[filename] = filename + #return render_template("") + + + #input_file = UPLOAD_FOLDER + filename + #uploads = [] + #uploads.append(input_file) + #return render_template('resources.html', resources = uploads) + # if user does not select file, browser also + # submit an empty part without filename + #if file.filename == '': + # flash('No selected file') + # return redirect(request.url) + + #if file and allowed_file(file.filename): + #filename = secure_filename(file.filename) + #filename = app.config['UPLOAD_FOLDER'] + file.filename + #file.save(filename) #os.path.join(app.config['UPLOAD_FOLDER'], file.filename)) + #return redirect(url_for('uploaded_file', filename=filename)) + '''if request.method == 'GET': + uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER']) + return render_template('resources.html', resources = os.getcwd() + os.listdir(uploads)) + + + Upload new File +

Upload new File

+
+ + +
+ +''' ''' +@app.route('/addResources', methods=['GET', 'POST']) +def addResources(): + if request.method == 'POST': + # check if the post request has the file part + #if 'file' not in request.files: + # flash('No file part') + # return redirect(request.url) + file = request.files['fileToUpload'] + file_metadata = {'name': file} + path = request.files['fileToUpload'].file.name + print (os.path.basename(file.filename)) + media = MediaFileUpload(path) + file = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute() + results = drive_service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute() + items = results.get('files', []) + return render_template('allResources.html', resources = items) + # file = request.files['fileToUpload'] + # file = request.form["fileToUpload"] + # filename = secure_filename(file.filename) + # file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) + # input_file = UPLOAD_FOLDER + filename + # uploads = [] + # uploads.append(input_file) + # return render_template('addResources.html', resources = uploads) + +@app.route('/allResources') +def allResources(): + results = drive_service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute() + items = results.get('files', []) + return render_template('allResources.html', resources = items) + +@app.route('/toAllResources') +def toAllResources(): + if session.get('user'): + uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER']) + path = os.getcwd() + return render_template('allResources.html', resources = os.path.join(path, uploads)) + #return render_template('resources.html') + else: + return render_template('error.html',error = 'Nieautoryzowany dostęp!') + +@app.route('/toAddResources') +def toAddResources(): + if session.get('user'): + uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER']) + path = os.getcwd() + return render_template('addResources.html', resources = os.path.join(path, uploads)) + #return render_template('resources.html') + else: + return render_template('error.html',error = 'Nieautoryzowany dostęp!') + +@app.route('/downloadResource') +def downloadResource(): + if session.get('user'): + file_id = request.files["files"] + return render_template('addResources.html', resources = os.path.join(path, uploads)) + #return render_template('resources.html') + else: + return render_template('error.html',error = 'Nieautoryzowany dostęp!') +''' + if __name__ == "__main__": #app.run(host='0.0.0.0') # Port: 5000 diff --git a/templates/resources.html b/templates/resources.html new file mode 100644 index 0000000..ebee1d6 --- /dev/null +++ b/templates/resources.html @@ -0,0 +1,93 @@ + + + + + + + Python Flask App + + + + + + + + + + + + + + +
+
+ +

Python Flask

+
+ +
+

Wszystkie materiały uczelni

+
+

Materiały do pobrania:

+ + + {% for key, value in items.items() %} + {% if key == "children" %} + {% for val in value %} + {% for k, v in val.items() %} +

+ + + {% endfor %} + {% endfor %} + {% endif %} + {% endfor %} + + + + + + + + + + + +
+
+

Wrzuć materiał

+
+ + +
+
+ + +
+ + + + +
+

© UAM 2018

+
+ +
+ + + \ No newline at end of file diff --git a/templates/userHome.html b/templates/userHome.html index b3b466b..89df96e 100644 --- a/templates/userHome.html +++ b/templates/userHome.html @@ -139,37 +139,14 @@ body {font-family: Verdana, sans-serif;} Dodaj wydarzenie - Czat grupowy + Czat grupowy + + Podejrzyj materiały + Uruchom testowy stream

- - - - - - - - - - - - - - - - - - - - - - - - - -
CzasJaka aktywność
8:00brak
9:00brak
10:00brak
11:00brak
12:00brak
diff --git a/uploads/test.txt b/uploads/test.txt new file mode 100644 index 0000000..490db94 --- /dev/null +++ b/uploads/test.txt @@ -0,0 +1 @@ +test uploadu \ No newline at end of file diff --git a/uploads/test_2.txt b/uploads/test_2.txt new file mode 100644 index 0000000..5e8709f --- /dev/null +++ b/uploads/test_2.txt @@ -0,0 +1 @@ +test downloadu \ No newline at end of file