mailman.cloud.codelutin.com
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Observe-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2013 -----
  • December
  • November
  • October
  • September
observe-commits@list.forge.codelutin.com

  • 7199 discussions
[Git][ultreiaio/ird-observe][develop-7.x] [jgitflow-maven-plugin]updating poms for 7.6.6-SNAPSHOT development[skip ci]
by Tony CHEMIT 10 Aug '20

10 Aug '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 77ed3cc9 by Tony Chemit at 2020-08-10T13:45:06+02:00 [jgitflow-maven-plugin]updating poms for 7.6.6-SNAPSHOT development[skip ci] - - - - - 22 changed files: - client-configuration/pom.xml - client-core/pom.xml - client-runner/pom.xml - common-dto/pom.xml - common-persistence/pom.xml - common-service/pom.xml - common-validation/pom.xml - dto/pom.xml - observe-i18n/pom.xml - observe/pom.xml - persistence/pom.xml - pom.xml - server-configuration/pom.xml - server-core/pom.xml - server-runner/pom.xml - services-client/pom.xml - services-local/pom.xml - services/pom.xml - templates/pom.xml - test/pom.xml - toolbox-maven-plugin/pom.xml - validation/pom.xml Changes: ===================================== client-configuration/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>client-configuration</artifactId> ===================================== client-core/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>client-core</artifactId> ===================================== client-runner/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>client-runner</artifactId> ===================================== common-dto/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== common-persistence/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== common-service/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== common-validation/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== dto/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>dto</artifactId> ===================================== observe-i18n/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>observe-i18n</artifactId> ===================================== observe/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>observe</artifactId> ===================================== persistence/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>persistence</artifactId> ===================================== pom.xml ===================================== @@ -29,7 +29,7 @@ <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> <packaging>pom</packaging> <name>ObServe :: Pom</name> ===================================== server-configuration/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>server-configuration</artifactId> @@ -118,7 +118,7 @@ <dependency> <groupId>fr.ird.observe</groupId> <artifactId>services</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> <scope>compile</scope> </dependency> ===================================== server-core/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>server-core</artifactId> ===================================== server-runner/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>server-runner</artifactId> ===================================== services-client/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>services-client</artifactId> ===================================== services-local/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>services-local</artifactId> ===================================== services/pom.xml ===================================== @@ -25,7 +25,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>services</artifactId> ===================================== templates/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== test/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>test</artifactId> ===================================== toolbox-maven-plugin/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <groupId>fr.ird.observe.toolkit</groupId> ===================================== validation/pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> - <version>7.6.5-SNAPSHOT</version> + <version>7.6.6-SNAPSHOT</version> </parent> <artifactId>validation</artifactId> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/77ed3cc91f3950bb433b6ed55… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/77ed3cc91f3950bb433b6ed55… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe] Pushed new branch release/7.6.5
by Tony CHEMIT 10 Aug '20

10 Aug '20
Tony CHEMIT pushed new branch release/7.6.5 at ultreiaio / ird-observe -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/tree/release/7.6.5 You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] update changelog [skip ci]
by Tony CHEMIT 10 Aug '20

