Browse Source

"first proto"

master
Doug Le Tough 3 years ago
parent
commit
7332af1dc0
16 changed files with 369 additions and 110 deletions
  1. +1
    -1
      config.local.py
  2. +76
    -17
      participate.py
  3. +26
    -0
      participer.redatomik.org.conf
  4. +26
    -0
      participer.thsf.net.conf
  5. +19
    -0
      static/scripts/participate.js
  6. +0
    -2
      static/styles/colors.css
  7. +8
    -8
      static/styles/fonts.css
  8. +5
    -0
      static/styles/participate.css
  9. +27
    -13
      static/styles/tetawebapp.css
  10. +28
    -0
      templates/account.html
  11. +1
    -1
      templates/articles.html
  12. +25
    -45
      templates/index.html
  13. +0
    -5
      templates/login.html
  14. +70
    -0
      templates/login_or_register.html
  15. +19
    -0
      templates/register.html
  16. +38
    -18
      tetawebapp.sql

+ 1
- 1
config.local.py View File

@ -1,3 +1,3 @@
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_URI = "postgresql://tetawebapp:tetawebapp@localhost/tetawebapp"
SQLALCHEMY_DATABASE_URI = "postgresql://participer_thsf:participer_thsf@localhost/participer_thsf"
UPLOADED_FILES_DEST = "./upload"

tetawebapp.py → participate.py View File


+ 26
- 0
participer.redatomik.org.conf View File

@ -0,0 +1,26 @@
Define IP_ADDR 0.0.0.0
Define TCP_PORT 80
Define SRV_NAME participer.redatomik.org
Define ROOT_DIR /var/www/participer.redatomik.org
Define WSGI_ALIAS /var/www/participer.redatomik.org/participer.redatomik.org.wsgi
Define DAEMON_PROCESS participer.redatomik.org
Define APACHE_USER apache
Define APACHE_GROUP apache
Define THREAD_NUMBER 5
<VirtualHost ${IP_ADDR}:${TCP_PORT}>
ServerName ${SRV_NAME}
ServerAdmin bofh@tetalab.org
DocumentRoot ${ROOT_DIR}
WSGIDaemonProcess ${DAEMON_PROCESS} user=${APACHE_USER} group=${APACHE_GROUP} threads=${THREAD_NUMBER}
WSGIScriptAlias / ${WSGI_ALIAS}
<Directory ${ROOT_DIR}>
WSGIProcessGroup ${DAEMON_PROCESS}
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/${SRV_NAME}.error.log
CustomLog /var/log/httpd/${SRV_NAME}.access.log combined
</VirtualHost>

+ 26
- 0
participer.thsf.net.conf View File

@ -0,0 +1,26 @@
Define IP_ADDR 0.0.0.0
Define TCP_PORT 80
Define SRV_NAME participer.thsf.net
Define ROOT_DIR /var/www/participer.thsf.net
Define WSGI_ALIAS /var/www/participer.thsf.net/participer.thsf.net.wsgi
Define DAEMON_PROCESS participer.thsf.net
Define APACHE_USER apache
Define APACHE_GROUP apache
Define THREAD_NUMBER 5
<VirtualHost ${IP_ADDR}:${TCP_PORT}>
ServerName ${SRV_NAME}
ServerAdmin bofh@tetalab.org
DocumentRoot ${ROOT_DIR}
WSGIDaemonProcess ${DAEMON_PROCESS} user=${APACHE_USER} group=${APACHE_GROUP} threads=${THREAD_NUMBER}
WSGIScriptAlias / ${WSGI_ALIAS}
<Directory ${ROOT_DIR}>
WSGIProcessGroup ${DAEMON_PROCESS}
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/${SRV_NAME}.error.log
CustomLog /var/log/httpd/${SRV_NAME}.access.log combined
</VirtualHost>

+ 19
- 0
static/scripts/participate.js View File

@ -0,0 +1,19 @@
function register() {
var mail = document.getElementById('reg_mail').value;
var password = document.getElementById('reg_password').value;
var confirm = document.getElementById('reg_confirm').value;
var regEmail = new RegExp('^[0-9a-z._-]+@{1}[0-9a-z.-]{2,}[.]{1}[a-z]{2,5}$','i');
if (password.length < 8){
alert("Le mot de passe doit avoir une longueur d'au moins 8 caractères");
return false;
}
if (password != confirm){
alert("Confirmation mot de passe incohérente");
return false;
}
if (! regEmail.test(mail)){
alert("Adresse email invalide");
return false;
}
return true;
}

