Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mmoo97/flask_user_reg
  • tr27p/flask_user_reg
  • ishan747/flask_user_reg
  • louistw/flask_user_reg
  • krish94/flask_user_reg
  • rrand11/flask_user_reg
  • ravi89/flask_user_reg
7 results
Show changes
Commits on Source (67)
# Introduction
This is a flask application that leverages [RabbitMQ](https://www.rabbitmq.com/) and [Celery](https://docs.celeryproject.org/en/latest/getting-started/introduction.html)
to asynchronously create a Cheaha user account. Currently the project is being developed on an Openstack cluster.
# Project Setup
To clone this repo use the command:
```
$ git clone https://gitlab.rc.uab.edu/mmoo97/flask_user_reg.git
$ cd flask_user_reg
```
## Prerequisites
### Clone Repository
- Ensure `pip` is installed (see: https://packaging.python.org/guides/installing-using-pip-and-virtualenv/ ).
- Check if installed by typing `$ pip` for Mac/Linux or `$ py` for Windows.
- Mac/Linux: Install pip using `$ python -m pip install --user --upgrade pip`.
- Windows: Install pip using `$ py -m pip install --upgrade pip`
- Ensure you have created a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments)
called `venv` setup within the cloned project.
- Note, this project requires a virtual environment running python2 (2.7.x)
- Ensure Flask and other dependencies are installed using the following commands:
### Setup a Virtual Environment
- Ensure you have created a [virtual environment](https://docs.python.org/3/library/venv.html)
called `venv` setup running python3.
- Note, this project requires a virtual environment running __python3__ (__3.6.8__ in this case).
- Create this by navigating to you home directory via typing `$ cd` and entering the following commands:<br>
```
$ python3 -m venv ~/venv
$ source ~/venv
```
- Upon Activation, you should see the prompt update accordingly:
```
[centos@ood ~]$ <------Old Prompt
(venv) [centos@ood ~]$ <------New Prompt
```
In this case, the env name is displayed as `venv` but would change to reflect whatever name you initialized it with
in the previous step. Additionally, this example is running on the `ood node` provisioned
via __OpenStack__.
- Ensure [pip](https://docs.python.org/3/installing/index.html) is installed.
- #### Mac/Linux
- Check if installed by typing `$ pip`
- Install pip using `$ python -m pip install --user --upgrade pip`.
- #### Windows
- Check if installed using `$ py`
- Install pip using `$ py -m pip install --upgrade pip`<br><br>
- Ensure Flask and other dependencies are installed to you virtual environment using the following commands:
```
$ cd ~/your/repo/path/flask_user_reg
$ git checkout version-1b-openstack-rabbitmq
$ source venv/bin/activate
$ pip install -r requirements.txt
```
- Note, to install flask in your own `$HOME` use `pip install --user Flask`.
- Note, to install flask in your own `$HOME` use `pip install --user Flask`.
### Install RabbitMQ
(Reference: [here](https://www.rabbitmq.com/tutorials/tutorial-four-python.html))
- Install RabbitMQ server on the host machine. ([Installation Guide](https://www.rabbitmq.com/download.html))
......@@ -47,13 +65,53 @@ $ pip install -r requirements.txt
`$ rabbitmqctl change_password reggie <new_password>`.
- Note that rabbitmqctl may require sudo permissions and that changing the password will require a password
change in the credentials within `test_producer.py` and `base_consumer.py` as well.
# Run Project
## 1. Connect to OHPC/OOD
1. Network Setup: <br>
Assuming proper steps have been run to provision your openstack cluster, your network
topology should look like the following:<br>
![Openstack Network Topology](/docs/images/network_topology.png)
2. Locate Floating Ip for each instance: <br>
![Research Computing Network](/docs/images/rc-network%20.png)<br>
According to this diagram of the network infrastructure, the IP Addresses that you will need to
connect to in order to ssh into each machine will be `164.111.161.xxx` where
`.xxx` is the last octet of your assigned Floating IP Addresses shown below.<br>
![Floating IP Addresses](/docs/images/floating_ips.png)<br>
Note that these numbers will typically vary depending on factors in the provisioning
process.
## Test RabbitMQ
3. SSH into each machine: <br>
Now that you have the IP Addresses of the OHPC and OOD nodes, you can connect
to them via the following command in two separate shell windows/tabs: <br>
```
$ ssh centos@164.111.161.xxx
```
4. Drop Firewall: <br>
Currently, the firewall prevents us from connecting to our soon to be running flask app.
To check if the firewall is active, type: <br>
`$ sudo systemctl status firewalld` <br>
In the case the firewall is still active, type: <br>
`$ sudo systemctl stop firewalld` <br>
In the case you need to turn the firewall back on, type: <br>
`sudo systemctl start firewalld`
5. Edit Security Rules: <br>
Lastly, we want to make sure that our network it open to run on our flask application
which runs on `localhost:5000` by default. Modify your __Default__ security group to
reflect the following rules: <br>
![Security Rules](/docs/images/security_rules.png) <br>
The main takeaway/modification in these rules is that traffic is allowed in and out of port 5000.
## 2. Initialize RabbitMQ
Make sure that you are running rabbitmq via the command `sudo rabbitmq server`.
## 3. Test RabbitMQ
For a simple example on the functionality of RabbitMQ, do the following:
- Open up a new ssh terminal and ssh into your ohpc node and, in a separate window, ssh into your ood node.
- Once in, ensure your rabbitmq server is running using the command ` `
- Additionally, ensure you have a rabbitmq user configured with the username and password as `reggie`.
-
```
# Run consumer on ohpc node
......@@ -66,6 +124,38 @@ $ python test_producer.py ohpc
```
You should now see that the message has been sent and displayed on the ohpc node.
- **Note,** that the `test_producer.py` script is identical to the code within the `ingest_data()` function in `run.py`.
\ No newline at end of file
## 4. Celery Worker
In order to execute our tasks asychronously, we create a celery worker using the fllowing: <br>
`$ celery -A tasks worker --loglevel=info --concurrency=4 1> ~/celery.out 2> ~/celery.err &` <br><br>
In this case, the `celery -A tasks worker --loglevel=info --concurrency=4` portion of the command
is what is initiating the worker and the remainder serves to write the stdout and stderr to two separate files
located in the home directory and to run the process in the background. <br>
## 5. Initialize the Flask App
Simply type `$ python run.py` <br>
Alternatively, type `$ python run.py > ~/flask.out 2> ~/flask.err &` to run the process in the background
and output to files in the home directory.
## 6. Check Job status
If all goes well, you should have your processes running in the background. Check the status of these by typing
`$ jobs`. You should now see the something similar to the following: <br>
```
(venv) [centos@ood flask_user_reg]$ jobs
[1]- Running celery -A tasks worker --loglevel=info --concurrency=4 > ~/celery.out 2> ~/celery.err &
[2]+ Running python run.py > ~/server.out 2> ~/server.err &
(venv) [centos@ood flask_user_reg]$
```
## 7. Connect to Server
Open a new browser window and connect to the __OOD__ node by typing `http://164.111.161.xxx:5000` in the
address bar replacing `.xxx` with the final octet of the __OOD__ node. You should see something like this: <br>
![Self Registration Site](/docs/images/site_example.png) <br>
## 8. Key Info/Observe
- Fill out the form and hit "Submit"
- You should see an overlay signifying the account is being created. After 5 seconds it should disappear and signify the account creation has been successful.
- You can now enter the command `kill %1 %2` to terminate the celery worker and the flask server.
- You can view the output/errors of either the worker and flask server by opening `flask.out`, `flask.err`,
`celery.out`, or `celery.err`.
\ No newline at end of file
......@@ -2,28 +2,33 @@
# local imports
from __future__ import print_function
import vars
# third-party imports
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
global return_url
return_url = ''
@app.route('/', methods=['GET', 'POST']) # initial route to display the reg page
def index():
global return_url
username = "name_test"
if "redir" in request.args and return_url == "": # check for redir arg in url
return_url = request.args.get("redir") or "/pun/sys/dashboard"
if 'uid' not in session:
session['uid']=str(uuid.uuid4())
if "redir" in request.args and 'return_url' not in session: # 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', user=username)
return render_template('auth/SignUp.html', room_id=session['uid'], referrer=session['return_url'])
# misc page error catching
@app.errorhandler(403)
......
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 300 157"><title>Supercomputer-logo</title><image width="300" height="157" xlink:href="data:image/png;base64,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"/></svg>
\ No newline at end of file
function displayloading() {
document.getElementById("notification_window").innerHTML = "" +
"<div class=\"joyride-tip-guide\" data-index=\"0\" style=\"visibility: visible; display: block; top: 77.5px; left: 570px;\"><span class=\"joyride-nub\" style=\"display: none;\"></span><div class=\"joyride-content-wrapper\" role=\"dialog\"><ol>\n" +
" <h4>\n" +
"\n" +
" Your account is pending creation...\n" +
"\n" +
" </h4>\n" +
" <br><p>\n" +
" This can take between 5-10 min.\n" +
" </p>\n" +
" </ol>\n" +
" <img src=\"/static/img/loading.gif\" style=\"width: 35px; height: auto\"> Pending...\n" +
" </div></div>\n" +
"\n" +
" <div class=\"joyride-modal-bg\" style=\"display: block;\"></div>"
$('#myModal').modal('show');
}
function socketIO() {
socket.emit('user data', {
function request_account() {
socket.emit('request account', {
fullname: document.getElementById("fullname").value,
reason: document.getElementById("reason").value,
username: document.getElementById("username").innerText
username: document.getElementById("bid").value
})
}
function refresh() {
document.location.reload(true);
}
\ No newline at end of file
}
source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -3,48 +3,42 @@
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script src="static/scripts/function.js"></script>
<script src="static/scripts/function.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
<script src="{{ url_for('static', filename='scripts/function.js') }}"></script>
<script>
console.info('Room ID: {{ room_id }}');
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on( 'connect', function() {
socket.emit( 'user connect', {
user: document.getElementById("username").innerText
} )
socket.on( 'creating account', function( msg ) {
document.getElementById("error").innerText = "";
displayloading();
socket.emit("validate creation", {
username: document.getElementById("username").innerText
})
})
socket.on( 'Account creation failed', function( msg ) {
document.getElementById("error").innerText = "Registration Failed. Please try again.";
})
socket.on( 'Account created', function( msg ) {
let element = document.getElementById("notification_window");
element.parentNode.removeChild(element);
element.innerHTML = " ";
alert("Account creation successful!");
})
})
socket.emit( 'join_room', {
referrer: '{{ referrer }}'
});
socket.on( 'creating account', function( msg ) {
document.getElementById("error").innerText = "";
displayloading();
});
socket.on( 'account ready', function( msg ) {
$('#myModal').modal('hide');
alert("Account has been created!");
window.location.replace('{{ referrer }}');
});
socket.on( 'Account creation failed', function( msg ) {
document.getElementById("error").innerText = "Registration Failed. Please try again.";
});
});
</script>
<style type="text/css">
.important { color: #336699; }
</style>
<link rel="shortcut icon" type="image/x-icon" href="/public/favicon.ico">
<link rel="stylesheet" media="all" href="/static/style/application.css">
<link rel="stylesheet" media="all" href="/static/style/app2.css">
<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/application.css') }}">
<link rel="stylesheet" media="all" href="{{ url_for('static', filename='style/app2.css') }}">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
......@@ -84,21 +78,25 @@
<div class="container content" role="main" style="width: 625px">
<div style="position:relative;">
<img alt="logo" height="100" style="margin-bottom: 20px" src="/static/img/cheaha-logo-a605de0aecd3006b82a5ee30a6d0cb8cd9bf8b7e836296cc293eac746a4c2b11.png">
<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>
<h2>Hello, <span id="username">{{ user }}</span>!</h2>
<!-- <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="socketIO()">
<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>
......@@ -109,22 +107,29 @@
</div>
</div>
<div id="notification_window" >
</div>
<div id ="testo"></div>
</body>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">Account Request Received!</h4>
</div>
<div class="modal-body">
<span>Please wait while we create your account. This may take up to 5-10 minutes.</span>
<img src="{{ url_for('static', filename='img/loading.gif') }}" width="40px">
</div>
</div>
</div>
</div>
<footer>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-sm-6">
<a href="https://osc.github.io/Open-OnDemand/">
<img class="footer-logo" alt="Powered by Open OnDemand" height="40" style="margin-bottom: 20px" src="/static/img/OpenOnDemand_powered_by_RGB-cb3aad5ff5350c7994f250fb334ddcc72e343233ce99eb71fda93beddd76a847.svg">
<img class="footer-logo" alt="Powered by Open OnDemand" height="40" style="margin-bottom: 20px" src="{{ url_for('static', filename='img/OpenOnDemand_powered_by_RGB-cb3aad5ff5350c7994f250fb334ddcc72e343233ce99eb71fda93beddd76a847.svg') }}">
</a>
</div>
</div>
</div><!-- /.container -->
</footer>
</body>
</html>
docs/images/floating_ips.png

219 KiB

docs/images/network_topology.png

127 KiB

docs/images/rc-network .png

106 KiB

docs/images/security_rules.png

311 KiB

docs/images/site_example.png

478 KiB

alembic==1.3.1
argh==0.26.2
blinker==1.4
certifi==2019.9.11
chardet==3.0.4
amqp==2.5.2
billiard==3.6.2.0
celery==4.4.0
Click==7.0
dnspython==1.16.0
dominate==2.4.0
enum34==1.1.6
eventlet==0.25.1
Flask==1.1.1
Flask-Bootstrap==3.3.7.1
Flask-Dance==3.0.0
Flask-DebugToolbar==0.10.1
Flask-Login==0.4.1
Flask-Migrate==2.5.2
Flask-OAuth==0.12
Flask-OAuthlib==0.9.5
Flask-SocketIO==4.2.1
Flask-SQLAlchemy==2.4.1
Flask-Testing==0.7.1
Flask-WTF==0.14.2
gevent==1.4.0
greenlet==0.4.15
gunicorn==19.9.0
httplib2==0.14.0
idna==2.8
importlib-metadata==1.5.0
itsdangerous==1.1.0
Jinja2==2.10.3
lazy==1.4
Mako==1.1.0
Jinja2==2.11.1
kombu==4.6.7
MarkupSafe==1.1.1
monotonic==1.5
oauth2==1.9.0.post1
oauthlib==3.1.0
pathtools==0.1.2
pbr==5.4.3
pika==1.1.0
python-dateutil==2.8.1
python-editor==1.0.4
python-engineio==3.10.0
python-socketio==4.3.1
python-engineio==3.11.2
python-socketio==4.4.0
pytz==2019.3
PyYAML==5.1.2
requests==2.22.0
requests-oauthlib==1.3.0
six==1.13.0
SQLAlchemy==1.3.11
SQLAlchemy-Utils==0.35.0
stevedore==1.31.0
supervisor==4.1.0
urllib3==1.25.7
URLObject==2.4.3
virtualenv==16.7.7
virtualenv-clone==0.5.3
virtualenvwrapper==4.8.4
six==1.14.0
vine==1.3.0
visitor==0.1.3
watchdog==0.9.0
Werkzeug==0.16.0
wincertstore==0.2
WTForms==2.2.1
Werkzeug==1.0.0
zipp==3.0.0
......@@ -2,89 +2,48 @@
import os
import time
import tasks
import vars
import pika
from flask_socketio import SocketIO
from flask import session
from flask_socketio import SocketIO, join_room
from app import create_app
from gevent import monkey
monkey.patch_all(subprocess=True)
config_name = os.getenv('FLASK_CONFIG')
app = create_app(config_name)
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)
def messageReceived(methods=['GET', 'POST']):
print('message was received!!!')
def check_dir(user, interval):
# Todo: Make this mothod in a consumer
"""
:param user: (string) username to check for in DB.
:param interval: (int) Frequency to check in seconds.
:return: (boolean) if account has been registered.
"""
seconds = 0
while seconds < 600:
querystring = "_" + user + ".done"
for filename in os.listdir("flat_db/"):
if filename.endswith(querystring):
return True
time.sleep(interval)
seconds = seconds + interval
return False
app.config['SECRET_KEY'] = vars.key
socketio = SocketIO(app, message_queue= vars.message_queue)
@socketio.on('connect')
def socket_connect():
pass
def create_account(username, fullname, reason):
# Todo: Ravi's and Louis's code go here
print (time.strftime("%m-%d-%Y_%H:%M:%S") + '\tUser ' + username + ' added to queue')
socketio.emit("creating account")
time.sleep(5)
@socketio.on('join_room')
def on_room(json):
def account_confirmation(username):
# Todo: Ravi's and Louis's code go here
time.sleep(5)
return True
room = str(session['uid'])
referrer = json['referrer']
join_room(room)
print('\t\t\t|-----Room ID: ' + room)
print('\t\t\t|-----Referrer: ' + referrer)
@socketio.on('user connect')
def handle_my_custom_event(json, methods=['GET', 'POST']):
username = json["user"]
print(time.strftime("%m-%d-%Y_%H:%M:%S") + '\tUser ' + username + ' connected.')
@socketio.on('user data')
def ingest_data(json, methods=['GET', 'POST']):
@socketio.on('request account')
def request_account(json, methods=['GET', 'POST']):
print (time.strftime("%m-%d-%Y_%H:%M:%S") + '\tQueue request received: ' + str(json))
room = str(session['uid'])
print("Room: {}".format(room))
try:
create_account(json['username'], json['fullname'], json['reason'])
tasks.celery_create_account.delay(json['username'], json['fullname'], json['reason'], session=room)
except Exception as e:
print(time.strftime("%m-%d-%Y_%H:%M:%S") + "\tError in account creation: ", e)
socketio.emit("Account creation failed")
@socketio.on("validate creation")
def creation_confirmation(json, methods=['GET', 'POST']):
# User create Script Approach
username = json["username"]
if account_confirmation(username):
print (time.strftime("%m-%d-%Y_%H:%M:%S") + '\tAccount successfully created for ' + username)
socketio.emit("Account created")
else:
socketio.emit("Account creation failed")
socketio.emit("Account creation failed", room)
if __name__ == '__main__':
# app.run()
socketio.run(app)
socketio.run(app, host='0.0.0.0')
from celery import Celery
import time
from flask_socketio import SocketIO
import subprocess
import vars
from gevent import monkey
monkey.patch_all(subprocess=True)
broker_url = vars.broker_url
celery = Celery('flask_user_reg', broker=broker_url)
socketio = SocketIO(message_queue=vars.message_queue)
def send_msg(event, room):
print("Post '{}' to room '{}'".format(event,room))
socketio.emit(event, room=room)
@celery.task
def celery_create_account(username, fullname, reason, session):
room = session
print(time.strftime("%m-%d-%Y_%H:%M:%S") + '\tUser ' + username + ' added to queue')
send_msg('creating account', room)
print(username)
subprocess.call(["/opt/rabbitmq_agents/flask_producer.py", "ohpc_account_create", username])
print(time.strftime("%m-%d-%Y_%H:%M:%S") + '\tAccount successfully created for ' + username)
send_msg('account ready', room)
id = ''
password = ''
key = ''
broker_url = 'amqp://' + id + ':' + password + '@ohpc:5672/'
message_queue = broker_url + 'socketio'
default_referrer = "https://docs.uabgrid.uab.edu/wiki/Cheaha_Quick_Start"