dbourdette / fun-reco

0 stars 0 forks source link

Sécuriser les pages d'administration #25

Closed dbourdette closed 12 years ago

dbourdette commented 12 years ago

Toutes les pages permettant de modifier les données doivent être protégées par login / pass

Le plugin spring security est la référence pour les applications web spring / grails.

Il faut regarder a faire fonctionner les tests Geb.

boutayna commented 12 years ago

t'as apporté des modifications en oubliant de changer le nom des packages sur Config.groovy, et celà a fait qu'après authentification avec "admin" ça ne passe pas ! j'espère que celà régle le problème des tests d'integration même si je ne vois toujours pas le rapport ! je vais essayer de voir cela demain !

aprestaux commented 12 years ago

Effectivement, depuis que le Config.groovy a été corrigé il n'y a plus les erreurs concernant les dépendances de Spring. Concernant les tests d'intégration, mon erreur n'avait rien à voir (je n'avais pas lancé la base mongoDB), autant pour moi.

boutayna commented 12 years ago

Les tests marchent mais je ne comprend pas pourquoi cela tourne même si je précise un username ou un password erroné !?

dbourdette commented 12 years ago

Quelques petites choses a corriger avant tout :

boutayna commented 12 years ago

Les tests passent pour n'import quel user ou password! je n'arrive pas à comprendre pourquoi ?

dbourdette commented 12 years ago

Si je lance l'appli (grails run-app) et que je vais sur http://localhost:8080/api/profile/1, je retombe sur le formulaire de login. Je n'ai pas le popup système lié au login via auth basic.

Cela vient de grails.plugins.springsecurity.filterChain.chainMap. Les règles ne peuvent pas comprendre $facebookId. J'ai corrigé et simplifié les règles

grails.plugins.springsecurity.filterChain.chainMap = [
    '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter',
    '/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter'
]

Ensuite, si je change l'url dans ActionPage pour une url incorrecte, le test passe encore. J'imagine qu'il y a un problème avec le test.

Les services REST renvoient du JSON. Du coup je pense que le pattern des pages Geb n'est pas bon ici. Une utilisation brute est plus simple car on va lire le contenu et le lire avec un JsonSlurper.

...

Un peu plus tard

...

C'est la galère de vouloir faire de l'auth basic avec Geb. Pour les test de l'api REST, Geb n'apporte rien. Alors faisons plutôt du groovy simple.

J'ai fait un premier test dans ProfileRestControllerIntegrationTests

def http = new HTTPBuilder('http://localhost:8080')
http.auth.basic 'admin', 'admin'

def json = http.get(path: '/api/profile/1', contentType: ContentType.JSON)

assert json.email == 'jdoo@mail.com'

Mais il passe pas.

Et alors là, j'avoue, j'ai galéré un peu. Le soucis venait du Bootstrap.groovy qui vire la base pour les tests. Donc pendant les tests, il n'y avait rien en base : /

J'ai changé le Bootstrap.groovy, vider la base ne me semble pas une bonne idée à ce stade.

Et la ca passe.

Je vous laisse faire quelques tests supplémentaires pour les Profiles et les autres controllers.

boutayna commented 12 years ago

Le test ne passe pas chez moi et j'ignore pourquoi !! Voici l'erreur qu'il me donne:

Failure:  testGetProfile(com.github.dbourdette.rest.ProfileRestControllerIntegrationTests)
    groovyx.net.http.HttpResponseException: Unauthorized
      at groovyx.net.http.HTTPBuilder.defaultFailureHandler(HTTPBuilder.java:636)
      at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:492)
      at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:278)
      at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:248)
      at com.github.dbourdette.rest.ProfileRestControllerIntegrationTests.testGetProfile(ProfileRestControllerIntegrationTests.groovy:11)
dbourdette commented 12 years ago

HttpResponseException: Unauthorized -> c'est une 401, le login / mdp sont refusés

dbourdette commented 12 years ago

En local :

Et ca passe

| Running Grails application

Configuring Spring Security Core ...
... finished configuring Spring Security Core
| Server running. Browse to http://localhost:8080/
| Completed 1 functional test, 0 failed in 1695ms
| Server stopped
| Tests PASSED - view reports in /Users/bourdette/projects-git/fun-reco/target/test-reports

Avez vous bien mis à jour votre projet ?

boutayna commented 12 years ago

J'ai bien fait un git pull pour votre dernier commit , le login /pass sont bon, je pense pas que c'est les identifiants qui posent problème, je pense que c'est plutôt la base ! Que voulez vous dire par supprimer la base fun-reco-test ?

dbourdette commented 12 years ago

J'utilise une interface graphique pour le faire (mongohub)

C'est aussi ce qui était dans le boostrap avant.

new Mongo().getDB("fun-reco-test").dropDatabase();
boutayna commented 12 years ago

Alors si on laisse cette ligne sur le bootstrap cela doit normalement marcher !? je suis pas sure d'avoir bien compris comment ça se passe au niveau de la base !

dbourdette commented 12 years ago

Si on laisse cette ligne, ca supprime toute la base, pas simplement les users. Donc si on a besoin de garder la base dans un certain état ca peut être embêtant. Par exemple si il y a des actions ou des profils qu'il ne faut pas supprimer. A ce stade, je ne sais pas ce qu'il vaut mieux faire. Peut être ce sera la bonne solution.

Le principe du bootstrap, c'est qu'il s'exécute avant l'exécution de l'appli. Il ne faut donc vider la base que dans le cas des tests. Puis la remplir de nouveau avec les bonnes données.

boutayna commented 12 years ago

D'accord ! Bon voilà j'ai supprimé la base manuellement et maintenant le test passe :) Merci !