diff --git a/.env.sample b/.env.sample index 7a1a8ba..114d967 100644 --- a/.env.sample +++ b/.env.sample @@ -4,7 +4,6 @@ NEXT_PUBLIC_API_URL=$API_URL NEXT_PUBLIC_API_URL_ROOT=http://localhost:1337 SITE_URL=http://localhost:3001 NEXT_PUBLIC_READ_TOKEN= -NEXT_PUBLIC_ADMIN_JWT_SECRET= # IDENTITÉ DU SITE (branding) NEXT_PUBLIC_SITE_NAME=PAWÒL-NU. Paroles et traductions. @@ -77,7 +76,6 @@ NEXT_PUBLIC_LIBERAPAY_DONATE= NEXT_PUBLIC_PALE_USERNAME= NEXT_PUBLIC_GADE_USERNAME= NEXT_PUBLIC_YOUTUBE_USERNAME= -NEXT_PUBLIC_TELEGRAM_GROUP= NEXT_PUBLIC_XMPP= NEXT_PUBLIC_GIT= NEXT_PUBLIC_CODEBERG= @@ -86,9 +84,6 @@ NEXT_PUBLIC_BLUESKY_URL= # DOMAIN IMAGE NEXT_PUBLIC_DOMAINS_IMAGE="localhost:1337 strapi.mondomaine.com" -# JWT SECRET -NEXT_PUBLIC_JWT_SECRET= - # STRIPE NEXT_PUBLIC_STRIPE_PUBLIC_KEY= diff --git a/app/auth-provider.js b/app/auth-provider.js deleted file mode 100644 index d28f281..0000000 --- a/app/auth-provider.js +++ /dev/null @@ -1,17 +0,0 @@ -'use client' - -import Proptypes from 'prop-types' -import {SessionProvider} from 'next-auth/react' - -export default function AuthProvider({children, session}) { - return ( - - {children} - - ) -} - -AuthProvider.propTypes = { - children: Proptypes.node, - session: Proptypes.object -} diff --git a/components/cgu/cgu-dialog.js b/components/cgu/cgu-dialog.js deleted file mode 100644 index f487e06..0000000 --- a/components/cgu/cgu-dialog.js +++ /dev/null @@ -1,93 +0,0 @@ -import {useRef, useEffect} from 'react' -import {styled, useTheme} from '@mui/material/styles' -import PropTypes from 'prop-types' -import {Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography} from '@mui/material' -import useMediaQuery from '@mui/material/useMediaQuery' -import Cgu from '.' - -const PREFIX = 'cgu-dialog' - -const classes = { - dialog: `${PREFIX}-dialog` -} - -const Root = styled('div')(() => ({ - [`& .${classes.dialog}`]: { - zIndex: 1 - } -})) - -const CGU_DOWNLOAD_LINK = process.env.NEXT_PUBLIC_CGU_DOWNLOAD_LINK - -export default function CGUDialog({open, setOpen}) { - const theme = useTheme() - const fullScreen = useMediaQuery(theme.breakpoints.down('md')) - - const handleClose = () => { - setOpen(false) - } - - const descriptionElementRef = useRef(null) - useEffect(() => { - if (open) { - const {current: descriptionElement} = descriptionElementRef - if (descriptionElement !== null) { - descriptionElement.focus() - } - } - }, [open]) - - return ( - - - CGU et politique de confidentialité - - - {CGU_DOWNLOAD_LINK ? ( -
- - Consultez nos CGU et notre politique de confidentialité : - - -
- ) : ( - - )} -
-
- - - -
-
- ) -} - -CGUDialog.propTypes = { - open: PropTypes.bool.isRequired, - setOpen: PropTypes.func.isRequired -} diff --git a/components/cgu/index.js b/components/cgu/index.js deleted file mode 100644 index ae3422e..0000000 --- a/components/cgu/index.js +++ /dev/null @@ -1,592 +0,0 @@ -import {List, ListItem, ListItemText, Link, Typography, ListItemIcon} from '@mui/material' -import {styled} from '@mui/material/styles' -import ArrowRightAltIcon from '@mui/icons-material/ArrowRightAlt' - -const PREFIX = 'index' - -const classes = { - root: `${PREFIX}-root` -} - -const Root = styled('div')({ - [`&.${classes.root}`]: { - textAlign: 'justify' - } -}) - -export default function Cgu() { - return ( - - - Définitions - - - - Prestations et Services : pawol.nu met à disposition : - - - - Contenu : Ensemble des éléments constituants l’information présente sur le site, notamment textes – images – vidéos. - - - - Informations utilisateurs : Ci après dénommé « Information (s) » - qui correspondent à l’ensemble des données personnelles susceptibles d’être détenues par - pawol.nu pour la gestion de votre compte, et à des fins d’analyses et de statistiques. - - - - Utilisateur : Internaute, utilisant le site susnommé. - - - - Utilisateur enregistré: Internaute ayant compte utilisateur, utilisant le site susnommé. - - - - Informations personnelles : « Les informations qui permettent, sous quelque forme que ce soit, directement ou non, - l’identification des personnes physiques auxquelles elles s’appliquent » (article 4 de la loi n° 78-17 du 6 janvier 1978). - - - Les termes « données à caractère personnel », « personne concernée », « sous traitant » et « données sensibles » ont le sens défini par le Règlement - Général sur la Protection des Données (RGPD : n° 2016-679) - - - - 1. Présentation du site internet - - - - En vertu de l’article 6 de la loi n° 2004-575 du 21 juin 2004 pour la confiance dans l’économie numérique, il est précisé aux utilisateurs du site internet - pawol.nu l’identité des différents intervenants dans le cadre de sa réalisation et de son suivi : - - - - Propriétaire : ORGANISATION KA INTERNATIONALE (Association loi 1901) - - - Responsable publication : ORGANISATION KA INTERNATIONALE – kontak@o-k-i.net - - - Le responsable publication est une personne morale - - - Réalisation : Cédric Pronzola - - - - - - - - Courriel : contact@cedric-pronzola.dev - - - - - - - - WEB : cedric-pronzola.dev - - - - - - - - Git : LABOLA - OKI - - - - - Hébergeur : OVH – 2 rue Kellermann - 59100 Roubaix - France - - - Délégué à la protection des données : ORGANISATION KA INTERNATIONALE – kontak@o-k-i.net - - - - Ces mentions légales RGPD sont issues du générateur gratuit de mentions légales pour un site internet (orson.io). - - - - 2. Conditions générales d’utilisation du site et des services proposés. - - - - L’utilisation du site pawol.nu implique l’acceptation pleine et entière des conditions générales d’utilisation ci-après décrites. - Ces conditions d’utilisation sont susceptibles d’être modifiées ou complétées à tout moment, les utilisateurs du site pawol.nu - sont donc invités à les consulter de manière régulière. - - - - Ce site internet est normalement accessible à tout moment aux utilisateurs. Une interruption pour raison de maintenance technique peut être toutefois - décidée par pawol.nu, qui s’efforcera alors de communiquer préalablement aux utilisateurs les dates et heures de l’intervention. - Le site web pawol.nu est mis à jour régulièrement par ORGANISATION KA INTERNATIONALE. De la même façon, les mentions légales peuvent être - modifiées à tout moment : elles s’imposent néanmoins à l’utilisateur qui est invité à s’y référer le plus souvent possible afin d’en prendre connaissance. - - - - 3. Description des services fournis - - - - pawol.nu s’efforce de fournir sur le site, des informations - aussi précises que possible. Toutefois, il ne pourra être tenu responsable des oublis, des inexactitudes et des carences dans la mise à jour, qu’elles soient de son fait ou du fait - des tiers partenaires qui lui fournissent ces informations. - - - - Toutes les informations indiquées sur le site pawol.nu sont données à titre indicatif, - et sont susceptibles d’évoluer. Par ailleurs, les renseignements figurant sur le site pawol.nu ne sont pas exhaustifs. - Ils sont donnés sous réserve de modifications ayant été apportées depuis leur mise en ligne. - - - - 4. Limitations contractuelles sur les données techniques - - - - Le site utilise la technologie JavaScript. - Le site Internet ne pourra être tenu responsable de dommages matériels liés à l’utilisation du site. De plus, l’utilisateur du site s’engage à accéder au site en utilisant un matériel récent, - ne contenant pas de virus et avec un navigateur de dernière génération mis-à-jour. - Le site pawol.nu est hébergé chez un prestataire sur le territoire de l’Union Européenne conformément aux dispositions du - Règlement Général sur la Protection des Données (RGPD : n° 2016-679). - - - - L’objectif est d’apporter une prestation qui assure le meilleur taux d’accessibilité. - L’hébergeur assure la continuité de son service 24 Heures sur 24, tous les jours de l’année. Il se réserve néanmoins la possibilité d’interrompre le service d’hébergement - pour les durées les plus courtes possibles notamment à des fins de maintenance, d’amélioration de ses infrastructures, de défaillance de ses infrastructures ou si les - Prestations et Services génèrent un trafic réputé anormal. - - - - pawol.nu et l’hébergeur ne pourront être tenus responsables en cas de dysfonctionnement du réseau Internet, - des lignes téléphoniques ou du matériel informatique et de téléphonie lié notamment à l’encombrement du réseau empêchant l’accès au serveur. - - - - 5. Limitations de responsabilité - - - - pawol.nu agit en tant qu’éditeur du site. pawol.nu est responsable - de la qualité et de la véracité du Contenu qu’il publie. - - - - pawol.nu ne pourra être tenu responsable des dommages directs et indirects causés au matériel de l’utilisateur, - lors de l’accès au site internet pawol.nu, et résultant soit de l’utilisation d’un matériel - ne répondant pas aux spécifications indiquées au point 4, soit de l’apparition d’un bug ou d’une incompatibilité. - - - - 6. Gestion des données personnelles - - - - 6.1 Responsables de la collecte des données personnelles - - - - Pour les données personnelles collectées dans le cadre de la création du compte personnel de l’utilisateur et de sa navigation sur le site - le responsable du traitement des données personnelles est : ORGANISATION KA INTERNATIONALE. pawol.nu. - - - - En tant que responsable du traitement des données qu’il collecte, pawol.nu s’engage à respecter le cadre des dispositions légales en vigueur. - Chaque fois que pawol.nu traite des Données Personnelles, pawol.nu prend toutes les mesures raisonnables - pour s’assurer de l’exactitude et de la pertinence des Données Personnelles au regard des finalités pour lesquelles pawol.nu les traite. - - - - 6.2 Finalité des données collectées - - - - pawol.nu est susceptible de traiter tout ou partie des données : - - - - - - - - - pour permettre la navigation sur le site et la gestion et la traçabilité des prestations et services commandés par l’utilisateur : données de connexion et d’utilisation du site - - - - - - - - pour prévenir et lutter contre la fraude informatique (spamming, hacking…) : matériel informatique utilisé pour la navigation, l’adresse IP, le mot de passe (hashé) - - - - - - - - pour améliorer la navigation sur le site : données de connexion et d’utilisation - - - - - - 6.3 Droit d’accès, de rectification et d’opposition - - - - Conformément à la réglementation européenne en vigueur, les Utilisateurs de pawol.nu disposent des droits suivants : - - - - - - - - - droit d’accès (article 15 RGPD) et de rectification (article 16 RGPD), de mise à jour, de complétude des données des Utilisateurs droit de verrouillage ou d’effacement - des données des Utilisateurs à caractère personnel (article 17 du RGPD), lorsqu’elles sont inexactes, incomplètes, équivoques, périmées, ou dont la collecte, l’utilisation, - la communication ou la conservation est interdite - - - - - - - - droit de retirer à tout moment un consentement (article 13-2c RGPD) - - - - - - - - droit à la limitation du traitement des données des Utilisateurs (article 18 RGPD) - - - - - - - - droit à la portabilité des données que les Utilisateurs auront fournies, lorsque ces données font l’objet de traitements automatisés fondés sur leur consentement ou sur un contrat (article 20 RGPD) - - - - - - - - droit de définir le sort des données des Utilisateurs après leur mort et de choisir à qui pawol.nu devra communiquer (ou non) - ses données à un tiers qu’ils aura préalablement désigné - - - - - - Dès que pawol.nu a connaissance du décès d’un Utilisateur et à défaut d’instructions de sa part, pawol.nu s’engage à détruire - ses données, sauf si leur conservation s’avère nécessaire à des fins probatoires ou pour répondre à une obligation légale. - - - - Si l’Utilisateur souhaite savoir comment pawol.nu utilise ses Données Personnelles, demander à les rectifier ou s’oppose à leur traitement, - l’Utilisateur peut contacter pawol.nu par courriel à l’adresse suivante, kontak@o-k-i.net ou via XMPP à oki@xmpp.cz. - - - - Dans ce cas, l’Utilisateur doit indiquer les Données Personnelles qu’il souhaiterait que pawol.nu corrige, - mette à jour ou supprime, en s’identifiant précisément avec une copie d’une pièce d’identité (carte d’identité ou passeport). - - - - Les demandes de suppression de Données Personnelles seront soumises aux obligations qui sont imposées à pawol.nu par la loi, - notamment en matière de conservation ou d’archivage des documents. Enfin, les Utilisateurs de pawol.nu peuvent déposer une réclamation - auprès des autorités de contrôle, et notamment de la CNIL (https://www.cnil.fr/fr/plaintes). - - - - 6.4 Non-communication des données personnelles - - - - pawol.nu s’interdit de traiter, héberger ou transférer les Informations collectées sur ses utilisateurs vers un pays situé en dehors de - l’Union européenne ou reconnu comme « non adéquat » par la Commission européenne sans en informer préalablement l’utilisateur. Pour autant, pawol.nu reste - libre du choix de ses sous-traitants techniques et commerciaux à la condition qu’il présentent les garanties suffisantes au regard des exigences du Règlement Général sur la Protection des - Données (RGPD : n° 2016-679). - - - - pawol.nu s’engage à prendre toutes les précautions nécessaires afin de préserver la sécurité des Informations et notamment qu’elles ne soient pas communiquées - à des personnes non autorisées. Cependant, si un incident impactant l’intégrité ou la confidentialité des Informations de l’utilisateur est portée - à la connaissance de pawol.nu, celle-ci devra dans les meilleurs délais informer l’utilisateur - et lui communiquer les mesures de corrections prises. Par ailleurs pawol.nu ne collecte aucune « données sensibles ». - - - - 6.5 Inscription et connexion - - - - Les utilisateurs peuvent s’inscrire sur pawol.nu en renseignant leur adresse e-mail, un nom d’utilisateur ainsi qu’un mot de passe. - À la suite de l’inscription, un lien de vérification est envoyé à l’adresse utilisée. Ce lien permet d’activer le compte. Sans cette activation, l’utilisateur n’aura pas la possibilité de se connecter au site. - Si un utilisateur n’a pas reçu le lien d’activation, il a la possibilité de demander son renvoi. - L’utilisateur ayant oublié son mot de passe peut faire la demande de renouvellement de celui-ci. - Avant toute inscription, il est important de noté que le nom d’utilisateur est public et donc accessible à tous. En effet, le site fait appel à une API qui permet la consultation de plusieurs éléments, dont l’identifiant de l’utilisateur ainsi que le nom qu’il aura choisi au moment de l’inscription. - Cependant, l’adresse e-mail ne figure pas dans les informations accessibles. Seul pawol.nu en à connaissance. - Les utilisateurs peuvent également se connecter en utilisant un compte Twitter. Dans ce cas, c’est l’identifiant de cette plateforme qui sera affiché en cas de contribution. - Il est également possible de se connecter grâce à un compte Google. - En acceptant d’utiliser la fonctionnalité de connexion via Google ou Twitter, vous autorisez pawol.nu à récupérer les informations liées à votre profil, que vous avez transmises à ces plateformes lors de votre inscription. - Un compte GitHub permet désormais de se connecter au site. Nous utilisons uniquement le nom d’utilisateur, ainsi que l’adresse e-mail. - - - - 6.6 Proposition de paroles - - - - Les utilisateurs connectés ont la possibilité de proposer des paroles depuis un espace dédié. - Il se trouve à l’adresse pawol.nu/pwopose. - Les textes soumis ne sont pas directement publiés sur le site. Ils doivent être approuvé par l’équipe de vérification. - Après approbation, il apparaît sur le site avec le nom de l’utilisateur l’ayant proposé. - - - - 7. Notification d’incident - - - - Quels que soient les efforts fournis, aucune méthode de transmission sur Internet et aucune méthode de stockage électronique n’est complètement sûre. - Nous ne pouvons en conséquence pas garantir une sécurité absolue. - Si nous prenions connaissance d’une brèche de la sécurité, nous avertirions les utilisateurs concernés afin qu’ils puissent prendre les mesures appropriées. - Nos procédures de notification d’incident tiennent compte de nos obligations légales, qu’elles se situent au niveau national ou européen. Nous nous engageons à informer pleinement - nos utilisateurs de toutes les questions relevant de la sécurité de leur compte et à leur fournir toutes les informations nécessaires pour les aider à respecter leurs propres - obligations réglementaires en matière de reporting. - - - - Aucune information personnelle de l’utilisateur du site pawol.nu n’est publiée à l’insu de l’utilisateur, échangée, transférée, - cédée ou vendue sur un support quelconque à des tiers. Seule l’hypothèse du rachat de pawol.nu et de ses droits permettrait - la transmission des dites informations à l’éventuecodel acquéreur qui serait à son tour tenu de la même obligation de conservation et de modification des données vis à vis de - l’utilisateur du site pawol.nu. - - - - Sécurité - - - - Pour assurer la sécurité et la confidentialité des Données Personnelles et des Données Personnelles de Santé, pawol.nu utilise des réseaux protégés - par des dispositifs standards tels que par pare-feu, la pseudonymisation, l’encryption et mot de passe. - - - - Lors du traitement des Données Personnelles, pawol.nu prend toutes les mesures raisonnables visant à les protéger contre toute perte, - utilisation détournée, accès non autorisé, divulgation, altération ou destruction. - - - - 8. Liens hypertextes « cookies » et balises (“tags”) internet - - - - Le site pawol.nu contient un certain nombre de liens hypertextes vers d’autres sites, - mis en place avec l’autorisation de pawol.nu. Cependant, pawol.nu n’a pas la possibilité de vérifier - le contenu des sites ainsi visités, et n’assumera en conséquence aucune responsabilité de ce fait. - Sauf si vous décidez de désactiver les cookies, vous acceptez que le site puisse les utiliser. - Vous pouvez à tout moment désactiver ces cookies et ce gratuitement à partir des possibilités de désactivation qui vous sont offertes et rappelées ci-après, - sachant que cela peut réduire ou empêcher l’accessibilité à tout ou partie des Services proposés par le site. - - - - 8.1 « COOKIES » - - - - Un « cookie » est un petit fichier d’information envoyé sur le navigateur de l’Utilisateur et enregistré au sein du terminal de l’Utilisateur (ex : ordinateur, smartphone), - (ci-après « Cookies »). Ce fichier comprend des informations telles que le nom de domaine de l’Utilisateur, le fournisseur d’accès Internet de l’Utilisateur, - le système d’exploitation de l’Utilisateur, ainsi que la date et l’heure d’accès. Les Cookies ne risquent en aucun cas d’endommager le terminal de l’Utilisateur. - - - - pawol.nu est susceptible de traiter les informations de l’Utilisateur concernant sa visite du Site, telles que les pages consultées, - les recherches effectuées. Ces informations permettent à pawol.nu d’améliorer le contenu du Site, de la navigation de l’Utilisateur. - - - - Les Cookies facilitant la navigation et/ou la fourniture des services proposés par le Site, l’Utilisateur peut configurer son navigateur pour qu’il lui permette de décider s’il souhaite - ou non les accepter de manière à ce que des Cookies soient enregistrés dans le terminal ou, au contraire, qu’ils soient rejetés, soit systématiquement, soit selon leur émetteur. - L’Utilisateur peut également configurer son logiciel de navigation de manière à ce que l’acceptation ou le refus des Cookies lui soient proposés ponctuellement, avant qu’un Cookie soit - susceptible d’être enregistré dans son terminal. pawol.nu informe l’Utilisateur que, dans ce cas, il se peut que les fonctionnalités de son logiciel - de navigation ne soient pas toutes disponibles. - - - - Si l’Utilisateur refuse l’enregistrement de Cookies dans son terminal ou son navigateur, ou si l’Utilisateur supprime ceux qui y sont enregistrés, - l’Utilisateur est informé que sa navigation et son expérience sur le Site peuvent être limitées. Cela pourrait également être le cas lorsque pawol.nu ne peut pas reconnaître, - à des fins de compatibilité technique, le type de navigateur utilisé par le terminal, les paramètres de langue et d’affichage ou le pays depuis lequel le terminal semble connecté à Internet. - - - - Le cas échéant, pawol.nu décline toute responsabilité pour les conséquences liées au fonctionnement dégradé du Site - et des services éventuellement proposés par pawol.nu, résultant du refus de Cookies par l’Utilisateur de l’impossibilité - pour pawol.nu d’enregistrer ou de consulter les Cookies nécessaires à leur fonctionnement du fait du choix de l’Utilisateur. - Pour la gestion des Cookies et des choix de l’Utilisateur, la configuration de chaque navigateur est différente. Elle est décrite dans le menu d’aide du navigateur, - qui permettra de savoir de quelle manière l’Utilisateur peut modifier ses souhaits en matière de Cookies. - - - - Enfin, en cliquant sur l’icône dédiée au réseau social Twitter, figurant sur le Site de pawol.nu ou dans son application mobile - et si l’Utilisateur a accepté le dépôt de cookies en poursuivant sa navigation sur le Site Internet ou l’application mobile de pawol.nu, Twitter, - peut également déposer des cookies sur vos terminaux (ordinateur, tablette, téléphone portable). - - - - Ces types de cookies ne sont déposés sur vos terminaux qu’à condition que vous y consentiez, en continuant votre navigation sur le Site Internet ou - l’application mobile de pawol.nu. À tout moment, l’Utilisateur peut néanmoins revenir sur son consentement à ce - que pawol.nu dépose ce type de cookies. - - - - 9. Les dons - - - - Le site dispose d’une page permettant de faire des dons à « ORGANISATION KA INTERNATIONALE » de manière sécurisée. - Pour se faire, il faut se rendre sur la page « soutyen ». L’utilisateur a 2 onglets disponibles : - - - - - - - - - LIBERAPAY / PAYPAL - - - - - - - - CARTE BANCAIRE - - - - - - 9.1 LIBERAPAY / PAYPAL - - - - La plateforme Liberapay est mise à disposition. Elle permet non seulement de personnaliser le montant, mais aussi la récurrence des dons. C’est à dire qu’avec cet outil, l’utilisateur peut effectuer des dons hebdomadaires, mensuels ou annuels. - - - - L’utilisateur peut faire un don en passant par la plateforme PayPal. En cliquant sur le bouton prévu à cet effet, il est redirigé vers la page de don associée à ORGANISATION KA INTERNATIONALE. Il peut ensuite choisir un montant et valider le don en utilisant son compte PayPal ou une carte bancaire s’il n’est pas enregistré. - - - - 9.2 CARTE BANCAIRE - - - - En cliquant sur le bouton « CARTE BANCAIRE », l’utilisateur se voit proposer plusieurs choix. Parmi ces derniers, deux options sont possibles : - - - - - - - Ponctuel (1€, 5€, 10€, 20€, 50€, Montant personnalisé) - - - - - - - - Mensuel (1€ / mois, 5€ / mois, 10€ / mois, 20€ / mois, 50€ / mois) - - - - - - - Les dons peuvent donc être fait une seule fois ou de manière récurrente. - Quelque soit le choix, l’utilisateur est redirigé vers le sous-domaine don.o-k-i.net suivi de l’ID du montant choisit. Cette URL est gérée par la plateforme de paiement sécurisée Stripe. - - Il est important de noter qu’aucune information de paiement n’est stockée sur notre site internet. - - - - 10. Propriété intellectuelle et licence - - - - Le site internet pawol.nu et les éléments qui y sont accessibles - (textes, images, graphismes, logos, vidéos, icônes, sons, etc.) sont, sauf mention contraire, - mis à disposition sous la licence GNU Affero General Public License Version 3 (AGPL-3.0). Cette licence garantit aux utilisateurs les libertés suivantes : - - - - - - - - Liberté d’exécuter le programme pour tous les usages, - - - - - - - - Liberté d’étudier le fonctionnement du programme et de l’adapter à vos besoins, - - - - - - - - Liberté de redistribuer des copies du programme, - - - - - - - - Liberté d’améliorer le programme et de publier vos modifications. - - - - - Conformément aux exigences de la licence AGPL-3.0, si vous redistribuez ou modifiez des éléments du site, - vous devez également fournir le code source complet, incluant vos modifications, sous la même licence. - Vous pouvez consulter les termes détaillés de la licence AGPL-3.0 sur le site officiel de la Free Software Foundation. - - - - 11. Droit applicable et attribution de juridiction - - - - Tout litige en relation avec l’utilisation du site pawol.nu est soumis au droit français. - En dehors des cas où la loi ne le permet pas, il est fait attribution exclusive de juridiction aux tribunaux compétents. - - - - Dernières modifications le 26/06/2026 - - - ) -} diff --git a/components/komante/ekri-komante.js b/components/komante/ekri-komante.js deleted file mode 100644 index 34d8338..0000000 --- a/components/komante/ekri-komante.js +++ /dev/null @@ -1,156 +0,0 @@ -import {useCallback, useEffect, useState, forwardRef} from 'react' -import PropTypes from 'prop-types' -import axios from 'axios' -import { - TextField, - Container, - Button, - Snackbar, - LinearProgress, - Typography -} from '@mui/material' -import MuiAlert from '@mui/material/Alert' - -const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:1337/api' - -const Alert = forwardRef(function Alert(props, ref) { - return -}) -function EkriKomante({session, paroleId, meteEsKomanteOuve}) { - const {jwt, user} = session - const [komante, meteKomante] = useState({kontni: ''}) - const [ere, meteEre] = useState('') - const [sikse, meteSikse] = useState('') - const [chaje, meteChaje] = useState(false) - const [esOuve, meteEsOuve] = useState(false) - - const handleClick = async () => { - meteChaje(true) - const {kontni} = komante - - if (kontni === '') { - meteEre({error: {message: 'Champ obligatoire'}}) - meteChaje(false) - - return - } - - const headers = { - 'content-type': 'application/json', - Authorization: `Bearer ${jwt}` - } - - try { - await axios.post(`${API_URL}/commentaires`, { - data: { - contenu: kontni, - parole: paroleId, - user: { - id: user.id, - username: user.username, - email: user.email - }, - datePublication: new Date() - } - }, { - headers - }) - - meteSikse('Commentaire envoyé avec succès. Il apparaîtra sur le site après validation.') - meteChaje(false) - } catch (error) { - meteEre(error?.response?.data) - meteChaje(false) - } - } - - const handleUpdate = useCallback(update => { - meteKomante({...komante, ...update}) - }, [komante]) - - const handleClose = (event, reason) => { - if (reason === 'clickaway') { - return - } - - meteEsOuve(false) - meteSikse('') - meteEre('') - meteEsKomanteOuve(false) - } - - const handleReset = () => { - meteKomante({kontni: ''}) - } - - useEffect(() => { - if (sikse) { - meteEsOuve(true) - handleReset() - } - }, [sikse]) - - useEffect(() => { - if (ere) { - meteEsOuve(true) - } - }, [ere]) - - return ( - -
- handleUpdate({kontni: event.target.value})} - /> - -
- - {chaje && } -
- {sikse && ( - - - {sikse} - - - )} - {ere && ( - - - Une erreur s’est produite : {ere?.error?.message} - - - )} -
- ) -} - -EkriKomante.propTypes = { - session: PropTypes.object.isRequired, - paroleId: PropTypes.number.isRequired, - meteEsKomanteOuve: PropTypes.func.isRequired -} - -export default EkriKomante - diff --git a/components/komante/komante-list.js b/components/komante/komante-list.js deleted file mode 100644 index f1ad97a..0000000 --- a/components/komante/komante-list.js +++ /dev/null @@ -1,67 +0,0 @@ -import PropTypes from 'prop-types' -import {format} from 'date-fns' -import {fr} from 'date-fns/locale' -import {styled} from '@mui/material/styles' - -import { - Typography, - Divider, - List, - ListItemText -} from '@mui/material' - -import {formatJsonString} from '../../lib/utils/format' - -const PREFIX = 'komante-list' - -const classes = { - root: `${PREFIX}-root`, - inline: `${PREFIX}-inline` -} - -const StyledList = styled(List)(( - { - theme - } -) => ({ - [`&.${classes.root}`]: { - width: '100%', - maxWidth: '36ch', - backgroundColor: theme.palette.background.paper - }, - - [`& .${classes.inline}`]: { - display: 'inline' - } -})) - -export default function KomanteList({commentaires}) { - return ( - - {commentaires.map(({id, user, contenu, datePublication}) => ( -
- - {user.username} - - } - /> - - {format(new Date(datePublication), 'Pp', {locale: fr})} - - } - /> - -
- ))} -
- ) -} - -KomanteList.propTypes = { - commentaires: PropTypes.array.isRequired -} diff --git a/components/komante/vwe-komante.js b/components/komante/vwe-komante.js deleted file mode 100644 index 89fd593..0000000 --- a/components/komante/vwe-komante.js +++ /dev/null @@ -1,136 +0,0 @@ -import {useState, useEffect, useRef} from 'react' -import {styled} from '@mui/material/styles' -import PropTypes from 'prop-types' -import {useSession} from 'next-auth/react' - -import { - Dialog, - DialogTitle, - DialogContent, - DialogActions, - Button, - Typography, - Badge -} from '@mui/material' -import {useRouter} from 'next/navigation' -import Koneksyon from '../sesyon/koneksyon' -import KomanteList from './komante-list' -import EkriKomante from './ekri-komante' - -const PREFIX = 'vwe-komante' - -const classes = { - tooltip: `${PREFIX}-tooltip`, - margin: `${PREFIX}-margin`, - extendedIcon: `${PREFIX}-extendedIcon` -} - -const Root = styled('div')(( - { - theme - } -) => ({ - [`& .${classes.margin}`]: { - margin: theme.spacing(1) - }, - - [`& .${classes.extendedIcon}`]: { - marginRight: theme.spacing(1) - } -})) - -export default function VweKomante({commentaires, parole, paroleId}) { - const [esOuve, meteEsOuve] = useState(false) - const [esKoneksyonOuve, meteEsKoneksyonOuve] = useState(false) - const [esKomenteOuve, meteEsKomanteOuve] = useState(false) - const {data: session} = useSession() - const router = useRouter() - - const handleClick = () => { - meteEsOuve(true) - } - - const handleClose = () => { - meteEsOuve(false) - } - - const descriptionElementRef = useRef(null) - useEffect(() => { - if (esOuve) { - const {current: descriptionElement} = descriptionElementRef - if (descriptionElement !== null) { - descriptionElement.focus() - } - } - }, [esOuve]) - - return ( - - - - - - Commentaires - - - {commentaires.length > 0 ? ( - - ) : ( - - Aucun commentaire - - )} - - - - {session && session.user && !esKomenteOuve && ( - - )} - {!session && !esKoneksyonOuve && ( - - )} - {!session && esKoneksyonOuve && ( - - )} - - {!session && esKoneksyonOuve && ( - - )} - {session && session.user && esKomenteOuve && ( - <> - - - - )} - - - ) -} - -VweKomante.propTypes = { - commentaires: PropTypes.array, - parole: PropTypes.object.isRequired, - paroleId: PropTypes.number.isRequired -} diff --git a/components/password/new-password.js b/components/password/new-password.js deleted file mode 100644 index a1783e5..0000000 --- a/components/password/new-password.js +++ /dev/null @@ -1,202 +0,0 @@ -import {useState, forwardRef} from 'react' -import PropTypes from 'prop-types' -import axios from 'axios' -import {useRouter} from 'next/navigation' - -import {FormControl, Snackbar, IconButton, Button, Input, InputAdornment, InputLabel, Box, Container, Typography, LinearProgress} from '@mui/material' -import MuiAlert from '@mui/material/Alert' -import Visibility from '@mui/icons-material/Visibility' -import VisibilityOff from '@mui/icons-material/VisibilityOff' -import Link from '@mui/material/Link' - -const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:1337' - -const Alert = forwardRef(function Alert(props, ref) { - return -}) - -export default function NewPassword({code}) { - const router = useRouter() - const [showPassword, setShowPassword] = useState('') - const [showPasswordConfirmation, setShowPasswordConfirmation] = useState('') - const [password, setPassword] = useState('') - const [passwordConfirmation, setPasswordConfirmation] = useState('') - const [loading, setLoading] = useState(false) - const [error, setError] = useState('') - const [open, setOpen] = useState(true) - const [passwordSuccess, setPasswordSuccess] = useState(false) - - const resetForm = () => { - setPassword('') - setPasswordConfirmation('') - } - - const changePassword = async () => { - setLoading(true) - try { - await axios.post(`${API_URL}/auth/reset-password`, { - code, - password, - passwordConfirmation - }) - setLoading(false) - setPasswordSuccess(true) - setTimeout(() => { - router.push('/pwopose') - }, 10_000) - } catch { - setOpen(true) - setError('Une erreur s’est produite. Veuillez réessayer ultérieurement') - } - } - - const handleMouseDownPassword = event => { - event.preventDefault() - } - - const handleMouseDownPasswordConfirmation = event => { - event.preventDefault() - } - - const handleKeyUpPassword = event => { - if (event.keyCode === 13) { - handleClick() - } - } - - const handleKeyUpPasswordConfirmation = event => { - if (event.keyCode === 13) { - handleClick() - } - } - - const handleClick = async () => { - if (password !== passwordConfirmation) { - setOpen(true) - setError('Les 2 mots de passe de correspondent pas') - return - } - - if (password.length < 6) { - setOpen(true) - setError('Le mot de passe est trop court, 6 caratères minimum') - return - } - - await changePassword() - setLoading(false) - resetForm() - } - - const handleClose = (event, reason) => { - if (reason === 'clickaway') { - return - } - - setOpen(false) - setError('') - } - - return ( - - - Nouveau mot de passe - - Mot de passe - - setShowPassword(!showPassword)} - onMouseDown={handleMouseDownPassword} - > - {showPassword ? : } - - - } - onChange={event => setPassword(event.target.value)} - onKeyUp={handleKeyUpPassword} - /> - - - Vérification du mot de passe - - setShowPasswordConfirmation(!showPassword)} - onMouseDown={handleMouseDownPasswordConfirmation} - > - {showPasswordConfirmation ? : } - - - } - onChange={event => setPasswordConfirmation(event.target.value)} - onKeyUp={handleKeyUpPasswordConfirmation} - /> - - - - - - {loading && } - - {error && ( - - {error} - - )} - - {passwordSuccess && ( - - Votre changement de mot de passe a été pris en compte. Vous serez redirigé vers la page de connexion. Cliquez ici si vous n’êtes pas redirigé vers la page de connexion - - )} - - ) -} - -NewPassword.propTypes = { - code: PropTypes.string.isRequired -} diff --git a/components/password/reset-dialog.js b/components/password/reset-dialog.js deleted file mode 100644 index 1e64005..0000000 --- a/components/password/reset-dialog.js +++ /dev/null @@ -1,88 +0,0 @@ -import {useState} from 'react' -import PropTypes from 'prop-types' -import Button from '@mui/material/Button' -import TextField from '@mui/material/TextField' -import Dialog from '@mui/material/Dialog' -import DialogActions from '@mui/material/DialogActions' -import DialogContent from '@mui/material/DialogContent' -import DialogContentText from '@mui/material/DialogContentText' -import DialogTitle from '@mui/material/DialogTitle' - -import {validateEmail} from '../../lib/utils/emails' -import {jwennUserEpiEmail, passwordRequest} from '../../lib/oki-api' - -export default function ResetDialog({lyen, title, activation, content, open, setOpen, setLoading, setError, setSuccess}) { - const [email, setEmail] = useState('') - - const forgotPasswordRequest = async () => { - setLoading(true) - try { - await passwordRequest(lyen, email) - - if (activation) { - const user = await jwennUserEpiEmail(email) - localStorage.setItem('user-id', user?.id) - } - - setLoading(false) - setSuccess(true) - } catch { - setError('Une erreur s’est produite. Veuillez réessayer ultérieurement') - setLoading(false) - } - } - - const resetFrom = () => { - setEmail('') - } - - const handleClick = async () => { - forgotPasswordRequest() - setOpen(false) - resetFrom() - } - - const handleClose = () => { - setOpen(false) - } - - return ( -
- - {title} - - - {content} - - setEmail(event.target.value)} - /> - - - - - - -
- ) -} - -ResetDialog.propTypes = { - lyen: PropTypes.string.isRequired, - title: PropTypes.string.isRequired, - activation: PropTypes.bool, - content: PropTypes.string.isRequired, - open: PropTypes.bool.isRequired, - setOpen: PropTypes.func.isRequired, - setLoading: PropTypes.func.isRequired, - setError: PropTypes.func.isRequired, - setSuccess: PropTypes.func.isRequired, -} diff --git a/components/password/reset-password.js b/components/password/reset-password.js deleted file mode 100644 index 6a1908a..0000000 --- a/components/password/reset-password.js +++ /dev/null @@ -1,75 +0,0 @@ -import {useState, forwardRef} from 'react' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' -import Box from '@mui/material/Box' -import Snackbar from '@mui/material/Snackbar' -import {LinearProgress} from '@mui/material' -import MuiAlert from '@mui/material/Alert' -import ResetDialog from './reset-dialog' - -const Alert = forwardRef(function Alert(props, ref) { - return -}) - -export default function ResetPassword() { - const [open, setOpen] = useState(false) - const [error, setError] = useState(false) - const [loading, setLoading] = useState(false) - const [success, setSuccess] = useState(false) - - const handleClose = (event, reason) => { - if (reason === 'clickaway') { - return - } - - setError('') - setSuccess(false) - } - - return ( - <> - - - - {loading && } - {error && ( - - {error} - - )} - {success && ( - - Email envoyé avec succès. Vous pouvez changer votre mot de passe via le lien qui vous a été envoyé. - - )} - - - ) -} diff --git a/components/pwopose.js b/components/pwopose.js deleted file mode 100644 index 6bf2d9c..0000000 --- a/components/pwopose.js +++ /dev/null @@ -1,113 +0,0 @@ -'use client' - -import {useState, useEffect, forwardRef} from 'react' -import PropTypes from 'prop-types' -import {useSession} from 'next-auth/react' -import MuiAlert from '@mui/material/Alert' -import Snackbar from '@mui/material/Snackbar' -import Box from '@mui/material/Box' - -import Koneksyon from '../../components/sesyon/koneksyon' -import Dekoneksyon from '../../components/sesyon/dekoneksyon' -import EkriTeks from '../../components/soumet/ekri-teks' -import Footer from '../../components/footer' - -import {jwennUserEpiToken, jwennUserEpiUsername} from '../../lib/oki-api' -import NewPassword from '../../components/password/new-password' -import ChwaTeks from '../../components/soumet/chwa-teks' - -const Alert = forwardRef(function Alert(props, ref) { - return -}) - -export default function Pwopose({code}) { - const {data: session} = useSession() - const [localUsername, setLocalUsername] = useState(null) - const [username, setUsername] = useState(null) - const [open, setOpen] = useState(true) - const [selectedTeks, setSelectedTeks] = useState(null) - const [canAutoTranslate, setCanAutoTranslate] = useState(false) - - const handleClose = (event, reason) => { - if (reason === 'clickaway') { - return - } - - setOpen(false) - } - - useEffect(() => { - if (session?.jwt) { - const getUser = async token => { - const user = await jwennUserEpiToken(token) - setCanAutoTranslate(user.canAutoTranslate) - } - - getUser(session.jwt) - } - }) - - useEffect(() => { - if (localStorage.getItem('username')) { - const username = localStorage.getItem('username') - setLocalUsername(username) - } - }, []) - - useEffect(() => { - if (localUsername) { - const getUser = async username => { - const user = await jwennUserEpiUsername(username) - setUsername(user?.username) - } - - getUser(localUsername) - } - }, [localUsername]) - - useEffect(() => { - if (username && localStorage.getItem('username')) { - localStorage.removeItem('username') - } - }, [username]) - - return ( - - - {!session && !code && ( - - )} - - {!session && code && ( - - )} - {session && session.user && ( - <> - - - - - )} - {session && !session.user && ( - - )} - {username && ( - - Bonjour {username}, votre compte a été activé avec succès. Vous pouvez vous connecter. - - )} - -