Browse Source

Css Theme selector buggy as hell, but it works for a bit.

current_wdka_release
crunk 2 years ago
parent
commit
fbd1887753
  1. 8
      verse/forms/distribusiform.py
  2. 23
      verse/forms/loginform.py
  3. 32
      verse/forms/registerform.py
  4. 21
      verse/forms/themeform.py
  5. 23
      verse/forms/uploadform.py
  6. 80
      verse/start.py
  7. 15
      verse/templates/distribusi.html
  8. 6
      verse/themes/hacking.css
  9. 4
      verse/themes/peachsunset.css
  10. 8
      verse/themes/wdka.css

8
verse/forms/distribusiform.py

@ -0,0 +1,8 @@
from flask_wtf import FlaskForm
from wtforms import SubmitField
class DistribusiForm(FlaskForm):
"""Distribusi class to launch your distribusi website"""
submit = SubmitField("Distribusi!")

23
verse/forms/loginform.py

@ -0,0 +1,23 @@
"""Login form to validate user."""
from wtforms import (
StringField,
SubmitField,
PasswordField,
)
from wtforms import validators
from wtforms.validators import Length, Email
from flask_wtf import FlaskForm
class LoginForm(FlaskForm):
"""Login distribusiverse form class."""
email = StringField(
"Email address:",
validators=[validators.InputRequired(), Email(), Length(6, 64)],
)
password = PasswordField(
"Password:", validators=[validators.InputRequired(), Length(12, 72)]
)
submit = SubmitField("Sign In")

32
verse/forms/registerform.py

@ -0,0 +1,32 @@
"""Register form to make a new user."""
from wtforms import (
StringField,
SubmitField,
PasswordField,
)
from wtforms import validators
from wtforms.validators import Length, Email, EqualTo
from flask_wtf import FlaskForm
class RegisterForm(FlaskForm):
"""Register for distribusi-verse form class"""
email = StringField(
"Email address:",
validators=[validators.InputRequired(), Email(), Length(6, 64)],
)
password = PasswordField(
"New password:",
validators=[validators.InputRequired(), Length(12, 72)],
)
confirmpassword = PasswordField(
"Confirm your password:",
validators=[
validators.InputRequired(),
Length(12, 72),
EqualTo("password", message="Passwords must match !"),
],
)
submit = SubmitField("Register to Distribusi-verse")

21
verse/forms/themeform.py

@ -0,0 +1,21 @@
"""Form object declaration."""
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import validators
from wtforms import (
RadioField,
SubmitField,
)
class ThemeForm(FlaskForm):
"""Publication upload form."""
theme = RadioField(
"Select your theme:",
choices=[
("hacking", "Hacking"),
("peachsunset", "Peach sunset"),
("wdka", "WdkA")
],
)
save = SubmitField("Save")

23
verse/forms/uploadform.py

@ -0,0 +1,23 @@
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import validators
from wtforms.validators import Length
from wtforms import (
SubmitField,
StringField,
)
class UploadForm(FlaskForm):
"""File upload class for a new site in distribusi-verse"""
sitename = StringField(
"Name of your website:",
validators=[validators.InputRequired(), Length(6, 100)],
)
zipfile = FileField(
"Upload your zip file with content here:",
validators=[FileAllowed(["zip"], "Zip archives only!")],
)
submit = SubmitField("Upload")

80
verse/start.py

@ -37,10 +37,11 @@ from app import create_app, db, login_manager
from usermodel import User from usermodel import User
# Forms! # Forms!
from loginform import LoginForm from forms.loginform import LoginForm
from registerform import RegisterForm from forms.registerform import RegisterForm
from uploadform import UploadForm from forms.uploadform import UploadForm
from distribusiform import DistribusiForm from forms.distribusiform import DistribusiForm
from forms.themeform import ThemeForm
# Tada! # Tada!
from distribusi.cli import build_argparser from distribusi.cli import build_argparser
@ -129,32 +130,35 @@ def register():
def distribusi(): def distribusi():
uploadform = UploadForm() uploadform = UploadForm()
distribusiform = DistribusiForm() distribusiform = DistribusiForm()
themeform = ThemeForm()
user = User.query.filter_by(email=current_user.email).first() user = User.query.filter_by(email=current_user.email).first()
if user.distribusiname is None: if user.distribusiname is None:
print("nothing to deploy!") print("nothing to deploy!")
if distribusiform.validate_on_submit(): if distribusiform.validate_on_submit():
zipfilename = "{}.zip".format(user.distribusiname) zipfilename = "{}.zip".format(user.distribusiname)
copyzipfile = os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename) userfolder = os.path.join("stash", user.distribusiname)
unzipfile = os.path.join(userfolder, zipfilename)
newuserfolder = os.path.join("stash", user.distribusiname)
os.mkdir(newuserfolder)
shutil.copy(copyzipfile, newuserfolder)
unzipfile = os.path.join(newuserfolder, zipfilename)
with zipfile.ZipFile(unzipfile, "r") as zip_ref: with zipfile.ZipFile(unzipfile, "r") as zip_ref:
# To do, replace extractall with inspection and extract # To do, replace extractall with inspection and extract
zip_ref.extractall(newuserfolder) zip_ref.extractall(userfolder)
os.remove(os.path.join(userfolder, zipfilename))
# To Do: Make sure nothing can be executed from the upload folder
# add the css file
cssfile = ""
for filename in os.listdir(userfolder):
if filename.endswith('.css'):
cssfile = os.path.join(userfolder, filename)
os.remove(os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename))
os.remove(os.path.join(newuserfolder, zipfilename))
# Make sure nothing can be executed from the upload folder
parser = build_argparser() parser = build_argparser()
args = parser.parse_args() args = parser.parse_args(['-s', cssfile])
distribusify(args, newuserfolder) distribusify(args, userfolder)
return redirect(url_for("index")) return redirect(url_for("index"))
template = render_template( template = render_template(
"distribusi.html", "distribusi.html",
uploadform=uploadform, uploadform=uploadform,
distribusiform=distribusiform, distribusiform=distribusiform,
themeform=themeform,
) )
return template return template
@ -165,6 +169,7 @@ def upload():
success = False success = False
uploadform = UploadForm() uploadform = UploadForm()
distribusiform = DistribusiForm() distribusiform = DistribusiForm()
themeform = ThemeForm()
if uploadform.validate_on_submit(): if uploadform.validate_on_submit():
user = User.query.filter_by(email=current_user.email).first() user = User.query.filter_by(email=current_user.email).first()
user.distribusiname = uploadform.sitename.data user.distribusiname = uploadform.sitename.data
@ -174,14 +179,45 @@ def upload():
zipfile = uploadform.zipfile.data zipfile = uploadform.zipfile.data
zipfile.save(os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename)) zipfile.save(os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename))
newuserfolder = os.path.join("stash", user.distribusiname)
if not os.path.exists(newuserfolder):
os.mkdir(newuserfolder)
copyzipfile = os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename)
shutil.copy(copyzipfile, newuserfolder)
os.remove(os.path.join(APP.config["UPLOAD_FOLDER"], zipfilename))
success = True success = True
template = render_template( template = render_template(
"distribusi.html", "distribusi.html",
uploadform=uploadform, uploadform=uploadform,
distribusiform=distribusiform, distribusiform=distribusiform,
success=success, success=success,
themeform=themeform,
)
return template
@APP.route("/theme", methods=["POST"])
@login_required
def theme():
uploadform = UploadForm()
distribusiform = DistribusiForm()
themeform = ThemeForm()
if themeform.validate_on_submit():
user = User.query.filter_by(email=current_user.email).first()
newuserfolder = os.path.join("stash", user.distribusiname)
copycssfile = os.path.join(
"themes",
"{}.css".format(themeform.theme.data),
) )
return template shutil.copy(copycssfile, newuserfolder)
template = render_template(
"distribusi.html",
uploadform=uploadform,
distribusiform=distribusiform,
themeform=themeform,
)
return template
@APP.route("/stash/<path:path>") @APP.route("/stash/<path:path>")

15
verse/templates/distribusi.html

@ -31,8 +31,19 @@
</div> </div>
<img src="{{ url_for('static', filename='svg/arrow_1.svg')}}" /> <img src="{{ url_for('static', filename='svg/arrow_1.svg')}}" />
<div id="theme" class="workflow"> <div id="theme" class="workflow">
<h3>Step 2: Theme</h3> <h3>(Optional) Step 2: Theme</h3>
<p>dropdown css file selector</p> <p>Select your Theme here. If you want your own custom css, skip and go to
step 3. Don't forget to press Save</p>
<form method="POST" enctype="multipart/form-data" action="{{ url_for('theme') }}">
{{ themeform.csrf_token }}
<fieldset class="required">
{{ themeform.theme.label }}
{{ themeform.theme }}
</fieldset>
<fieldset class="button required">
{{ themeform.save }}
</fieldset>
</form>
</div> </div>
<img src="{{ url_for('static', filename='svg/arrow_2.svg')}}" /> <img src="{{ url_for('static', filename='svg/arrow_2.svg')}}" />
<div id="edit" class="workflow"> <div id="edit" class="workflow">

6
verse/themes/hacking.css

@ -0,0 +1,6 @@
body {
font-family: courier monospace;
background-color: black;
color: rgb(0, 255, 0);
border: 3px solid rgb(0, 255, 0);
}

4
verse/themes/peachsunset.css

@ -0,0 +1,4 @@
body {
background:linear-gradient(to top, #040308, #AD4A28, #DD723C, #FC7001, #DCB697, #9BA5AE, #3E5879, #020B1A);
color: white;
}

8
verse/themes/wdka.css

@ -0,0 +1,8 @@
body {
color: black;
font-family: Arial;
font-style: italic;
font-weight: 900;
letter-spacing: 0;
background-color: #FFD300;
}
Loading…
Cancel
Save