Namespace enumeration code

This commit is contained in:
jenkins-x-bot 2020-09-11 23:04:48 +08:00
parent c23adae71a
commit 456f3b58eb
3 changed files with 31 additions and 193 deletions

117
forms.py
View File

@ -1,5 +1,3 @@
#import MySQLdb
import pymysql
import os
from app import app
from flask_wtf import FlaskForm
@ -10,117 +8,10 @@ from wtforms import validators, ValidationError
from wtforms.validators import InputRequired, Email, Length
from readSettings import mySettings
from flask_bootstrap import Bootstrap
from datetime import datetime
#from dbWrite import read_cloudsql, sql_read, sql_read_static
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired(), Length(min=4, max=15)])
password = PasswordField('password', validators=[InputRequired(), Length(min=4, max=80)])
remember = BooleanField('remember me')
class RegisterForm(FlaskForm):
email = StringField('email', validators=[InputRequired(), Email(message='Invalid email'), Length(max=50)])
username = StringField('username', validators=[InputRequired(), Length(min=4, max=15)])
password = PasswordField('password', validators=[InputRequired(), Length(min=8, max=80)])
class addPlayerForm(FlaskForm):
playerClub = SelectField('Club:', choices=[])
playerTeam = SelectField('Team:', choices=[])
playerForenames = TextField('Forenames:')
playerSurnames = TextField('Surname:')
playerNickname = TextField('Nickname')
playerChineseName = TextField('Chinese Name:')
playerEmailAddress = TextField('Email Address:')
playerDob = DateField('Date of Birth:', default=datetime.today, format='%Y-%m-%d')
playerHkid = TextField('HKID Number:')
playerNumber = TextField('Shirt Number:')
playerTelNumber = TextField('Player Contact Number:')
submit = SubmitField('Submit')
class addTeamForm(FlaskForm):
clubName = SelectField("Club of team entry to create", coerce=str)
teamName = TextField("Team table to create (e.g. A, B, C, etc.)", validators=[InputRequired(), Length(max=1)])
submit = SubmitField("Submit")
class addClubForm(FlaskForm):
clubName = TextField("Name of the Hockey Club to add")
submit = SubmitField("Submit")
class playerDbCreateForm(FlaskForm):
clubName = SelectField("Name of the Hockey Club to create player database for")
year = SelectField("Season start year")
submit = SubmitField("Submit")
class searchForm(FlaskForm):
seasonStart = datetime.strptime('2018-09-01', '%Y-%m-%d')
season = SelectField('Season data to search', choices=[('2019', '2019/20'), ('2018', '2018/19'), ('2017', '2017/18'), ('2016', '2016/17'), ('2015', '2015/16'), ('2014', '2014/15'), ('2013', '2013/14')])
clubName = SelectField("Club to search", choices=[], coerce=str)
teamName = SelectField("Select a Team", choices=[])
startDate = DateField('DatePicker', format='%Y-%m-%d', default=seasonStart)
endDate = DateField('DatePicker', format='%Y-%m-%d', default=datetime.today())
submitButton = SubmitField("Submit")
class playerRecordsForm(FlaskForm):
season = SelectField('Season data to search', choices=[('2019', '2019/20'), ('2018', '2018/19'), ('2017', '2017/18'), ('2016', '2016/17'), ('2015', '2015/16'), ('2014', '2014/15'), ('2013', '2013/14')])
clubName = SelectField("Club to search", choices=[], coerce=str)
teamName = SelectField("Select a Team", choices=[])
submitButton = SubmitField("Submit")
class teamRecordsForm(FlaskForm):
season = SelectField('Season data to search', choices=[('2019', '2019/20'), ('2018', '2018/19'), ('2017', '2017/18'), ('2016', '2016/17'), ('2015', '2015/16'), ('2014', '2014/15'), ('2013', '2013/14')])
clubName = SelectField("Club to search", choices=[], coerce=str)
teamName = SelectField("Select a Team", choices=[])
submitButton = SubmitField("Submit")
class clubPlayingRecordsForm(FlaskForm):
season = SelectField('Season data to search', choices=[('2019', '2019/20'), ('2018', '2018/19'), ('2017', '2017/18'), ('2016', '2016/17'), ('2015', '2015/16'), ('2014', '2014/15'), ('2013', '2013/14')])
clubName = SelectField("Club to search", choices=[], coerce=str)
submitButton = SubmitField("Submit")
class motmForm(FlaskForm):
startDate = DateField('DatePicker', format='%d-%m-%Y')
endDate = DateField('DatePicker', format='%d-%m-%Y')
class motmAdminForm(FlaskForm):
startDate = DateField('DatePicker', format='%d-%m-%Y')
endDate = DateField('DatePicker', format='%d-%m-%Y')
class squadListForm(FlaskForm):
teamName = SelectField("HKFC team to display")
submit = SubmitField("Submit")
class adminSettingsForm(FlaskForm):
nextOppoClub = SelectField('Next Opposition Club:', choices=[], default=mySettings('club'))
nextOppoTeam = SelectField("Next Opposition Team:", choices=[])
nextMatchDate = DateField('DatePicker', format='%Y-%m-%d', default=mySettings('date'))
currMotM = SelectField('Current Man of the Match:', choices=[], default=mySettings('motm'))
currDotD = SelectField('Current Dick of the Day:', choices=[], default=mySettings('dotd'))
saveButton = SubmitField('Save Settings')
activateButton = SubmitField('Activate MotM Vote')
class goalsAssistsForm(FlaskForm):
fixtureNumber = TextField('Fixture Number')
match = SelectField('Fixture')
homeTeam = TextField('Home Team')
awayTeam = TextField('Away Team')
playerNumber = TextField('Player Number')
playerName = TextField('Player Name')
assists = SelectField('Assists:', choices=[(0, '0'), (1, '1'), (2, '2'), (3, '3'), (4, '4')])
goals = SelectField('Goals:', choices=[(0, '0'), (1, '1'), (2, '2'), (3, '3'), (4, '4')])
submit = SubmitField('Submit')
# def __init__(self, *args, **kwargs):
# super(goalsAssistsForm, self).__init__(*args, **kwargs)
# read_only(self.homeTeam)
# read_only(self.awayTeam)
class adminSettingsForm2(FlaskForm):
nextMatch = SelectField('Fixture', choices=[], default=mySettings('match'))
nextOppoClub = TextField('Next Opposition Club:', default=mySettings('club'))
nextOppoTeam = TextField("Next Opposition Team:")
currMotM = SelectField('Current Man of the Match:', choices=[], default=mySettings('motm'))
currDotD = SelectField('Current Dick of the Day:', choices=[], default=mySettings('dotd'))
saveButton = SubmitField('Save Settings')
activateButton = SubmitField('Activate MotM Vote')
class deploySelectForm(FlaskForm):
namespace = SelectField('namespace', validators=[InputRequired(), Length(min=4, max=15)])
deployment = SelectField('password', validators=[InputRequired(), Length(min=4, max=80)])
version = SelectField('remember me')

