Browse Source

"first proto"

Doug Le Tough 2 years ago
parent
commit
7332af1dc0

+ 1
- 1
config.local.py View File

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

tetawebapp.py → participate.py View File

@@ -25,7 +25,7 @@ app.debug = True
25 25
 # Various configuration settings belong here (optionnal)
26 26
 app.config.from_pyfile('config.local.py')
27 27
 # Generate a new key: head -n 40 /dev/urandom | md5sum | cut -d' ' -f1
28
-app.secret_key = 'ce1d1c9ff0ff388a838b3a1e3207dd27'
28
+app.secret_key = '9ac80548e3a8d8dfd1aefcd9a3a73473'
29 29
 # Feel free to use SQLAlchemy (or not)
30 30
 db = SQLAlchemy(app)
31 31
 
@@ -34,12 +34,19 @@ db = SQLAlchemy(app)
34 34
 # Sample user database
35 35
 ########################################################################
36 36
 class Tetawebapp_users(db.Model):
37
-  __tablename__ = 'tetawebapp_users'
37
+  __tablename__ = 'participer_thsf_users'
38 38
   id = db.Column(db.Integer, primary_key=True)
39 39
   mail = db.Column(db.Text, nullable=False)
40 40
   password = db.Column(db.Text, nullable=False)
41
-  name = db.Column(db.Text, nullable=False)
41
+  name = db.Column(db.Text, nullable=True)
42
+  phone = db.Column(db.Text, nullable=True)
43
+  diet = db.Column(db.Text, nullable=True)
42 44
 
45
+class Tetawebapp_roles(db.Model):
46
+  __tablename__ = 'participer_thsf_roles'
47
+  id = db.Column(db.Integer, primary_key=True)
48
+  role = db.Column(db.Text, nullable=False)
49
+  description = db.Column(db.Text, nullable=False)
43 50
 
44 51
 ########################################################################
45 52
 # Menu and navigation management
@@ -54,9 +61,11 @@ def get_menu(page):
54 61
         - One of the routes MUST match the route called by request
55 62
         - The int 0 is used to determine which menu entry is actally called.
56 63
           The value MUST be 0."""
57
-  menu = [[u'Home', {u'/': [u'/']}, 0],
58
-          [u'Articles', {u'/articles': [u'/articles', u'/articles/<ID>']}, 0],
59
-          [u'Basics', {u'/basics': [u'/basics']}, 0],
64
+  menu = [[u'Accueil', {u'/': [u'/']}, 0],
65
+          [u'Mon compte', {u'/account': [u'/account', u'/account/<ID>']}, 0],
66
+          [u'Mes quarts', {u'/turn': [u'/turn']}, 0],
67
+          [u'Feuille de staff', {u'/staff_sheet': [u'/staff_sheet']}, 0],
68
+          [u'Déconnexion', {u'/logout': [u'/logout']}, 0],
60 69
           [u'Inputs', {u'/inputs': [u'/inputs']}, 0],
61 70
           [u'Ajax', {u'/ajax': [u'/ajax']}, 0],
62 71
           [u'Database', {u'/database': [u'/database']}, 0],
@@ -116,11 +125,11 @@ def check_session(func):
116 125
         return func(*args, **kwargs)
117 126
       else:
118 127
         session['token'] = ''
119
-        response = app.make_response(render_template('login.html', message=''))
128
+        response = app.make_response(render_template('login_or_register.html', message=''))
120 129
         sync_cookies(response, session)
121 130
         return response
122 131
     except KeyError:
123
-      return render_template('login.html', message='')
132
+      return render_template('login_or_register.html', message='')
124 133
   return check
125 134
 
126 135
 def check_login(login, password):
@@ -133,6 +142,11 @@ def check_login(login, password):
133 142
       return True
134 143
   return False
135 144
 
145
+def check_user_info():
146
+  """ Check user info and send appropriate message if info are not complete"""
147
+  message = "Vos informations personnelles ne sont pas totalement renseignées. N'oubliez pas de remplir votre fiche située dans la section 'Mon compte'"
148
+  return message.decode('utf-8')
149
+
136 150
 def gen_token():
137 151
   """ Generate a random token to be stored in session and cookie """
138 152
   token = binascii.hexlify(os.urandom(42))
@@ -151,6 +165,27 @@ def page_not_found(e):
151 165
 
152 166
 @app.route("/login", methods=['GET', 'POST'])
153 167
 def login():
168
+  login = request.form.get('login')
169
+  password = request.form.get('password')
170
+  if check_login(login, password):
171
+    # Generate and store a token in session
172
+    session['token'] = gen_token()
173
+    # Return user to index page
174
+    page = '/'
175
+    menu = get_menu(page)
176
+    message = check_user_info()
177
+    response = app.make_response(render_template('index.html', menu=menu, message=message))
178
+    # Push token to cookie
179
+    sync_cookies(response, session)
180
+    return response
181
+  # Credentials are not valid
182
+  response = app.make_response(render_template('login_or_register.html', message='Invalid user or password'))
183
+  session['token'] = ''
184
+  sync_cookies(response, session)
185
+  return response
186
+
187
+@app.route("/register", methods=['GET', 'POST'])
188
+def register():
154 189
   login = request.form.get('login')
155 190
   password = request.form.get('password')
156 191
   if check_login(login, password):
@@ -164,7 +199,7 @@ def login():
164 199
     sync_cookies(response, session)
165 200
     return response
166 201
   # Credentials are not valid
167
-  response = app.make_response(render_template('login.html', message='Invalid user or password'))
202
+  response = app.make_response(render_template('login_or_register.html', message='Invalid user or password'))
168 203
   session['token'] = ''
169 204
   sync_cookies(response, session)
170 205
   return response
@@ -175,26 +210,50 @@ def index():
175 210
   """ Index page """
176 211
   page = str(request.url_rule)
177 212
   menu = get_menu(page)
178
-  return render_template('index.html', menu=menu)
213
+  message = check_user_info()
214
+  return render_template('index.html', menu=menu, message=message)
179 215
 
180
-@app.route("/articles", methods=['GET', 'POST'])
216
+@app.route("/account", methods=['GET', 'POST'])
181 217
 @check_session
182
-def articles():
218
+def account():
183 219
   """ Arcticles page """
184 220
   page = str(request.url_rule)
185 221
   menu = get_menu(page)
186
-  navbar = get_navbar(page, '')
187
-  return render_template('articles.html', menu=menu, navbar=navbar)
222
+  return render_template('account.html', menu=menu)
188 223
 
189
-@app.route("/articles/<ID>", methods=['GET', 'POST'])
224
+@app.route("/account/<ID>", methods=['GET', 'POST'])
190 225
 @check_session
191
-def articles_by_id(ID):
226
+def account_by_id(ID):
192 227
   """ Arcticles page """
193 228
   page = str(request.url_rule)
194 229
   menu = get_menu(page)
195 230
   selected = page.replace('<ID>', ID)
196 231
   navbar = get_navbar(page, selected)
197
-  return render_template('articles_by_id.html', menu=menu, navbar=navbar, ID=ID)
232
+  return render_template('account_by_id.html', menu=menu, navbar=navbar, ID=ID)
233
+
234
+@app.route("/logout", methods=['GET', 'POST'])
235
+@check_session
236
+def logout():
237
+  """ Logout user """
238
+  # Remove session token
239
+  session['token'] = None
240
+  # Return user to index page
241
+  response = app.make_response(render_template('login_or_register.html', message=''))
242
+  # Push token to cookie
243
+  sync_cookies(response, session)
244
+  return response
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
198 257
 
199 258
 @app.route("/basics", methods=['GET', 'POST'])
200 259
 @check_session

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

@@ -0,0 +1,26 @@
1
+Define IP_ADDR 0.0.0.0
2
+Define TCP_PORT 80
3
+Define SRV_NAME participer.redatomik.org
4
+Define ROOT_DIR /var/www/participer.redatomik.org
5
+Define WSGI_ALIAS /var/www/participer.redatomik.org/participer.redatomik.org.wsgi
6
+Define DAEMON_PROCESS participer.redatomik.org
7
+Define APACHE_USER apache
8
+Define APACHE_GROUP apache
9
+Define THREAD_NUMBER 5
10
+<VirtualHost ${IP_ADDR}:${TCP_PORT}>
11
+        ServerName ${SRV_NAME}
12
+        ServerAdmin bofh@tetalab.org
13
+        DocumentRoot ${ROOT_DIR}
14
+        WSGIDaemonProcess ${DAEMON_PROCESS} user=${APACHE_USER} group=${APACHE_GROUP} threads=${THREAD_NUMBER}
15
+        WSGIScriptAlias / ${WSGI_ALIAS}
16
+        <Directory ${ROOT_DIR}>
17
+                WSGIProcessGroup ${DAEMON_PROCESS}
18
+                WSGIApplicationGroup %{GLOBAL}
19
+                Order deny,allow
20
+                Allow from all
21
+                AllowOverride All
22
+                Require all granted
23
+        </Directory>
24
+        ErrorLog /var/log/httpd/${SRV_NAME}.error.log
25
+        CustomLog /var/log/httpd/${SRV_NAME}.access.log combined
26
+</VirtualHost>

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

@@ -0,0 +1,26 @@
1
+Define IP_ADDR 0.0.0.0
2
+Define TCP_PORT 80
3
+Define SRV_NAME participer.thsf.net
4
+Define ROOT_DIR /var/www/participer.thsf.net
5
+Define WSGI_ALIAS /var/www/participer.thsf.net/participer.thsf.net.wsgi
6
+Define DAEMON_PROCESS participer.thsf.net
7
+Define APACHE_USER apache
8
+Define APACHE_GROUP apache
9
+Define THREAD_NUMBER 5
10
+<VirtualHost ${IP_ADDR}:${TCP_PORT}>
11
+        ServerName ${SRV_NAME}
12
+        ServerAdmin bofh@tetalab.org
13
+        DocumentRoot ${ROOT_DIR}
14
+        WSGIDaemonProcess ${DAEMON_PROCESS} user=${APACHE_USER} group=${APACHE_GROUP} threads=${THREAD_NUMBER}
15
+        WSGIScriptAlias / ${WSGI_ALIAS}
16
+        <Directory ${ROOT_DIR}>
17
+                WSGIProcessGroup ${DAEMON_PROCESS}
18
+                WSGIApplicationGroup %{GLOBAL}
19
+                Order deny,allow
20
+                Allow from all
21
+                AllowOverride All
22
+                Require all granted
23
+        </Directory>
24
+        ErrorLog /var/log/httpd/${SRV_NAME}.error.log
25
+        CustomLog /var/log/httpd/${SRV_NAME}.access.log combined
26
+</VirtualHost>

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

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

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

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

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

@@ -6,15 +6,15 @@
6 6
 */
7 7
 
8 8
 @font-face {
9
-	font-family: "Roboto Condensed";
10
-	font-style: normal;
11
-	font-weight: 400;
12
-	src: var(--font-normal);
9
+  font-family: 'Roboto Condensed';
10
+  font-style: normal;
11
+  font-weight: 400;
12
+  src: url(/static/fonts/RobotoCondensed-Regular.ttf) format('truetype');
13 13
 }
14 14
 
15 15
 @font-face {
16
-	font-family: "Roboto Condensed";
17
-	font-style: normal;
18
-	font-weight: 700;
19
-	src: var(--font-bold);
16
+  font-family: 'Roboto Condensed';
17
+  font-style: normal;
18
+  font-weight: 700;
19
+  src: url(/static/fonts/RobotoCondensed-Bold.ttf) format('truetype');
20 20
 }

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

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

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

@@ -7,13 +7,13 @@
7 7
 */
8 8
 
9 9
 * {
10
- box-sizing: border-box; 
10
+  box-sizing: border-box; 
11 11
 }
12 12
 
13 13
 body {
14 14
   margin: 10px;
15
-  font-family: "Roboto Condensed";
16
-  background-color:  var(--dark-bg);
15
+  font-family: 'Roboto Condensed';
16
+  background-color: var(--dark-bg);
17 17
 }
18 18
 
19 19
 div.content {
@@ -224,8 +224,8 @@ footer {
224 224
   color: var(--white);
225 225
 }
226 226
 
227
-input[type="text"],
228
-input[type="password"],
227
+input[type='text'],
228
+input[type='password'],
229 229
 textarea,
230 230
 select,
231 231
 pre {
@@ -235,7 +235,7 @@ pre {
235 235
   background-color: var(--white);
236 236
   color: var(--text-color);
237 237
   padding: 5px;
238
-  font-family: "Roboto Condensed";
238
+  font-family: 'Roboto Condensed';
239 239
   margin: 5px;
240 240
 }
241 241
 
@@ -244,8 +244,8 @@ pre {
244 244
 }
245 245
 
246 246
 button,
247
-input[type="button"],
248
-input[type="submit"] {
247
+input[type='button'],
248
+input[type='submit'] {
249 249
   border-color: var(--dark-border);
250 250
   border-style: solid;
251 251
   border-width: 1px;
@@ -253,15 +253,15 @@ input[type="submit"] {
253 253
   color: var(--white);
254 254
   font-weight: bold;
255 255
   padding: 5px;
256
-  font-family: "Roboto Condensed";
256
+  font-family: 'Roboto Condensed';
257 257
   margin: 5px;
258 258
   border-radius: 4px;
259 259
 }
260 260
 
261 261
 button:hover,
262
-input[type="button"]:hover,
263
-input[type="submit"]:hover,
264
-input[type="file"]:hover {
262
+input[type='button']:hover,
263
+input[type='submit']:hover,
264
+input[type='file']:hover {
265 265
   background-color: var(--light-coloured-bg);
266 266
   color: var(--text-color);
267 267
   cursor: pointer;
@@ -280,7 +280,7 @@ div.file_upload {
280 280
   border-color: var(--clear-bg);
281 281
 }
282 282
 
283
-input[type="file"] {
283
+input[type='file'] {
284 284
   position: absolute;
285 285
   width: 18px;
286 286
   height: 18px;
@@ -368,3 +368,17 @@ input.upload {
368 368
   background-repeat: no-repeat;
369 369
   background-position: center center;
370 370
 }
371
+
372
+form {
373
+  width: 350px;
374
+  text-align: center;
375
+  line-height: 40px;
376
+}
377
+
378
+form > label {
379
+  float: left;
380
+}
381
+
382
+form > input[type='text'], form > input[type='password'] {
383
+  float: right;
384
+}

+ 28
- 0
templates/account.html View File

@@ -0,0 +1,28 @@
1
+{% extends "index.html" %}
2
+{% block title %}Articles{% endblock %}
3
+      {% block main %}
4
+      <article>
5
+        <h3>Informations personnelles</h3>
6
+        <p>
7
+          Merci de bien vouloir remplir vos informations personnelles afin que l'équipe d'organisation
8
+          du THSF puisse rester en contact avec vous avant et tout au long de l'évènement.
9
+        </p>
10
+        <p>
11
+          Notez que:
12
+          <ul>
13
+            <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>
14
+            <li>Votre numéro de téléphone nous permettra de vous contacter pendant l'évènement</li>
15
+            <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>
16
+            <li>Aucune des données que vous nous transmettrez ne sera fournie à un tiers</li>
17
+          </ul>
18
+        </p>
19
+        <form method='POST' action='/account'>
20
+        <label>Adresse email: </label><input id='login' name='login' type='text' /><br/>
21
+        <label>Prénom ou pseudo: </label><input id='pseudo' name='pseudo' type='text' /><br/>
22
+        <label>Nouveau mot de passe: </label><input id='password' name='password' type='password' /><br/>
23
+        <label>Répetez mot de passe: </label><input id='confirm' name='confirm' type='password' /><br/>
24
+        <label>Numéro de téléphone: </label><input id='phone' name='phone' type='text' /><br/>
25
+        <label>Régime alimentaire: </label><input id='diet' name='diet' type='text' /><br/>
26
+        <input type='submit' value='Update' onclick='javascript:return update_account();'>
27
+      </article>
28
+      {% endblock %}

+ 1
- 1
templates/articles.html View File

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

+ 25
- 45
templates/index.html View File

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

+ 0
- 5
templates/login.html View File

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

+ 70
- 0
templates/login_or_register.html View File

@@ -0,0 +1,70 @@
1
+{% extends "index.html" %}
2
+{% block title %}Login{% endblock %}
3
+{% block nav %}{% endblock %}
4
+{% block main %}
5
+    <article class='left'>
6
+      <h3>We Make THSF</h3>
7
+      <p>
8
+        Comme chaque année le <a href='https://www.thsf.net>'>Toulouse Hacker Space Factory</a> aura lieu à
9
+        <a href='http://mixart-myrys.org'>Mix'Art Myrys</a>.
10
+      </p>
11
+      <p>
12
+        Ce festival ne pourrait pas avoir lieu sans votre implication et cette année encore votre aide est la bienvenue et nous
13
+        est précieuse.
14
+      </p>
15
+      <p>
16
+        Ce site vous permettra:
17
+        <ul>
18
+          <li>
19
+            de vous enregistrer afin de faire partie du "Staff", cette équipe de super-héros sans qui le THSF ne
20
+            saurait être un moment agréable, sûr et convivial.
21
+          </li>
22
+          <li>
23
+            de sélectionner le poste et les créneaux horaires pendant lesquels vous souhaitez vous rendre disponible.
24
+          </li>
25
+          <li>
26
+            d'être tenu informé des évolutions de l'organisation et du déroulement du THSF via la mailing list du staff.
27
+          </li>
28
+        </ul> 
29
+      </p>
30
+      <p>
31
+        Nul besoin de compétences particulières pour rejoindre notre équipe sinon votre meilleure volonté et votre bonne humeur
32
+        qui feront du THSF un moment unique de partage.
33
+      </p>
34
+      <p>
35
+        Pour vous enregistrer, munissez vous de votre adresse email et renseignez les champs de la section "<strong>Inscription</strong>".
36
+      </p>
37
+      <p>
38
+        Si vous vous être préalablement enregistré, renseignez uniquement les champs de la section "<strong>Connexion</strong>"
39
+      </p>
40
+      <p class='note'>Aucun électron n'a été maltraité lors de la mise au point de ce site. 
41
+      Par ailleurs ce site n'utilise ni ressources hébergées par des tiers, ni bullshitwares, ni trackers.</p>
42
+    </article>
43
+    {% if message != '' %}
44
+      <pre>{{ message }}</pre>
45
+    {% endif %}
46
+    <hr/>
47
+    <article class='login'>
48
+      <h3>Connexion</h3>
49
+    </article>
50
+    <article class='left'>
51
+      <form method='POST' action='/login'>
52
+        <label>Adresse mail: </label><input id='login' name='login' type='text' /><br/>
53
+        <label>Mot de passe: </label><input id='password' name='password' type='password' /><br/>
54
+        <input type='submit' value='Log me in' onclick='javascript:return verify_login();'>
55
+      </form>
56
+    </article>
57
+    <hr/>
58
+    <article class='login'>
59
+      <h3>Inscription</h3>
60
+    </article>
61
+    <article class='left'>
62
+      <form method='POST' action='/register'>
63
+        <label>Adresse mail: </label><input id='reg_mail' name='login' type='text' /><br/>
64
+        <label>Mot de passe (8 char min.): </label><input id='reg_password' name='password' type='password' /><br/>
65
+        <label>Confirmation: </label><input id='reg_confirm' name='confirm' type='password' /><br/>
66
+        <input type='submit' value='Register me NOW !' onclick='javascript:return register();'>
67
+      </form>
68
+    </article>
69
+    <hr/>
70
+{% endblock %}

+ 19
- 0
templates/register.html View File

@@ -0,0 +1,19 @@
1
+{% extends "index.html" %}
2
+{% block title %}Register{% endblock %}
3
+{% block nav %}{% endblock %}
4
+{% block main %}
5
+    <article class='login'>
6
+      <h3>Register</h3>
7
+    </article>
8
+    {% if message != '' %}
9
+      <pre>{{ message }}</pre>
10
+    {% endif %}
11
+    <article class='left'>
12
+        <form method='POST' action='/login'>
13
+        Login: <input id='login' name='login' type='text' />
14
+        Password: <input id='password' name='password' type='password' />
15
+        Confirm: <input id='password' name='password' type='password' />
16
+        <input type='submit' value='Register me NOW !' onclick='javascript:return register();'>
17
+      </form>
18
+    </article>
19
+{% endblock %}

+ 38
- 18
tetawebapp.sql View File

@@ -1,48 +1,68 @@
1 1
 \echo ******************************
2
-\echo * Dropping database tetawebapp
2
+\echo * Dropping database participer_thsf
3 3
 \echo ******************************
4 4
 
5 5
 \c postgres;
6
-drop database tetawebapp;
6
+drop database participer_thsf;
7 7
 
8 8
 \echo **************************
9
-\echo * Dropping role tetawebapp
9
+\echo * Dropping role participer_thsf
10 10
 \echo **************************
11
-drop role tetawebapp;
11
+drop role participer_thsf;
12 12
 
13 13
 \echo ***************************************************
14
-\echo * Creating role tetawebapp with password tetawebapp
14
+\echo * Creating role participer_thsf with password participer_thsf
15 15
 \echo ***************************************************
16
-create role tetawebapp with LOGIN ENCRYPTED PASSWORD 'tetawebapp';
16
+create role participer_thsf with LOGIN ENCRYPTED PASSWORD 'participer_thsf';
17 17
 
18 18
 \echo ******************************
19
-\echo * Creating database tetawebapp
19
+\echo * Creating database participer_thsf
20 20
 \echo ******************************
21
-create database tetawebapp;
21
+create database participer_thsf;
22 22
 
23 23
 \echo *******************************************
24
-\echo * Giving tetawebapp ownership to tetawebapp
24
+\echo * Giving participer_thsf ownership to participer_thsf
25 25
 \echo *******************************************
26
-alter database tetawebapp owner to tetawebapp;
26
+alter database participer_thsf owner to participer_thsf;
27 27
 
28 28
 \echo *********************************
29
-\echo * Creating tetawebapp_users table
29
+\echo * Creating participer_thsf_users table
30 30
 \echo *********************************
31 31
 
32
-\c tetawebapp;
33
-CREATE TABLE tetawebapp_users (
32
+\c participer_thsf;
33
+CREATE TABLE participer_thsf_users (
34 34
   id serial primary key,
35 35
   mail text not NULL,
36 36
   password text not NULL,
37
-  name text not NULL
37
+  name text,
38
+  phone text,
39
+  diet text
40
+);
41
+
42
+
43
+CREATE TABLE participer_thsf_roles (
44
+  id serial primary key,
45
+  role text not NULL,
46
+  description text not NULL
38 47
 );
39 48
 
40 49
 \echo *************************************************
41
-\echo * Giving tetawebapp_users ownership to tetawebapp
50
+\echo * Giving participer_thsf_users ownership to participer_thsf
42 51
 \echo *************************************************
43
-alter table tetawebapp_users owner to tetawebapp;
52
+alter table participer_thsf_users owner to participer_thsf;
53
+
54
+\echo *********************************************************************
55
+\echo * Inserting user demo identified by password demo to participer_thsf_users
56
+\echo *********************************************************************
57
+insert into participer_thsf_users (mail, password, name) values ('demo', '$2b$12$yjv4QMctGJFj2HmmbF6u5uDq9ATIl/Y9Z96MbaqRrcG6AE0CGHKSS', 'demo');
44 58
 
45 59
 \echo *********************************************************************
46
-\echo * Inserting user demo identified by password demo to tetawebapp_users
60
+\echo * Inserting roles to participer_thsf_roles
47 61
 \echo *********************************************************************
48
-insert into tetawebapp_users (mail, password, name) values ('demo', '$2b$12$yjv4QMctGJFj2HmmbF6u5uDq9ATIl/Y9Z96MbaqRrcG6AE0CGHKSS', 'demo');
62
+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');
63
+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');
64
+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');
65
+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...');
66
+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');
67
+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');
68
+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