10 Aug '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: ca6d5d00 by Tony Chemit at 2020-08-10T13:41:48+02:00 update changelog [skip ci] - - - - - 1 changed file: - CHANGELOG.md Changes: ===================================== CHANGELOG.md ===================================== @@ -1,7 +1,7 @@ # ObServe changelog * Author [Tony Chemit](mailto:dev@tchemit.fr) - * Last generated at 2020-08-05 19:08. + * Last generated at 2020-08-10 13:41. ## Version [8.0.0-RC-8](https://gitlab.com/ultreiaio/ird-observe/-/milestones/167) @@ -9,15 +9,24 @@ ### Issues + * [[Anomalie 513]](https://gitlab.com/ultreiaio/ird-observe/-/issues/513) **Deux soucis sur les requêtes de synthèse** (Thanks to Pascal Cauquil) (Reported by Tony CHEMIT) + * [[Anomalie 538]](https://gitlab.com/ultreiaio/ird-observe/-/issues/538) **[REFERENTIEL] Clé étrangère manquante sur le champ vessel.fleetcountry** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Anomalie 540]](https://gitlab.com/ultreiaio/ird-observe/-/issues/540) **Corruption de la base à la ré ouverture** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Anomalie 670]](https://gitlab.com/ultreiaio/ird-observe/-/issues/670) **Exception en saisie LL** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Anomalie 731]](https://gitlab.com/ultreiaio/ird-observe/-/issues/731) **Bug lors de la saisie d&#39;une calée PS** (Thanks to Pascal Cauquil) (Reported by Tony CHEMIT) + * [[Anomalie 736]](https://gitlab.com/ultreiaio/ird-observe/-/issues/736) **Petits défauts d&#39;affichage dans l&#39;arbre** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Anomalie 738]](https://gitlab.com/ultreiaio/ird-observe/-/issues/738) **[LL] bug association panier avec TDR** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros) * [[Anomalie 1496]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1496) **[PS] Les listes de sélection d&#39;espèces cible sont vides, celle des espèces accessoires partielle** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1497]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1497) **Disfonctionnement de raccourcis** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1498]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1498) **[PS] Souci de validation sur form Marée** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1499]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1499) **Un programme est marqué ouvert mais pas de marée ouverte à l&#39;intérieur** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1500]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1500) **Réouverture simplifiée d&#39;item : l&#39;arbre de navigation est mal rafraîchit** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1501]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1501) **Imperfections sur création de nouveau FOB en utilisant les préconfigurations** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1503]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1503) **Enregistrement de FOB impossible si une balise est présente** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1504]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1504) **FOB enregistré non disponible immédiatement dans la popup de sélection d&#39;objet prédéfini** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1505]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1505) **Enregistrement de FOB -&gt; chagement d&#39;onglet intempestif** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) - * [[Anomalie 1506]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1506) **Classement Calée / FOBs dans l&#39;arbre** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1506]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1506) **Classement Calée / FOBs dans l&#39;arbre** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil) + * [[Anomalie 1508]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1508) **[PS] Calée / estimation banc** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil) * [[Anomalie 1515]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1515) **Racourcis non fonctinonels** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1516]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1516) **L&#39;ajout d&#39;une caractéristique d&#39;équipement plante** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1518]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1518) **MAJ+TAB fonctionne moyennement sur 8 RC7, comme sur 7.6.2** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) @@ -33,15 +42,25 @@ * [[Anomalie 1550]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1550) **La modification de la sélection du composant comboBox ne fonctionne pas** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) * [[Anomalie 1555]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1555) **Amélioration de l&#39;onglet Sauvegarde (Actions longues)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) * [[Anomalie 1570]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1570) **Les actions de changement d&#39;ordre sur les tableaux ordonné ne fonctionnent plus** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Evolution 294]](https://gitlab.com/ultreiaio/ird-observe/-/issues/294) **Mise à jour du référentiel Stomach fullness** (Thanks to Pascal Cauquil) (Reported by Tony CHEMIT) + * [[Evolution 628]](https://gitlab.com/ultreiaio/ird-observe/-/issues/628) **Plusieurs marées sur les tableaux de synthèse** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Evolution 645]](https://gitlab.com/ultreiaio/ird-observe/-/issues/645) **[A PRECISER] Consignation de la méthode de mesure** (Thanks to Pascal Cauquil) (Reported by Tony CHEMIT) * [[Evolution 1509]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1509) **Libellés référentiels** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1510]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1510) **Ajout d&#39;une méthode de mesure de poids par défaut sur Estimations du banc** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1517]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1517) **Carte** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1519]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1519) **LL Observations / Echec d&#39;enregistrement d&#39;une capture** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1520]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1520) **LL Observations / Capture / déprédation : libellé** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1521]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1521) **Renommer un onglet sur form Marée LL** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1522]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1522) **[LL] Form marée / Coche des cases &#39;Données logbook&#39; et &#39;Données d&#39;observation&#39;** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1523]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1523) **[LL][Logbooks] Besoin de pouvoir mettre les horodatages à NULL** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1525]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1525) **[LL][Logbook] opération de pêche / Numéro : réaction inatendue à la touche &#39;d&#39;** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1526]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1526) **[LL][Logbook] opération de pêche / libellé** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1531]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1531) **[LL][LOGBOOKS] Activité : champ vitesse vent superflu** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1534]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1534) **[LL][Logbooks] Form Opération de pêche / Capture : champs actifs en fonction du mode de saisie** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1535]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1535) **[LL][Echantillon logbook] Cosmétique échantillon dans l&#39;arbre** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1536]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1536) **[LL][Echantillon logbook] Cosmétique** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1537]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1537) **[LL] Appairement des activités : cosmétique** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 1538]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1538) **[LL] Appairement des activités : assistant** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil) * [[Evolution 1551]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1551) **[LL Logbook Activity] Revoir finement l&#39;activité observée associée à une activité logbook** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) * [[Evolution 1554]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1554) **[WEB SERVICE] Se passer du paramètre observeweb.host** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1557]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1557) **Ajouter une option pour ne pas afficher la légende dans la carte** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) @@ -285,13 +304,16 @@ ## Version [7.6.5](https://gitlab.com/ultreiaio/ird-observe/-/milestones/169) -**Closed at 2020-08-05.** +**Closed at 2020-08-10.** ### Issues + * [[Anomalie 927]](https://gitlab.com/ultreiaio/ird-observe/-/issues/927) **Penser à tester le comportement des large objects sur la V7** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 942]](https://gitlab.com/ultreiaio/ird-observe/-/issues/942) **Plantage base en sortie de l&#39;outil de traduction** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1584]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1584) **[UI] Correction des libellés des tables de référence du schéma observe.longline dans Observe** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros) * [[Anomalie 1585]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1585) **Listes à choix multiples et mode permissif sur référentiels désactivés** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Anomalie 1587]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1587) **traductions manquantes (UI validation)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Evolution 887]](https://gitlab.com/ultreiaio/ird-observe/-/issues/887) **Ajouter une fonction de suppression en masse de marées/routes/activités** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1583]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1583) **[PS] Contrôle de la saisie des espèces dans faune accessoire par systèmes observés (cas requin baleine)** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros) ## Version [7.6.4](https://gitlab.com/ultreiaio/ird-observe/-/milestones/166) View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ca6d5d00cb27abf9768b3ded3… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/ca6d5d00cb27abf9768b3ded3… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Penser à tester le comportement des large objects sur la V7 - Closes #927
by Tony CHEMIT 10 Aug '20

