from flask import Flask from Config import * import sys import datetime import pytz from FlowerServices import Flower,SuperFlower from AccessControl import Access import json from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, json, make_response from werkzeug.exceptions import HTTPException # configuration DEBUG = False SECRET_KEY = 'development key' app = Flask(__name__) app.config.from_object(__name__) @app.route('/') def index(): print(request.remote_addr) return render_template('index.html', name_suggestion="Hello", pwd_suggestion="Want to try your luck?") @app.route('/browser' , methods=['POST', 'GET']) def application(): now = datetime.datetime.now(pytz.timezone('Europe/Amsterdam')) if request.method == 'GET': return render_template('index.html', name_suggestion="Faded out", pwd_suggestion="Want to retry your luck?") access_ctrl = Access() if not access_ctrl.granted(request.remote_addr): return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Access denied") action=request.form['action'] filter='' if 'filter' in session: filter = session['filter'] if action == 'logout': session['filter'] = request.form['filter'] session['timeout'] = now - datetime.timedelta(minutes=999) return render_template('index.html', name_suggestion="Bye", pwd_suggestion="Come back any time") if action == 'login': user=request.form['name'] pwd=request.form['password'] F = Flower(user, pwd) if F.numberOfEntries()>=0: session['dbuser'] = user session['dbpwd'] = pwd session['timeout'] = now session['filter'] = filter return render_template('list.html', flowers=F.all(), filter=filter) #login failure access_ctrl.deny(request.remote_addr) print("Flowers - authorization failed for {}".format(user)) return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Better next time") if 'timeout' in session and session['timeout']+datetime.timedelta(minutes=10)>now: session['timeout'] = now if 'filter' in request.form.keys() and len(request.form['filter'])>1 and request.form['filter'] != DONOTSETFILTER: session['filter']=request.form['filter'] filter = request.form['filter'] F = Flower(session['dbuser'], session['dbpwd']) if F.numberOfEntries()>=0: if action == 'list': return render_template('list.html', flowers=F.all(), filter=filter) if action == 'show': return render_template('show.html', flower=F.one(request.form['organization'], request.form['datetime'])) if action == 'edit': return render_template('edit.html', flower=F.one(request.form['organization'], request.form['datetime'])) if action == 'new': return render_template('edit.html', flower=F.empty()) if action == 'save': flower = F.add(request.form['organization'],request.form['myname'],request.form['myid'],request.form['secret']) session['filter']=request.form['organization'] return render_template('show.html', flower=flower) if action == 'deactivate': flower = F.deactivate(request.form['organization'],request.form['datetime']) session['filter']='' return render_template('show.html', flower=flower) if action == 'rehush': return render_template('rehush.html', flower=F.empty()) else: return render_template('new.html', flower=F.empty()) return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Better next time") @app.route('/create' , methods=['POST','GET']) def create(): access_ctrl = Access() if not access_ctrl.granted(request.remote_addr): return render_template('index.html', name_suggestion="Sorry", pwd_suggestion="Access denied") if 'name' not in request.form: return render_template('create.html') newuser = request.form['name'] newhush = request.form['password'] # login db with generic user f = SuperFlower(newuser, newhush) if f.createNewTable(): # login as new user u = Flower(newuser, newhush) # add one line u.add('Demo organisation', 'Demo name', 'Demo login', 'Demo hush') # return to the login page return render_template('index.html', name_suggestion="Now login", pwd_suggestion="for your very first time") return render_template('create.html', message="Sorry - System error - check log files") @app.route('/update_pwd', methods=['POST','GET']) def update_pwd(): if 'name' not in request.form: return render_template('rehush.html') user = request.form['name'] oldhush = request.form['old_password'] newhush = request.form['new_password'] # login db with generic user f = Flower(user, oldhush) message = f.update_pwd(newhush) f = SuperFlower(user, oldhush) f.flush_privs() return render_template('index.html', name_suggestion=message, pwd_suggestion="...") # @app.route('/migrate', methods=['POST','GET']) # def migrate(): # user = 'ignace' # hush = 'black' # # f = SuperFlower(user, hush) # f.migrate(user) # # return render_template('index.html', name_suggestion='login again', pwd_suggestion="...") @app.route('/app' , methods=['POST']) def web_service(): # same thing as 'aplication, but returns go in json result = json.dumps({'result': -1, 'message': 'Invalid entry'}) try: access_ctrl = Access() if not access_ctrl.granted(request.remote_addr): result = json.dumps({'result': -1, 'message': 'Access denied'}) else: #no session variables here - the client will take care of fileter and timeout action = request.form['action'] user = request.form['name'] pwd = request.form['password'] F = Flower(user, pwd) if F.numberOfEntries() == -1: #login failure access_ctrl.deny(request.remote_addr) result = json.dumps({'result': 0, 'message': 'Invalid username or password'}) elif action == 'login': result = json.dumps({'result': 1, 'message': 'Access granted'}) elif action == 'list': result = json.dumps({'result': 1, 'message': 'Ok', 'list': json.dumps(F.all())}) elif action == 'one': result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps( F.one(request.form['organization'], request.form['dateCreated']) )}) elif action == 'save': result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps(F.add(request.form['organization'],request.form['myname'],request.form['myid'],request.form['secret']) )}) elif action == 'deactivate': result = json.dumps({'result': 1, 'message': 'Ok', 'flower': json.dumps(F.deactivate(request.form['organization'], request.form['dateCreated']))}) except: pass return result if __name__ == '__main__': app.secret_key = 'adhf adsh 8347y92347rupqo;wjf cowuyergc9b24387ryx1 -923pqr pqwejf qy7i34' app.run(host='0.0.0.0', port=8080)