Skip to content
Snippets Groups Projects
Commit 9b44e6bc authored by Millicent Billette's avatar Millicent Billette
Browse files

v3.5.3 Fix Dictionary escaping mechanics (rawSerialize + \ is special Char)

parent 747196fd
No related branches found
No related tags found
No related merge requests found
Pipeline #18244 passed with warnings
...@@ -14,6 +14,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -14,6 +14,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
## [Non-publié/Non-Stabilisé] (par [1000i100]) ## [Non-publié/Non-Stabilisé] (par [1000i100])
## [Version 3.5.3] - 2022-12-16 (par [1000i100])
### Corrections
- '\' est désormais considéré comme un caractère spécial
- Les sérialisations internes (rawSerialize) de Dictionary ne reconvertissent plus les caractères spéciaux
## [Version 3.5.2] - 2022-12-16 (par [1000i100]) ## [Version 3.5.2] - 2022-12-16 (par [1000i100])
### Corrections ### Corrections
- Dictionary échappe correctement les caractères spéciaux - Dictionary échappe correctement les caractères spéciaux
...@@ -28,7 +33,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -28,7 +33,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
- dictionary intègre un mécanisme de cache pour détecter les doublons. Il est désactivable au-delà d'1_000_000 pour éviter les crashs et saturation de mémoire. - dictionary intègre un mécanisme de cache pour détecter les doublons. Il est désactivable au-delà d'1_000_000 pour éviter les crashs et saturation de mémoire.
- dictionary-parser gère toutes les syntaxes d'expression régulières qu'utilisaient gsper v2 + des situations plus complexes - dictionary-parser gère toutes les syntaxes d'expression régulières qu'utilisaient gsper v2 + des situations plus complexes
- dictionary-parser permet de distinguer identifiant secret et mot de passe via le séparateur `@@` - dictionary-parser permet de distinguer identifiant secret et mot de passe via le séparateur `@@`
- dictionary-parser permet plusieurs types de déclinaisons : sans accents, accents optionnels, sans majuscule, majuscule optionnelle, tout en majuscule, et des déclinaison type leetSpeak. - dictionary-parser permet plusieurs types de déclinaisons : sans accents, accents optionnels, sans majuscule, majuscule optionnelle, tout en majuscule, et des déclinaisons type leetSpeak.
- dictionary-tree permet de savoir combien de combinaisons sont possibles et d'itérer dessus sans avoir besoin de les pré-générer. - dictionary-tree permet de savoir combien de combinaisons sont possibles et d'itérer dessus sans avoir besoin de les pré-générer.
### Corrections ### Corrections
- Vérification à chaque build (et donc dans la CI) que les packets destinés à tourner dans le navigateur n'ont aucunes dépendances. - Vérification à chaque build (et donc dans la CI) que les packets destinés à tourner dans le navigateur n'ont aucunes dépendances.
...@@ -36,7 +41,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -36,7 +41,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
## [Version 3.4.2] - 2022-11-20 (par [1000i100]) ## [Version 3.4.2] - 2022-11-20 (par [1000i100])
### Corrections ### Corrections
- checkKey ne complète plus automatiquement les clef trop courtes et envoi donc l'erreur attendue pour les clefs trops courtes. - checkKey ne complète plus automatiquement les clefs trop courtes et envoi donc l'erreur attendue pour les clefs trop courtes.
## [Version 3.4.1] - 2022-11-20 (par [1000i100]) ## [Version 3.4.1] - 2022-11-20 (par [1000i100])
### Corrections ### Corrections
...@@ -88,11 +93,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -88,11 +93,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
## [Version 3.0.2] - 2020-12-10 (par [1000i100]) ## [Version 3.0.2] - 2020-12-10 (par [1000i100])
### Ajouté ### Ajouté
- minification des modules g1lib - minification des modules g1lib
- publication automatisé sur npm à la publication de tag (sous réserve que la CI passe) - publication automatisée sur npm à la publication de tag (sous réserve que la CI passe)
## [Version 3.0.1] - 2020-12-10 (par [1000i100]) ## [Version 3.0.1] - 2020-12-10 (par [1000i100])
### Ajouté ### Ajouté
- test unitaire exectué dans la CI - test unitaire exécuté dans la CI
- couverture de test - couverture de test
- suivi de la maintenabilité / complexité - suivi de la maintenabilité / complexité
- suivi de la duplication - suivi de la duplication
...@@ -107,7 +112,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -107,7 +112,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
## [Version 2.1.0] - 2018-06-27 (par [1000i100]) ## [Version 2.1.0] - 2018-06-27 (par [1000i100])
### Ajouté ### Ajouté
- syntaxe =référence> pour faire des références syncronisé et éviter de générer des variantes non souhaitées. - syntaxe =référence> pour faire des références syncronisées et éviter de générer des variantes non souhaitées.
## [Version 2.0.0] - 2018-05-10 (par [1000i100]) ## [Version 2.0.0] - 2018-05-10 (par [1000i100])
...@@ -116,12 +121,12 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -116,12 +121,12 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
##### Générateur de variantes de mot de passe ##### Générateur de variantes de mot de passe
- Déclinaisons avec Majuscules - Déclinaisons avec Majuscules
- Désaccentuation - Désaccentuation
- Déclinaison avancées façon expression régulière - Déclinaison avancée façon expression régulière
##### Documentation ##### Documentation
- Rédaction d'une documentation des générateur de variante de mot de passe - Rédaction d'une documentation des générateurs de variante de mot de passe
##### Améliorations technique ##### Améliorations techniques
- Ajout de test unitaire (meilleur fiabilité). - Ajout de test unitaire (meilleure fiabilité).
- Différentiation de la lib pour la partie crypto et de celle de génération de variantes (meilleur maintenabilité et évolutivité). - Différentiation de la lib pour la partie crypto et de celle de génération de variantes (meilleure maintenabilité et évolutivité).
## [Version 1.0.1 (Proof of Concept)] - 2018-04-18 (par [1000i100]) ## [Version 1.0.1 (Proof of Concept)] - 2018-04-18 (par [1000i100])
### Ajouté ### Ajouté
...@@ -130,8 +135,9 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0 ...@@ -130,8 +135,9 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
- intégration des librairies de crypto nécessaires - intégration des librairies de crypto nécessaires
- calcul de la clef publique correspondant à chaque combinaison de secrets saisie, et comparaison à la clef publique de référence. - calcul de la clef publique correspondant à chaque combinaison de secrets saisie, et comparaison à la clef publique de référence.
[Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.2...main [Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.3...main
[Version 3.5.3]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.2...v3.5.3
[Version 3.5.2]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.1...v3.5.2 [Version 3.5.2]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.1...v3.5.2
[Version 3.5.1]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.0...v3.5.1 [Version 3.5.1]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.0...v3.5.1
[Version 3.5.0]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.4.2...v3.5.0 [Version 3.5.0]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.4.2...v3.5.0
......
{ {
"name": "g1lib", "name": "g1lib",
"version": "3.5.2", "version": "3.5.3",
"description": "An ubiquitous static javascript toolbox lib for Ǧ1 / Duniter ecosystem with reliability in mind.", "description": "An ubiquitous static javascript toolbox lib for Ǧ1 / Duniter ecosystem with reliability in mind.",
"main": "nodejs/all.mjs", "main": "nodejs/all.mjs",
"browser": "browser/all.mjs", "browser": "browser/all.mjs",
......
...@@ -12,7 +12,8 @@ const specialMap = { ...@@ -12,7 +12,8 @@ const specialMap = {
'>': String.fromCharCode(0x0b), '>': String.fromCharCode(0x0b),
':': String.fromCharCode(0x0c), ':': String.fromCharCode(0x0c),
'=': String.fromCharCode(0x0d), '=': String.fromCharCode(0x0d),
'@': String.fromCharCode(0x0e) '@': String.fromCharCode(0x0e),
'\\': String.fromCharCode(0x0f),
}; };
const revertSpecial = swapKeyValue(specialMap); const revertSpecial = swapKeyValue(specialMap);
function swapKeyValue(object) { function swapKeyValue(object) {
......
...@@ -6,6 +6,8 @@ test('unescape special characters & re-escape them generate identical string', t ...@@ -6,6 +6,8 @@ test('unescape special characters & re-escape them generate identical string', t
const cases = [ const cases = [
'plop:\\:ici', 'plop:\\:ici',
'[\\]*]', '[\\]*]',
'\\{\\}',
'\\\\',
] ]
cases.forEach(c=>t.is(app.utfSpecial2escaped(app.escape2utfSpecial(c)), c)); cases.forEach(c=>t.is(app.utfSpecial2escaped(app.escape2utfSpecial(c)), c));
}); });
......
...@@ -154,7 +154,7 @@ function fromLeet(str){ ...@@ -154,7 +154,7 @@ function fromLeet(str){
}); });
} }
function flattenIt(regStr){ function flattenIt(regStr){
return tree.serialize(tree.buildTreeStruct(regStr)); return tree.rawSerialize(tree.buildTreeStruct(regStr));
} }
function resetCache() { function resetCache() {
cache(); cache();
......
...@@ -163,14 +163,17 @@ export function splitAround(pattern,treeStruct){ ...@@ -163,14 +163,17 @@ export function splitAround(pattern,treeStruct){
throw new Error(`Error: how to splitAround ${pattern} with ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`); throw new Error(`Error: how to splitAround ${pattern} with ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`);
} }
const res = recSplitter(treeStruct); const res = recSplitter(treeStruct);
if(res.matching) res.matching = serialize(buildTreeStruct(res.matching)); if(res.matching) res.matching = rawSerialize(buildTreeStruct(res.matching));
if(res.notMatching) res.notMatching = serialize(buildTreeStruct(res.notMatching)); if(res.notMatching) res.notMatching = rawSerialize(buildTreeStruct(res.notMatching));
return res; return res;
} }
export function serialize(treeStruct) { export function serialize(treeStruct) {
if (isString(treeStruct)) return utfSpecial2escaped(treeStruct.str); return utfSpecial2escaped(rawSerialize(treeStruct));
if (isStep(treeStruct)) return treeStruct.step.map(serialize).join(''); }
if (isAlt(treeStruct)) return `(${treeStruct.alt.map(serialize).join('|')})`; export function rawSerialize(treeStruct) {
if (isString(treeStruct)) return treeStruct.str;
if (isStep(treeStruct)) return treeStruct.step.map(rawSerialize).join('');
if (isAlt(treeStruct)) return `(${treeStruct.alt.map(rawSerialize).join('|')})`;
throw new Error(`Error: how to serialize ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`); throw new Error(`Error: how to serialize ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`);
} }
......
...@@ -45,7 +45,12 @@ test('_\\@\\@_@@_@\\@_ can be ambiguous with get, dryGet or not with rawGet, raw ...@@ -45,7 +45,12 @@ test('_\\@\\@_@@_@\\@_ can be ambiguous with get, dryGet or not with rawGet, raw
t.is(dico.splitDryGet(0)[0], '_'); t.is(dico.splitDryGet(0)[0], '_');
t.is(dico.splitDryGet(0)[1], ')@@'); t.is(dico.splitDryGet(0)[1], ')@@');
}); });
test('\\{\\} work fine', t => {
const dico = new app.Dictionary('\\{\\}');
t.is(dico.length, 1);
t.is(dico.serialize(), '\\{\\}@@\\{\\}');
t.is(dico.dryGet(0), '{}@@{}');
});
test('get is time tracked', async t => { test('get is time tracked', async t => {
const dico = new app.Dictionary('(a|b|c)d(e|f|g)'); const dico = new app.Dictionary('(a|b|c)d(e|f|g)');
dico.get(1); dico.get(1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment