This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 6a95d6a45f468778fcaf8733f9f16601280c59a0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 22 11:30:35 2016 +0200 Amélioration de la documentation et du démarrage de l'application web --- .../ObserveWebApplicationConfiguration.java | 100 +++++++-------------- .../src/main/resources/defaultDatabases.yml | 16 ++++ .../src/main/resources/defaultUsers.yml | 13 +++ .../web/ObserveWebApplicationListener.java | 9 +- src/site/rst/administration-web.rst.vm | 52 ++++++----- 5 files changed, 102 insertions(+), 88 deletions(-) diff --git a/application-web-configuration/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java b/application-web-configuration/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java index fb92759..a7ddd87 100644 --- a/application-web-configuration/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java +++ b/application-web-configuration/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java @@ -78,9 +78,9 @@ public class ObserveWebApplicationConfiguration extends GeneratedObserveWebAppli throw new ObserveWebApplicationConfigurationInitException("could not parse configuration", e); } - File applicationBaseDirectory = getBaseDirectory(); + File baseDirectory = getBaseDirectory(); - if (isDevMode() && !applicationBaseDirectory.exists()) { + if (isDevMode() && !baseDirectory.exists()) { // on utilise un répertoire temporaire comme basedir if (log.isInfoEnabled()) { @@ -93,25 +93,24 @@ public class ObserveWebApplicationConfiguration extends GeneratedObserveWebAppli Files.createDirectories(tmpdir); } - applicationBaseDirectory = Files.createTempDirectory("observeweb").toFile(); + baseDirectory = Files.createTempDirectory("observeweb").toFile(); } catch (IOException e) { throw new ObserveWebApplicationConfigurationInitException("could not create temporary basedir", e); } if (log.isInfoEnabled()) { - log.info("Dev mode detected, use temporary basedir: " + applicationBaseDirectory); + log.info("Dev mode detected, use temporary basedir: " + baseDirectory); } - get().setOption(ObserveWebApplicationConfigurationOption.BASE_DIRECTORY.getKey(), applicationBaseDirectory.getAbsolutePath()); + get().setOption(ObserveWebApplicationConfigurationOption.BASE_DIRECTORY.getKey(), baseDirectory.getAbsolutePath()); } if (log.isInfoEnabled()) { - String message = getConfigurationDescription(); - log.info(message); + log.info(getConfigurationDescription()); } try { - createDirectory(applicationBaseDirectory); + createDirectory(baseDirectory); } catch (IOException e) { - throw new ObserveWebApplicationConfigurationInitException("Impossible de créer le répertoire principal de l'application (" + applicationBaseDirectory + ")", e); + throw new ObserveWebApplicationConfigurationInitException("Impossible de créer le répertoire principal de l'application (" + baseDirectory + ")", e); } File temporaryDirectory = getTemporaryDirectory(); try { @@ -121,45 +120,33 @@ public class ObserveWebApplicationConfiguration extends GeneratedObserveWebAppli } File databasesConfigurationFile = getDatabasesConfigurationFile(); - File usersConfigurationFile = getUsersConfigurationFile(); - - if (isDevMode()) { - - if (!databasesConfigurationFile.exists()) { - - // Generate a default databasesConfigurationFile - if (log.isInfoEnabled()) { - log.info("Generate a default databasesConfigurationFile for tests purpose only:\n" + DEV_DATABASES_CONFIGURATION_FILE_CONTENT); - } + if (!databasesConfigurationFile.exists()) { - try { - Files.write(databasesConfigurationFile.toPath(), DEV_DATABASES_CONFIGURATION_FILE_CONTENT.getBytes()); - } catch (IOException e) { - throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de configuration des bases pour développement", e); - } + if (log.isInfoEnabled()) { + log.info("Generate default databases.yml"); } - if (!usersConfigurationFile.exists()) { - - // Generate a default usersConfigurationFile - if (log.isInfoEnabled()) { - log.info("Generate a default usersConfigurationFile for tests purpose only:\n" + DEV_USERS_CONFIGURATION_FILE_CONTENT); - } - try { - Files.write(usersConfigurationFile.toPath(), DEV_USERS_CONFIGURATION_FILE_CONTENT.getBytes()); - } catch (IOException e) { - throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de configuration des utilisateurs pour développement", e); - } + try { + CharSource charSource = Resources.asCharSource(getClass().getResource("/defaultDatabases.yml"), StandardCharsets.UTF_8); + Files.write(databasesConfigurationFile.toPath(), charSource.readLines()); + } catch (IOException e) { + throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de configuration des bases", e); } - - } - - if (!databasesConfigurationFile.exists()) { - throw new ObserveWebApplicationConfigurationInitException("Le fichier de configuration des bases n'existe pas : " + databasesConfigurationFile); } + File usersConfigurationFile = getUsersConfigurationFile(); if (!usersConfigurationFile.exists()) { - throw new ObserveWebApplicationConfigurationInitException("Le fichier de configuration des utilisateurs n'existe pas : " + usersConfigurationFile); + + if (log.isInfoEnabled()) { + log.info("Generate default users.yml"); + } + try { + CharSource charSource = Resources.asCharSource(getClass().getResource("/defaultUsers.yml"), StandardCharsets.UTF_8); + Files.write(usersConfigurationFile.toPath(), charSource.readLines()); + } catch (IOException e) { + throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de configuration des utilisateurs", e); + } + } File log4jConfigurationFile = getLog4jConfigurationFile(); @@ -170,16 +157,20 @@ public class ObserveWebApplicationConfiguration extends GeneratedObserveWebAppli CharSource charSource = Resources.asCharSource(getClass().getResource("/observeweb-log4j.conf"), Charsets.UTF_8); String log4jFileContent = charSource.read(); if (log.isInfoEnabled()) { - log.info("Generate a default log4jConfigurationFile for tests purpose only:\n" + log4jFileContent); + log.info("Generate default log4jConfigurationFile"); } Files.write(log4jConfigurationFile.toPath(), log4jFileContent.getBytes()); } catch (IOException e) { - throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de log4j pour développement", e); + throw new ObserveWebApplicationConfigurationInitException("Impossible de créer un fichier de log4j", e); } } initLog(); + if (log.isInfoEnabled()) { + log.info("Observe web configuration init done."); + } + } public String getConfigurationDescription() { @@ -233,27 +224,4 @@ public class ObserveWebApplicationConfiguration extends GeneratedObserveWebAppli } - private static final String DEV_DATABASES_CONFIGURATION_FILE_CONTENT = - "databases: \n" + - "- name: production\n" + - " defaultDatabase: true\n" + - " roles: \n" + - " - login: admin\n" + - " password: a\n" + - " - login: referentiel\n" + - " password: a\n" + - " url: jdbc:postgresql://localhost:5432/obstuna"; - - private static final String DEV_USERS_CONFIGURATION_FILE_CONTENT = - "users: \n" + - "- login: admin\n" + - " password: a\n" + - " permissions: \n" + - " - database: production\n" + - " role: admin\n" + - "- login: referentiel\n" + - " password: a\n" + - " permissions: \n" + - " - database: production\n" + - " role: referentiel"; } diff --git a/application-web-configuration/src/main/resources/defaultDatabases.yml b/application-web-configuration/src/main/resources/defaultDatabases.yml new file mode 100644 index 0000000..860d1b2 --- /dev/null +++ b/application-web-configuration/src/main/resources/defaultDatabases.yml @@ -0,0 +1,16 @@ +databases: +- name: production + defaultDatabase: true + roles: + - login: technicien + password: tech + - login: referentiel + password: a + url: jdbc:postgresql://localhost:5432/obstuna-production +- name: test + roles: + - login: technicien + password: tech + - login: referentiel + password: a + url: jdbc:postgresql://localhost:5432/obstuna-test \ No newline at end of file diff --git a/application-web-configuration/src/main/resources/defaultUsers.yml b/application-web-configuration/src/main/resources/defaultUsers.yml new file mode 100644 index 0000000..fd88902 --- /dev/null +++ b/application-web-configuration/src/main/resources/defaultUsers.yml @@ -0,0 +1,13 @@ +users: +- login: utilisateur-technicien + password: a + permissions: + - database: production + role: technicien + - database: test + role: technicien +- login: utilisateur-referentiel + password: a + permissions: + - database: production + role: referentiel diff --git a/application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java b/application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java index 93772d5..eaec878 100644 --- a/application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java +++ b/application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java @@ -74,9 +74,11 @@ public class ObserveWebApplicationListener implements WebMotionServerListener { context.addInjector(new ImmutableSetInjector()); context.addConverter(new ObserveDtoConverter(gson), ObserveDbUserDto.class); - context.getServletContext().setAttribute( - ObserveWebApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext); + context.getServletContext().setAttribute(ObserveWebApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext); + if (log.isInfoEnabled()) { + log.info("Initializing " + ObserveWebApplicationListener.class.getName() + " done."); + } } @Override @@ -88,6 +90,9 @@ public class ObserveWebApplicationListener implements WebMotionServerListener { IOUtils.closeQuietly(applicationContext); + if (log.isInfoEnabled()) { + log.info("Destroying " + ObserveWebApplicationListener.class.getName() + " done."); + } } } diff --git a/src/site/rst/administration-web.rst.vm b/src/site/rst/administration-web.rst.vm index 531172d..7b2996e 100644 --- a/src/site/rst/administration-web.rst.vm +++ b/src/site/rst/administration-web.rst.vm @@ -36,7 +36,17 @@ La configuration de l'application web est regroupé dans un seul fichier à plac La configuration de l'application possède des valeurs par défaut pour toutes les options, si vous utiliser ces valeurs par défaut, un minimum de configuration est requise. +Deux options doivent être modifiées : + + - **observeweb.adminApiKey** : la clef à utiliser pour accéder aux services d'administration + - **observeweb.apiUrl** : l'url publique d'accès aux services web + +Consulter la `page des configurations`_ pour connaitre l'ensemble des options de cette configuration. + Par défaut, l'application utilise le répertoire **/var/local/observeweb** pour y stoquer ses données. + +Voici le contenu de ce dossier suite à un premier démarrage : + :: /var/local/observeweb/ @@ -47,17 +57,17 @@ Par défaut, l'application utilise le répertoire **/var/local/observeweb** pour |-- temp # répertoire temporaire `-- users.yml # configuration des utilisateurs -Consulter la `page des configurations`_ pour connaitre l'ensemble des options de cette configuration. +Lors du premier démarrage, l'application génère des fichiers exemples de «*databases.yml*» et «*users.yml*». -Deux options doivent être modifiées : - - - **observeweb.adminApiKey** : la clef de l'API pour accéder aux services d'administrations - - **observeweb.apiUrl** : l'url publique d'accès aux services web +Vous pouvez ensuite les modifier et recharger la configuration à chaud. -Configuration des bases données accessibles par les utilisateurs des services web -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Configuration des bases données +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Le fichier databases.yml liste les bases de données connues par l'application. + +Il s'agit donc ici bien uniquement de configuration de type postgresql. + Par exemple : :: @@ -67,28 +77,29 @@ Par exemple : defaultDatabase: true roles: - login: technicien - password: tech + password: a - login: referentiel - password: ref + password: a url: jdbc:postgresql://localhost:5432/obstuna-production - name: test roles: - login: technicien - password: tech + password: a - login: referentiel - password: ref + password: a url: jdbc:postgresql://localhost:5432/obstuna-test -On décrit ici deux bases «production» (base par défaut) et «test» qui pointent sur les bases postgresql -«obstuna-production» et «obstuna-test». +On décrit ici deux bases «*production*» (base par défaut) et «*test*» qui pointent sur les bases postgresql +«*obstuna-production*» et «*obstuna-test*». + +Sur ces deux bases, on utilise deux utilisateurs (role postgres) «*technicien*» et «*referentiel*». -Sur ces deux bases, on utilise deux utilisateurs (role postgres) «technicien» et «referentiel». +Configuration des utilisateurs de l'application +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Configuration des utilisateurs habilités à consommer les services web -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Le fichier users.yml définit les utilisateurs de l'applications web ainsi que leur niveau de droit (mapping avec les droits des bases de données). -Le fichier users.yml définit les utilisateurs habilités à utiliser les services mis à disposition par l'application web -ainsi que leur niveau de droit (mapping avec les droits des bases de données). Par exemple : +Par exemple : :: @@ -106,8 +117,9 @@ ainsi que leur niveau de droit (mapping avec les droits des bases de données). - database: production role: referentiel -L'utilisateur «utilisateur-technicien» aura le droit d'accéder à la base de production et de test avec le rôle «technicien». -L'utilisateur «utilisateur-referentiel» aura le droit d'accéder à la base de production uniquement avec le rôle «referentiel». +L'utilisateur «*utilisateur-technicien*» aura le droit d'accéder à la base de production et de test avec le rôle «*technicien*». + +L'utilisateur «*utilisateur-referentiel*» aura le droit d'accéder à la base de production uniquement avec le rôle «*referentiel*». Tester l'application ~~~~~~~~~~~~~~~~~~~~ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.