add things
This commit is contained in:
17
Caddyfile
Normal file
17
Caddyfile
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Caddyfile
|
||||||
|
|
||||||
|
flask.localhost {
|
||||||
|
reverse_proxy flask:5000
|
||||||
|
}
|
||||||
|
|
||||||
|
wekan.localhost {
|
||||||
|
reverse_proxy wekan:8080
|
||||||
|
}
|
||||||
|
|
||||||
|
chat.localhost {
|
||||||
|
reverse_proxy mattermost:8065
|
||||||
|
}
|
||||||
|
|
||||||
|
keycloak.localhost {
|
||||||
|
reverse_proxy keycloak:8080
|
||||||
|
}
|
||||||
42
README.md
42
README.md
@@ -1,7 +1,45 @@
|
|||||||
# gesthub
|
# Projet gesthub
|
||||||
|
|
||||||
### Membres
|
## Membres
|
||||||
|
|
||||||
- Lajus Erika
|
- Lajus Erika
|
||||||
- Lemoule Duparc Nathan
|
- Lemoule Duparc Nathan
|
||||||
- LABAT Nino
|
- LABAT Nino
|
||||||
|
|
||||||
|
## Présentation du projet
|
||||||
|
Ce projet vise à créer une interface fait pour faciliter la gestion et communication au sein d'un projet ou d'une entreprise.
|
||||||
|
|
||||||
|
On y retrouve deux roles distints :
|
||||||
|
|
||||||
|
**1. Admin :**
|
||||||
|
<u>Gestion des utilisateurs :</u> Création et suppression de comptes par les admins.
|
||||||
|
|
||||||
|
<u> Authentification sécurisée:</u>Avec nom, prénom et mot de passe.
|
||||||
|
|
||||||
|
<u> Gestion des annonces :</u> Les admins peuvent publier des annonces sous forme de post-it qui apparait dans une zone défini sur l'interface des membres.
|
||||||
|
Chaque annonce a une date limite et disparaît automatiquement une fois la date dépassée.
|
||||||
|
|
||||||
|
<u> Gestion agenda :</u> ajoute les évènement globaux
|
||||||
|
|
||||||
|
<u> Gestionnaire des taches :</u> Création de tableaux, listes et cartes pour l'organisation des tâches.
|
||||||
|
|
||||||
|
**2. Membre :**
|
||||||
|
<u> Agenda/Planning partagé : </u>
|
||||||
|
Visibilité des événements globaux ajouté par les admins.
|
||||||
|
Possibilité d'ajouter des événements personnels.
|
||||||
|
|
||||||
|
<u> Gestion de projets façon Trello :</u>
|
||||||
|
Possibilité d'ajouter des cartes
|
||||||
|
Suivi de l'avancement des projets.
|
||||||
|
Visibilité sur les différents tableaux.
|
||||||
|
|
||||||
|
<u>Messagerie interne :</u>
|
||||||
|
Système de chat pour la communication en temps réel entre membres.
|
||||||
|
|
||||||
|
<u>Liens vers outils externes :</u>
|
||||||
|
Boutons pour accéder rapidement à des outils comme Discord, etc.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
135
docker-compose.yml
Normal file
135
docker-compose.yml
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
services:
|
||||||
|
caddy:
|
||||||
|
image: caddy:latest
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||||
|
- caddy_data:/data
|
||||||
|
- caddy_config:/config
|
||||||
|
depends_on:
|
||||||
|
- flask
|
||||||
|
- wekan
|
||||||
|
- mattermost
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
flask:
|
||||||
|
build: ./web
|
||||||
|
environment:
|
||||||
|
- DB_HOST=mariadb
|
||||||
|
- DB_USER=flaskuser
|
||||||
|
- DB_PASSWORD=flaskpass
|
||||||
|
- DB_NAME=flaskdb
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
|
- keycloak
|
||||||
|
volumes:
|
||||||
|
- ./web:/app
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:latest
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=rootpass
|
||||||
|
- MYSQL_DATABASE=flaskdb
|
||||||
|
- MYSQL_USER=flaskuser
|
||||||
|
- MYSQL_PASSWORD=flaskpass
|
||||||
|
volumes:
|
||||||
|
- mariadb_data:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
wekan:
|
||||||
|
image: wekanteam/wekan
|
||||||
|
environment:
|
||||||
|
- MONGO_URL=mongodb://mongo:27017/wekan
|
||||||
|
- ROOT_URL=https://wekan.gesthub
|
||||||
|
depends_on:
|
||||||
|
- mongo
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
mongo:
|
||||||
|
image: mongo:latest
|
||||||
|
volumes:
|
||||||
|
- mongo_data:/data/db
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
mattermost:
|
||||||
|
image: mattermost/mattermost-team-edition:latest
|
||||||
|
ports:
|
||||||
|
- "8065:8065"
|
||||||
|
environment:
|
||||||
|
- MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||||
|
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuserpass@db:5432/mattermost?sslmode=disable
|
||||||
|
- MM_SERVICESETTINGS_SITEURL=http://chat.gesthub
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
volumes:
|
||||||
|
- mattermost_data:/mattermost/data
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:13
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=mattermost
|
||||||
|
- POSTGRES_USER=mmuser
|
||||||
|
- POSTGRES_PASSWORD=mmuserpass
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
keycloak:
|
||||||
|
image: quay.io/keycloak/keycloak:22.0.5
|
||||||
|
command: start-dev
|
||||||
|
environment:
|
||||||
|
- KEYCLOAK_ADMIN=admin
|
||||||
|
- KEYCLOAK_ADMIN_PASSWORD=admin
|
||||||
|
- KC_DB=postgres
|
||||||
|
- KC_DB_URL_HOST=keycloak-db
|
||||||
|
- KC_DB_URL_DATABASE=keycloak
|
||||||
|
# - KC_DB_USERNAME=keycloak
|
||||||
|
- KC_DB_PASSWORD=keycloakpass
|
||||||
|
- KC_HOSTNAME=keycloak
|
||||||
|
- KC_HTTP_ENABLED=true
|
||||||
|
- KC_HOSTNAME_STRICT=false
|
||||||
|
- KC_HOSTNAME_STRICT_HTTPS=false
|
||||||
|
- KC_PROXY=edge
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
depends_on:
|
||||||
|
- keycloak-db
|
||||||
|
volumes:
|
||||||
|
- keycloak_data:/opt/keycloak/data
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
keycloak-db:
|
||||||
|
image: postgres:13
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=keycloak
|
||||||
|
- POSTGRES_USER=keycloak
|
||||||
|
- POSTGRES_PASSWORD=keycloakpass
|
||||||
|
volumes:
|
||||||
|
- keycloakdb_data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
caddy_data:
|
||||||
|
caddy_config:
|
||||||
|
mariadb_data:
|
||||||
|
mongo_data:
|
||||||
|
mattermost_data:
|
||||||
|
postgres_data:
|
||||||
|
keycloak_data:
|
||||||
|
keycloakdb_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
backend:
|
||||||
17
start-gesthub.sh
Normal file
17
start-gesthub.sh
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PROJECT_DOMAIN="gesthub"
|
||||||
|
HOSTS_LINE="127.0.0.1 flask.$PROJECT_DOMAIN wekan.$PROJECT_DOMAIN chat.$PROJECT_DOMAIN"
|
||||||
|
|
||||||
|
echo "🔧 Vérification des droits (sudo peut être requis pour modifier /etc/hosts)..."
|
||||||
|
|
||||||
|
# Ajout dans /etc/hosts si absent
|
||||||
|
if ! grep -q "$PROJECT_DOMAIN" /etc/hosts; then
|
||||||
|
echo "✅ Ajout de $PROJECT_DOMAIN dans /etc/hosts..."
|
||||||
|
echo "$HOSTS_LINE" | sudo tee -a /etc/hosts > /dev/null
|
||||||
|
else
|
||||||
|
echo "✔️ Domaine $PROJECT_DOMAIN déjà présent dans /etc/hosts."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🚀 Lancement des services Docker..."
|
||||||
|
docker compose up --build
|
||||||
17
start-infra.sh
Normal file
17
start-infra.sh
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PROJECT_DOMAIN="gesthub"
|
||||||
|
HOSTS_LINE="127.0.0.1 flask.$PROJECT_DOMAIN wekan.$PROJECT_DOMAIN chat.$PROJECT_DOMAIN"
|
||||||
|
|
||||||
|
echo "🔧 Vérification des droits (sudo peut être requis pour modifier /etc/hosts)..."
|
||||||
|
|
||||||
|
# Ajout dans /etc/hosts si absent
|
||||||
|
if ! grep -q "$PROJECT_DOMAIN" /etc/hosts; then
|
||||||
|
echo "✅ Ajout de $PROJECT_DOMAIN dans /etc/hosts..."
|
||||||
|
echo "$HOSTS_LINE" | sudo tee -a /etc/hosts > /dev/null
|
||||||
|
else
|
||||||
|
echo "✔️ Domaine $PROJECT_DOMAIN déjà présent dans /etc/hosts."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🚀 Lancement des services Docker..."
|
||||||
|
docker compose up --build
|
||||||
8
web/Dockerfile
Normal file
8
web/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM python:3.11
|
||||||
|
|
||||||
|
WORKDIR /web
|
||||||
|
COPY . /web
|
||||||
|
|
||||||
|
RUN pip install flask flask_sqlalchemy pymysql authlib requests
|
||||||
|
|
||||||
|
CMD ["python", "app.py"]
|
||||||
50
web/app.py
Normal file
50
web/app.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
from flask import Flask, redirect, url_for, session, render_template
|
||||||
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
from authlib.integrations.flask_client import OAuth
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://flaskuser:flaskpass@mariadb/flaskdb'
|
||||||
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||||
|
app.secret_key = 'ninolabat'
|
||||||
|
|
||||||
|
db = SQLAlchemy(app)
|
||||||
|
|
||||||
|
# Configuration de Authlib
|
||||||
|
oauth = OAuth(app)
|
||||||
|
|
||||||
|
keycloak = oauth.register(
|
||||||
|
name='keycloak',
|
||||||
|
client_id='flask-app',
|
||||||
|
client_secret='jp4T3FnlpzHyc4Ch4zNoO8cAakXzHi50',
|
||||||
|
server_metadata_url='http://keycloak:8080/realms/GestHub/.well-known/openid-configuration',
|
||||||
|
client_kwargs={
|
||||||
|
'scope': 'openid profile email',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
user = session.get('user')
|
||||||
|
if user:
|
||||||
|
return render_template('/view/index.html', user=user)
|
||||||
|
return redirect(url_for('login'))
|
||||||
|
|
||||||
|
@app.route('/login')
|
||||||
|
def login():
|
||||||
|
redirect_uri = url_for('auth', _external=True)
|
||||||
|
return keycloak.authorize_redirect(redirect_uri)
|
||||||
|
|
||||||
|
@app.route('/auth')
|
||||||
|
def auth():
|
||||||
|
token = keycloak.authorize_access_token()
|
||||||
|
userinfo = keycloak.parse_id_token(token)
|
||||||
|
session['user'] = userinfo
|
||||||
|
return redirect('/')
|
||||||
|
|
||||||
|
@app.route('/logout')
|
||||||
|
def logout():
|
||||||
|
session.pop('user', None)
|
||||||
|
return redirect('/')
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(host='0.0.0.0')
|
||||||
3
web/assets/css/index.css
Normal file
3
web/assets/css/index.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
body{
|
||||||
|
background-color: bisque;
|
||||||
|
}
|
||||||
0
web/assets/images/fakeimg.img
Normal file
0
web/assets/images/fakeimg.img
Normal file
12
web/view/index.html
Normal file
12
web/view/index.html
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Document</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Hello World!
|
||||||
|
<h1>Welcome to the GestHub Web Interface</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user