Commit fe67608e authored by Florent Chehab's avatar Florent Chehab

Tweaks and change role page added

parent fc561ea9
......@@ -17,7 +17,7 @@ build_frontend: generate_frontend_files
npm run build
test_backend: generate_backend
pytest
pytest general/ frontend/ backend/
test_backend_server:
pytest -n 4 general/ frontend/ backend/ --cov-report html
......
from .loading_scripts import LoadGroups
from .loading_scripts import LoadAdminUser
from .loading_scripts import LoadCurrencies
from .loading_scripts import LoadCountries
......@@ -9,6 +10,7 @@ import reversion
def load_all():
with reversion.create_revision():
LoadGroups()
admin = LoadAdminUser().get()
LoadCurrencies(admin).load()
LoadCountries(admin).load()
......
from .loadGroups import LoadGroups # noqa: F401
from .loadAdminUser import LoadAdminUser # noqa: F401
from .loadCountries import LoadCountries # noqa: F401
from .loadUniversities import LoadUniversities # noqa: F401
......
from django.contrib.auth.models import Group
class LoadGroups(object):
def __init__(self):
Group.objects.get_or_create(name='Moderators')
Group.objects.get_or_create(name='DRI')
......@@ -10,13 +10,19 @@ L'application est « agnostique » au type de base de donnée employée. Alors q
aujourd'hui stockés sous forme de texte car aucune requête n'aurait besoin de les parcourir ; ainsi, seul des champs par défaut de django sont employés.
#### SQlite
Pour utiliser SQlite comme SGBD, il suffit de commenter le bloc qui concerne Postgresql dans le fichier de configuration visible ici : `./general/settings.py` :
Pour utiliser SQlite comme SGBD, il suffit de commenter le bloc qui concerne Postgresql dans le fichier de configuration visible ici : `./general/settings/development.py` :
```python
## POSTGRESQL
# If bellow fails, your need to add DATABASE_URL and ENV to your virutalenv
locals()['DATABASES']['default'] = dj_database_url.config(
conn_max_age=django_heroku.MAX_CONN_AGE, ssl_require=not dev_env)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'outgoing',
'USER': 'outgoing',
'PASSWORD': 'outgoing',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
```
et de décommenter celui-ci :
```python
......@@ -60,15 +66,6 @@ host all all 127.0.0.1/32 trust
Pour un fonctionnement simplifié avec ce projet il faut procéder aux changement suivants.
_Petite commande à faire au début : nous allons avoir besoin de votre nom d'utilisateur._
```bash
whoami
```
C'est par le résultat de cette commande qu'il faudra que vous remplaciez chaque `<login>` dans les autres commandes.
Changer d'utilisateur pour l'utilisateur classique de `postgresql` :
```bash
su - postgres
```
......@@ -84,19 +81,20 @@ Si vous ne voyez pas `postgres=#` c'est qu'il y a un problème, vérifier votre
Créer un utilisateur correspondant à votre utilisateur/login classique dans postgre :
```sql
CREATE USER <login>;
CREATE USER outgoing;
ALTER USER outgoing WITH PASSWORD 'outgoing';
```
Donner lui le droit de créer des bases de données (utile lors des tests en local) :
```sql
ALTER USER <login> CREATEDB;
ALTER USER outgoing CREATEDB;
```
Créer une base de données qui lui sera associée :
```sql
CREATE DATABASE <login>;
GRANT ALL on DATABASE <login> to <login>;
CREATE DATABASE outgoing;
GRANT ALL on DATABASE outgoing to outgoing;
```
Sortez de `psql` (`\q`) et retrouver votre utilisateur normal (`CRTL` + `D`).
......@@ -117,37 +115,19 @@ Afin d'avoir des environnements reproductibles il est **fortement** suggéré d'
(Ce projet est développé sur `python-3.6`)
```bash
python3.6 -m venv <chemin-du-venv>
python3.6 -m venv ./env
```
_(chemin = "chemin" + "nom-du-venv")_ Nous vous suggérons de prendre `<chemin-du-venv> = ./env`.
Cet environnement virtuel doit être **systématiquement** activé lorsque vous travaillez sur ce projet :
```bash
source <chemin-du-venv>/bin/activate
source ./env/bin/activate
```
Les lignes de votre console doivent alors commencez par `(<nom-du-venv>)`.
_Pour le désactiver, faîtes : `deactivate`_.
!> Il est essentiel à ce stade de modifier votre environnement virtuel pour ajouter des variables d'environnement spécifiques, **pour que ce projet fonctionne correctement**.
Éditer le fichier `<chemin-du-venv>/bin/activate` :
- À la fin de la fonction `deactivate ()`, avant le `}` de fin, rajouter les deux linges :
```bash
unset ENV
unset DATABASE_URL
```
- À la fin du fichier, ajouter les lignes :
```bash
export DATABASE_URL=postgres://$(whoami)@127.0.0.1:5432/$(whoami)
export ENV=development
```
Cela permet d'ajouter et d'enlever automatiquement des variables d'environnement **essentielles** au fonctionnement du projet.
### git
Il ne vous reste plus qu'à cloner le projet :
......@@ -190,11 +170,11 @@ _Collectez_ les éléments statistiques :
_Checkez_ le système :
```nash
./manage.py check
make check_backend
```
```bash
./manage.py test
make test_backend
```
Tout ce qu'il y a jusqu'ici **doit** fonctionner. :smile:
......@@ -211,4 +191,4 @@ Si vous n'avez jamais travailler avec Django, un tutoriel [s'impose](https://tut
## Déploiement _externe_
À ce jour le déploiement externe est réalisé sur la plateforme proposée par [Heroku](https://www.heroku.com) à l'adresse : [http://heroku-badge.herokuapp.com/](http://heroku-badge.herokuapp.com/).
\ No newline at end of file
À ce jour, le déploiement est réalisé sur un petit vps [outgoing-utc.floflo.ch](outgoing-utc.floflo.ch)
\ No newline at end of file
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import include, url
from django.urls import path
from django.contrib import admin
from django.views.generic.base import RedirectView
import django_cas_ng.views
from . import views
if settings.DEBUG:
import debug_toolbar
......@@ -15,6 +16,8 @@ else:
urlpatterns = []
urlpatterns += [
# TODO remove this before going to full prod
url(r'^role_change/', views.role_change),
url(r'^admin/', admin.site.urls),
url(r'^user/login$',
django_cas_ng.views.login,
......
from django.shortcuts import render
from django.contrib.auth.models import User, Group
from backend.utils import is_member
from django.http import HttpResponse
import re
import json
def role_change(request):
user = request.user
moderator_group = Group.objects.get(name='Moderators')
dri_group = Group.objects.get(name='DRI')
moderator_group.user_set.remove(user)
dri_group.user_set.remove(user)
path = request.path
if (bool(re.search('dri', path))):
dri_group.user_set.add(user)
if (bool(re.search('moderator', path))):
moderator_group.user_set.add(user)
role = "normal"
if is_member("DRI", user):
role = 'DRI'
if is_member('Moderators', user):
role = 'moderator'
return HttpResponse(json.dumps({
'role_actuel': role
}))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment