# 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