71
main.py
View File

@ -1,11 +1,7 @@
# encoding=utf-8
import pymysql
#import MySQLdb
import os
import json
import hashlib, uuid
from app import app
from flask import Flask, flash, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
@ -13,59 +9,34 @@ from flask_bootstrap import Bootstrap
from wtforms import StringField, PasswordField, BooleanField
from wtforms.fields.html5 import DateField
from wtforms.validators import InputRequired, Email, Length
from forms import LoginForm, RegisterForm
from dbWrite import sql_write, sql_write_static, sql_read, sql_read_static
from routes import *
from logging import error, info
from subprocess import STDOUT, CalledProcessError, check_output
from itertools import islice
import json
app.register_blueprint(routes)
def get_namespaces():
command = "/usr/local/bin/kubectl get ns -ojson"
info(f"Running command: {command}")
try:
output = check_output(command.split(" "), stderr=STDOUT).decode("utf-8")
except CalledProcessError as err:
error(err.output.decode("utf-8"))
raise err
info(f"Output from command:\n{output}")
data = json.loads(output)
return data
@app.route('/hkfc-d/vote-chart', methods=['GET', 'POST'])
def hkfc_d_vote_chart():
form = LoginForm()
@app.route('/', methods=['GET', 'POST'])
def namespacesForm():
form = deploySelectForm()
namespaces = get_namespaces()
print('Here we are')
if form.validate_on_submit():
sql = "SELECT username FROM hockeyUsers WHERE (username= '" + form.username.data + "')"
print(sql)
rows = sql_read(sql)
print(rows)
return redirect(url_for('/hkfc-d/voting'))
return redirect(url_for('/'))
# return '<h1>Something went wrong there</h1>'
return render_template('hkfc-d/login-vote.html', form=form)
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
print('Here we are')
if form.validate_on_submit():
sql = "SELECT username FROM hockeyUsers WHERE (username= '" + form.username.data + "')"
print(sql)
rows = sql_write(sql)
print(rows)
print(rows[0])
return redirect(url_for('/hkfc-d/voting'))
else:
return 'Something went wrong'
# return '<h1>Something went wrong there</h1>'
return render_template('login.html', form=form)
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
salt = uuid.uuid4().hex
hashed_password = hashlib.sha512(form.password.data + salt).hexdigest()
sql = "INSERT INTO hockeyUsers (username, email, password) VALUES ('" + form.username.data + "', '" + form.email.data + "', '" + hashed_password + "')"
print(sql)
db = write_cloudsql()
cursor = db.cursor()
cursor.execute(sql)
db.commit()
return '<h2>New user has been created!</h2>'
return render_template('register.html', form=form)
return render_template('index.html', namespaces=namespaces, form=form)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=3000, debug=True)