10 Aug '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 128560c7 by Tony Chemit at 2020-08-10T13:32:06+02:00 Penser à tester le comportement des large objects sur la V7 - Closes #927 - - - - - 5 changed files: - common-persistence/pom.xml - + common-persistence/src/main/java/fr/ird/observe/entities/BlobIdsIterator.java - persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java - services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java Changes: ===================================== common-persistence/pom.xml ===================================== @@ -47,6 +47,10 @@ <groupId>org.nuiton.topia</groupId> <artifactId>topia-persistence</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all.topia</groupId> + <artifactId>persistence</artifactId> + </dependency> <dependency> <groupId>io.ultreia.java4all.topia</groupId> <artifactId>service-migration</artifactId> ===================================== common-persistence/src/main/java/fr/ird/observe/entities/BlobIdsIterator.java ===================================== @@ -0,0 +1,148 @@ +package fr.ird.observe.entities; + +/*- + * #%L + * ObServe Toolkit :: Common Persistence + * %% + * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.nuiton.topia.persistence.TopiaApplicationContext; +import org.nuiton.topia.persistence.jdbc.JdbcPostgresHelper; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Iterator; +import java.util.Objects; + +public class BlobIdsIterator implements Iterator<String>, Closeable { + + private final TopiaMetadataModel model; + + private final Path cachePath; + private final JdbcPostgresHelper jdbcHelper; + private FileIterator iterator; + + public BlobIdsIterator(TopiaMetadataModel model, Path cachePath, TopiaApplicationContext<?> applicationContext) { + this.model = Objects.requireNonNull(model); + this.cachePath = Objects.requireNonNull(cachePath); + this.jdbcHelper = new JdbcPostgresHelper(Objects.requireNonNull(applicationContext).getConfiguration()); + } + + @Override + public boolean hasNext() { + return iterator().hasNext(); + } + + @Override + public String next() { + return iterator().next(); + } + + public FileIterator iterator() { + if (iterator == null) { + iterator = new FileIterator(cachePath, model, jdbcHelper); + } + return iterator; + } + + @Override + public void close() throws IOException { + if (iterator != null) { + iterator.close(); + iterator = null; + } + } + + private static class FileIterator implements Iterator<String>, Closeable { + private final Iterator<String> iterator; + private final BufferedReader bufferedReader; + + public FileIterator(Path cachePath, TopiaMetadataModel model, JdbcPostgresHelper jdbcHelper) { + if (Files.notExists(cachePath)) { + try { + createCache(jdbcHelper, model, cachePath); + } catch (IOException e) { + throw new IllegalStateException("can't create cache at " + cachePath, e); + } + } + try { + bufferedReader = Files.newBufferedReader(Objects.requireNonNull(cachePath)); + } catch (IOException e) { + throw new IllegalStateException("can't create reader on " + cachePath, e); + } + iterator = bufferedReader.lines().iterator(); + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public String next() { + return iterator.next(); + } + + @Override + public void close() throws IOException { + bufferedReader.close(); + } + + private void createCache(JdbcPostgresHelper jdbcHelper, TopiaMetadataModel model, Path cachePath) throws IOException { + if (Files.notExists(cachePath.getParent())) { + Files.createDirectory(cachePath.getParent()); + } + try (BufferedWriter writer = Files.newBufferedWriter(cachePath)) { + for (TopiaMetadataEntity metadataEntity : model) { + if (metadataEntity.withBlob()) { + for (String blobProperty : metadataEntity.getBlobProperties()) { + fillCache(jdbcHelper, metadataEntity.getDbSchemaName(), metadataEntity.getDbTableName(), metadataEntity.getDbColumnName(blobProperty), writer); + } + } + } + writer.flush(); + } + } + + private void fillCache(JdbcPostgresHelper jdbcHelper, String dbSchemaName, String dbTableName, String dbColumnName, BufferedWriter writer) { + String sql = String.format("SELECT %1$s FROM %2$s.%3$s WHERE %1$s IS NOT NULL ORDER BY topiaId ASC", dbColumnName, dbSchemaName, dbTableName); + jdbcHelper.consume(c -> { + try (PreparedStatement preparedStatement = c.prepareStatement(sql)) { + try (ResultSet resultSet = preparedStatement.executeQuery()) { + while (resultSet.next()) { + writer.write(resultSet.getString(1)); + writer.newLine(); + } + } + } catch (SQLException | IOException e) { + throw new IllegalStateException(e); + } + }); + } + } +} ===================================== persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -43,6 +43,7 @@ import org.nuiton.topia.service.script.table.TopiaSqlTable; import org.nuiton.topia.service.script.table.TopiaSqlTables; import org.nuiton.topia.service.script.table.TopiaSqlTablesFactory; +import java.nio.file.Path; import java.util.EnumSet; import java.util.LinkedHashSet; import java.util.Objects; @@ -330,6 +331,10 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } + public BlobIdsIterator newBlobIdsIterator(Path blobIdsPath) { + return new BlobIdsIterator(getMetadataModel(), blobIdsPath, this); + } + private static class TripReplicateTablesPredicate implements TopiaSqlTablesFactory.TopiaSqlTablesPredicate { private final Set<TopiaMetadataEntity> done = new LinkedHashSet<>(); ===================================== services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java ===================================== @@ -25,9 +25,9 @@ package fr.ird.observe.services.local; import com.google.common.collect.ImmutableSet; import fr.ird.observe.dto.ObserveDbRole; import fr.ird.observe.dto.db.ObserveDbUserDto; +import fr.ird.observe.entities.BlobIdsIterator; import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.ObserveTopiaApplicationContext; -import fr.ird.observe.entities.ObserveTopiaConfiguration; import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -49,6 +49,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -62,7 +63,11 @@ public class ObserveSecurityHelper { public static final String OBSERVE_SEINE_COMMON_SCHEMA_NAME = "ps_common"; private static final Function<String, String> ESCAPE_STRING = input -> "\"" + input + "\""; private static final String REVOKE_ON_TABLE_ALL_PATTERN = "REVOKE ALL ON %s.%s FROM %s CASCADE;"; + private static final String REVOKE_ON_LARGE_OBJECT_ALL_PATTERN = "REVOKE ALL ON LARGE OBJECT %s FROM %s CASCADE;"; private static final String SET_ON_TABLE_OWNER_PATTERN = "ALTER TABLE %s.%s OWNER TO %s;"; + private static final String SET_ON_LARGE_OBJECT_OWNER_PATTERN = "ALTER LARGE OBJECT %s OWNER TO %s;"; + private static final String GRANT_ON_LARGE_OBJECT_READ_PATTERN = "GRANT SELECT ON LARGE OBJECT %s TO %s;"; + private static final String GRANT_ON_LARGE_OBJECT_ALL_PATTERN = "GRANT ALL ON LARGE OBJECT %s TO %s;"; private static final String GRANT_ON_TABLE_READ_PATTERN = "GRANT SELECT ON %s.%s TO %s;"; private static final String GRANT_ON_TABLE_ALL_PATTERN = "GRANT ALL ON %s.%s TO %s;"; private static final String GRANT_ON_FUNCTION_PATTERN = "GRANT EXECUTE ON FUNCTION %s TO %s;"; @@ -82,11 +87,13 @@ public class ObserveSecurityHelper { private static final Logger log = LogManager.getLogger(ObserveSecurityHelper.class); private final JdbcPostgresHelper jdbcHelper; private final Path temporaryDirectory; + private final ObserveTopiaApplicationContext applicationContext; - public ObserveSecurityHelper(ObserveTopiaConfiguration jdbcConfiguration) { - this.jdbcHelper = new JdbcPostgresHelper(jdbcConfiguration); - this.temporaryDirectory = jdbcConfiguration.getTemporaryDirectory(); + public ObserveSecurityHelper(ObserveTopiaApplicationContext applicationContext) { + this.applicationContext = Objects.requireNonNull(applicationContext); + this.jdbcHelper = new JdbcPostgresHelper(applicationContext.getConfiguration()); + this.temporaryDirectory = applicationContext.getConfiguration().getTemporaryDirectory(); } public void applySecurity(Set<ObserveDbUserDto> users) { @@ -99,10 +106,11 @@ public class ObserveSecurityHelper { } catch (IOException e) { throw new IllegalStateException("Can't create temporary path", e); } + Path blobIdsPath = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql",".blob-ids")); try { try (SqlScriptWriter sqlScriptWriter = SqlScriptWriter.of(scriptPath)) { - createSecurityScript(users, sqlScriptWriter); + createSecurityScript(users, sqlScriptWriter, blobIdsPath); log.info(String.format("Generate security script %d statements(s) at %s", sqlScriptWriter.getStatementCount(), scriptPath)); } jdbcHelper.consume(SqlScriptConsumer.of(scriptPath)); @@ -111,7 +119,7 @@ public class ObserveSecurityHelper { } } - private void createSecurityScript(Set<ObserveDbUserDto> users, SqlScriptWriter sqlScriptWriter) { + private void createSecurityScript(Set<ObserveDbUserDto> users, SqlScriptWriter sqlScriptWriter, Path blobIdsPath) throws IOException { Set<String> schemas = ImmutableSet.<String>builder().add(SCHEMA_PUBLIC).addAll(ObserveTopiaApplicationContext.newModelSupport().getMetadataModel().getSchemaNames()).build(); @@ -151,6 +159,7 @@ public class ObserveSecurityHelper { Set<String> referentialEscapedNames = escapedNames(referentialNames); Set<String> unusedEscapedNames = escapedNames(unusedNames); + BlobIdsIterator blobIdsIterator = applicationContext.newBlobIdsIterator(blobIdsPath); // suppression de tous les droits { @@ -165,6 +174,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(REVOKE_ON_TABLE_ALL_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(REVOKE_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, schemas, roles); addOnFunctionForRole(REVOKE_ON_FUNCTIONS_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(REVOKE_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } @@ -172,6 +182,8 @@ public class ObserveSecurityHelper { addOnTablesForRole(SET_ON_TABLE_OWNER_PATTERN, sqlScriptWriter, tables, administratorEscapedName); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, schemas, administratorEscapedName); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, administratorEscapedName); + addOnLargeObjectForRole(SET_ON_LARGE_OBJECT_OWNER_PATTERN, sqlScriptWriter, blobIdsIterator, administratorEscapedName); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, administratorEscapedName); // ajout administrateurs if (!technicalEscapedNames.isEmpty()) { @@ -179,6 +191,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(GRANT_ON_TABLE_ALL_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, schemas, roles); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } // ajout utilisateur @@ -187,6 +200,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(GRANT_ON_TABLE_READ_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, schemas, roles); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_READ_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } // ajout referentiel @@ -273,6 +287,18 @@ public class ObserveSecurityHelper { } } + private void addOnLargeObjectForRole(String pattern, SqlScriptWriter builder, BlobIdsIterator blobIdsIterator, String role) throws IOException { + try { + while (blobIdsIterator.hasNext()) { + String blobId = blobIdsIterator.next(); + builder.writeSql(String.format(pattern, blobId, role)); + } + } finally { + blobIdsIterator.close(); + } + + } + private void addOnFunctionForRole(String pattern, SqlScriptWriter builder, Set<String> functions, String role) { for (String t : functions) { builder.writeSql(String.format(pattern, t, role)); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java ===================================== @@ -516,10 +516,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS // pas de securité pour les bases autres que postgresql if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaPG) { ObserveDataSourceConfigurationTopiaPG sourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfiguration; - ObserveTopiaConfiguration topiaConfiguration; - try (ObserveTopiaApplicationContext optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(sourceConfiguration)) { - topiaConfiguration = optionalTopiaApplicationContext.getConfiguration(); - new ObserveSecurityHelper(topiaConfiguration).applySecurity(users); + try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(sourceConfiguration)) { + new ObserveSecurityHelper(topiaApplicationContext).applySecurity(users); } } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/128560c791b0d7baae937372c… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/128560c791b0d7baae937372c… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop-7.x] Penser à tester le comportement des large objects sur la V7 - Closes #927
by Tony CHEMIT 06 Aug '20

06 Aug '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: 2d50c6fb by Tony Chemit at 2020-08-06T21:24:45+02:00 Penser à tester le comportement des large objects sur la V7 - Closes #927 - - - - - 5 changed files: - common-persistence/pom.xml - + common-persistence/src/main/java/fr/ird/observe/entities/BlobIdsIterator.java - persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java - services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java - services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java Changes: ===================================== common-persistence/pom.xml ===================================== @@ -47,6 +47,10 @@ <groupId>org.nuiton.topia</groupId> <artifactId>topia-persistence</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all.topia</groupId> + <artifactId>persistence</artifactId> + </dependency> <dependency> <groupId>io.ultreia.java4all.topia</groupId> <artifactId>service-migration</artifactId> ===================================== common-persistence/src/main/java/fr/ird/observe/entities/BlobIdsIterator.java ===================================== @@ -0,0 +1,148 @@ +package fr.ird.observe.entities; + +/*- + * #%L + * ObServe Toolkit :: Common Persistence + * %% + * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.nuiton.topia.persistence.TopiaApplicationContext; +import org.nuiton.topia.persistence.jdbc.JdbcPostgresHelper; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Iterator; +import java.util.Objects; + +public class BlobIdsIterator implements Iterator<String>, Closeable { + + private final TopiaMetadataModel model; + + private final Path cachePath; + private final JdbcPostgresHelper jdbcHelper; + private FileIterator iterator; + + public BlobIdsIterator(TopiaMetadataModel model, Path cachePath, TopiaApplicationContext<?> applicationContext) { + this.model = Objects.requireNonNull(model); + this.cachePath = Objects.requireNonNull(cachePath); + this.jdbcHelper = new JdbcPostgresHelper(Objects.requireNonNull(applicationContext).getConfiguration()); + } + + @Override + public boolean hasNext() { + return iterator().hasNext(); + } + + @Override + public String next() { + return iterator().next(); + } + + public FileIterator iterator() { + if (iterator == null) { + iterator = new FileIterator(cachePath, model, jdbcHelper); + } + return iterator; + } + + @Override + public void close() throws IOException { + if (iterator != null) { + iterator.close(); + iterator = null; + } + } + + private static class FileIterator implements Iterator<String>, Closeable { + private final Iterator<String> iterator; + private final BufferedReader bufferedReader; + + public FileIterator(Path cachePath, TopiaMetadataModel model, JdbcPostgresHelper jdbcHelper) { + if (Files.notExists(cachePath)) { + try { + createCache(jdbcHelper, model, cachePath); + } catch (IOException e) { + throw new IllegalStateException("can't create cache at " + cachePath, e); + } + } + try { + bufferedReader = Files.newBufferedReader(Objects.requireNonNull(cachePath)); + } catch (IOException e) { + throw new IllegalStateException("can't create reader on " + cachePath, e); + } + iterator = bufferedReader.lines().iterator(); + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public String next() { + return iterator.next(); + } + + @Override + public void close() throws IOException { + bufferedReader.close(); + } + + private void createCache(JdbcPostgresHelper jdbcHelper, TopiaMetadataModel model, Path cachePath) throws IOException { + if (Files.notExists(cachePath.getParent())) { + Files.createDirectory(cachePath.getParent()); + } + try (BufferedWriter writer = Files.newBufferedWriter(cachePath)) { + for (TopiaMetadataEntity metadataEntity : model) { + if (metadataEntity.withBlob()) { + for (String blobProperty : metadataEntity.getBlobProperties()) { + fillCache(jdbcHelper, metadataEntity.getDbSchemaName(), metadataEntity.getDbTableName(), metadataEntity.getDbColumnName(blobProperty), writer); + } + } + } + writer.flush(); + } + } + + private void fillCache(JdbcPostgresHelper jdbcHelper, String dbSchemaName, String dbTableName, String dbColumnName, BufferedWriter writer) { + String sql = String.format("SELECT %1$s FROM %2$s.%3$s WHERE %1$s IS NOT NULL ORDER BY topiaId ASC", dbColumnName, dbSchemaName, dbTableName); + jdbcHelper.consume(c -> { + try (PreparedStatement preparedStatement = c.prepareStatement(sql)) { + try (ResultSet resultSet = preparedStatement.executeQuery()) { + while (resultSet.next()) { + writer.write(resultSet.getString(1)); + writer.newLine(); + } + } + } catch (SQLException | IOException e) { + throw new IllegalStateException(e); + } + }); + } + } +} ===================================== persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java ===================================== @@ -23,6 +23,7 @@ package fr.ird.observe.persistence; */ import com.google.common.collect.ImmutableSet; +import fr.ird.observe.entities.BlobIdsIterator; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -46,6 +47,7 @@ import org.nuiton.topia.service.script.table.TopiaSqlTable; import org.nuiton.topia.service.script.table.TopiaSqlTables; import org.nuiton.topia.service.script.table.TopiaSqlTablesFactory; +import java.nio.file.Path; import java.util.EnumSet; import java.util.LinkedHashSet; import java.util.List; @@ -335,6 +337,9 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return referentialTables = topiaSqlTablesFactory.newReplicateEntityTables(new TripReplicateTablesPredicate(), entityEnum); } + public BlobIdsIterator newBlobIdsIterator(Path blobIdsPath) { + return new BlobIdsIterator(getMetadataModel(), blobIdsPath, this); + } private static class TripReplicateTablesPredicate implements TopiaSqlTablesFactory.TopiaSqlTablesPredicate { ===================================== services-local/src/main/java/fr/ird/observe/services/local/ObserveSecurityHelper.java ===================================== @@ -26,8 +26,9 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import fr.ird.observe.dto.ObserveDbRole; import fr.ird.observe.dto.db.ObserveDbUserDto; +import fr.ird.observe.entities.BlobIdsIterator; import fr.ird.observe.persistence.Entities; -import fr.ird.observe.persistence.ObserveTopiaConfiguration; +import fr.ird.observe.persistence.ObserveTopiaApplicationContext; import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -49,6 +50,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -63,7 +65,11 @@ public class ObserveSecurityHelper { private static final String OBSERVE_LONGLINE_SCHEMA_NAME = "observe_longline"; private static final Function<String, String> ESCAPE_STRING = input -> "\"" + input + "\""; private static final String REVOKE_ON_TABLE_ALL_PATTERN = "REVOKE ALL ON %s.%s FROM %s CASCADE;"; + private static final String REVOKE_ON_LARGE_OBJECT_ALL_PATTERN = "REVOKE ALL ON LARGE OBJECT %s FROM %s CASCADE;"; private static final String SET_ON_TABLE_OWNER_PATTERN = "ALTER TABLE %s.%s OWNER TO %s;"; + private static final String SET_ON_LARGE_OBJECT_OWNER_PATTERN = "ALTER LARGE OBJECT %s OWNER TO %s;"; + private static final String GRANT_ON_LARGE_OBJECT_READ_PATTERN = "GRANT SELECT ON LARGE OBJECT %s TO %s;"; + private static final String GRANT_ON_LARGE_OBJECT_ALL_PATTERN = "GRANT ALL ON LARGE OBJECT %s TO %s;"; private static final String GRANT_ON_TABLE_READ_PATTERN = "GRANT SELECT ON %s.%s TO %s;"; private static final String GRANT_ON_TABLE_ALL_PATTERN = "GRANT ALL ON %s.%s TO %s;"; private static final String GRANT_ON_FUNCTION_PATTERN = "GRANT EXECUTE ON FUNCTION %s TO %s;"; @@ -74,24 +80,26 @@ public class ObserveSecurityHelper { TMSVersionHibernateDao.TABLE_NAME, TMSVersionHibernateDao.LEGACY_TABLE_NAME); private static final Set<String> FUNCTION_NAMES_PREFIXS = ImmutableSet.of("ST_MakePoint", - "ST_SetSRID", - "sync_", - "tr_sync", - "ot_enhanced_school_type", - "observe_"); + "ST_SetSRID", + "sync_", + "tr_sync", + "ot_enhanced_school_type", + "observe_"); private static final String SCHEMA_PUBLIC = "public"; private static final Set<String> SCHEMAS = ImmutableSet.of(SCHEMA_PUBLIC, - OBSERVE_COMMON_SCHEMA_NAME, - OBSERVE_SEINE_SCHEMA_NAME, - OBSERVE_LONGLINE_SCHEMA_NAME); + OBSERVE_COMMON_SCHEMA_NAME, + OBSERVE_SEINE_SCHEMA_NAME, + OBSERVE_LONGLINE_SCHEMA_NAME); private static final Logger log = LogManager.getLogger(ObserveSecurityHelper.class); private final JdbcPostgresHelper jdbcHelper; private final Path temporaryDirectory; + private final ObserveTopiaApplicationContext applicationContext; - public ObserveSecurityHelper(ObserveTopiaConfiguration jdbcConfiguration) { - this.jdbcHelper = new JdbcPostgresHelper(jdbcConfiguration); - this.temporaryDirectory = jdbcConfiguration.getTemporaryDirectory(); + public ObserveSecurityHelper(ObserveTopiaApplicationContext applicationContext) { + this.applicationContext = Objects.requireNonNull(applicationContext); + this.jdbcHelper = new JdbcPostgresHelper(applicationContext.getConfiguration()); + this.temporaryDirectory = applicationContext.getConfiguration().getTemporaryDirectory(); } public void applySecurity(Set<ObserveDbUserDto> users) { @@ -104,10 +112,11 @@ public class ObserveSecurityHelper { } catch (IOException e) { throw new IllegalStateException("Can't create temporary path", e); } + Path blobIdsPath = scriptPath.getParent().resolve(scriptPath.toFile().getName().replace(".sql",".blob-ids")); try { try (SqlScriptWriter sqlScriptWriter = SqlScriptWriter.of(scriptPath)) { - createSecurityScript(users, sqlScriptWriter); + createSecurityScript(users, sqlScriptWriter, blobIdsPath); log.info(String.format("Generate security script %d statements(s) at %s", sqlScriptWriter.getStatementCount(), scriptPath)); } jdbcHelper.consume(SqlScriptConsumer.of(scriptPath)); @@ -116,7 +125,7 @@ public class ObserveSecurityHelper { } } - private void createSecurityScript(Set<ObserveDbUserDto> users, SqlScriptWriter sqlScriptWriter) { + private void createSecurityScript(Set<ObserveDbUserDto> users, SqlScriptWriter sqlScriptWriter, Path blobIdsPath) throws IOException { List<Pair<String, String>> tables = jdbcHelper.getTables(SCHEMAS, EXTRA_TABLES); @@ -154,6 +163,7 @@ public class ObserveSecurityHelper { Set<String> referentialEscapedNames = escapedNames(referentialNames); Set<String> unusedEscapedNames = escapedNames(unusedNames); + BlobIdsIterator blobIdsIterator = applicationContext.newBlobIdsIterator(blobIdsPath); // suppression de tous les droits { @@ -168,6 +178,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(REVOKE_ON_TABLE_ALL_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(REVOKE_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, SCHEMAS, roles); addOnFunctionForRole(REVOKE_ON_FUNCTIONS_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(REVOKE_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } @@ -175,6 +186,8 @@ public class ObserveSecurityHelper { addOnTablesForRole(SET_ON_TABLE_OWNER_PATTERN, sqlScriptWriter, tables, administratorEscapedName); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, SCHEMAS, administratorEscapedName); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, administratorEscapedName); + addOnLargeObjectForRole(SET_ON_LARGE_OBJECT_OWNER_PATTERN, sqlScriptWriter, blobIdsIterator, administratorEscapedName); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, administratorEscapedName); // ajout administrateurs if (!technicalEscapedNames.isEmpty()) { @@ -182,6 +195,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(GRANT_ON_TABLE_ALL_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, SCHEMAS, roles); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_ALL_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } // ajout utilisateur @@ -190,6 +204,7 @@ public class ObserveSecurityHelper { addOnTablesForRole(GRANT_ON_TABLE_READ_PATTERN, sqlScriptWriter, tables, roles); addOnSchemaForRole(GRANT_ON_SCHEMA_ALL_PATTERN, sqlScriptWriter, SCHEMAS, roles); addOnSchemaForRole(GRANT_ON_FUNCTION_PATTERN, sqlScriptWriter, allPostgisFunctions, roles); + addOnLargeObjectForRole(GRANT_ON_LARGE_OBJECT_READ_PATTERN, sqlScriptWriter, blobIdsIterator, roles); } // ajout referentiel @@ -272,6 +287,18 @@ public class ObserveSecurityHelper { } } + private void addOnLargeObjectForRole(String pattern, SqlScriptWriter builder, BlobIdsIterator blobIdsIterator, String role) throws IOException { + try { + while (blobIdsIterator.hasNext()) { + String blobId = blobIdsIterator.next(); + builder.writeSql(String.format(pattern, blobId, role)); + } + } finally { + blobIdsIterator.close(); + } + + } + private void addOnFunctionForRole(String pattern, SqlScriptWriter builder, Set<String> functions, String role) { for (String t : functions) { builder.writeSql(String.format(pattern, t, role)); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java ===================================== @@ -582,11 +582,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS ObserveDataSourceConfigurationTopiaPG sourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfiguration; - ObserveTopiaConfiguration topiaConfiguration; - try (ObserveTopiaApplicationContext optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(sourceConfiguration)) { - - topiaConfiguration = optionalTopiaApplicationContext.getConfiguration(); - new ObserveSecurityHelper(topiaConfiguration).applySecurity(users); + try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(sourceConfiguration)) { + new ObserveSecurityHelper(topiaApplicationContext).applySecurity(users); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/2d50c6fbb9a495004f77010dc… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/2d50c6fbb9a495004f77010dc… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] update pom and changelog
by Tony CHEMIT 05 Aug '20

05 Aug '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b5415148 by Tony Chemit at 2020-08-05T19:17:50+02:00 update pom and changelog - - - - - 2 changed files: - CHANGELOG.md - pom.xml Changes: ===================================== CHANGELOG.md ===================================== The diff for this file was not included because it is too large. ===================================== pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2020.42</version> + <version>2020.43</version> </parent> <groupId>fr.ird.observe</groupId> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b54151489b66bb43d64b50dd7… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b54151489b66bb43d64b50dd7… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop-7.x] update pom (but stalled jaxx)
by Tony CHEMIT 05 Aug '20

05 Aug '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: dd7d2368 by Tony Chemit at 2020-08-05T19:17:12+02:00 update pom (but stalled jaxx) - - - - - 1 changed file: - pom.xml Changes: ===================================== pom.xml ===================================== @@ -24,7 +24,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2020.39</version> + <version>2020.43</version> </parent> <groupId>fr.ird.observe</groupId> @@ -167,6 +167,7 @@ <lib.version.java4all.eugene>3.0-alpha-26</lib.version.java4all.eugene> <lib.version.java4all.topia>1.1.17</lib.version.java4all.topia> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> + <lib.version.java4all.jaxx>3.0-alpha-75</lib.version.java4all.jaxx> <!--<lib.version.java4all.http>1.0.13</lib.version.java4all.http>--> <!--<lib.version.java4all.config>1.0.3</lib.version.java4all.config>--> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/dd7d2368a0d4a85b521682cab… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/dd7d2368a0d4a85b521682cab… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] update changelog [skip ci]
by Tony CHEMIT 05 Aug '20

05 Aug '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 81cb7d87 by Tony Chemit at 2020-08-05T18:02:24+02:00 update changelog [skip ci] - - - - - 1 changed file: - CHANGELOG.md Changes: ===================================== CHANGELOG.md ===================================== @@ -1,7 +1,7 @@ # ObServe changelog * Author [Tony Chemit](mailto:dev@tchemit.fr) - * Last generated at 2020-07-09 08:01. + * Last generated at 2020-08-05 18:01. ## Version [8.0.0-RC-8](https://gitlab.com/ultreiaio/ird-observe/milestones/167) @@ -283,6 +283,17 @@ * [[Evolution 1181]](https://gitlab.com/ultreiaio/ird-observe/issues/1181) **Ajouter un champ vessel.lloydid** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) * [[Evolution 1183]](https://gitlab.com/ultreiaio/ird-observe/issues/1183) **[V8][DATA MODEL] Transformer Vessel.fleetcountry (int4) en topiaid** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) +## Version [7.6.5](https://gitlab.com/ultreiaio/ird-observe/milestones/169) + +**Closed at 2020-08-05.** + + +### Issues + * [[Anomalie 1584]](https://gitlab.com/ultreiaio/ird-observe/issues/1584) **[UI] Correction des libellés des tables de référence du schéma observe.longline dans Observe** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros) + * [[Anomalie 1585]](https://gitlab.com/ultreiaio/ird-observe/issues/1585) **Listes à choix multiples et mode permissif sur référentiels désactivés** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1587]](https://gitlab.com/ultreiaio/ird-observe/issues/1587) **traductions manquantes (UI validation)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Evolution 1583]](https://gitlab.com/ultreiaio/ird-observe/issues/1583) **[PS] Contrôle de la saisie des espèces dans faune accessoire par systèmes observés (cas requin baleine)** (Thanks to Tony CHEMIT) (Reported by Philippe Sabarros) + ## Version [7.6.4](https://gitlab.com/ultreiaio/ird-observe/milestones/166) **Closed at 2020-07-08.** View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/81cb7d872fcddddc8f0f3d12e… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/81cb7d872fcddddc8f0f3d12e… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] traductions manquantes (UI validation) - Closes #1587
by Tony CHEMIT 05 Aug '20

05 Aug '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 7d4b7ecb by Tony Chemit at 2020-08-05T17:46:12+02:00 traductions manquantes (UI validation) - Closes #1587 - - - - - 5 changed files: - dto/src/main/i18n/getters/java.getter - dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties Changes: ===================================== dto/src/main/i18n/getters/java.getter ===================================== @@ -64,3 +64,7 @@ observe.ui.tree.referential.ll.landing observe.ui.tree.referential.ll.obs observe.ui.tree.referential.ps.common observe.ui.tree.referential.ps.obs +validator.scope.error.label +validator.scope.fatal.label +validator.scope.info.label +validator.scope.warning.label ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java ===================================== @@ -50,6 +50,10 @@ import static io.ultreia.java4all.i18n.I18n.t; public class ObserveI18nLabelsBuilder extends BeanPropertyI18nKeyProducerSupport { static { + n("validator.scope.error.label"); + n("validator.scope.fatal.label"); + n("validator.scope.info.label"); + n("validator.scope.warning.label"); n("observe.Id.comment"); n("observe.Id.species"); n("observe.Id.country"); ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -2669,3 +2669,7 @@ observeweb.sessionExpirationDelay.description=Session expiration delay (in minut observeweb.sessionMaximumSize.description=Session maximum size observeweb.temporaryDirectory.description=Path to temporary directory observeweb.usersConfigurationFile.description=Path to users configuration file +validator.scope.error.label=Error +validator.scope.fatal.label=Fatal error +validator.scope.info.label=Information +validator.scope.warning.label=Warning ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -2669,3 +2669,7 @@ observeweb.sessionExpirationDelay.description=Duración máxima de una sesión ( observeweb.sessionMaximumSize.description=Tamaño máximo de la sesión observeweb.temporaryDirectory.description=Ubicación del directorio temporal observeweb.usersConfigurationFile.description=Ubicación del archivo de configuración de los usuarios +validator.scope.error.label=Error +validator.scope.fatal.label=Fatal Error +validator.scope.info.label=Información +validator.scope.warning.label=Advertencias ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -2669,3 +2669,7 @@ observeweb.sessionExpirationDelay.description=Temps maximum d'une session (en mi observeweb.sessionMaximumSize.description=Taille maximum de session observeweb.temporaryDirectory.description=Chemin vers le répertoire temporaire observeweb.usersConfigurationFile.description=Chemin vers le fichier de configuration des utilisateurs +validator.scope.error.label=Erreur +validator.scope.fatal.label=Erreur fatale +validator.scope.info.label=Information +validator.scope.warning.label=Avertissement View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/7d4b7ecbaffe8eecd780a42bf… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/7d4b7ecbaffe8eecd780a42bf… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop-7.x] traductions manquantes (UI validation) - See #1587
by Tony CHEMIT 05 Aug '20

05 Aug '20
Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: bce23550 by Tony Chemit at 2020-08-05T17:29:56+02:00 traductions manquantes (UI validation) - See #1587 - - - - - 5 changed files: - dto/src/main/i18n/getters/java.getter - dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties Changes: ===================================== dto/src/main/i18n/getters/java.getter ===================================== @@ -55,3 +55,7 @@ observe.type.reference.longline observe.type.reference.seine observe.validation.activity.speed.bound observe.validation.activity.speed.bound.inter +validator.scope.error.label +validator.scope.fatal.label +validator.scope.info.label +validator.scope.warning.label ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java ===================================== @@ -50,6 +50,10 @@ import static io.ultreia.java4all.i18n.I18n.n; public class ObserveI18nLabelsBuilder extends BeanPropertyI18nKeyProducerSupport { static { + n("validator.scope.error.label"); + n("validator.scope.fatal.label"); + n("validator.scope.info.label"); + n("validator.scope.warning.label"); n("observe.common.IdDto.comment"); n("observe.common.IdDto.species"); n("observe.common.IdDto.country"); ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -2348,3 +2348,7 @@ observeweb.sessionExpirationDelay.description=Session expiration deplay (in minu observeweb.sessionMaximumSize.description=Session maximum size observeweb.temporaryDirectory.description=Path to temporary directory observeweb.usersConfigurationFile.description=Path to users configuration file +validator.scope.error.label=Error +validator.scope.fatal.label=Fatal error +validator.scope.info.label=Information +validator.scope.warning.label=Warning ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -2348,3 +2348,7 @@ observeweb.sessionExpirationDelay.description=Duración máxima de una sesión ( observeweb.sessionMaximumSize.description=Tamaño máximo de la sesión observeweb.temporaryDirectory.description=Ubicación del directorio temporal observeweb.usersConfigurationFile.description=Ubicación del archivo de configuración de los usuarios +validator.scope.error.label=Error +validator.scope.fatal.label=Fatal Error +validator.scope.info.label=Información +validator.scope.warning.label=Advertencias ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -2348,3 +2348,7 @@ observeweb.sessionExpirationDelay.description=Temps maximum d'une session (en mi observeweb.sessionMaximumSize.description=Taille maximum de session observeweb.temporaryDirectory.description=Chemin vers le répertoire temporaire observeweb.usersConfigurationFile.description=Chemin vers le fichier de configuration des utilisateurs +validator.scope.error.label=Erreur +validator.scope.fatal.label=Erreur fatale +validator.scope.info.label=Information +validator.scope.warning.label=Avertissement View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bce23550e61f7d38116369910… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/bce23550e61f7d38116369910… You're receiving this email because of your account on gitlab.com.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • ...
  • 720
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.