From 11900c28420700d06610e53011d6c5c2c7e78d57 Mon Sep 17 00:00:00 2001 From: M1n-0 Date: Tue, 13 May 2025 17:09:24 +0200 Subject: [PATCH] add things --- Caddyfile | 17 +++++ README.md | 48 ++++++++++-- docker-compose.yml | 135 ++++++++++++++++++++++++++++++++++ start-gesthub.sh | 17 +++++ start-infra.sh | 17 +++++ web/Dockerfile | 8 ++ web/app.py | 50 +++++++++++++ web/assets/css/index.css | 3 + web/assets/images/fakeimg.img | 0 web/view/index.html | 12 +++ 10 files changed, 302 insertions(+), 5 deletions(-) create mode 100644 Caddyfile create mode 100644 docker-compose.yml create mode 100644 start-gesthub.sh create mode 100644 start-infra.sh create mode 100644 web/Dockerfile create mode 100644 web/app.py create mode 100644 web/assets/css/index.css create mode 100644 web/assets/images/fakeimg.img create mode 100644 web/view/index.html diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..7aa872c --- /dev/null +++ b/Caddyfile @@ -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 +} \ No newline at end of file diff --git a/README.md b/README.md index 5c88ab2..e86da91 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,45 @@ -# gesthub +# Projet gesthub + +## Membres + +- Lajus Erika +- Lemoule Duparc Nathan +- 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 :** +Gestion des utilisateurs : Création et suppression de comptes par les admins. + + Authentification sécurisée:Avec nom, prénom et mot de passe. + + Gestion des annonces : 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. + + Gestion agenda : ajoute les évènement globaux + + Gestionnaire des taches : Création de tableaux, listes et cartes pour l'organisation des tâches. + +**2. Membre :** + Agenda/Planning partagé : +Visibilité des événements globaux ajouté par les admins. +Possibilité d'ajouter des événements personnels. + + Gestion de projets façon Trello : +Possibilité d'ajouter des cartes +Suivi de l'avancement des projets. +Visibilité sur les différents tableaux. + +Messagerie interne : +Système de chat pour la communication en temps réel entre membres. + +Liens vers outils externes : +Boutons pour accéder rapidement à des outils comme Discord, etc. + + + -### Membres -- Lajus Erika -- Lemoule Duparc Nathan -- LABAT Nino \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..73266bc --- /dev/null +++ b/docker-compose.yml @@ -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: diff --git a/start-gesthub.sh b/start-gesthub.sh new file mode 100644 index 0000000..ad28472 --- /dev/null +++ b/start-gesthub.sh @@ -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 diff --git a/start-infra.sh b/start-infra.sh new file mode 100644 index 0000000..ad28472 --- /dev/null +++ b/start-infra.sh @@ -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 diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..e6efac2 --- /dev/null +++ b/web/Dockerfile @@ -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"] diff --git a/web/app.py b/web/app.py new file mode 100644 index 0000000..acf5857 --- /dev/null +++ b/web/app.py @@ -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') diff --git a/web/assets/css/index.css b/web/assets/css/index.css new file mode 100644 index 0000000..5c00ee9 --- /dev/null +++ b/web/assets/css/index.css @@ -0,0 +1,3 @@ +body{ + background-color: bisque; +} \ No newline at end of file diff --git a/web/assets/images/fakeimg.img b/web/assets/images/fakeimg.img new file mode 100644 index 0000000..e69de29 diff --git a/web/view/index.html b/web/view/index.html new file mode 100644 index 0000000..5b7436e --- /dev/null +++ b/web/view/index.html @@ -0,0 +1,12 @@ + + + + + + Document + + + Hello World! +

Welcome to the GestHub Web Interface

+ + \ No newline at end of file