View File

@ -1,24 +1,24 @@
<html>
<head>
<title>Team Season Results Search *TESTING*</title>
<title>Deployment Selection *TESTING*</title>
<link rel="stylesheet" media="screen" href ="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-theme.min.css">
<meta name="viewport" content = "width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
</head>
<h2>Search Parameters - select both a club and team</h2>
<h2>Select a namespace and a deployment</h2>
<body onload="myFunction()">
<dl>
<p>
{{ form.csrf_token }}
<div class="row">
<div class="col-xs-12">
<form class="col-sm-6" method="post" action="/searchTeam">
<form class="col-sm-6" method="post" action="/get_namespace">
<div class = "row">
<div class = "col-sm-6">
<div class="input-group">
<span class="input-group-addon" id="basic-addon1">Season data to search:</span>
<span class="input-group-addon" id="basic-addon1">Namespace:</span>
{{ form.season(class_="form-control") }}
</div>
</div>
@ -26,39 +26,15 @@
<div class = "row">
<div class = "col-sm-6">
<div class="input-group">
<span class="input-group-addon" id="basic-addon2">Club:</span>
<span class="input-group-addon" id="basic-addon2">Deployment:</span>
{{ form.clubName(class_="form-control") }}
</div>
</div>
<div class = "col-sm-4">
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Team:</span>
{{ form.teamName(class_="form-control") }}
</div>
</div>
</div>
<div class = "row">
<div class = "col-sm-6">
<div class="input-group">
<span class="input-group-addon" id="basic-addon4">Start Date:</span>
{{ form.startDate(class_="form-control") }}
</div>
</div>
<div class = "col-sm-4">
<div class="input-group">
<span class="input-group-addon" id="basic-addon5">End Date:</span>
{{ form.endDate(class_="form-control") }}
</div>
</div>
</div>
<p>
{{ form.submitButton(class_="btn btn-success") }}
<a class="btn btn-danger" href="/dashboard" role="button">Cancel</a>
<a class="btn btn-danger" href="/" role="button">Cancel</a>
</p>
</form>
<div class="col-sm-0">
<img src="{{ selectedClubLogo }}" height="120" id="selectedClubLogo"/>
</div>
</div>
</div>
</p>