+ 0
- 2
static/styles/colors.css View File

@ -14,8 +14,6 @@
--text-color: #555555;
--white: #FFFFFF;
--black: #000000;
--font-normal: url("/static/fonts/RobotoCondensed-Regular.ttf") format("truetype");
--font-bold: url("/static/fonts/RobotoCondensed-Bold.ttf") format("truetype");
--banner-logo: url(/static/images/logo.png);
--add_icon: url(/static/images/add.png);
--edit_icon: url(/static/images/edit.png);


+ 8
- 8
static/styles/fonts.css View File

@ -6,15 +6,15 @@
*/
@font-face {
font-family: "Roboto Condensed";
font-style: normal;
font-weight: 400;
src: var(--font-normal);
font-family: 'Roboto Condensed';
font-style: normal;
font-weight: 400;
src: url(/static/fonts/RobotoCondensed-Regular.ttf) format('truetype');
}
@font-face {
font-family: "Roboto Condensed";
font-style: normal;
font-weight: 700;
src: var(--font-bold);
font-family: 'Roboto Condensed';
font-style: normal;
font-weight: 700;
src: url(/static/fonts/RobotoCondensed-Bold.ttf) format('truetype');
}

+ 5
- 0
static/styles/participate.css View File

@ -0,0 +1,5 @@
main > article > p.note {
color: var(--text-color);
display: block;
font-size: 12px;
}

+ 27
- 13
static/styles/tetawebapp.css View File

