diff --git a/.drone.yml b/.drone.yml index f8b8fbdb..560f82cc 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,18 +2,20 @@ kind: pipeline type: docker name: HeartWave -trigger: +trigger: event: - push + steps: - # Test ✔️ - name: test image: composer:2.6 commands: - cd Sources + - rm -r vendor + - rm composer.lock # Installe les dépendances PHP si nécessaire - - composer install --no-interaction + - php composer.phar install --no-interaction - ./vendor/bin/phpunit tests # Sonar static code analisis deployment @@ -34,19 +36,45 @@ steps: - cd Sources - sonar-scanner -D sonar.projectKey=HeartTrack -D sonar.host.url=https://codefirst.iut.uca.fr/sonar depends_on: [ test ] + # build image and push on the registry ✔️ + - name: rewrite-urls + image: 'busybox:latest' + commands: + - cd Sources + - ls + - >- + find . -type f -exec sed -i -r + "s@(href|src)=\"/@\1=\"$${PLUGIN_CONTAINER_PATH}@g" {} + + settings: + container_path: https://codefirst.iut.uca.fr/containers/HeartDev-web/ - # build image and push on the registry ✔️ - name: docker-build-and-push image: plugins/docker settings: + commands: ls dockerfile: Sources/config/Dockerfile context: Sources registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/david.d_almeida/web + mirror: https://proxy.iut.uca.fr:8443 username: from_secret: SECRET_REGISTRY_USERNAME password: from_secret: SECRET_REGISTRY_PASSWORD + depends_on: + - rewrite-urls + + - name: deploy-container + image: >- + hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest + environment: + IMAGENAME: 'hub.codefirst.iut.uca.fr/david.d_almeida/web:latest' + CONTAINERNAME: web + COMMAND: create + OVERWRITE: true + ADMINS: david.d_almeida + depends_on: + - docker-build-and-push - name: notify image: ruby:2.1 diff --git a/Sources/config/.htaccess b/Sources/config/.htaccess index e69de29b..0f5b0a29 100755 --- a/Sources/config/.htaccess +++ b/Sources/config/.htaccess @@ -0,0 +1,2 @@ +AddType text/css .css +AddType application/javascript .js \ No newline at end of file diff --git a/Sources/config/Dockerfile b/Sources/config/Dockerfile index ff714447..885c084c 100755 --- a/Sources/config/Dockerfile +++ b/Sources/config/Dockerfile @@ -1,17 +1,31 @@ -FROM php:8.2-fpm +FROM php:8.2-apache as base # Installation de dépendances nécessaires pour Composer RUN apt-get update && apt-get install -y \ git \ unzip # Installation de Composer -# TODO : should use a image with composer install + RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN docker-php-ext-install pdo pdo_mysql -COPY . /var/www/ +# Copy configs +COPY ./config/virtual-host.conf /etc/apache2/sites-available/000-default.conf +COPY ./config/httpd.conf /etc/apache2/httpd.conf + +# Setup App +RUN mkdir -p /app/public && chown -R www-data:www-data /app + +WORKDIR /app + +# add sources code +COPY . /app + +ENV VOLUME_PATH /app/public + +RUN composer install -WORKDIR /var/www/ +EXPOSE 80 -RUN composer install \ No newline at end of file +CMD ["apache2-foreground"] \ No newline at end of file diff --git a/Sources/config/config.php b/Sources/config/config.php index 8ddae748..782a663f 100755 --- a/Sources/config/config.php +++ b/Sources/config/config.php @@ -5,6 +5,7 @@ use Shared\Log; $dotenv = Dotenv::createUnsafeImmutable(__DIR__,'.env'); $dotenv->safeLoad(); +echo($_ENV); // apenrently getEnv is not a good thing cause // const DB_HOST = $_ENV['DB_HOST'] ?? 'localhost'; // const DB_DATABASE = $_ENV['DB_DATABASE'] ?? 'heartTrack'; diff --git a/Sources/config/httpd.conf b/Sources/config/httpd.conf new file mode 100644 index 00000000..6fcc6eb0 --- /dev/null +++ b/Sources/config/httpd.conf @@ -0,0 +1 @@ +SetEnv ASSET_PREFIX containers/HeartDev-web/ \ No newline at end of file diff --git a/Sources/config/nginx.conf b/Sources/config/nginx.conf index 18a58c8e..965bdc11 100755 --- a/Sources/config/nginx.conf +++ b/Sources/config/nginx.conf @@ -1,28 +1,19 @@ server { listen 80; - index index.php; - root /var/www/public; + index index.php index.html index.htm; + root /usr/share/nginx/html; error_page 404 /index.php; - location ~ ^/(images|javascript|js|css|flash|media|static)/ { - root /var/www/public; - } location ~ \.php$ { - fastcgi_pass web:9000; # service name defined in docker-compose.yml file like web fastcgi_param REQUEST_METHOD $request_method; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; - } - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } + } location / { - try_files $uri $uri/ /index.php?$query_string; + root /usr/share/nginx/html; + try_files $uri /index.php; } - } \ No newline at end of file diff --git a/Sources/config/virtual-host.conf b/Sources/config/virtual-host.conf new file mode 100644 index 00000000..095b7644 --- /dev/null +++ b/Sources/config/virtual-host.conf @@ -0,0 +1,39 @@ + + ServerName default + + + Options FollowSymLinks + AllowOverride None + Require all denied + + + + AllowOverride All + Require all granted + + + DocumentRoot ${VOLUME_PATH} + + AccessFileName .htaccess + + Require all denied + + + LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined + LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %O" common + LogFormat "%{Referer}i -> %U" referer + LogFormat "%{User-agent}i" agent + + CustomLog /proc/self/fd/1 combined + + + SetHandler application/x-httpd-php + + + # Multiple DirectoryIndex directives within the same context will add + # to the list of resources to look for rather than replace + # https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryindex + DirectoryIndex disabled + DirectoryIndex index.php index.html + \ No newline at end of file diff --git a/Sources/public/index.php b/Sources/public/index.php index ea0cfb45..c23f666a 100755 --- a/Sources/public/index.php +++ b/Sources/public/index.php @@ -65,12 +65,4 @@ $appFactory->registerService(\Twig\Environment::class,\Twig\Environment::class); // $databaseContext = DatabaseContext::getInstance(); $appFactory->AddControllers(); -$app = $appFactory->create(); -if (!is_null($app)){ - // Ajout des Middleware - /*$app->use(new LoggingMiddleware());*/ - $app->use(new AuthMiddleware()); - $app->mapControllers(); - $app->run(RequestFactory::createFromGlobals()); -} diff --git a/Sources/src/app/controller/Controller.php b/Sources/src/app/controller/Controller.php index b17efa74..e69de29b 100644 --- a/Sources/src/app/controller/Controller.php +++ b/Sources/src/app/controller/Controller.php @@ -1,563 +0,0 @@ -preference = new Preferences(); - } - - #[Route(path: '/', name: 'home', methods: ['GET'])] - public function index(): Response - { - return $this->render('./page/index.html',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/analyses', name: 'analyses', methods: ['GET'])] - public function analyses(): Response - { - return $this->render('./page/analyze.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/activity', name: 'activity', methods: ['GET'])] - public function activity(): Response - { - return $this->render('./page/activity.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - - #[Route(path: '/exercices', name: 'exercices', methods: ['POST'])] // 8 - public function exercices(String $type, String $intensite, String $date, IRequest $req): Response - { - $exercicesArray = [ - [ - 'date' => $date, - 'type' => $type, - 'intensite' => $intensite, - 'status' => 'A venur', - ] - ]; - return $this->render('./page/exercice.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => $exercicesArray, - 'member' => [] - ]); - } - - #[Route(path: '/search-user', name: 'search-user', methods: ['GET'])] - public function searchUser(string $username, IRequest $req): Response - { - $taberror = []; - // FILTER - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'john_doe', - 'username' => 'johndoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'alice_smith', - 'username' => 'alicesmith', - ], - ]; - // if(!Validation::val_string($name)){ - try { - //code... - // $model->userMgr->addFriend($name); - return $this->render('./page/addfriend.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => $utiliArray, - 'infoUser' => [], - 'exos' => [], - 'member' => [], - 'responce' => "Notification d'ajout envoyée à $username" - ]); - } catch (\Throwable $th) { - //throw $th; - // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); - } - // } - - } - - #[Route(path: '/search-member', name: 'search-member', methods: ['GET'])] - public function searchMember(string $username, IRequest $req): Response - { - $taberror = []; - // FILTER - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'john_doe', - 'username' => 'johndoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'alice_smith', - 'username' => 'alicesmith', - ], - ]; - // if(!Validation::val_string($name)){ - try { - //code... - // $model->userMgr->addFriend($name); - return $this->render('./page/addmember.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => $utiliArray, - 'infoUser' => [], - 'exos' => [], - 'member' => [], - 'responce' => "Notification d'ajout envoyée à $username" - ]); - } catch (\Throwable $th) { - //throw $th; - // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); - } - // } - - } - - #[Route(path: '/add-member', name: 'add-member', methods: ['POST'])] - public function addmember(string $username, IRequest $req): Response - { - $taberror = []; - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'john_doe', - 'username' => 'johndoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'alice_smith', - 'username' => 'alicesmith', - ], - ]; - // if(!Validation::val_string($name)){ - try { - //code... - // $model->userMgr->addFriend($name); - return $this->render('./page/addmember.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => $utiliArray, - 'infoUser' => [], - 'exos' => [], - 'member' => [], - 'responce' => "Notification d'ajout envoyée à $username" - ]); - } catch (\Throwable $th) { - //throw $th; - // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]); - } - // } - - } - - #[Route(path: '/member', name: 'member', methods: ['GET'])] - public function member(): Response - { - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'john_doe', - 'username' => 'johndoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'alice_smith', - 'username' => 'alicesmith', - ], - ]; - return $this->render('./page/addmember.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => $utiliArray, - 'infoUser' => [], - 'exos' => [], - 'member' => [], - ]); - } - - - #[Route(path: '/friendlist', name: 'friendlist', methods: ['POST'])] - public function friendlist(string $username, IRequest $req): Response - { - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'john_doe', - 'username' => 'johndoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'alice_smith', - 'username' => 'alicesmith', - ], - ]; - /* TODO */ - - // -> Enlever ou bloquer un utilisateur en fonction de son username - - return $this->render('./page/friend.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => $utiliArray, - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [], - ]); - } - - #[Route(path: '/friendlist', name: 'friendlist2', methods: ['GET'])] - public function friendlist2(): Response - { - $utiliArray = [ - [ - 'nom' => 'John', - 'prenom' => 'Doe', - 'img' => 'test', - 'status' => 'johndoe', - 'username' => 'jdoe', - ], - [ - 'nom' => 'Alice', - 'prenom' => 'Smith', - 'img' => 'test2', - 'status' => 'alicesmith', - 'username' => 'asmith', - ], - ]; - return $this->render('./page/friend.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => $utiliArray, - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [], - ]); - } - - #[Route(path: '/coaching', name: 'coaching', methods: ['GET'])] - public function coaching(): Response - { - return $this->render('./page/coaching.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/mail', name: 'mail', methods: ['GET'])] - public function mail(): Response - { - return $this->render('./page/mail.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/import', name: 'import', methods: ['GET'])] - public function import(): Response - { - return $this->render('./page/import.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - - #[Route(path: '/profile', name: 'profile', methods: ['GET'])] - public function profile(): Response - { - return $this->render('./page/profile.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - - #[Route(path: '/psettings', name: 'psettings', methods: ['POST'])] - public function psettings(string $nom,string $prenom,string $dateNaissance,string $mail,string $tel, IRequest $req): Response - { - - - return $this->render('./page/settings.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => $prenom, - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - - #[Route(path: '/login', name: 'login', methods: ['POST'])] - public function login(string $username,string $mdp, IRequest $req): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/home.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/log', name: 'log', methods: ['GET'])] - public function login2(): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/login.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/register', name: 'register', methods: ['POST'])] - public function register(string $username,string $mdp,string $confirmMdp,string $nom,string $prenom,string $dateNaissance,string $sexe,string $taille,string $poids, IRequest $req): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/home.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/regist', name: 'regist', methods: ['GET'])] - public function register2(): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/register.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/pass', name: 'pass', methods: ['GET'])] - public function pass(): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/password.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } - - #[Route(path: '/password', name: 'password', methods: ['POST'])] - public function password(string $email, IRequest $req): Response - { - - // CONFIRMER LES DONNESS !!!!! IMPORTANT - - return $this->render('./page/login.html.twig',[ - 'css' => $this->preference->getCookie(), - 'pp' => "test2", - 'user' => "Doe", - 'role' => "Athlète", - 'friendship' => [], - 'analyzes' => [], - 'mails' => [], - 'users' => [], - 'infoUser' => [], - 'exos' => [], - 'member' => [] - ]); - } -} \ No newline at end of file