diff --git a/app/__init__.py b/app/__init__.py index c30a7f15fe768cea4c82808aeb8b10d79d782177..d828e43312173889046d9434e5ba2d3a59112cc1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -8,27 +8,47 @@ import vars import uuid from flask import Flask, redirect, url_for, request, render_template, flash, session from flask_bootstrap import Bootstrap -import random def create_app(config_name): - app = Flask(__name__) # initialization of the flask app - Bootstrap(app) # allowing app to use bootstrap + app = Flask(__name__) # initialization of the flask app + Bootstrap(app) # allowing app to use bootstrap - @app.route('/', methods=['GET', 'POST']) # initial route to display the reg page + def get_authorized_user(): + username_keys = list(filter(lambda key: (request.headers.get(key) is not None), vars.username_keys)) + fullname_keys = list(filter(lambda key: (request.headers.get(key) is not None), vars.fullname_keys)) + email_keys = list(filter(lambda key: (request.headers.get(key) is not None), vars.email_keys)) + + user = { + "username": (request.headers.get(username_keys[0]) if len(username_keys) > 0 else None), + "fullname": (request.headers.get(fullname_keys[0]) if len(fullname_keys) > 0 else None), + "email": (request.headers.get(email_keys[0]) if len(email_keys) > 0 else None), + } + + return user + + @app.route('/', methods=['GET', 'POST']) # initial route to display the reg page def index(): if 'uid' not in session: - session['uid']=str(uuid.uuid4()) + session['uid'] = str(uuid.uuid4()) - if "redir" in request.args and 'return_url' not in session: # check for redir arg in url + if 'user' not in session: + session["user"] = get_authorized_user() + + if "redir" in request.args: # check for redir arg in url session['return_url'] = request.args.get("redir") + elif "redir" not in request.args and 'return_url' not in session: session['return_url'] = vars.default_referrer + else: session['return_url'] = request.referrer - return render_template('auth/SignUp.html', room_id=session['uid'], referrer=session['return_url']) + return render_template('auth/SignUp.html', room_id=session['uid'], + username=session['user'].get('username'), + fullname=session['user'].get('fullname'), email=session['user'].get('email'), + referrer=session['return_url'], cancel_url=vars.default_referrer) # misc page error catching @app.errorhandler(403) diff --git a/app/static/img/Supercomputer-logo-final-01.jpg b/app/static/img/Supercomputer-logo-final-01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a9803927f3b2edde6895e94768ea3c572d256c4 Binary files /dev/null and b/app/static/img/Supercomputer-logo-final-01.jpg differ diff --git a/app/static/scripts/function.js b/app/static/scripts/function.js index 694ff191aaa2e9a4221412f1489f31ee84878ac1..45f9def541f9367b1cf71e5207af96dfdb894bc9 100644 --- a/app/static/scripts/function.js +++ b/app/static/scripts/function.js @@ -3,13 +3,41 @@ function displayloading() { } function request_account() { - socket.emit('request account', { - fullname: document.getElementById("fullname").value, - reason: document.getElementById("reason").value, - username: document.getElementById("bid").value - }) + if (document.getElementById("username").checkValidity() && + document.getElementById("fullname").checkValidity() && + document.getElementById("email").checkValidity() && + document.getElementById("reason").checkValidity()){ + + socket.emit('request account', { + username: document.getElementById("username").value, + fullname: document.getElementById("fullname").value, + email: document.getElementById("email").value, + reason: document.getElementById("reason").value + }); + } } +function autofill_form(username, fullname, email) { + let username_input = document.getElementById("username"); + let fullname_input = document.getElementById("fullname"); + let email_input = document.getElementById("email"); + + if ((username.localeCompare("None")) !== 0) { + username_input.value = username; + username_input.disabled = "true"; + } + + if ((fullname.localeCompare("None")) !== 0) { + fullname_input.value = fullname; + fullname_input.disabled = "true"; + } + + if ((email.localeCompare("None")) !== 0) { + email_input.value = email; + email_input.disabled = "true"; + } + } + function refresh() { document.location.reload(true); } diff --git a/app/templates/auth/SignUp.html b/app/templates/auth/SignUp.html index 891a09a663e1b0ed49f4d0bd2a13840cd8371f2c..4d08425c8fe74e8a98469fbd45c45eb6cd2831ae 100644 --- a/app/templates/auth/SignUp.html +++ b/app/templates/auth/SignUp.html @@ -11,6 +11,9 @@ var socket = io.connect('http://' + document.domain + ':' + location.port); socket.on( 'connect', function() { + + autofill_form("{{ username }}", "{{ fullname }}", "{{ email }}"); + socket.emit( 'join_room', { referrer: '{{ referrer }}' }); @@ -56,7 +59,7 @@ <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> - <a class="navbar-brand" href="/">Research Computing</a> + <a class="navbar-brand" href="/">UAB Research Computing</a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9"> <ul class="nav navbar-nav"> @@ -75,34 +78,58 @@ </div> </nav> </header> -<div class="container content" role="main" style="width: 625px"> - +<div class="container content" role="main"> <div style="position:relative;"> - <img alt="logo" height="auto" width="100%" style="margin-bottom: 20px" src="{{ url_for('static', filename='img/cheaha-logo-a605de0aecd3006b82a5ee30a6d0cb8cd9bf8b7e836296cc293eac746a4c2b11.png') }}"> - <a href="https://tinyurl.com/cheahaAL" target="_blank"> - <div style="float:left;position:absolute;display:block;left:310px;top:-6px;padding:10px 20px;"> </div> - </a> -</div> + <img alt="logo" height="auto" width="300" style="margin-bottom: 20px" src="{{ url_for('static', filename='img/logo.svg') }}"> + <a href="https://tinyurl.com/cheahaAL" target="_blank"> + <div style="float:left;position:absolute;display:block;left:310px;top:-6px;padding:10px 20px;"> </div> + </a> + </div> + + <div class="alert alert-warning announcement" role="alert"> + <p> + (Welcome message placeholder) + </p> + </div> <!-- <h2>Hello, <span id="username">{{ user }}</span>!</h2> --> - <h2>Hi, </h2> + <div id="test"> - <form action="." method="post" onsubmit=""> - <div class="signUpContainer"> - <label><b><label for="username">Blazer Id: </label><br></b></label> - <input class="form-control" id="bid" name="bid" placeholder="Enter BlazerId" required="" type="text"> - <label><b><label for="fullname">Full Name: </label><br></b></label> - <input class="form-control" id="fullname" name="fullname" placeholder="Enter Full Name" required="" type="text"> - <label><b><label for="reason">Reason for Requesting Account: </label><br></b></label> - <textarea class="form-control" id="reason" name="reason" placeholder="Enter Reason for Account Request" required=""></textarea> - <input class="btn btn-primary btn-block" id="submit" name="submit" type="button" value="Submit" onclick="request_account()"> - - <div> - <strong id="error" style="color: #be051b; text-align: center;"></strong> + <form id="signup" data-toggle="validator" role="form"> + <div class="form-group"> + <label for="username" class="control-label">Blazer Id:</label>	<input id="username" class="form-control" + placeholder="Enter Username" required><br> + </div> + <div class="form-group"> + <label for="fullname" class="control-label">Full Name:</label>	<input id="fullname" class="form-control" + placeholder="Enter Full Name" required><br> + </div> + <div class="form-group"> + <label for="email" class="control-label">Email:</label>	<input id="email" class="form-control" + placeholder="Enter Email" required><br> + </div> + <div class="form-group"> + <label for="reason" class="control-label">Reason for Requesting Account:</label><br> + <textarea class="form-control" id="reason" name="reason" placeholder="Enter Reason for Account Request" required></textarea> </div> - </div> + <div class="row-no-gutters"> + <div class="col-lg-6"> + <div class="form-group"> + <button class="btn btn-danger btn-block" id="cancel" type="button" onclick="window.location.replace('{{ cancel_url }}');">Cancel</button> + </div> + </div> + <div class="col-lg-6"> + <div class="form-group"> + <button class="btn btn-primary btn-block" id="submit" type="submit" onclick="request_account()">Submit</button> + </div> + </div> + </div> + + <div> + <strong id="error" style="color: #be051b; text-align: center;"></strong> + </div> </form> </div> </div> diff --git a/requirements.txt b/requirements.txt index 482a9fe0ddfc26bcf7cf63c749938f4c36f18f73..1ceecd0c59b972f99d90ad5b43226a69f0824106 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,13 @@ amqp==2.5.2 billiard==3.6.2.0 +blinker==1.4 celery==4.4.0 Click==7.0 dominate==2.4.0 Flask==1.1.1 Flask-Bootstrap==3.3.7.1 Flask-SocketIO==4.2.1 +Flask-SSO==0.4.0 Flask-Testing==0.7.1 gevent==1.4.0 greenlet==0.4.15 diff --git a/run.py b/run.py index ff6b02509478326d87d84364bab4c9601b0025b2..bf4504124432a17abbb890f84905dd8b7653c442 100644 --- a/run.py +++ b/run.py @@ -19,7 +19,6 @@ app.config['SECRET_KEY'] = vars.key socketio = SocketIO(app, message_queue= vars.message_queue) - @socketio.on('join_room') def on_room(json): diff --git a/tasks.py b/tasks.py index 7deec3a983efced1851970ae9359b17d211862ae..bec4dc82249c7069cbbc2b874459989522bee6e2 100644 --- a/tasks.py +++ b/tasks.py @@ -14,7 +14,7 @@ socketio = SocketIO(message_queue=vars.message_queue) def send_msg(event, room): - print("Post '{}' to room '{}'".format(event,room)) + print("Post '{}' to room '{}'".format(event, room)) socketio.emit(event, room=room) diff --git a/vars.py b/vars.py index 8314f9d955c4c3029bf374de2dee84fd74298817..b0df3908ffe3ee0c0e2f65fe06fb54723c7eb0a9 100644 --- a/vars.py +++ b/vars.py @@ -1,6 +1,14 @@ +# RabbitMQ vars (Fill in values to run) id = '' -password = '' +password = '' key = '' broker_url = 'amqp://' + id + ':' + password + '@ohpc:5672/' message_queue = broker_url + 'socketio' + +# App vars default_referrer = "https://docs.uabgrid.uab.edu/wiki/Cheaha_Quick_Start" + +# Form vars (Add keys for multiple configurations) +username_keys = ["HTTP_UID"] +fullname_keys = ["HTTP_DISPLAYNAME"] +email_keys = ["HTTP_MAIL"]