@ -7,13 +7,13 @@
*/
* {
box-sizing: border-box;
box-sizing: border-box;
}
body {
margin: 10px;
font-family: "Roboto Condensed";
background-color: var(--dark-bg);
font-family: 'Roboto Condensed';
background-color: var(--dark-bg);
}
div.content {
@ -224,8 +224,8 @@ footer {
color: var(--white);
}
input[type="text"],
input[type="password"],
input[type='text'],
input[type='password'],
textarea,
select,
pre {
@ -235,7 +235,7 @@ pre {
background-color: var(--white);
color: var(--text-color);
padding: 5px;
font-family: "Roboto Condensed";
font-family: 'Roboto Condensed';
margin: 5px;
}
@ -244,8 +244,8 @@ pre {
}
button,
input[type="button"],
input[type="submit"] {
input[type='button'],
input[type='submit'] {
border-color: var(--dark-border);
border-style: solid;
border-width: 1px;
@ -253,15 +253,15 @@ input[type="submit"] {
color: var(--white);
font-weight: bold;
padding: 5px;
font-family: "Roboto Condensed";
font-family: 'Roboto Condensed';
margin: 5px;
border-radius: 4px;
}
button:hover,
input[type="button"]:hover,
input[type="submit"]:hover,
input[type="file"]:hover {
input[type='button']:hover,
input[type='submit']:hover,
input[type='file']:hover {
background-color: var(--light-coloured-bg);
color: var(--text-color);
cursor: pointer;
@ -280,7 +280,7 @@ div.file_upload {
border-color: var(--clear-bg);
}
input[type="file"] {
input[type='file'] {
position: absolute;
width: 18px;
height: 18px;
@ -368,3 +368,17 @@ input.upload {
background-repeat: no-repeat;
background-position: center center;
}
form {
width: 350px;
text-align: center;
line-height: 40px;
}
form > label {
float: left;
}
form > input[type='text'], form > input[type='password'] {
float: right;
}

+ 28
- 0
templates/account.html View File

@ -0,0 +1,28 @@
{% extends "index.html" %}
{% block title %}Articles{% endblock %}
{% block main %}
<article>
<h3>Informations personnelles</h3>
<p>
Merci de bien vouloir remplir vos informations personnelles afin que l'équipe d'organisation
du THSF puisse rester en contact avec vous avant et tout au long de l'évènement.
</p>
<p>
Notez que:
<ul>
<li>Votre adresse mail doit être valide et consultée régulièrement si vous ne voulez pas manquez des informations importantes telels que les dates de réunions de staff</li>
<li>Votre numéro de téléphone nous permettra de vous contacter pendant l'évènement</li>
<li>Si vous avez un régime alimentaire particulier (intolérences, veganisme, religieux), merci de le préciser dans le champs prévu à cet effet</li>
<li>Aucune des données que vous nous transmettrez ne sera fournie à un tiers</li>
</ul>
</p>
<form method='POST' action='/account'>
<label>Adresse email: </label><input id='login' name='login' type='text' /><br/>
<label>Prénom ou pseudo: </label><input id='pseudo' name='pseudo' type='text' /><br/>
<label>Nouveau mot de passe: </label><input id='password' name='password' type='password' /><br/>
<label>Répetez mot de passe: </label><input id='confirm' name='confirm' type='password' /><br/>
<label>Numéro de téléphone: </label><input id='phone' name='phone' type='text' /><br/>
<label>Régime alimentaire: </label><input id='diet' name='diet' type='text' /><br/>
<input type='submit' value='Update' onclick='javascript:return update_account();'>
</article>
{% endblock %}

+ 1
- 1
templates/articles.html View File

@ -2,7 +2,7 @@
{% block title %}Articles{% endblock %}
{% block main %}
<article>
<h3>Choose your article</h3>
<h3>Informations personnelles</h3>
<p>
Please select your article
</p>


+ 25
- 45
templates/index.html View File

@ -1,19 +1,21 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>TetaWebApp - {% block title %}Accueil{% endblock %}</title>
<title>We Make THSF - {% block title %}Accueil{% endblock %}</title>
<meta name="viewport" content="initial-scale=1.0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="/static/styles/colors.css" />
<link rel="stylesheet" type="text/css" href="/static/styles/fonts.css" />
<link rel="stylesheet" type="text/css" href="/static/styles/tetawebapp.css" />
<link rel="stylesheet" type="text/css" href="/static/styles/participate.css" />
<link rel="icon" type="image/png" href="/static/images/favicon.png" />
<script src="/static/scripts/tetawebapp.js"></script>
<script src="/static/scripts/participate.js"></script>
</head>
{% block bodyheader %}
<body>
{% endblock %}
<header>{% block banner %}TetaWebApp{% endblock %}</header>
<header>{% block banner %}We Make THSF{% endblock %}</header>
<div class='content'>
{% block nav %}
<nav class='vertical'>
@ -46,54 +48,32 @@
{% endif %}
{% block main %}
<article class='right'>
<h3>TetaWebApp demo</h3>
<p>
Welcome to the <strong>TetaWebApp</strong> demo
</p>
<p>
TetaWebApp is a basic web application template based on <a href='http://flask.pocoo.org/'>Python/Flask</a>
and <a href='https://www.w3schools.com/js/js_ajax_intro.asp'>AJAX</a> made by
<a href='mailto:doug.letough@free.fr'>Doug Le Tough</a> from <a href='https://www.tetalab.org'>Tetalab</a>.
</p>
<p>
The goal of this project is to provide a basic framework to make any web application you need while
letting you complete freedom on how to use or extend it <strong>without</strong> using any Google,
Bootstrap or any other piece of <strong>shitty free spyware</strong>.
</p>
TetaWebApp will <strong>never</strong> download or upload anything in any way.
<p>
</p>
<p>There is <strong>no</strong> limitation, you can use all or only parts of <strong>TetaWebApp</strong>
and you can <strong title='bullshit inside'>virtually</strong> do any app you want with TetaWebApp.
</p>
{% if message != '' %}
<pre>{{ message }}</pre>
{% endif %}
<h3>We Make THSF</h3>
<p>
But be sure that freedom has a cost: You <strong>will</strong> need work to make it work ;-)
Comme chaque année le <a href='https://www.thsf.net>'>Toulouse Hacker Space Factory</a> aura lieu à
<a href='http://mixart-myrys.org'>Mix'Art Myrys</a>.
</p>
<p>
<strong>TetaWebApp</strong> is released under the only real <strong>free</strong> license: The
<a href='http://www.wtfpl.net/'><img src='http://www.wtfpl.net/wp-content/uploads/2012/12/wtfpl-badge-2.png'
title='WTFPL' alt='WTFPL' /></a>.
Ce festival ne pourrait pas avoir lieu sans votre implication et cette année encore votre aide est la bienvenue et nous
est précieuse.
</p>
<pre>
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
</pre>
<p>
Get a copy of <strong>TetaWebApp</strong>:<br/>
<pre>
git clone git://git.tetalab.org/tetalab/tetawebapp
</pre>
Ce site vous permettra:
<ul>
<li>
de vous enregistrer afin de faire partie du "Staff", cette équipe de super-héros sans qui le THSF ne
saurait être un moment agréable, sûr et convivial.
</li>
<li>
de sélectionner le poste et les créneaux horaires pendant lesquels vous souhaitez vous rendre disponible.
</li>
<li>
d'être tenu informé des évolutions de l'organisation et du déroulement du THSF via la mailing list du staff.
</li>
</ul>
</p>
</article>
{% endblock %}


+ 0
- 5
templates/login.html View File

@ -4,11 +4,6 @@
{% block main %}
<article class='login'>
<h3>Login</h3>
<p>The demo login is:</p>
<ul>
<li>Login: demo</li>
<li>Password: demo</li>
</ul>
</article>
{% if message != '' %}
<pre>{{ message }}</pre>


+ 70
- 0
templates/login_or_register.html View File

@ -0,0 +1,70 @@
{% extends "index.html" %}
{% block title %}Login{% endblock %}
{% block nav %}{% endblock %}
{% block main %}
<article class='left'>
<h3>We Make THSF</h3>
<p>
Comme chaque année le <a href='https://www.thsf.net>'>Toulouse Hacker Space Factory</a> aura lieu à
<a href='http://mixart-myrys.org'>Mix'Art Myrys</a>.
</p>
<p>
Ce festival ne pourrait pas avoir lieu sans votre implication et cette année encore votre aide est la bienvenue et nous
est précieuse.
</p>
<p>
Ce site vous permettra:
<ul>
<li>
de vous enregistrer afin de faire partie du "Staff", cette équipe de super-héros sans qui le THSF ne
saurait être un moment agréable, sûr et convivial.
</li>
<li>
de sélectionner le poste et les créneaux horaires pendant lesquels vous souhaitez vous rendre disponible.
</li>
<li>
d'être tenu informé des évolutions de l'organisation et du déroulement du THSF via la mailing list du staff.
</li>
</ul>
</p>
<p>
Nul besoin de compétences particulières pour rejoindre notre équipe sinon votre meilleure volonté et votre bonne humeur
qui feront du THSF un moment unique de partage.
</p>
<p>
Pour vous enregistrer, munissez vous de votre adresse email et renseignez les champs de la section "<strong>Inscription</strong>".
</p>
<p>
Si vous vous être préalablement enregistré, renseignez uniquement les champs de la section "<strong>Connexion</strong>"
</p>
<p class='note'>Aucun électron n'a été maltraité lors de la mise au point de ce site.
Par ailleurs ce site n'utilise ni ressources hébergées par des tiers, ni bullshitwares, ni trackers.</p>
</article>
{% if message != '' %}
<pre>{{ message }}</pre>
{% endif %}
<hr/>
<article class='login'>
<h3>Connexion</h3>
</article>
<article class='left'>
<form method='POST' action='/login'>
<label>Adresse mail: </label><input id='login' name='login' type='text' /><br/>
<label>Mot de passe: </label><input id='password' name='password' type='password' /><br/>
<input type='submit' value='Log me in' onclick='javascript:return verify_login();'>
</form>
</article>
<hr/>
<article class='login'>
<h3>Inscription</h3>
</article>
<article class='left'>
<form method='POST' action='/register'>
<label>Adresse mail: </label><input id='reg_mail' name='login' type='text' /><br/>
<label>Mot de passe (8 char min.): </label><input id='reg_password' name='password' type='password' /><br/>
<label>Confirmation: </label><input id='reg_confirm' name='confirm' type='password' /><br/>
<input type='submit' value='Register me NOW !' onclick='javascript:return register();'>
</form>
</article>
<hr/>
{% endblock %}

+ 19
- 0
templates/register.html View File

@ -0,0 +1,19 @@
{% extends "index.html" %}
{% block title %}Register{% endblock %}
{% block nav %}{% endblock %}
{% block main %}
<article class='login'>
<h3>Register</h3>
</article>
{% if message != '' %}
<pre>{{ message }}</pre>
{% endif %}
<article class='left'>
<form method='POST' action='/login'>
Login: <input id='login' name='login' type='text' />
Password: <input id='password' name='password' type='password' />
Confirm: <input id='password' name='password' type='password' />
<input type='submit' value='Register me NOW !' onclick='javascript:return register();'>
</form>
</article>
{% endblock %}

+ 38
- 18
tetawebapp.sql View File

@ -1,48 +1,68 @@
\echo ******************************
\echo * Dropping database tetawebapp
\echo * Dropping database participer_thsf
\echo ******************************
\c postgres;
drop database tetawebapp;
drop database participer_thsf;
\echo **************************
\echo * Dropping role tetawebapp
\echo * Dropping role participer_thsf
\echo **************************
drop role tetawebapp;
drop role participer_thsf;
\echo ***************************************************
\echo * Creating role tetawebapp with password tetawebapp
\echo * Creating role participer_thsf with password participer_thsf
\echo ***************************************************
create role tetawebapp with LOGIN ENCRYPTED PASSWORD 'tetawebapp';
create role participer_thsf with LOGIN ENCRYPTED PASSWORD 'participer_thsf';
\echo ******************************
\echo * Creating database tetawebapp
\echo * Creating database participer_thsf
\echo ******************************
create database tetawebapp;
create database participer_thsf;
\echo *******************************************
\echo * Giving tetawebapp ownership to tetawebapp
\echo * Giving participer_thsf ownership to participer_thsf
\echo *******************************************
alter database tetawebapp owner to tetawebapp;
alter database participer_thsf owner to participer_thsf;
\echo *********************************
\echo * Creating tetawebapp_users table
\echo * Creating participer_thsf_users table
\echo *********************************
\c tetawebapp;
CREATE TABLE tetawebapp_users (
\c participer_thsf;
CREATE TABLE participer_thsf_users (
id serial primary key,
mail text not NULL,
password text not NULL,
name text not NULL
name text,
phone text,
diet text
);
CREATE TABLE participer_thsf_roles (
id serial primary key,
role text not NULL,
description text not NULL
);
\echo *************************************************
\echo * Giving tetawebapp_users ownership to tetawebapp
\echo * Giving participer_thsf_users ownership to participer_thsf
\echo *************************************************
alter table tetawebapp_users owner to tetawebapp;
alter table participer_thsf_users owner to participer_thsf;
\echo *********************************************************************
\echo * Inserting user demo identified by password demo to participer_thsf_users
\echo *********************************************************************
insert into participer_thsf_users (mail, password, name) values ('demo', '$2b$12$yjv4QMctGJFj2HmmbF6u5uDq9ATIl/Y9Z96MbaqRrcG6AE0CGHKSS', 'demo');
\echo *********************************************************************
\echo * Inserting user demo identified by password demo to tetawebapp_users
\echo * Inserting roles to participer_thsf_roles
\echo *********************************************************************
insert into tetawebapp_users (mail, password, name) values ('demo', '$2b$12$yjv4QMctGJFj2HmmbF6u5uDq9ATIl/Y9Z96MbaqRrcG6AE0CGHKSS', 'demo');
insert into participer_thsf_roles (role, description) values ('Préparation/Installation/signalétique', 'Fermeture des zones inaccessibles au public|Prépa buvette : allumage tireuses et frigos 4h avant ouverture + approvisionnement des bars en produits destinés à la vente|Préparation des différents postes / stands selon besoins : PLN, billetterie, T-Shirts...|Prépa toilettes public : aspiration/pompage, nettoyage à grandes eaux, remplissage du produit, changement poubelles, approvisionnement PQ|Nettoyage lieu, réapprovisionnement poubelles aux endroits stratégiques');
insert into participer_thsf_roles (role, description) values ('Volante', 'veille à la sécurité du lieu : rondes, surveillance accès, gestion de crises, messager, remplaçant, etc... (collaboration avec référent staff)|Ramassage verre, check PQ, ménage ponctuel|Sur le dernier créneau horaire, nettoyage de deux blocs WC|Au moins une personne connaissant bien Myrys sur chaque créneau horaire');
insert into participer_thsf_roles (role, description) values ('P.L.N', 'Accueil public, explication du concept de PLN, tampons (si besoin)|Informer et guider le public (prog, espaces, toilettes,...)|Comptage du public');
insert into participer_thsf_roles (role, description) values ('Buvette','Service au bar et encaissement (caisse ou tickets boisson selon besoins)|Nettoyage régulier : bar, tireuses, cendriers, verres abandonnés...');
insert into participer_thsf_roles (role, description) values ('Billeterie','Vente de tickets boisson / 1 ticket = 2,50 €|Poinçonnage des cartes VIP. 1 poinçon = 1 ticket = 1 euros|Tickets valables sur les 4 jours mais NON REMBOURSABLES');
insert into participer_thsf_roles (role, description) values ('Catering', 'Vérification de l''accès au catering (badge)|Service à l''assiette si besoin, gestion des quantités, réapprovisionnement du buffet|Maintenir la propreté des espaces catering (cuisine, buffet, tables, salle d''AG, tables extérieures, jardins)|Informer / rappeler le principe d''autogestion pour la vaisselle');
insert into participer_thsf_roles (role, description) values ('Ménage', 'Nettoyage général à la fermeture du lieu : ramasser verres / déchets / cendriers, sortir poubelles, cleaner surfaces (bar, stand,...) + balai');

Loading…
Cancel
Save