# Notes JHipster back /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/aop/logging/LoggingAspect.java ### Exemples : https://dev.to/adyen/building-an-e-commerce-application-using-java-react-2iln ---- # Pour stripe : Le module déjà préexistant ne peut pas être uitilisé (pas avec react). Du coup on doit faire notre propre page (front + back). Add src/main/java/com/mycompany/myapp/web/rest/PaymentRessource.java line 85 (Stripe.apiKey ="sk_test_xxxxxxxxxxxxxxxxxxxxxxxx") You have to put your public key in src/main/webapp/app/app.module.ts line 45 (NgxStripeModule.forRoot('pk_test_xxxxxxxxxxxxxxxxxxxxxxxx'),) Ressources : https://www.baeldung.com/java-stripe-api https://blog.ippon.fr/2020/12/23/paiement-par-carte-avec-tipsi-stripe-depuis-une-application-react-native/ https://stripe.com/docs/checkout/quickstart On doit commencer par build les dependancies via le fichier *pom.xml* ``` <dependency><groupId>com.stripe</groupId> <artifactId>stripe-java</artifactId><version>{VERSION} </version></dependency> ``` **À vérifier que ce fichier existe bien avec JHipster ou que ce ne soit pas un autre fichier qui gère ça ??** Il y a bien un *pom.xml* /home/mathilde/Documents/ECom/sandbox/pom.xml ### 2eme solution : J'ai ajouté ce fichier /home/mathilde/Documents/ECom/app/src/main/java/fr/polytech/info5/gr1/drive0/web/rest/CheckoutController.java (err de compil) **FRONT**: J'ai ajouté un dossier /home/mathilde/Documents/ECom/app/src/main/webapp/app/entities/paiement Dans ce dossier on créé les mêmes types de fichiers que pour les autres entities : - index.tsx - paiement.tsx - (jai utilisé un .css pour le 1er test ) - reducer.ts et reducer.tsx ??? Est-ce qu'on doit ajouter la route à la main dans index.tsx (index général) ou ça update auto ??? :arrow_right_hook: /home/mathilde/Documents/ECom/app/src/main/webapp/app/entities/index.tsx :arrow_right: j'ai ajouté # User management : ## Problèmes constatés : - les emails de confirmation ne sont pas envoyés (crea de compte, changement mdp, etc) :arrow_lower_right: https://www.jhipster.tech/tips/011_tip_configuring_email_in_jhipster.html J'ai créé un compte outlook pour les no_reply de Drive0 :arrow_down: drive0_no_reply@outlook.com 5EYMqcQ7ijZGg7p J'ai changé src\main\resources\config\application-dev.yml et ajouté ```java= spring: profiles: active: dev mail: host: smtp-mail.outlook.com port: 587 username: drive0_no_reply@outlook.com #Replace this field with your Outlook username. password: ************ #Replace this field with your Outlook password. protocol: smtp tls: true properties.mail.smtp: auth: true starttls.enable: true ssl.trust: smtp-mail.outlook.com [...] __Note__ : If you want to send Email from a Corporate Outlook account then set `host` as the Microsoft Exchange Server of your company, for e.g. `emea.mycompany.com`. Also set `username` as Standard Id of the system provided by the company (Domain/Username) and `password` as your system password. For Corporate Outlook, `username` property in **spring.mail** must match the `from` property in **jhipster.mail**. ``` Avant c'était : ```java= mail: host: localhost port: 25 username: password: ``` J'ai changé **tls: true** /home/mathilde/Documents/ECom/sandbox/src/main/resources/config/application.yml **Ligne 42** Puis ligne 158 : ```java= mail: from: drive0_no_reply@outlook.com #Drive0@localhost ``` Implem du mail Service (ne pas modifier) : /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/service/MailService.java --- - on doit utiliser le compte admin pour activer un nouveau compte créé :arrow_lower_right: Oumaima a trouvé une solution pour enable sans confirmation via email /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/service/UserService.java **Ligne 126** **on laisse avec confirmation de l'usr via email (+ secure)** --- - affecter le nouveau compte créé à l'entité Compte_client dans la BD Je pense qu'il y a qqch à faire ici : /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/web/rest/CompteClientResource.java **Ligne 52** ```createCompteClient()``` Dans /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/service/UserService.java **Ligne 96** insérer la méthode ```createCompteClient()``` ? Je pense pas sinon on aura des pb avec les comptes des préparateurs ?? Ou celle là ```createUser()``` **Besoin de modif dans le front pour avoir un form avec + de champs dès l'inscription** Marche seulement pour les nouveaux comptes ```java newUser.setAdresse(userDTO.getAdresse()); newUser.setTelephone(userDTO.getTelephone()); ``` Marche seulement pour les maj de comptes existant ```java public Optional<AdminUserDTO> updateUser(AdminUserDTO userDTO) public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) ``` https://stackoverflow.com/questions/49343572/jhipster-registering-a-user-with-additional-information?noredirect=1&lq=1 ---- ### **FRONT** ---- - changer le corps de txt du mail en français. Est-ce que Jhipster fait ça tt seul ? /home/mathilde/Documents/ECom/sandbox/src/main/resources/templates/mail/activationEmail.html --- - le btn "register" :arrow_right: le lien ne fait pas de redirection à la page d'accueil ---- - dans les "user settings" il manque certains champs (téléphone, adresse, nom, etc) - quand on se déconnecte on a pas de redirection vers le home page - le form du sign in manque beaucoup de champs pour register un nouveau client ---- ## Security + Rôles : Autoriser tel ou tel rôle à voir tel ou tel contenu : https://blog.ippon.tech/improving-the-access-control-of-a-jhipster-application/ Pour créer un nouveau rôle : https://www.jhipster.tech/tips/025_tip_create_new_authority.html J'ai modifié le fichier /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/security/AuthoritiesConstants.java J'ai ajouté les rôles préparateurs et client : ```java= public static final String CLIENT = "ROLE_CLIENT"; public static final String PREPARATEUR = "ROLE_PREPARATEUR"; ``` et modifié le fichier csv /home/mathilde/Documents/ECom/sandbox/src/main/resources/config/liquibase/data/authority.csv et celui la mais jsp si c'était nécéssaire : /home/mathilde/Documents/ECom/sandbox/target/classes/config/liquibase/data/authority.csv :arrow_right: se fait automatiquement ``` ROLE_CLIENT ROLE_PREPARATEUR ``` On modifie ce fichier pour ajouter les choses visibles ou non par chaque rôle /home/mathilde/Documents/ECom/sandbox/src/main/java/fr/polytech/info5/gr1/drive0/config/SecurityConfiguration.java **Ligne 87** Avant : ```java= .and() //where we can manage what each role can or cannot see .authorizeRequests() .antMatchers("/api/authenticate").permitAll() .antMatchers("/api/register").permitAll() .antMatchers("/api/activate").permitAll() .antMatchers("/api/account/reset-password/init").permitAll() .antMatchers("/api/account/reset-password/finish").permitAll() .antMatchers("/api/admin/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/api/**").authenticated() .antMatchers("/management/health").permitAll() .antMatchers("/management/health/**").permitAll() .antMatchers("/management/info").permitAll() .antMatchers("/management/prometheus").permitAll() .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) //.antMatchers("/management/") ``` **Les paths "/api/...." qui sont en arg sont visibles dans tous les fichiers .java de type *XRessource.java*** **À MODIF. Certaines entités sont bloquées pour les préparateurs et les clients :o:** ```java= .antMatchers("/api/compte-administrateurs").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/api/compte-preparateurs").hasAnyAuthority(AuthoritiesConstants.ADMIN, AuthoritiesConstants.PREPARATEUR) //.antMatchers("/api/compte-preparateurs").hasAuthority(AuthoritiesConstants.PREPARATEUR) //.antMatchers("/api/compte-clients").hasAnyAuthority(AuthoritiesConstants.ADMIN, AuthoritiesConstants.PREPARATEUR) .antMatchers("/api/**").authenticated() ``` J'ai inséré directement les 2 nouveaux rôles dans la BD : ``` INSERT INTO JHI_AUTHORITY VALUES('ROLE_CLIENT'); ``` On peut maintenant modifier les rôles via le dashboard admin. J'ai aussi modifié ce fichier /home/mathilde/Documents/ECom/sandbox/src/main/webapp/app/config/constants.ts ```typescript= export const AUTHORITIES = { ADMIN: 'ROLE_ADMIN', USER: 'ROLE_USER', CLIENT : 'ROLE_CLIENT', PREPARATEUR : 'ROLE_PREPARATEUR' }; ``` Il faut aussi changer le fichier /home/mathilde/Documents/ECom/sandbox/src/main/webapp/app/routes.tsx **AVANT**: ```typescript= const Routes = () => { return ( <div className="view-routes"> <Switch> <ErrorBoundaryRoute path="/login" component={Login} /> <ErrorBoundaryRoute path="/logout" component={Logout} /> <ErrorBoundaryRoute path="/account/register" component={Register} /> <ErrorBoundaryRoute path="/account/activate/:key?" component={Activate} /> <ErrorBoundaryRoute path="/account/reset/request" component={PasswordResetInit} /> <ErrorBoundaryRoute path="/account/reset/finish/:key?" component={PasswordResetFinish} /> <PrivateRoute path="/admin" component={Admin} hasAnyAuthorities={[AUTHORITIES.ADMIN]} /> <PrivateRoute path="/account" component={Account} hasAnyAuthorities={[AUTHORITIES.ADMIN, AUTHORITIES.USER]} /> <ErrorBoundaryRoute path="/" exact component={Home} /> <PrivateRoute path="/" component={Entities} hasAnyAuthorities={[AUTHORITIES.USER]} /> <ErrorBoundaryRoute component={PageNotFound} /> </Switch> </div> ); }; ``` **APRÈS**: ```typescript= const Routes = () => { return ( <div className="view-routes"> <Switch> <ErrorBoundaryRoute path="/login" component={Login} /> <ErrorBoundaryRoute path="/logout" component={Logout} /> <ErrorBoundaryRoute path="/account/register" component={Register} /> <ErrorBoundaryRoute path="/account/activate/:key?" component={Activate} /> <ErrorBoundaryRoute path="/account/reset/request" component={PasswordResetInit} /> <ErrorBoundaryRoute path="/account/reset/finish/:key?" component={PasswordResetFinish} /> <PrivateRoute path="/admin" component={Admin} hasAnyAuthorities={[AUTHORITIES.ADMIN]} /> P <PrivateRoute path="/account" component={Account} hasAnyAuthorities={[AUTHORITIES.ADMIN, AUTHORITIES.USER,AUTHORITIES.PREPARATEUR, AUTHORITIES.CLIENT]} /> <ErrorBoundaryRoute path="/" exact component={Home} /> <PrivateRoute path="/" component={Entities} hasAnyAuthorities={[AUTHORITIES.USER, AUTHORITIES.PREPARATEUR, AUTHORITIES.CLIENT]} /> <ErrorBoundaryRoute component={PageNotFound} /> </Switch> </div> ); }; ``` :warning: est ce qu'on laisse *AUTHORITIES.CLIENT* dans component={Entities} ?? Pour créé un nouveau compte depuis l'interface Admin on a changé le LangKey (plus dynamique maintenant!). /home/mathilde/Documents/ECom/app/src/main/java/fr/polytech/info5/gr1/drive0/service/dto/AdminUserDTO.java **Ligne 133** Pour mettre le role par défaut sur ROLE_CLIENT quand on sign up : /home/mathilde/Documents/ECom/app/src/main/java/fr/polytech/info5/gr1/drive0/service/UserService.java **Ligne 130** Avant ```java= authorityRepository.findById(AuthoritiesConstants.CLIENT).ifPresent(authorities::add); ``` --- # Envoyer un email de confirmation de commande ## Back J'ajoute une nouvelle fonction dans MailServie.java *sendOrderConfirmationMail()*. utiliser cette fct comme **mailService.sendOrderConfirmationMail()** dans la fonction POST du paiement ## Front