Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • chrome-manifest-v3
  • develop
  • feat/force-migration-check
  • feat/improve-network-scan
  • feature/android_api_19
  • feature/encrypted_comment
  • feature/migrate-cordova-13
  • gitlab_migration_1
  • master
  • rml8
  • 0.0.1.ES.alpha1
  • 0.0.2
  • 0.1.13
  • 0.1.14
  • 0.1.15
  • 0.1.16
  • 0.1.17
  • 0.1.18
  • 0.1.19
  • 0.1.20
  • 0.1.21
  • 0.1.22
  • 0.1.23
  • 0.1.24
  • 0.1.25
  • 0.1.26
  • 0.1.27
  • 0.1.28
  • 0.1.4
  • 0.1.7
  • 0.1.8
  • 0.2.0
  • 0.2.1
  • v0.10.0
  • v0.10.1
  • v0.10.2
  • v0.11.0
  • v0.11.1
  • v0.11.2
  • v0.11.3
  • v0.11.4
  • v0.11.5
  • v0.11.6
  • v0.11.7
  • v0.11.8
  • v0.12.0
  • v0.12.1
  • v0.12.2
  • v0.12.3
  • v0.12.4
  • v0.12.5
  • v0.12.6
  • v0.12.7
  • v0.12.8
  • v0.12.9
  • v0.13.0
  • v0.14.0
  • v0.14.1
  • v0.15.0
  • v0.15.1
  • v0.15.2
  • v0.15.3
  • v0.15.4
  • v0.15.5
  • v0.15.6
  • v0.15.7
  • v0.16.0
  • v0.16.1
  • v0.17.0
  • v0.17.1
  • v0.17.2
  • v0.17.3
  • v0.17.4
  • v0.17.5
  • v0.17.6
  • v0.18.0
  • v0.18.1
  • v0.18.2
  • v0.18.3
  • v0.19.0
  • v0.19.1
  • v0.19.2
  • v0.19.3
  • v0.19.4
  • v0.19.5
  • v0.19.6
  • v0.2.10
  • v0.2.12
  • v0.2.13
  • v0.2.14
  • v0.2.3
  • v0.2.4
  • v0.2.5
  • v0.2.6
  • v0.2.7
  • v0.2.8
  • v0.2.9
  • v0.3.0
  • v0.3.1
  • v0.3.10
  • v0.3.11
  • v0.3.12
  • v0.3.13
  • v0.3.14
  • v0.3.15
  • v0.3.16
  • v0.3.17
  • v0.3.2
  • v0.3.3
  • v0.3.4
110 results

Target

Select target project
  • cordeliaze/cesium
  • pfouque06/cesium
  • wellno1/cesium
  • 1000i100/cesium
  • vincentux/cesium
  • calbasi/cesium
  • thomasbromehead/cesium
  • matograine/cesium
  • clients/cesium-grp/cesium
  • cedricmenec/cesium
  • Pamplemousse/cesium
  • etienneleba/cesium
  • tnntwister/cesium
  • scanlegentil/cesium
  • morvanc/cesium
  • yyy/cesium
  • Axce/cesium
  • Bertrandbenj/cesium
  • Lupus/cesium
  • elmau/cesium
  • MartinDelille/cesium
  • tykayn/cesium
  • numeropi/cesium
  • Vivakvo/cesium
  • pokapow/cesium
  • pini-gh/cesium
  • anam/cesium
  • RavanH/cesium
  • bpresles/cesium
  • am97/cesium
  • tuxmain/cesium
  • jytou/cesium
  • oliviermaurice/cesium
  • 666titi999/cesium
  • Yvv/cesium
35 results
Select Git revision
  • Vivakvo-master-patch-80805
  • Vivakvo-master-patch-99327
  • dev
  • gitlab_migration_1
  • issue_4
  • issue_780
  • master
  • patch-1
  • patch-10
  • patch-11
  • patch-12
  • patch-13
  • patch-14
  • patch-15
  • patch-16
  • patch-17
  • patch-18
  • patch-19
  • patch-2
  • patch-21
  • patch-22
  • patch-23
  • patch-24
  • patch-25
  • patch-26
  • patch-3
  • patch-4
  • patch-5
  • patch-6
  • patch-7
  • patch-8
  • patch-9
  • rml8
  • undefined
  • 0.0.1.ES.alpha1
  • 0.0.2
  • 0.1.13
  • 0.1.14
  • 0.1.15
  • 0.1.16
  • 0.1.17
  • 0.1.18
  • 0.1.19
  • 0.1.20
  • 0.1.21
  • 0.1.22
  • 0.1.23
  • 0.1.24
  • 0.1.25
  • 0.1.26
  • 0.1.27
  • 0.1.28
  • 0.1.4
  • 0.1.7
  • 0.1.8
  • 0.2.0
  • 0.2.1
  • v0.10.0
  • v0.10.1
  • v0.10.2
  • v0.11.0
  • v0.11.1
  • v0.11.2
  • v0.11.3
  • v0.11.4
  • v0.11.5
  • v0.11.6
  • v0.11.7
  • v0.11.8
  • v0.12.0
  • v0.12.1
  • v0.12.2
  • v0.12.3
  • v0.12.4
  • v0.12.5
  • v0.12.6
  • v0.12.7
  • v0.12.8
  • v0.12.9
  • v0.13.0
  • v0.14.0
  • v0.14.1
  • v0.15.0
  • v0.15.1
  • v0.15.2
  • v0.15.3
  • v0.15.4
  • v0.15.5
  • v0.15.6
  • v0.15.7
  • v0.16.0
  • v0.16.1
  • v0.17.0
  • v0.17.1
  • v0.17.2
  • v0.17.3
  • v0.17.4
  • v0.17.5
  • v0.17.6
  • v0.18.0
  • v0.18.1
  • v0.18.2
  • v0.18.3
  • v0.19.0
  • v0.19.1
  • v0.19.2
  • v0.19.3
  • v0.19.4
  • v0.19.5
  • v0.19.6
  • v0.2.10
  • v0.2.12
  • v0.2.13
  • v0.2.14
  • v0.2.3
  • v0.2.4
  • v0.2.5
  • v0.2.6
  • v0.2.7
  • v0.2.8
  • v0.2.9
  • v0.3.0
  • v0.3.1
  • v0.3.10
  • v0.3.11
  • v0.3.12
  • v0.3.13
  • v0.3.14
  • v0.3.15
  • v0.3.16
  • v0.3.17
  • v0.3.2
  • v0.3.3
  • v0.3.4
134 results
Show changes
Showing
with 659 additions and 1408 deletions
Licenco Ğ1 - v0.2.9
===================
:dato: 2017-04-04 12:59
:modifita: 2019-07-14 12:00
**Licenco de la mono kaj promeso de respondeco.**
Ĉiu atestado de nova membro de Ğ1 devas antaŭe akompaniĝi per transdono de tiu ĉi licenco de la mono Ğ1, pri kiu la atestanto devas certiĝi, ke ĝi estis studita, komprenita kaj akceptita de la persono, kiu estos atestita.
Ĉiu okazo de renkontiĝo rilate al Ğ1 devus akompaniĝi per transdono de tiu ĉi licenco, kiu povas esti laŭte legata, kaj transdonita ĉiamaniere.
Reto de Fido Ğ1 (RdF Ğ1)
------------------------------
**Averto:** Atesti ne estas nur certiĝi, ke vi renkontis la personon, tio estas certigi al la komunumo Ğ1, ke vi sufiĉe bone konas la atestitan personon, kaj ke vi tiel scipovos facile kontakti lin/ŝin, kaj kapablos malkovri duoblan konton kreitan de persono atestita de vi mem, aŭ alitipajn problemojn (malapero...), farante komparajn kontrolojn, kiuj eventuale ebligos elmontri la problemon.
**Ege rekomendindaj konsiloj**
Bone koni personon supozigas, ke vi scipovas kontakti lin/ŝin per pluraj rimedoj malsamaj (fizika, elektronika, alitipa...), sed ankaŭ ke vi konas plurajn personojn, kiuj konas lin/ŝin same bone, kaj kiuj ankaŭ scipovas kontakti lin/ŝin simile. Aparte se vi ne bone konas neniun el ties aliaj atestantoj, tio estas forta indiko, ke vi ne bone konas la personon, kaj tia atestaĵo ekas signalon al la tuta komunumo Ğ1. Kaze de nesufiĉa kono, necesas nepre ne atesti.
Neniam atestu sola, sed akompanata de almenaŭ unu alia membro de la RdF Ğ1 por eviti ĉian manipulan eraron. Kaze de eraro, tuj avertu aliajn membrojn de la RdF Ğ1.
Antaŭ ĉiu atestado, ne forgesu kontroli, ĉu tiu konto (ĉu ĝi estas validigota aŭ jam membro) jam ricevis unu aŭ plurajn atestaĵojn. Laŭnecese petu informojn por konkakti tiujn aliajn atestantojn por kune kontroli, ke vi bone konas la personon, kiu kreis la novan konton, kaj ankaŭ ties publikan ŝlosilon.
Kontrolu ke la atestoto bone regas sian konton: bona rimedo por kontroli tion estas sendi kelkajn Ğ1 al la celata konto, kaj poste peti resendon al via propra konto. Tio certigas, ke la atestoto bone regas sian privatan ŝlosilon.
Kontrolu ke viaj kontaktoj bone studis kaj komprenis la licencon Ğ1 ĝisdatan.
Se vi ekkonscias, ke efektiva aŭ ebla atestanto de la koncernata konto ne konas la koncernatan personon, tuj avertu fakulojn pri la temo inter viaj konatoj de la RdF Ğ1, por ke la valid-procezo estu kontrolita de la RdF Ğ1.
Kiam vi estas membro de la RdF Ğ1, kaj ke vi estas atestonta novan konton:
**Vi certiĝis:**
1°) ke vi sufiĉe bone konas (ne nur "vide" konas) la personon, kiu deklaras regi tiun publikan ŝlosilon (novan konton). Vidu la ĉi-suprajn ege rekomendindajn konsilojn por certiĝi "bone koni".
2°) ke vi persone kontrolis kun li/ŝi, ke temas ja pri tiu publika ŝlosilo, kiun vi estas atestonta (vidu ĉi-suprajn konsilojn).
3°) ke vi bone kontrolis kun la koncernata persono, ke li/ŝi ja kreis sian Duniter-dokumenton pri konto-nuligo, kiu laŭbezone ebligos al li/ŝi malaktivigi sian membro-statuson (kaze de konto-ŝtelo, ID-ŝanĝo, erare kreita konto, ktp.).
4a°) ke vi fizike renkontis la personon por certiĝi, ke ja lin/ŝin vi bone konas, kaj ke ja li/ŝi uzas tiun publikan ŝlosilon.
4b°) aŭ ke vi distance kontrolis la ligon persono/publik-ŝlosilo kontaktante la personon per pluraj komunikiloj malsamaj, kiel paper-poŝto + sociaj retoj + forumo + retpoŝto + video-konferenco + telefono (rekoni la voĉon). Ĉar se oni povas fiuzi retadreson aŭ forum-konton, estos multe pli malfacile fiuzi kvar malsamajn komunikilojn, kaj imiti la aspekton (vidan) kaj plie la voĉon de la persono.
La 4a°) tamen preferindas al la 4b°), dum la punktoj 1°) 2°) kaj 3°) estas antaŭ ĉio nepraj.
**Resumitaj reguloj de la RdF:**
Ĉiu membro havas rezervon da 100 eblaj atestaĵoj, kiujn li/ŝi povas sendi nur po unu ĉiun kvinan tagon.
Valida 2 monatojn, atestaĵo por nova membro estas definitive aprobita nur se la atestito havas almenaŭ 4 aliajn atestaĵojn fine de tiuj 2 monatoj, alie la enir-procezo devos esti rekomencita.
Por fariĝi nova membro de la RdF Ğ1, necesas do akiri 5 atestaĵojn kaj troviĝi je distanco <= 5 paŝoj de 80% el la referencaj membroj de la RdF.
Membro de la RdF Ğ1 estas referenca membro, kiam li/ŝi ricevis kaj sendis almenaŭ Y[N] atestaĵojn, kie N estas la nombro de membroj de la RdF kaj Y[N] = plafono N^(1/5). Ekzemploj:
* por 1024 < N ≤ 3125 oni havas Y[N] = 5
* por 7776 < N ≤ 16807 oni havas Y[N] = 7
* por 59049 < N ≤ 100 000 oni havas Y[N] = 10
Ekde kiam la nova membro partoprenas en la RdF Ğ1, ties atestaĵoj restas validaj 2 jarojn.
Por resti membro necesas redoni regule sian konsenton per sia privata ŝlosilo (ĉiun 12-an monaton) kaj certiĝi daŭre havi almenaŭ 5 atestaĵojn validajn post la 2 jaroj.
Mono Ğ1
----------
Ğ1 produktiĝas per Universala Dividendo (UD) por ĉiu homa estaĵo membro de la Reto de Fido Ğ1, laŭ la formo:
* po 1 UD por ĉiu persono ĉiutage
**Kodo de la mono Ğ1**
La sumo en Ğ1 de la UD samas ĉiutage ĝis la venonta ekvinokso, kiam la UD estos tiam revalorigita laŭ la formulo (kun 1 tago = 86 400 sekundoj):
* UDtago(sekvanta ekvinokso) = UDtago(ekvinokso) + c² (M/N)(ekvinokso) / (182,625 tagoj)
kun kiel parametroj:
* c = 4,88% / ekvinokso
* UD(0) = 10,00 Ğ1
kaj kiel variabloj:
* *M* la ĉioma mona maso je ekvinokso
* *N* la nombro de membroj je ekvinokso
Programoj Ğ1 kaj licenco Ğ1
--------------------------
La programoj Ğ1 ebligantaj al la uzantoj mastrumi ties uzon de Ğ1 devas transdoni tiun licencon kun la programo, kaj ankaŭ la aron de la teknikaj parametroj de la mono Ğ1 kaj de la RdF Ğ1, kiu estas enskribita en la bloko 0 de Ğ1. Programo, kiu ne konformiĝus al tiuj devigoj de la licenco, ne estus kongrua kun Ğ1.
Por pli da precizigoj pri la teknikaj detaloj, eblas rekte konsulti la kodon de Duniter, kiu estas libera programo, kaj ankaŭ la datenojn de la blokĉeno Ğ1 ekhavante ĝin tra ekzemplero (aŭ nodo) Duniter Ğ1.
Pli da informoj ĉe la retejo de la teamo Duniter https://www.duniter.org
Licence Ğ1 - v0.2.9
===================
:date: 2017-04-04 12:59
:modifié: 2019-07-14 12:00
**Licence de la monnaie et engagement de responsabilité.**
Toute opération de certification d'un nouveau membre de Ğ1 doit préalablement s'accompagner de la transmission de cette licence de la monnaie Ğ1 dont le certificateur doit s'assurer qu'elle a été étudiée, comprise et acceptée par la personne qui sera certifiée.
Tout événement de rencontre concernant Ğ1 devrait s'accompagner de la transmission de cette licence, qui peut être lue à haute voix, et transmise par tout moyen.
Toile de confiance Ğ1 (TdC Ğ1)
------------------------------
**Avertissement :** Certifier n'est pas uniquement s'assurer que vous avez rencontré la personne, c'est assurer à la communauté Ğ1 que vous connaissez suffisamment bien la personne certifiée et que vous saurez ainsi la contacter facilement, et être en mesure de repérer un double compte effectué par une personne certifiée par vous-même, ou d'autres types de problèmes (disparition...), en effectuant des recoupements qui permettront de révéler le problème le cas échéant.
**Conseils fortement recommandés**
Bien connaître une personne suppose que vous êtes en mesure de la contacter par plusieurs moyens différents (physique, électronique, autre...) mais aussi que vous connaissez aussi plusieurs personnes qui la connaissent tout aussi bien et sont donc aussi en mesure de la contacter de même. Notamment si vous ne connaissez pas bien aucun de ses autres certificateurs c'est une indication forte que vous ne connaissez pas bien la personne et une certification de ce type déclenche une alerte vers toute la communauté Ğ1. En cas de connaissance insuffisante il convient de ne surtout pas certifier.
Ne certifiez jamais seul, mais accompagné d'au moins un autre membre de la TdC Ğ1 afin d'éviter toute erreur de manipulation. En cas d'erreur, prévenez immédiatement d'autres membres de la TdC Ğ1.
Avant toute certification, assurez vous de vérifier si son compte (qu'il soit en cours de validation ou déjà membre) a déjà reçu une ou plusieurs certifications. Le cas échéant demandez des informations pour entrer en contact avec ces autres certificateurs afin de vérifier ensemble que vous connaissez bien la personne concernée par la création du nouveau compte, ainsi que la clé publique correspondante.
Vérifiez que le futur certifié maîtrise bien son compte : un bon moyen de vérifier cela est de transférer quelques Ğ1 vers le compte cible, et de demander ensuite un renvoi vers votre propre compte, cela assure de la bonne maîtrise par le futur certifié de sa clé privée.
Vérifiez que vos contacts ont bien étudié et compris la licence Ğ1 à jour.
Si vous vous rendez compte qu'un certificateur effectif ou potentiel du compte concerné ne connaît pas la personne concernée, alertez immédiatement des experts du sujet au sein de vos connaissance de la TdC Ğ1, afin que la procédure de validation soit vérifiée par la TdC Ğ1.
Lorsque vous êtes membre de la TdC Ğ1 et que vous vous apprêtez à certifier un nouveau compte :
**Vous êtes vous assuré :**
1°) De suffisamment bien connaître (pas seulement de la connaître "de visu") la personne qui déclare gérer cette clé publique (nouveau compte). Voir les conseils fortement recommandés ci-dessus pour s'assurer de "bien connaître".
2°) D'avoir personnellement vérifié avec elle qu'il s'agit bien de cette clé publique que vous vous apprêtez à certifier (voir conseils ci-dessus).
3°) D'avoir bien vérifié avec la personne concernée qu'elle a bien généré son document Duniter de révocation de compte qui lui permettra le cas échéant de pouvoir désactiver son statut de membre (cas d'un vol de compte, d'un changement de ID, d'un compte créé à tort etc.).
4a°) De rencontrer la personne physiquement pour vous assurer que c'est bien elle que vous connaissez bien et qui gère cette clé publique.
4b°) Ou bien de vérifier à distance le lien personne / clé publique en contactant la personne par plusieurs moyens de communication différents, comme courrier papier + réseau social + forum + mail + vidéo conférence + téléphone (reconnaître la voix). Car si l'on peut pirater un compte mail ou un compte forum, il sera bien plus difficile d'imaginer pirater quatre moyens de communication distincts, et imiter l'apparence (vidéo) ainsi que la voix de la personne en plus.
Le 4a°) restant toutefois préférable au 4b°), tandis que les points 1°) 2°) et 3°) sont préalablement indispensables.
**Règles abrégées de la TdC :**
Chaque membre a un stock de 100 certifications possibles, qu'il ne peut émettre qu'au rythme de 1 certification / 5 jours.
Valable 2 mois, une certification pour un nouveau membre n'est définitivement adoptée que si le certifié possède au moins 4 autres certifications au bout de ces 2 mois, sinon le processus d'entrée devra être relancé.
Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= 5 pas de 80% des membres référents de la TdC.
Un membre de la TdC Ğ1 est membre référent lorsqu'il a reçu et émis au moins Y[N] certifications où N est le nombre de membres de la TdC et Y[N] = plafond N^(1/5). Exemples :
* Pour 1024 < N ≤ 3125 on a Y[N] = 5
* Pour 7776 < N ≤ 16807 on a Y[N] = 7
* pour 59049 < N ≤ 100 000 on a Y[N] = 10
Une fois que le nouveau membre est partie prenante de la TdC Ğ1 ses certifications restent valables 2 ans.
Pour rester membre il faut renouveler son accord régulièrement avec sa clé privée (tous les 12 mois) et s'assurer d'avoir toujours au moins 5 certifications valides au delà des 2 ans.
Monnaie Ğ1
----------
Ğ1 se produit via un Dividende Universel (DU) pour tout être humain membre de la Toile de Confiance Ğ1, qui est de la forme :
* 1 DU par personne et par jour
**Code de la monnaie Ğ1**
Le montant en Ğ1 du DU est identique chaque jour jusqu'au prochain équinoxe où le DU sera alors réévalué selon la formule (avec 1 jour = 86 400 secondes) :
* DUjour(équinoxe suivant) = DUjour(équinoxe) + c² (M/N)(équinoxe) / (182,625 jours)
Avec comme paramètres :
* c = 4,88% / équinoxe
* DU(0) = 10,00 Ğ1
Et comme variables :
* *M* la masse monétaire totale à l'équinoxe
* *N* le nombre de membres à l'équinoxe
Logiciels Ğ1 et licence Ğ1
--------------------------
Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obligations de la licence n'est pas compatible Ğ1.
Pour plus de précisions dans les détails techniques il est possible de consulter directement le code de Duniter qui est un logiciel libre ainsi que les données de la blockchain Ğ1 en la récupérant via une instance (ou nœud) Duniter Ğ1.
Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
\ No newline at end of file
Licence Ğ1 - v0.2.9
===================
:date: 2017-04-04 12:59
:modifié: 2019-07-14 12:00
**Licence de la monnaie et engagement de responsabilité.**
Toute opération de certification d'un nouveau membre de Ğ1 doit préalablement s'accompagner de la transmission de cette licence de la monnaie Ğ1 dont le certificateur doit s'assurer qu'elle a été étudiée, comprise et acceptée par la personne qui sera certifiée.
Tout événement de rencontre concernant Ğ1 devrait s'accompagner de la transmission de cette licence, qui peut être lue à haute voix, et transmise par tout moyen.
Toile de confiance Ğ1 (TdC Ğ1)
------------------------------
**Avertissement :** Certifier n'est pas uniquement s'assurer que vous avez rencontré la personne, c'est assurer à la communauté Ğ1 que vous connaissez suffisamment bien la personne certifiée et que vous saurez ainsi la contacter facilement, et être en mesure de repérer un double compte effectué par une personne certifiée par vous-même, ou d'autres types de problèmes (disparition...), en effectuant des recoupements qui permettront de révéler le problème le cas échéant.
**Conseils fortement recommandés**
Bien connaître une personne suppose que vous êtes en mesure de la contacter par plusieurs moyens différents (physique, électronique, autre...) mais aussi que vous connaissez aussi plusieurs personnes qui la connaissent tout aussi bien et sont donc aussi en mesure de la contacter de même. Notamment si vous ne connaissez pas bien aucun de ses autres certificateurs c'est une indication forte que vous ne connaissez pas bien la personne et une certification de ce type déclenche une alerte vers toute la communauté Ğ1. En cas de connaissance insuffisante il convient de ne surtout pas certifier.
Ne certifiez jamais seul, mais accompagné d'au moins un autre membre de la TdC Ğ1 afin d'éviter toute erreur de manipulation. En cas d'erreur, prévenez immédiatement d'autres membres de la TdC Ğ1.
Avant toute certification, assurez vous de vérifier si son compte (qu'il soit en cours de validation ou déjà membre) a déjà reçu une ou plusieurs certifications. Le cas échéant demandez des informations pour entrer en contact avec ces autres certificateurs afin de vérifier ensemble que vous connaissez bien la personne concernée par la création du nouveau compte, ainsi que la clé publique correspondante.
Vérifiez que le futur certifié maîtrise bien son compte : un bon moyen de vérifier cela est de transférer quelques Ğ1 vers le compte cible, et de demander ensuite un renvoi vers votre propre compte, cela assure de la bonne maîtrise par le futur certifié de sa clé privée.
Vérifiez que vos contacts ont bien étudié et compris la licence Ğ1 à jour.
Si vous vous rendez compte qu'un certificateur effectif ou potentiel du compte concerné ne connaît pas la personne concernée, alertez immédiatement des experts du sujet au sein de vos connaissance de la TdC Ğ1, afin que la procédure de validation soit vérifiée par la TdC Ğ1.
Lorsque vous êtes membre de la TdC Ğ1 et que vous vous apprêtez à certifier un nouveau compte :
**Vous êtes vous assuré :**
1°) De suffisamment bien connaître (pas seulement de la connaître "de visu") la personne qui déclare gérer cette clé publique (nouveau compte). Voir les conseils fortement recommandés ci-dessus pour s'assurer de "bien connaître".
2°) D'avoir personnellement vérifié avec elle qu'il s'agit bien de cette clé publique que vous vous apprêtez à certifier (voir conseils ci-dessus).
3°) D'avoir bien vérifié avec la personne concernée qu'elle a bien généré son document Duniter de révocation de compte qui lui permettra le cas échéant de pouvoir désactiver son statut de membre (cas d'un vol de compte, d'un changement de ID, d'un compte créé à tort etc.).
4a°) De rencontrer la personne physiquement pour vous assurer que c'est bien elle que vous connaissez bien et qui gère cette clé publique.
4b°) Ou bien de vérifier à distance le lien personne / clé publique en contactant la personne par plusieurs moyens de communication différents, comme courrier papier + réseau social + forum + mail + vidéo conférence + téléphone (reconnaître la voix). Car si l'on peut pirater un compte mail ou un compte forum, il sera bien plus difficile d'imaginer pirater quatre moyens de communication distincts, et imiter l'apparence (vidéo) ainsi que la voix de la personne en plus.
Le 4a°) restant toutefois préférable au 4b°), tandis que les points 1°) 2°) et 3°) sont préalablement indispensables.
**Règles abrégées de la TdC :**
Chaque membre a un stock de 100 certifications possibles, qu'il ne peut émettre qu'au rythme de 1 certification / 5 jours.
Valable 2 mois, une certification pour un nouveau membre n'est définitivement adoptée que si le certifié possède au moins 4 autres certifications au bout de ces 2 mois, sinon le processus d'entrée devra être relancé.
Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= 5 pas de 80% des membres référents de la TdC.
Un membre de la TdC Ğ1 est membre référent lorsqu'il a reçu et émis au moins Y[N] certifications où N est le nombre de membres de la TdC et Y[N] = plafond N^(1/5). Exemples :
* Pour 1024 < N ≤ 3125 on a Y[N] = 5
* Pour 7776 < N ≤ 16807 on a Y[N] = 7
* pour 59049 < N ≤ 100 000 on a Y[N] = 10
Une fois que le nouveau membre est partie prenante de la TdC Ğ1 ses certifications restent valables 2 ans.
Pour rester membre il faut renouveler son accord régulièrement avec sa clé privée (tous les 12 mois) et s'assurer d'avoir toujours au moins 5 certifications valides au delà des 2 ans.
Monnaie Ğ1
----------
Ğ1 se produit via un Dividende Universel (DU) pour tout être humain membre de la Toile de Confiance Ğ1, qui est de la forme :
* 1 DU par personne et par jour
**Code de la monnaie Ğ1**
Le montant en Ğ1 du DU est identique chaque jour jusqu'au prochain équinoxe où le DU sera alors réévalué selon la formule (avec 1 jour = 86 400 secondes) :
* DUjour(équinoxe suivant) = DUjour(équinoxe) + c² (M/N)(équinoxe) / (182,625 jours)
Avec comme paramètres :
* c = 4,88% / équinoxe
* DU(0) = 10,00 Ğ1
Et comme variables :
* *M* la masse monétaire totale à l'équinoxe
* *N* le nombre de membres à l'équinoxe
Logiciels Ğ1 et licence Ğ1
--------------------------
Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obligations de la licence n'est pas compatible Ğ1.
Pour plus de précisions dans les détails techniques il est possible de consulter directement le code de Duniter qui est un logiciel libre ainsi que les données de la blockchain Ğ1 en la récupérant via une instance (ou nœud) Duniter Ğ1.
Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
\ No newline at end of file
{
"COMMON": {
"APP_NAME": "Cesium",
"APP_VERSION": "v{{version}}",
"APP_BUILD": "date : {{build}}",
"PUBKEY": "Clé publique",
"MEMBER": "Membre",
"BLOCK" : "Bloc",
"BTN_OK": "OK",
"BTN_YES": "Oui",
"BTN_NO": "Non",
"BTN_SEND": "Envoyer",
"BTN_SEND_MONEY": "Faire un virement",
"BTN_SEND_MONEY_SHORT": "Virement",
"BTN_SAVE": "Enregistrer",
"BTN_YES_SAVE": "Oui, Enregistrer",
"BTN_YES_CONTINUE": "Oui, Continuer",
"BTN_SHOW": "Voir",
"BTN_SHOW_PUBKEY": "Afficher la clé publique",
"BTN_RELATIVE_UNIT": "Afficher les montants en DU ?",
"BTN_BACK": "Retour",
"BTN_NEXT": "Suivant",
"BTN_IMPORT": "Importer",
"BTN_CANCEL": "Annuler",
"BTN_CLOSE": "Fermer",
"BTN_LATER": "Plus tard",
"BTN_LOGIN": "Se connecter",
"BTN_LOGOUT": "Déconnexion",
"BTN_ADD_ACCOUNT": "Nouveau compte",
"BTN_SHARE": "Partager",
"BTN_EDIT": "Modifier",
"BTN_DELETE": "Supprimer",
"BTN_ADD": "Ajouter",
"BTN_SEARCH": "Rechercher",
"BTN_REFRESH": "Actualiser",
"BTN_RETRY": "Recommencer",
"BTN_START": "Commencer",
"BTN_CONTINUE": "Continuer",
"BTN_CREATE": "Créer",
"BTN_UNDERSTOOD": "J'ai compris",
"BTN_OPTIONS": "Options",
"BTN_HELP_TOUR": "Visite guidée",
"BTN_HELP_TOUR_SCREEN": "Découvrir cet écran",
"BTN_DOWNLOAD": "Télécharger",
"BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Télécharger le relevé du compte",
"BTN_MODIFY": "Modifier",
"CHOOSE_FILE": "Déposez votre fichier <br/>ou cliquez pour le sélectionner",
"DAYS": "jours",
"NO_ACCOUNT_QUESTION": "Pas encore de compte ? Créez-en un gratuitement !",
"SEARCH_NO_RESULT": "Aucun résultat trouvé",
"LOADING": "Veuillez patienter...",
"LOADING_WAIT": "Veuillez patienter...<br/><small>(Attente de disponibilité du noeud)</small>",
"SEARCHING": "Recherche en cours...",
"FROM": "De",
"TO": "À",
"COPY": "Copier",
"LANGUAGE": "Langue",
"UNIVERSAL_DIVIDEND": "Dividende universel",
"UD": "DU",
"DATE_PATTERN": "DD/MM/YY HH:mm",
"DATE_FILE_PATTERN": "YYYY-MM-DD",
"DATE_SHORT_PATTERN": "DD/MM/YY",
"DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
"EMPTY_PARENTHESIS": "(vide)",
"UID": "Pseudonyme",
"ENABLE": "Activé",
"DISABLE": "Désactivé",
"RESULTS_LIST": "Résultats",
"RESULTS_COUNT": "{{count}} résultats",
"EXECUTION_TIME": "exécuté en {{duration|formatDurationMs}}",
"SHOW_VALUES": "Afficher les valeurs en clair ?",
"POPOVER_ACTIONS_TITLE": "Options",
"POPOVER_FILTER_TITLE": "Filtres",
"SHOW_MORE": "Afficher plus",
"SHOW_MORE_COUNT": "(limite actuelle à {{limit}})",
"POPOVER_SHARE": {
"TITLE": "Partager",
"SHARE_ON_TWITTER": "Partager sur Twitter",
"SHARE_ON_FACEBOOK": "Partager sur Facebook",
"SHARE_ON_DIASPORA": "Partager sur Diaspora*",
"SHARE_ON_GOOGLEPLUS": "Partager sur Google+"
},
"FILE": {
"DATE": "Date :",
"TYPE": "Type :",
"SIZE": "Taille :",
"VALIDATING": "Validation en cours..."
}
},
"SYSTEM": {
"PICTURE_CHOOSE_TYPE": "Choisir la source :",
"BTN_PICTURE_GALLERY": "Galerie",
"BTN_PICTURE_CAMERA": "<b>Caméra</b>"
},
"MENU": {
"HOME": "Accueil",
"WOT": "Annuaire",
"CURRENCY": "Monnaie",
"ACCOUNT": "Mon compte",
"WALLETS": "Mes portefeuilles",
"TRANSFER": "Virement",
"SCAN": "Scanner",
"SETTINGS": "Paramètres",
"NETWORK": "Réseau",
"TRANSACTIONS": "Mes opérations"
},
"ABOUT": {
"TITLE": "À propos",
"LICENSE": "Application <b>libre</b> (Licence GNU AGPLv3).",
"LATEST_RELEASE": "Il existe une <b>version plus récente</b> de {{'COMMON.APP_NAME'|translate}} (<b>v{{version}}</b>)",
"PLEASE_UPDATE": "Veuillez mettre à jour {{'COMMON.APP_NAME'|translate}} (dernière version : <b>v{{version}}</b>)",
"CODE": "Code source :",
"OFFICIAL_WEB_SITE": "Site web officiel :",
"DEVELOPERS": "Développé par :",
"FORUM": "Forum :",
"PLEASE_REPORT_ISSUE": "N'hésitez pas à nous remonter les anomalies rencontrées",
"REPORT_ISSUE": "Remonter un problème",
"BTN_OPEN_DEV_WINDOW": "Ouvrir la fenêtre de debuggage"
},
"HOME": {
"TITLE": "Cesium",
"WELCOME": "Bienvenue dans l'application Cesium !",
"MESSAGE": "Recevez et envoyez de la monnaie libre {{currency|abbreviate}}",
"BTN_CURRENCY": "Explorer la monnaie {{name|abbreviate}}",
"BTN_ABOUT": "à propos",
"BTN_HELP": "Aide en ligne",
"REPORT_ISSUE": "anomalie",
"NOT_YOUR_ACCOUNT_QUESTION" : "Vous n'êtes pas propriétaire du compte <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b> ?",
"BTN_CHANGE_ACCOUNT": "Déconnecter ce compte",
"CONNECTION_ERROR": "Nœud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connection Internet, ou changer de nœud <a class=\"positive\" ng-click=\"doQuickFix('settings')\">dans les paramètres</a>."
},
"SETTINGS": {
"TITLE": "Paramètres",
"DISPLAY_DIVIDER": "Affichage",
"STORAGE_DIVIDER": "Stockage",
"NETWORK_SETTINGS": "Réseau",
"PEER": "Adresse du nœud Duniter",
"PEER_SHORT": "Adresse du nœud",
"PEER_CHANGED_TEMPORARY": "Adresse utilisée temporairement",
"USE_LOCAL_STORAGE": "Activer le stockage local",
"USE_LOCAL_STORAGE_HELP": "Permet de sauvegarder vos paramètres",
"WALLETS_SETTINGS": "Mes portefeuilles",
"USE_WALLETS_ENCRYPTION": "Sécuriser la liste ?",
"USE_WALLETS_ENCRYPTION_HELP": "Permet de sécuriser la liste de vos portefeuilles (par chiffrement), en exigeant une authentification pour y accéder.",
"ENABLE_HELPTIP": "Activer les bulles d'aide contextuelles",
"ENABLE_UI_EFFECTS": "Activer les effets visuels",
"HISTORY_SETTINGS": "Mes opérations",
"DISPLAY_UD_HISTORY": "Afficher les dividendes produits ?",
"TX_HISTORY_AUTO_REFRESH": "Rafraîchir automatiquement",
"TX_HISTORY_AUTO_REFRESH_HELP": "Rafraîchit le solde et les opérations automatiquement, à chaque nouveau bloc du réseau.",
"AUTHENTICATION_SETTINGS": "Authentification",
"KEEP_AUTH": "Désauthentification automatique",
"KEEP_AUTH_SHORT": "Désauthentification",
"KEEP_AUTH_HELP": "Définit le moment où l'authentification est nettoyée de la mémoire.",
"KEEP_AUTH_OPTION": {
"NEVER": "Après chaque opération",
"SECONDS": "Après {{value}}s d'inactivité",
"MINUTE": "Après {{value}}min d'inactivité",
"MINUTES": "Après {{value}}min d'inactivité",
"HOUR": "Après {{value}}h d'inactivité",
"ALWAYS": "A la fin de la session"
},
"KEYRING_FILE": "Fichier de trousseau",
"KEYRING_FILE_HELP": "Permet de vous <b>connecter</b> automatiquement à chaque lancement<br/>et même de vous <b>authentifier</b> (seulement si \"Expiration de l'authentification\" est configurée \"à la fin de la session\").",
"REMEMBER_ME": "Se souvenir de moi ?",
"REMEMBER_ME_HELP": "Permet de rester identifié d'une session à l'autre, en conservant localement la clé publique.",
"PLUGINS_SETTINGS": "Extensions",
"BTN_RESET": "Restaurer les valeurs par défaut",
"EXPERT_MODE": "Activer le mode expert",
"EXPERT_MODE_HELP": "Permet un affichage plus détaillé.",
"BLOCK_VALIDITY_WINDOW": "Délai d'incertitude des blocs",
"BLOCK_VALIDITY_WINDOW_SHORT": "Délai d'incertitude",
"BLOCK_VALIDITY_WINDOW_HELP": "Délai avant de considérer qu'une information est validée",
"BLOCK_VALIDITY_OPTION": {
"NONE": "Aucun délai",
"N": "{{time | formatDuration}} ({{count}} blocs)"
},
"POPUP_PEER": {
"TITLE": "Nœud Duniter",
"HOST": "Adresse",
"HOST_HELP": "Adresse : serveur:port",
"USE_SSL": "Sécurisé ?",
"USE_SSL_HELP": "(Chiffrement SSL)",
"BTN_SHOW_LIST": "Liste des noeuds"
}
},
"BLOCKCHAIN": {
"HASH": "Hash : {{hash}}",
"VIEW": {
"HEADER_TITLE": "Bloc #{{number}}-{{hash|formatHash}}",
"TITLE_CURRENT": "Bloc courant",
"TITLE": "Bloc #{{number|formatInteger}}",
"COMPUTED_BY": "Calculé par le noeud de",
"SHOW_RAW": "Voir le fichier brut",
"TECHNICAL_DIVIDER": "Informations techniques",
"VERSION": "Version du format",
"HASH": "Hash calculé",
"UNIVERSAL_DIVIDEND_HELP": "Monnaie co-produite par chacun des {{membersCount}} membres",
"EMPTY": "Aucune donnée dans ce bloc",
"POW_MIN": "Difficulté minimale",
"POW_MIN_HELP": "Difficulté imposée pour le calcul du hash",
"DATA_DIVIDER": "Données",
"IDENTITIES_COUNT": "Nouvelles identités",
"JOINERS_COUNT": "Nouveaux membres",
"ACTIVES_COUNT": "Renouvellements",
"ACTIVES_COUNT_HELP": "Membres ayant renouvelé leur adhésion",
"LEAVERS_COUNT": "Membres sortants",
"LEAVERS_COUNT_HELP": "Membres ne souhaitant plus de certification",
"EXCLUDED_COUNT": "Membres exclus",
"EXCLUDED_COUNT_HELP": "Anciens membres exclus par non renouvellement ou manque de certifications",
"REVOKED_COUNT": "Identités révoquées",
"REVOKED_COUNT_HELP": "Ces comptes ne pourront plus être membres",
"TX_COUNT": "Transactions",
"CERT_COUNT": "Certifications",
"TX_TO_HIMSELF": "Opération de change",
"TX_OUTPUT_UNLOCK_CONDITIONS": "Conditions de déblocage",
"TX_OUTPUT_OPERATOR": {
"AND": "et",
"OR": "ou"
},
"TX_OUTPUT_FUNCTION": {
"SIG": "<b>Signature</b> de ",
"XHX": "<b>Mot de passe</b>, dont SHA256 =",
"CSV": "Bloqué pendant",
"CLTV": "Bloqué jusqu'à"
}
},
"LOOKUP": {
"TITLE": "Blocs",
"NO_BLOCK": "Aucun bloc",
"LAST_BLOCKS": "Derniers blocs :",
"BTN_COMPACT": "Compacter"
}
},
"CURRENCY": {
"VIEW": {
"TITLE": "Monnaie",
"TAB_CURRENCY": "Monnaie",
"TAB_WOT": "Toile de confiance",
"TAB_NETWORK": "Réseau",
"TAB_BLOCKS": "Blocs",
"CURRENCY_SHORT_DESCRIPTION": "{{currency|abbreviate}} est une <b>monnaie libre</b>, démarrée {{firstBlockTime|formatFromNow}}. Elle compte actuellement <b>{{N}} membres</b>, qui produisent et perçoivent un <a ng-click=\"showHelpModal('ud')\">Dividende Universel</a> (DU), chaque {{dt|formatPeriod}}.",
"NETWORK_RULES_DIVIDER": "Règles du réseau",
"CURRENCY_NAME": "Nom de la monnaie",
"MEMBERS": "Nombre de membres",
"MEMBERS_VARIATION": "Variation depuis le dernier DU",
"MONEY_DIVIDER": "Monnaie",
"MASS": "Masse monétaire",
"SHARE": "Masse par membre",
"UD": "Dividende universel",
"C_ACTUAL": "Croissance actuelle",
"MEDIAN_TIME": "Heure de la blockchain",
"POW_MIN": "Niveau minimal de difficulté de calcul",
"MONEY_RULES_DIVIDER": "Règles de la monnaie",
"C_RULE": "Croissance théorique cible",
"UD_RULE": "Calcul du dividende universel",
"DT_REEVAL": "Période de revalorisation du DU",
"REEVAL_SYMBOL": "reval",
"DT_REEVAL_VALUE": "Tous les <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
"UD_REEVAL_TIME0": "Date de la 1ère revalorisation",
"SIG_QTY_RULE": "Nombre de certifications requises pour devenir membre",
"SIG_STOCK": "Nombre maximal de certifications émises par membre",
"SIG_PERIOD": "Délai minimal d'attente entre 2 certifications successives émises par une même personne",
"SIG_WINDOW": "Délai limite de prise en compte d'une certification",
"SIG_VALIDITY": "Durée de vie d'une certification qui a été prise en compte",
"MS_WINDOW": "Délai limite de prise en compte d'une demande d'adhésion comme membre",
"MS_VALIDITY": "Durée de vie d'une adhésion qui a été prise en compte",
"STEP_MAX": "Distance maximale, par les certifications, entre un nouvel entrant et les membres référents",
"WOT_RULES_DIVIDER": "Règles de la toile de confiance",
"SENTRIES": "Nombre de certifications (émises <b>et</b> reçues) pour devenir membre référent",
"SENTRIES_FORMULA": "Nombre de certifications (émises <b>et</b> reçues) pour devenir membre référent (formule)",
"XPERCENT":"Pourcentage minimum de membres référents à atteindre pour respecter la règle de distance",
"AVG_GEN_TIME": "Temps moyen entre deux blocs",
"CURRENT": "actuel",
"MATH_CEILING": "PLAFOND",
"DISPLAY_ALL_RULES": "Afficher toutes les règles ?",
"BTN_SHOW_LICENSE": "Voir la licence",
"WOT_DIVIDER": "Toile de confiance"
},
"LICENSE": {
"TITLE": "Licence de la monnaie",
"BTN_DOWNLOAD": "Télécharger le fichier",
"NO_LICENSE_FILE": "Fichier de licence non trouvé."
}
},
"NETWORK": {
"VIEW": {
"MEDIAN_TIME": "Heure de la blockchain",
"LOADING_PEERS": "Chargement des noeuds...",
"NODE_ADDRESS": "Adresse :",
"SOFTWARE": "Logiciel",
"WARN_PRE_RELEASE": "Pré-version (dernière version stable : <b>{{version}}</b>)",
"WARN_NEW_RELEASE": "Version <b>{{version}}</b> disponible",
"WS2PID": "Identifiant :",
"PRIVATE_ACCESS": "Accès privé",
"POW_PREFIX": "Préfixe de preuve de travail :",
"ENDPOINTS": {
"BMAS": "Interface sécurisée (SSL)",
"BMATOR": "Interface réseau TOR",
"WS2P": "Interface WS2P",
"ES_USER_API": "Noeud de données Cesium+"
}
},
"INFO": {
"ONLY_SSL_PEERS": "Les noeuds non SSL ont un affichage dégradé, car Cesium fonctionne en mode HTTPS."
}
},
"PEER": {
"PEERS": "Nœuds",
"SIGNED_ON_BLOCK": "Signé sur le bloc",
"MIRROR": "miroir",
"MIRRORS": "Miroirs",
"MIRROR_PEERS": "Nœuds miroirs",
"PEER_LIST" : "Liste des nœuds",
"MEMBERS" : "Membres",
"MEMBER_PEERS" : "Nœuds membres",
"ALL_PEERS" : "Tous les nœuds",
"DIFFICULTY" : "Difficulté",
"API" : "API",
"CURRENT_BLOCK" : "Bloc #",
"POPOVER_FILTER_TITLE": "Filtre",
"OFFLINE": "Hors ligne",
"OFFLINE_PEERS": "Nœuds hors ligne",
"BTN_SHOW_PEER": "Voir le nœud",
"VIEW": {
"TITLE": "Nœud",
"OWNER": "Appartient à",
"SHOW_RAW_PEERING": "Voir la fiche de pair",
"SHOW_RAW_CURRENT_BLOCK": "Voir le dernier bloc (format brut)",
"LAST_BLOCKS": "Derniers blocs connus",
"KNOWN_PEERS": "Nœuds connus :",
"GENERAL_DIVIDER": "Informations générales",
"ERROR": {
"LOADING_TOR_NODE_ERROR": "Récupération des informations du noeud impossible. Le délai d'attente est dépassé.",
"LOADING_NODE_ERROR": "Récupération des informations du noeud impossible"
}
}
},
"WOT": {
"SEARCH_HELP": "Recherche (pseudo ou clé publique)",
"SEARCH_INIT_PHASE_WARNING": "Durant la phase de pré-inscription, la recherche des inscriptions en attente <b>peut être longue</b>. Merci de patienter...",
"REGISTERED_SINCE": "Inscrit le",
"REGISTERED_SINCE_BLOCK": "Inscrit au bloc #",
"NO_CERTIFICATION": "Aucune certification validée",
"NO_GIVEN_CERTIFICATION": "Aucune certification émise",
"NOT_MEMBER_PARENTHESIS": "(non membre)",
"IDENTITY_REVOKED_PARENTHESIS": "(identité révoquée)",
"MEMBER_PENDING_REVOCATION_PARENTHESIS": "(en cours de révocation)",
"EXPIRE_IN": "Expiration",
"NOT_WRITTEN_EXPIRE_IN": "Date limite<br/>de traitement",
"EXPIRED": "Expiré",
"PSEUDO": "Pseudonyme",
"SIGNED_ON_BLOCK": "Emise au bloc #{{block}}",
"WRITTEN_ON_BLOCK": "Ecrite au bloc #{{block}}",
"GENERAL_DIVIDER": "Informations générales",
"NOT_MEMBER_ACCOUNT": "Compte simple (non membre)",
"NOT_MEMBER_ACCOUNT_HELP": "Il s'agit d'un simple portefeuille, sans demande d'adhésion en attente.",
"TECHNICAL_DIVIDER": "Informations techniques",
"BTN_CERTIFY": "Certifier",
"BTN_YES_CERTIFY": "Oui, certifier",
"BTN_SELECT_AND_CERTIFY": "Nouvelle certification",
"ACCOUNT_OPERATIONS": "Opérations sur le compte",
"VIEW": {
"POPOVER_SHARE_TITLE": "Identité {{title}}"
},
"LOOKUP": {
"TITLE": "Toile de confiance",
"NEWCOMERS": "Nouveaux membres",
"NEWCOMERS_COUNT": "{{count}} membres",
"PENDING": "Inscriptions en attente",
"PENDING_COUNT": "{{count}} inscriptions en attente",
"REGISTERED": "Inscrit {{sigDate | formatFromNow}}",
"MEMBER_FROM": "Membre depuis {{memberDate|medianFromNowShort}}",
"BTN_NEWCOMERS": "Nouveaux membres",
"BTN_PENDING": "Inscriptions en attente",
"SHOW_MORE": "Afficher plus",
"SHOW_MORE_COUNT": "(limite actuelle à {{limit}})",
"NO_PENDING": "Aucune inscription en attente.",
"NO_NEWCOMERS": "Aucun membre."
},
"CONTACTS": {
"TITLE": "Contacts"
},
"MODAL": {
"TITLE": "Recherche"
},
"CERTIFICATIONS": {
"TITLE": "{{uid}} - Certifications",
"SUMMARY": "Certifications reçues",
"LIST": "Détail des certifications reçues",
"PENDING_LIST": "Certifications en attente de traitement",
"RECEIVED": "Certifications reçues",
"RECEIVED_BY": "Certifications reçues par {{uid}}",
"ERROR": "Certifications reçues en erreur",
"SENTRY_MEMBER": "Membre référent"
},
"OPERATIONS": {
"TITLE": "{{uid}} - Opérations"
},
"GIVEN_CERTIFICATIONS": {
"TITLE": "{{uid}} - Certifications émises",
"SUMMARY": "Certifications émises",
"LIST": "Détail des certifications émises",
"PENDING_LIST": "Certifications en attente de traitement",
"SENT": "Certifications émises",
"SENT_BY": "Certifications émises par {{uid}}",
"ERROR": "Certifications émises en erreur"
}
},
"LOGIN": {
"TITLE": "<i class=\"icon ion-log-in\"></i> Connexion",
"SCRYPT_FORM_HELP": "Veuillez saisir vos identifiants.<br>Pensez à vérifier que la clé publique est celle de votre compte.",
"PUBKEY_FORM_HELP": "Veuillez saisir une clé publique de compte :",
"FILE_FORM_HELP": "Choisissez le fichier de trousseau à utiliser :",
"SCAN_FORM_HELP": "Scanner le QR code d'un portefeuille.",
"SALT": "Identifiant secret",
"SALT_HELP": "Identifiant secret",
"SHOW_SALT": "Afficher l'identifiant secret ?",
"PASSWORD": "Mot de passe",
"PASSWORD_HELP": "Mot de passe",
"PUBKEY_HELP": "Clé publique ou pseudonyme",
"NO_ACCOUNT_QUESTION": "Vous n'avez pas encore de compte ?",
"HAVE_ACCOUNT_QUESTION": "Vous avez déjà un compte ?",
"CREATE_ACCOUNT": "Créer un compte...",
"CREATE_FREE_ACCOUNT": "Créer un compte gratuitement",
"FORGOTTEN_ID": "Mot de passe oublié ?",
"ASSOCIATED_PUBKEY": "Clé publique du trousseau :",
"BTN_METHODS": "Autres méthodes",
"BTN_METHODS_DOTS": "Changer de méthode...",
"METHOD_POPOVER_TITLE": "Méthodes",
"MEMORIZE_AUTH_FILE": "Mémoriser ce trousseau le temps de la session de navigation",
"SCRYPT_PARAMETERS": "Paramètres (Scrypt) :",
"AUTO_LOGOUT": {
"TITLE": "Information",
"MESSAGE": "<i class=\"ion-android-time\"></i> Vous avez été <b>déconnecté</b> automatiquement, suite à une inactivité prolongée.",
"BTN_RELOGIN": "Me reconnecter",
"IDLE_WARNING": "Vous allez être déconnecté... {{countdown}}"
},
"METHOD": {
"SCRYPT_DEFAULT": "Identifiant secret et mot de passe",
"SCRYPT_ADVANCED": "Salage avancé",
"FILE": "Fichier de trousseau",
"PUBKEY": "Clé publique ou pseudonyme",
"SCAN": "Scanner un QR code"
},
"SCRYPT": {
"SIMPLE": "Salage léger",
"DEFAULT": "Salage standard",
"SECURE": "Salage sûr",
"HARDEST": "Salage le plus sûr",
"EXTREME": "Salage extrême",
"USER": "Salage personnalisé",
"N": "N (Loop):",
"r": "r (RAM):",
"p": "p (CPU):"
},
"FILE": {
"HELP": "Format de fichier attendu : <b>.yml</b> ou <b>.dunikey</b> (type PubSec, WIF ou EWIF)."
}
},
"AUTH": {
"TITLE": "<i class=\"icon ion-locked\"></i> Authentification",
"BTN_AUTH": "S'authentifier",
"GENERAL_HELP": "Veuillez vous authentifier :",
"EXPECTED_UID_HELP": "Veuillez vous authentifier sur le compte <i class=\"ion-person\"></i> {{uid}} :",
"EXPECTED_PUBKEY_HELP": "Veuillez vous authentifier sur le portefeuille <br class=\"visible-xs\"/><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} :",
"SCAN_FORM_HELP": "Scanner le QR code de la <b>clef privée</b> du portefeuille."
},
"ACCOUNT": {
"TITLE": "Mon compte",
"BALANCE": "Solde",
"LAST_TX": "Dernières transactions validées",
"BALANCE_ACCOUNT": "Solde du compte",
"NO_TX": "Aucune transaction",
"SHOW_MORE_TX": "Afficher plus",
"SHOW_ALL_TX": "Afficher tout",
"TX_FROM_DATE": "(limite actuelle à {{fromTime|medianFromNowShort}})",
"PENDING_TX": "Transactions en attente de traitement",
"VALIDATING_TX": "Transactions traitées, non validées",
"ERROR_TX": "Transactions non executées",
"ERROR_TX_SENT": "Transactions envoyées en échec",
"PENDING_TX_RECEIVED": "Transactions en attente de réception",
"EVENTS": "Evénements",
"OUT_DISTANCED": "Vos certifications actuelles proviennent d'un groupe trop isolé de la <a ng-click=\"showHelpModal('wot')\">Toile de Confiance</a> (TdC) : la <a ng-click=\"showHelpModal('distance_rule')\">règle de distance maximale</a> n'est pas respectée.<br/>Vous devez obtenir des certifications provenant d'autres secteurs de la TdC, ou bien attendre que celle-ci se resserre.",
"WAITING_MEMBERSHIP": "Demande d'adhésion envoyée. En attente d'acceptation.",
"WAITING_CERTIFICATIONS": "Vous devez <b>obtenir {{needCertificationCount}} certification(s)</b> pour devenir membre et produire le <a ng-click=\"showHelpModal('ud')\">Dividende Universel</a>. Votre compte est cependant déjà opérationnel, pour recevoir et effectuer des paiements.",
"WAITING_CERTIFICATIONS_HELP": "Pour obtenir vos certifications, sollicitez uniquement des membres <b>qui vous connaissent suffisamment</b>, comme l'exige <a ng-click=\"showLicenseModal()\">la licence de la monnaie</a> que vous avez acceptée.<br/>Si vous ne connaissez pas suffisamment de membres, faites-le savoir sur <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">le forum utilisateur</a>.",
"WILL_MISSING_CERTIFICATIONS": "Vous allez bientôt <b>manquer de certifications</b> (au moins {{willNeedCertificationCount}} sont requises)",
"WILL_NEED_RENEW_MEMBERSHIP": "Votre adhésion comme membre <b>va expirer {{membershipExpiresIn|formatDurationTo}}</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a> d'ici là.",
"NEED_RENEW_MEMBERSHIP": "Vous n'êtes plus membre de la monnaie, car <b>votre adhésion a expiré</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a>.",
"NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Vous n'êtes plus membre de la monnaie, <b>pour manque de certifications</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a>.",
"NO_WAITING_MEMBERSHIP": "Aucune demande d'adhésion en attente. Si vous souhaitez <b>devenir membre</b>, pensez à <a ng-click=\"doQuickFix('membership')\">envoyer la demande d'adhésion</a>.",
"CERTIFICATION_COUNT": "Certifications reçues",
"CERTIFICATION_COUNT_SHORT": "Certifications",
"SIG_STOCK": "Certifications envoyées",
"BTN_RECEIVE_MONEY": "Encaisser",
"BTN_SELECT_ALTERNATIVES_IDENTITIES": "Basculer vers une autre identité...",
"BTN_FIX_MEMBERSHIP": "Renvoyer la demande d'adhésion...",
"BTN_MEMBERSHIP_RENEW": "Renouveler l'adhésion",
"BTN_MEMBERSHIP_RENEW_DOTS": "Renouveler l'adhésion...",
"BTN_MEMBERSHIP_OUT_DOTS": "Arrêter l'adhésion...",
"BTN_SECURITY_DOTS": "Compte et sécurité...",
"BTN_SHOW_DETAILS": "Afficher les infos techniques",
"LOCKED_OUTPUTS_POPOVER": {
"TITLE": "Montant verrouillé",
"DESCRIPTION": "Voici les conditions de déverrouillage de ce montant :",
"DESCRIPTION_MANY": "Cette transaction est composé de plusieurs parties, dont voici les conditions de déverrouillage :",
"LOCKED_AMOUNT": "Conditions pour le montant :"
},
"NEW": {
"TITLE": "Création de compte",
"INTRO_WARNING_TIME": "La création d'un compte sur {{name|capitalize}} est très simple. Veuillez néanmoins prendre suffisament de temps pour faire correctement cette formalité (pour ne pas oublier les identifiants, mots de passe, etc.).",
"INTRO_WARNING_SECURITY": "Vérifiez que le matériel que vous utilisez actuellement (ordinateur, tablette, téléphone) <b>est sécurisé et digne de confiance</b>.",
"INTRO_WARNING_SECURITY_HELP": "Anti-virus à jour, pare-feu activé, session protégée par mot de passe ou code pin, etc.",
"INTRO_HELP": "Cliquez sur <b>{{'COMMON.BTN_START'|translate}}</b> pour débuter la création de compte. Vous serez guidé étape par étape.",
"REGISTRATION_NODE": "Votre inscription sera enregistrée via le noeud Duniter <b>{{server}}</b>, qui le diffusera ensuite au reste du réseau de la monnaie.",
"REGISTRATION_NODE_HELP": "Si vous ne faites pas confiance en ce noeud, veuillez en changer <a ng-click=\"doQuickFix('settings')\">dans les paramètres</a> de Cesium.",
"SELECT_ACCOUNT_TYPE": "Choisissez le type de compte à créer :",
"MEMBER_ACCOUNT": "Compte membre",
"MEMBER_ACCOUNT_TITLE": "Création d'un compte membre",
"MEMBER_ACCOUNT_HELP": "Si vous n'êtes pas encore inscrit en tant qu'individu (un seul compte possible par individu). Ce compte permet de co-produire la monnaie, en recevant un <b>dividende universel</b> chaque {{parameters.dt|formatPeriod}}.",
"WALLET_ACCOUNT": "Simple portefeuille",
"WALLET_ACCOUNT_TITLE": "Création d'un portefeuille",
"WALLET_ACCOUNT_HELP": "Pour tous les autres cas, par exemple si vous avez besoin d'un compte supplémentaire.<br/>Aucun dividende universel ne sera créé par ce compte.",
"SALT_WARNING": "Choisissez votre identifiant secret.<br/>Il vous sera demandé à chaque connexion sur ce compte.<br/><br/><b>Retenez le bien</b> : en cas de perte, plus personne ne pourra accéder à votre compte !",
"PASSWORD_WARNING": "Choisissez un mot de passe.<br/>Il vous sera demandé à chaque connexion sur ce compte.<br/><br/><b>Retenez bien ce mot de passe</b : en cas de perte, plus personne ne pourra accéder à votre compte !",
"PSEUDO_WARNING": "Choisissez un pseudonyme.<br/>Il sert aux autres membres, pour vous identifier plus facilement.<div class='hidden-xs'><br/>Il <b>ne pourra pas être modifié</b>, sans refaire un compte.</div><br/><br/>Il ne doit contenir <b>ni espace, ni de caractère accentué</b>.<div class='hidden-xs'><br/>Exemple : <span class='gray'>SophieDupond, MarcelChemin, etc.</span>",
"PSEUDO": "Pseudonyme",
"PSEUDO_HELP": "Pseudonyme",
"SALT_CONFIRM": "Confirmation",
"SALT_CONFIRM_HELP": "Confirmation de l'identifiant secret",
"PASSWORD_CONFIRM": "Confirmation",
"PASSWORD_CONFIRM_HELP": "Confirmation du mot de passe",
"SLIDE_6_TITLE": "Confirmation :",
"COMPUTING_PUBKEY": "Calcul en cours...",
"LAST_SLIDE_CONGRATULATION": "Vous avez saisi toutes les informations nécessaires : Bravo !<br/>Vous pouvez maintenant <b>envoyer la demande de création</b> de compte.</b><br/><br/>Pour information, la clé publique ci-dessous identifiera votre futur compte.<br/>Elle pourra être communiquée à des tiers pour recevoir leurs paiements.<br/><b>Il n'est pas obligatoire</b> de la noter ici, vous pourrez également le faire plus tard.",
"CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Avertissement :</b> l'identifiant secret, le mot de passe et le pseudonyme ne pourront plus être modifiés.<br/><br/><b>Assurez-vous de toujours vous en rappeler !</b><br/><br/><b>Êtes-vous sûr</b> de vouloir envoyer cette demande d'inscription ?",
"CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Avertissement :</b> l'identifiant secret et le mot de passe ne pourront plus être modifiés.<br/><br/><b>Assurez-vous de toujours vous en rappeler !</b><br/><br/><b>Êtes-vous sûr</b> de vouloir continuer avec ces identifiants ?",
"CHECKING_PSEUDO": "Vérification...",
"PSEUDO_AVAILABLE": "Pseudonyme disponible",
"PSEUDO_NOT_AVAILABLE": "Pseudonyme non disponible",
"INFO_LICENSE": "Avant de créer un compte membre, <b>veuillez lire et accepter la licence</b> d'usage de la monnaie :",
"BTN_ACCEPT": "J'accepte",
"BTN_ACCEPT_LICENSE": "J'accepte la licence"
},
"POPUP_REGISTER": {
"TITLE": "Choisissez un pseudonyme",
"HELP": "Un pseudonyme est obligatoire pour devenir membre."
},
"SELECT_IDENTITY_MODAL": {
"TITLE": "Sélection de l'identité",
"HELP": "Plusieurs <b>identités différentes</b> ont été envoyées, pour la clé publique <span class=\"gray\"><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</span>.<br/>Veuillez sélectionner le dossier à utiliser :"
},
"SELECT_WALLET_MODAL": {
"TITLE": "Sélection du portefeuille"
},
"WALLET_LIST": {
"TITLE": "Mes portefeuilles",
"BTN_NEW": "Ajouter un portefeuille",
"BTN_DOWNLOAD": "Télécharger la liste",
"BTN_IMPORT_FILE_DOTS": "Importer depuis un fichier...",
"NO_WALLET": "Aucun portefeuille secondaire",
"BTN_DELETE": "Retirer un portefeuille secondaire...",
"BTN_RENAME": "Renommer le portefeuille",
"EXPORT_FILENAME": "mes_portefeuilles-{{pubkey|formatPubkey}}-{{currency}}.csv",
"TOTAL_DOTS": "Total : ",
"EDIT_POPOVER": {
"TITLE": "Renommer le portefeuille",
"HELP": "Renseignez le nouveau nom",
"NAME_HELP": "Nom du portefeuille"
},
"IMPORT_MODAL": {
"TITLE": "Importer des portefeuilles",
"HELP": "Pour <b>importer des porftefeuilles</b>, veuillez glisser dans la zone ci-dessous le fichier de la liste des portefeuilles, ou bien cliquer dans la zone pour rechercher un fichier.",
"WALLET_COUNT": "<b>{{count}}</b> nouveau{{count > 1 ? 'x' : ''}} portefeuille{{count > 1 ? 's' : ''}}",
"NO_NEW_WALLET": "Aucun nouveau portefeuille"
}
},
"SECURITY": {
"ADD_QUESTION": "Ajouter une question personnalisée",
"BTN_CLEAN": "Vider",
"BTN_RESET": "Réinitialiser",
"DOWNLOAD_REVOKE": "Sauvegarder mon fichier de révocation",
"DOWNLOAD_REVOKE_HELP": "Disposer d'un fichier de révocation est important, par exemple en cas de perte de vos identifiants. Il vous permet de <b>sortir ce compte de la toile de confiance</b>, en redevenant ainsi un simple portefeuille.",
"GENERATE_KEYFILE": "Générer mon fichier de trousseau...",
"GENERATE_KEYFILE_HELP": "Génère un fichier permettant de vous authentifier sans saisir vos identifiants.<br/><b>Attention :</b> ce fichier contiendra votre trousseau de compte (clefs publique et secrète) ; il est donc très important de le mettre en lieu sûr !",
"KEYFILE_FILENAME": "trousseau-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
"MEMBERSHIP_IN": "Transformer en compte membre...",
"MEMBERSHIP_IN_HELP": "Permet de <b>transformer</b> un compte simple portefeuille <b>en compte membre</b>, en envoyant une demande d'adhésion. Utile uniquement si vous n'avez pas déjà un autre compte membre.",
"SEND_IDENTITY": "Publier son identité...",
"SEND_IDENTITY_HELP": "Permet d'associer un pseudonyme à ce compte, mais <b>sans faire de demande d'adhésion</b> pour devenir membre. Cette association n'est généralement pas utile, car la validité de cette association de pseudonyme est limitée dans le temps.",
"HELP_LEVEL": "Pour générer un fichier de sauvegarde de vos identifiants, choisissez <strong> au moins {{nb}} questions :</strong>",
"LEVEL": "Niveau de sécurité",
"LOW_LEVEL": "Faible <span class=\"hidden-xs\">(2 questions minimum)</span>",
"MEDIUM_LEVEL": "Moyen <span class=\"hidden-xs\">(4 questions minimum)</span>",
"QUESTION_1": "Comment s'appelait votre meilleur ami lorsque vous étiez adolescent ?",
"QUESTION_2": "Comment s'appelait votre premier animal de compagnie ?",
"QUESTION_3": "Quel est le premier plat que vous avez appris à cuisiner ?",
"QUESTION_4": "Quel est le premier film que vous avez vu au cinéma ?",
"QUESTION_5": "Où êtes-vous allé la première fois que vous avez pris l'avion ?",
"QUESTION_6": "Comment s'appelait votre instituteur préféré à l'école primaire ?",
"QUESTION_7": "Quel serait selon vous le métier idéal ?",
"QUESTION_8": "Quel est le livre pour enfants que vous préférez ?",
"QUESTION_9": "Quel était le modèle de votre premier véhicule ?",
"QUESTION_10": "Quel était votre surnom lorsque vous étiez enfant ?",
"QUESTION_11": "Quel était votre personnage ou acteur de cinéma préféré lorsque vous étiez étudiant ?",
"QUESTION_12": "Quel était votre chanteur ou groupe préféré lorsque vous étiez étudiant ?",
"QUESTION_13": "Dans quelle ville vos parents se sont-ils rencontrés ?",
"QUESTION_14": "Comment s'appelait votre premier patron ?",
"QUESTION_15": "Quel est le nom de la rue où vous avez grandi ?",
"QUESTION_16": "Quel est le nom de la première plage où vous vous êtes baigné ?",
"QUESTION_17": "Quel est le premier album que vous avez acheté ?",
"QUESTION_18": "Quel est le nom de votre équipe de sport préférée ?",
"QUESTION_19": "Quel était le métier de votre grand-père ?",
"RECOVER_ID": "Retrouver mon mot de passe...",
"RECOVER_ID_HELP": "Si vous disposez d'un <b>fichier de sauvegarde de vos identifiants</b>, vous pouvez les retrouver en répondant correctement à vos questions personnelles.",
"REVOCATION_WITH_FILE": "Révoquer mon compte membre...",
"REVOCATION_WITH_FILE_DESCRIPTION": "Si vous avez <b>définitivement perdus vos identifiants</b> de compte membre (ou que la sécurité du compte est compromise), vous pouvez utiliser <b>le fichier de révocation</b> du compte pour <b>forcer sa sortie définitive de la toile de confiance</b>.",
"REVOCATION_WITH_FILE_HELP": "Pour <b>révoquer définitivement</b> un compte membre, veuillez glisser dans la zone ci-dessous votre fichier de révocation, ou bien cliquer dans la zone pour rechercher un fichier.",
"REVOCATION_WALLET": "Révoquer immédiatement ce compte",
"REVOCATION_WALLET_HELP": "Demander la révocation de votre identité entraîne la <b>sortie de la toile de confiance</b> (définitive pour le pseudonyme et la clé publique associés). Le compte ne pourra plus produire de Dividende Universel.<br/>Vous pourrez toutefois encore vous y connecter, comme à un simple portefeuille.",
"REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
"SAVE_ID": "Sauvegarder mes identifiants...",
"SAVE_ID_HELP": "Création d'un fichier de sauvegarde, pour <b>retrouver votre mot de passe</b> (et l'identifiant secret) <b>en cas de d'oubli</b>. Le fichier est <b>sécurisé</b> (chiffré) à l'aide de questions personnelles.",
"STRONG_LEVEL": "Fort <span class=\"hidden-xs \">(6 questions minimum)</span>",
"TITLE": "Compte et sécurité",
"KEYFILE": {
"PUBSEC_FORMAT": "Format PubSec.",
"PUBSEC_FORMAT_HELP": "Ce format stocke votre trousseau de manière très simple. Il est compatible notamment avec Cesium, ğannonce et Duniter.<br/><b>Attention :</b>Le fichier <b>n'est pas chiffré</b> (la clef secrète y apparaît en clair) ; veuillez donc le stocker en lieu sûr !",
"WIF_FORMAT": "Format WIF (Wallet Import Format) - v1",
"WIF_FORMAT_HELP": "Ce format stocke votre trousseau en y intégrant une somme de contrôle pour vérifier l'intégrité du fichier. Il est compatible notamment avec les portefeuilles papier (Duniter paper wallet).<br/><b>Attention :</b>Le fichier <b>n'est pas chiffré</b> (la clef secrète y apparaît en clair) ; veuillez donc le stocker en lieu sûr !",
"EWIF_FORMAT": "Format EWIF (Encrypted Wallet Import Format) - v1",
"EWIF_FORMAT_HELP": "Ce format stocke votre trousseau <b>de manière chiffrée</b> à partir d'une phrase secrète de votre choix. Il intègre aussi une somme de contrôle pour vérifier l'intégrité du fichier.<br/><b>Attention :</b> Veillez à toujours vous souvenir de votre phrase secrète !",
"PASSWORD_POPUP": {
"TITLE": "Fichier de trousseau chiffré",
"HELP": "Veuillez indiquer la phrase secrète :",
"PASSWORD_HELP": "Phrase secrète"
},
"ERROR": {
"BAD_PASSWORD": "Phrase secrète incorrecte",
"BAD_CHECKSUM": "Somme de contrôle incorrecte"
}
}
},
"FILE_NAME": "{{currency}} - Relevé du compte {{pubkey|formatPubkey}} au {{currentTime|formatDateForFile}}.csv",
"HEADERS": {
"TIME": "Date",
"AMOUNT": "Montant",
"COMMENT": "Commentaire"
}
},
"TRANSFER": {
"TITLE": "Virement",
"SUB_TITLE": "Faire un virement",
"SUB_TITLE_ALL": "Vider le compte",
"FROM": "De",
"TO": "À",
"AMOUNT": "Montant",
"AMOUNT_HELP": "Montant",
"COMMENT": "Commentaire",
"COMMENT_HELP": "Commentaire",
"BTN_SEND": "Envoyer",
"BTN_ADD_COMMENT": "Ajouter un commentaire",
"REST": "Reste du compte",
"REST_TO": "à",
"WARN_COMMENT_IS_PUBLIC": "Veuillez noter que <b>les commentaires sont publics</b> (non chiffrés).",
"MODAL": {
"TITLE": "Virement"
}
},
"ERROR": {
"UNKNOWN_URI_FORMAT": "Format d'URI inconnu",
"PUBKEY_INVALID_CHECKSUM": "Clé publique invalide (bad checksum).",
"POPUP_TITLE": "Erreur",
"UNKNOWN_ERROR": "Erreur inconnue",
"CRYPTO_UNKNOWN_ERROR": "Votre navigateur ne semble pas compatible avec les fonctionnalités de cryptographie.",
"DOWNLOAD_KEYFILE_FAILED": "Échec de la génération du fichier de trousseau.",
"EQUALS_TO_PSEUDO": "Doit être différent du pseudonyme",
"EQUALS_TO_SALT": "Doit être différent de l'identifiant secret",
"FIELD_REQUIRED": "Champ obligatoire",
"FIELD_TOO_SHORT": "Valeur trop courte",
"FIELD_TOO_SHORT_WITH_LENGTH": "Valeur trop courte ({{minLength}} caractères min)",
"FIELD_TOO_LONG": "Valeur trop longue",
"FIELD_TOO_LONG_WITH_LENGTH": "Valeur trop longue ({{maxLength}} caractères max)",
"FIELD_MIN": "Valeur minimale : {{min}}",
"FIELD_MAX": "Valeur maximale : {{max}}",
"FIELD_ACCENT": "Caractères accentués et virgules non autorisés",
"FIELD_NOT_NUMBER": "Valeur numérique attendue",
"FIELD_NOT_INT": "Valeur entière attendue",
"FIELD_NOT_EMAIL": "Adresse email non valide",
"PASSWORD_NOT_CONFIRMED": "Ne correspond pas au mot de passe",
"SALT_NOT_CONFIRMED": "Ne correspond pas à l'identifiant secret",
"SEND_IDENTITY_FAILED": "Échec de l'inscription",
"SEND_CERTIFICATION_FAILED": "Échec de la certification",
"NEED_MEMBER_ACCOUNT_TO_CERTIFY": "Vous ne pouvez pas effectuer de certification, car votre compte n'est <b>pas membre</b>.",
"NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "Vous ne pouvez pas effectuer de certification, car votre compte n'est pas encore membre.<br/><br/>Il vous manque encore des certifications, ou bien celles-ci n'ont pas encore été validées.",
"NOT_MEMBER_FOR_CERTIFICATION": "Votre compte n'est pas encore membre.",
"IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Compte non certifiable. Aucune demande d'adhésion n'a été faite, ou bien elle n'a pas été renouvelée.",
"LOGIN_FAILED": "Erreur lors de la connexion.",
"LOAD_IDENTITY_FAILED": "Erreur de chargement de l'identité.",
"LOAD_REQUIREMENTS_FAILED": "Erreur de chargement des prérequis de l'identité.",
"SEND_MEMBERSHIP_IN_FAILED": "Échec de la tentative d'entrée dans la communauté.",
"SEND_MEMBERSHIP_OUT_FAILED": "Échec de l'arrêt de l'adhésion.",
"REFRESH_WALLET_DATA": "Échec du rafraîchissement du portefeuille.",
"GET_CURRENCY_PARAMETER": "Échec de la récupération des règles de la monnaie.",
"GET_CURRENCY_FAILED": "Chargement de la monnaie impossible. Veuillez réessayer plus tard.",
"SEND_TX_FAILED": "Échec du virement.",
"ALL_SOURCES_USED": "Veuillez attendre le calcul du prochain bloc (toutes vos sources de monnaie ont été utilisées).",
"NOT_ENOUGH_SOURCES": "Pas assez de change pour envoyer ce montant en une seule transaction.<br/>Montant maximum : {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
"ACCOUNT_CREATION_FAILED": "Échec de la création du compte membre.",
"RESTORE_WALLET_DATA_ERROR": "Échec du rechargement des paramètres depuis le stockage local",
"LOAD_WALLET_DATA_ERROR": "Échec du chargement des données du portefeuille.",
"COPY_CLIPBOARD_FAILED": "Copie de la valeur impossible.",
"TAKE_PICTURE_FAILED": "Échec de la récupération de la photo.",
"SCAN_FAILED": "Échec du scan de QR-code.",
"SCAN_UNKNOWN_FORMAT": "Code non reconnu.",
"WOT_LOOKUP_FAILED": "Échec de la recherche.",
"LOAD_PEER_DATA_FAILED": "Lecture du nœud Duniter impossible. Veuillez réessayer ultérieurement.",
"NEED_LOGIN_FIRST": "Veuillez d'abord vous connecter.",
"AMOUNT_REQUIRED": "Le montant est obligatoire.",
"AMOUNT_NEGATIVE": "Montant négatif non autorisé.",
"NOT_ENOUGH_CREDIT": "Crédit insuffisant.",
"INVALID_NODE_SUMMARY": "Nœud injoignable ou adresse invalide.",
"INVALID_USER_ID": "Le pseudonyme ne doit contenir ni espace ni caractère spécial ou accentué.",
"INVALID_COMMENT": "Le champ 'référence' ne doit pas contenir de caractères accentués.",
"INVALID_PUBKEY": "La clé publique n'a pas le format attendu.",
"INVALID_PUBKEY_CHECKSUM": "Somme de contrôle invalide.",
"IDENTITY_REVOKED": "Cette identité <b>a été révoquée</b>. Elle ne peut plus devenir membre.",
"IDENTITY_REVOKED_WITH_TIME": "Cette identité <b>a été révoquée {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). Elle ne peut plus devenir membre.",
"IDENTITY_PENDING_REVOCATION": "La <b>révocation de cette identité</b> a été demandée et est en attente de traitement. La certification est donc désactivée.",
"IDENTITY_INVALID_BLOCK_HASH": "Cette demande d'adhésion n'est plus valide (car elle référence un bloc que les nœuds du réseau ont annulé) : cette personne doit renouveler sa demande d'adhésion <b>avant</b> d'être certifiée.",
"IDENTITY_EXPIRED": "La publication de cette identité a expiré : cette personne doit effectuer une nouvelle demande d'adhésion <b>avant</b> d'être certifiée.",
"IDENTITY_SANDBOX_FULL": "Le nœud Duniter utilisé par Cesium ne peut plus recevoir de nouvelles identités, car sa file d'attente est pleine.<br/><br/>Veuillez réessayer ultérieurement ou changer de nœud (via le menu <b>Paramètres</b>).",
"IDENTITY_NOT_FOUND": "Identité non trouvée.",
"IDENTITY_TX_FAILED": "Échec du chargement des opérations.",
"WOT_PENDING_INVALID_BLOCK_HASH": "Adhésion non valide.",
"WALLET_INVALID_BLOCK_HASH": "Votre demande d'adhésion n'est plus valide (car elle référence un bloc que les nœuds du réseau ont annulé).<br/>Vous devez <a ng-click=\"doQuickFix('fixMembership')\">envoyer une nouvelle demande</a> pour résoudre ce problème.",
"WALLET_IDENTITY_EXPIRED": "La publication de <b>votre identité a expirée</b>.<br/>Vous devez <a ng-click=\"doQuickFix('fixIdentity')\">publier à nouveau votre identité</a> pour résoudre ce problème.",
"WALLET_REVOKED": "Votre identité a été <b>révoquée</b> : ni votre pseudonyme ni votre clef publique ne pourra être utilisé à l'avenir pour un compte membre.",
"WALLET_HAS_NO_SELF": "Votre identité doit d'abord avoir été publiée, et ne pas être expirée.",
"AUTH_REQUIRED": "Authentification requise.",
"AUTH_INVALID_PUBKEY": "La clef attendue est <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}...",
"AUTH_INVALID_SCRYPT": "Identifiant ou mot de passe invalide.",
"AUTH_INVALID_FILE": "Fichier de trousseau invalide.",
"AUTH_FILE_ERROR": "Échec de l'ouverture du fichier de trousseau.",
"IDENTITY_ALREADY_CERTIFY": "Vous avez <b>déjà certifié</b> cette identité.<br/><br/>Cette certification est encore valide (expiration {{expiresIn|formatDurationTo}}).",
"IDENTITY_ALREADY_CERTIFY_PENDING": "Vous avez <b>déjà certifié</b> cette identité.<br/><br/>Cette certification est en attente de traitement (date limite de traitement {{expiresIn|formatDurationTo}}).",
"UNABLE_TO_CERTIFY_TITLE": "Certification impossible",
"LOAD_NEWCOMERS_FAILED": "Échec du chargement des nouveaux membres.",
"LOAD_PENDING_FAILED": "Échec du chargement des inscriptions en attente.",
"ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vous devez <b>être membre</b> pour pouvoir effectuer cette action.",
"ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vous devez <b>être membre (ou ancien membre)</b> pour pouvoir effectuer cette action.",
"ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Vous devez avoir <b>publié votre identité</b> pour pouvoir effectuer cette action.",
"GET_BLOCK_FAILED": "Échec de la récupération du bloc.",
"INVALID_BLOCK_HASH": "Bloc non trouvé (hash différent).",
"DOWNLOAD_REVOCATION_FAILED": "Échec du téléchargement du fichier de révocation.",
"REVOCATION_FAILED": "Échec de la révocation.",
"SALT_OR_PASSWORD_NOT_CONFIRMED": "Identifiant secret ou mot de passe incorrect.",
"RECOVER_ID_FAILED": "Échec de la récupération des identifiants",
"LOAD_FILE_FAILED" : "Échec du chargement du fichier",
"NOT_VALID_REVOCATION_FILE": "Fichier de révocation non valide (mauvais format de fichier)",
"NOT_VALID_SAVE_ID_FILE": "Fichier de récupération non valide (mauvais format de fichier)",
"NOT_VALID_KEY_FILE": "Fichier de trousseau non valide (format non reconnu)",
"EXISTING_ACCOUNT": "Vos identifiants correspondent à un compte déjà existant, dont la <a ng-click=\"showHelpModal('pubkey')\">clef publique</a> est :",
"EXISTING_ACCOUNT_REQUEST": "Veuillez modifier vos identifiants afin qu'ils correspondent à un compte non utilisé.",
"GET_LICENSE_FILE_FAILED": "Récupération du fichier de licence impossible.",
"CHECK_NETWORK_CONNECTION": "Aucun nœud ne semble accessible.<br/><br/>Veuillez <b>vérifier votre connection Internet</b>.",
"ISSUE_524_TX_FAILED": "Échec du virement.<br/><br/>Un message a été envoyé aux développeurs pour faciliter la résolution du problème. <b>Merci de votre aide</b>.",
"ADD_SECONDARY_WALLET_FAILED": "Échec de l'ajout du portefeuille secondaire.",
"UPDATE_WALLET_LIST_FAILED": "Échec du rafraîchissement des portefeuilles secondaires.",
"LOAD_WALLET_LIST_FAILED": "Échec du chargement des portefeuilles secondaires.",
"SAVE_WALLET_LIST_FAILED": "Échec de la sauvegarde des portefeuilles secondaires.",
"COULD_NOT_ADD_MAIN_WALLET": "Ce portefeuille <b>correspond au compte principal</b> avec lequel vous êtes connecté.<br/>Impossible de l'ajouter comme portefeuille secondaire.",
"COULD_NOT_ADD_EXISTING_WALLET": "Portefeuille déjà existant dans la liste.",
"UNKNOWN_WALLET_ID": "Portefeuille secondaire inconnu.",
"RESTORE_WALLET_LIST_FAILED": "Échec de la restauration des portefeuilles secondaires.",
"INVALID_FILE_FORMAT": "Format de fichier invalide."
},
"INFO": {
"POPUP_TITLE": "Information",
"CERTIFICATION_DONE": "Certification envoyée",
"NOT_ENOUGH_CREDIT": "Crédit insuffisant",
"TRANSFER_SENT": "Virement envoyé",
"COPY_TO_CLIPBOARD_DONE": "Copié dans le presse-papier",
"MEMBERSHIP_OUT_SENT": "Résiliation envoyée",
"NOT_NEED_MEMBERSHIP": "Vous êtes déjà membre.",
"IDENTITY_WILL_MISSING_CERTIFICATIONS": "Cette identité va bientôt manquer de certifications (au moins {{willNeedCertificationCount}}).",
"IDENTITY_NEED_MEMBERSHIP": "Cette identité n'a pas envoyée de demande d'adhésion. Elle le devra si elle souhaite devenir membre.",
"HAS_ALTERNATIVE_IDENTITIES": "Il existe <b>plusieurs identités</b> rattachées à cette clé publique. <b>Avant toute certification</b>, pensez à <a ng-click=\"doQuickFix('showSelectIdentities')\">consulter les autres identités</a> pour choisir la bonne, ou bien contacter le propriétaire du compte.",
"REVOCATION_SENT": "Révocation envoyée",
"REVOCATION_SENT_WAITING_PROCESS": "La <b>révocation de cette identité</b> a été demandée et est en attente de traitement.",
"FEATURES_NOT_IMPLEMENTED": "Cette fonctionnalité est encore en cours de développement.<br/>Pourquoi ne pas <b>contribuer à Cesium</b>, pour l'obtenir plus rapidement ? ;)",
"EMPTY_TX_HISTORY": "Aucune opération à exporter"
},
"CONFIRM": {
"POPUP_TITLE": "<b>Confirmation</b>",
"POPUP_WARNING_TITLE": "<b>Avertissement</b>",
"POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Avertissement de sécurité</b>",
"CERTIFY_RULES_TITLE_UID": "Certifier {{uid}}",
"CERTIFY_RULES": "<b class=\"assertive\">Ne PAS certifier</b> un compte si vous pensez que :<br/><br/><ul><li>1.) il ne correspond pas à une personne <b>physique et vivante</b>.<li>2.) son propriétaire <b>possède un autre compte</b> déjà certifié.<li>3.) son propriétaire viole (volontairement ou non) la règle 1 ou 2 (par exemple en certifiant des comptes factices ou en double).</ul><br/><b>Êtes-vous sûr</b> de vouloir néanmoins certifier cette identité ?",
"FULLSCREEN": "Afficher l'application en plein écran ?",
"EXIT_APP": "Fermer l'application ?",
"TRANSFER": "<b>Récapitulatif du virement</b> :<br/><br/><ul><li> - De : {{from}}</li><li> - A : <b>{{to}}</b></li><li> - Montant : <b>{{amount}} {{unit}}</b></li><li> - Commentaire : <i>{{comment}}</i></li></ul><br/><b>Êtes-vous sûr de vouloir effectuer ce virement ?</b>",
"TRANSFER_ALL": "<b>Récapitulatif du virement</b> :<br/><br/><ul><li> - De : {{from}}</li><li> - A : <b>{{to}}</b></li><li> - Montant : <b>{{amount}} {{unit}}</b></li><li> - Commentaire : <i>{{comment}}</i></li><br/><li> - Reste : <b>{{restAmount}} {{unit}}</b> à <b>{{restTo}}</b></li></ul><br/><b>Êtes-vous sûr de vouloir effectuer ce virement ?</b>",
"MEMBERSHIP_OUT": "Cette opération est <b>irréversible</b>.<br/></br/>Êtes-vous sûr de vouloir <b>résilier votre compte membre</b> ?",
"MEMBERSHIP_OUT_2": "Cette opération est <b>irreversible</b> !<br/><br/>Êtes-vous vraiment sûr de vouloir <b>résilier votre adhésion</b> comme membre ?",
"LOGIN_UNUSED_WALLET_TITLE": "Erreur de saisie ?",
"LOGIN_UNUSED_WALLET": "Le compte connecté semble <b>inactif</b>.<br/><br/>Il s'agit probablement d'une <b>erreur de saisie</b> dans vos identifiants de connexion. Veuillez recommencer, en vérifiant que <b>la clé publique est celle de votre compte</b>.",
"FIX_IDENTITY": "Le pseudonyme <b>{{uid}}</b> va être publiée à nouveau, en remplacement de l'ancienne publication qui a expirée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
"FIX_MEMBERSHIP": "Votre demande d'adhésion comme membre va être renvoyée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
"MEMBERSHIP": "Votre demande d'adhésion comme membre va être envoyée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
"RENEW_MEMBERSHIP": "Votre adhésion comme membre va être renouvelée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
"REVOKE_IDENTITY": "Vous allez <b>revoquer définitivement cette identité</b>.<br/><br/>La clé publique et le pseudonyme associés <b>ne pourront plus jamais être utilisés</b> (pour un compte membre). <br/></br/><b>Êtes-vous sûr</b> de vouloir révoquer définitivement ce compte ?",
"REVOKE_IDENTITY_2": "Cette opération est <b>irreversible</b> !<br/><br/>Êtes-vous vraiment sûr de vouloir <b>révoquer définitivement</b> ce compte ?",
"NOT_NEED_RENEW_MEMBERSHIP": "Votre adhésion n'a pas besoin d'être renouvelée (elle n'expirera que dans {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Êtes-vous sûr</b> de vouloir renouveler votre adhésion ?",
"SAVE_BEFORE_LEAVE": "Voulez-vous <b>sauvegarder vos modifications</b> avant de quitter la page ?",
"SAVE_BEFORE_LEAVE_TITLE": "Modifications non enregistrées",
"LOGOUT": "Êtes-vous sûr de vouloir vous déconnecter ?",
"USE_FALLBACK_NODE": "Nœud <b>{{old}}</b> injoignable ou adresse invalide.<br/><br/>Voulez-vous temporairement utiliser le nœud <b>{{new}}</b> ?",
"ISSUE_524_SEND_LOG": "La transaction a été rejetée, à cause d'une anomalie connue (ticket #524) mais <b>non reproduite</b>.<br/><br/>Pour aider les développeurs à corriger cette erreur, <b>acceptez-vous la transmission de vos logs</b> par message ?<br/><small>(aucune donnée confidentielle n'est envoyée)</small>."
},
"DOWNLOAD": {
"POPUP_TITLE": "<b>Fichier de révocation</b>",
"POPUP_REVOKE_MESSAGE": "Pour sécuriser votre compte, veuillez télécharger le <b>document de révocation de compte</b>. Il vous permettra le cas échéant d'annuler votre compte (en cas d'un vol de compte, d'un changement d'identifiant, d'un compte créé à tort, etc.).<br/><br/><b>Veuillez le stocker en lieu sûr.</b>"
},
"HELP": {
"TITLE": "Aide en ligne",
"JOIN": {
"SECTION": "Inscription",
"SALT": "L'identifiant secret est très important. Il sert à mélanger le mot de passe, avant qu'il ne serve à calculer la <span class=\"text-italic\">clé publique</span> de votre compte (son numéro) et la clé secrète pour y accéder.<br/><b>Veillez à bien la mémoriser</b>, car aucun moyen n'est actuellement prévu pour la retrouver en cas de perte.<br/>Par ailleurs, il ne peut pas être modifié sans devoir créer un nouveau compte.<br/><br/>Un bon identifiant secret doit être suffisamment long (au moins 8 caractères) et le plus original possible.",
"PASSWORD": "Le mot de passe est très important. Avec l'identifiant secret, il sert à calculer le numéro (la clé publique) de votre compte, et la clé secrète pour y accéder.<br/><b>Veillez à bien le mémoriser</b>, car aucun moyen n'est prévu de le retrouver en cas de perte (sauf à générer un fichier de sauvegarde).<br/>Par ailleurs, il ne peut pas être modifié sans devoir créer un nouveau compte.<br/><br/>Un bon mot de passe contient (idéalement) au moins 8 caractères, dont au moins une majuscule et un chiffre.",
"PSEUDO": "Le pseudonyme est utilisé uniquement dans le cas d'inscription comme <span class=\"text-italic\">membre</span>. Il est toujours associé à un portefeuille (via sa <span class=\"text-italic\">clé publique</span>).<br/>Il est publié sur le réseau, afin que les autres utilisateurs puisse l'identifier, le certifier ou envoyer de la monnaie sur le compte.<br/>Un pseudonyme doit être unique au sein des membres (<u>actuels</u> et anciens)."
},
"LOGIN": {
"SECTION": "Connexion",
"PUBKEY": "Clé publique du trousseau",
"PUBKEY_DEF": "La clef publique du trousseau est générée à partir des identifiants saisis (n'importe lesquels), sans pour autant qu'ils correspondent à un compte déjà utilisé.<br/><b>Vérifiez attentivement que la clé publique est celle de votre compte</b>. Dans le cas contraire, vous serez connecté à un compte probablement jamais utilisé, le risque de collision avec un compte existant étant infime.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">En savoir plus sur la cryptographie</a> par clé publique.",
"METHOD": "Méthodes de connexion",
"METHOD_DEF": "Plusieurs options sont disponibles pour vous connecter à un portefeuille :<br/> - La connexion <b>par salage (simple ou avancé)</b> mélange votre mot de passe grâce à l'identifiant secret, pour limiter les tentatives de <a href=\"https://fr.wikipedia.org/wiki/Attaque_par_force_brute\" target=\"_system\">piratage par force brute</a> (par exemple à partir de mots connus).<br/> - La connexion <b>par clé publique</b> évite de saisir vos identifiants, qui vous seront demandé seulement le moment venu lors d'une opération sur le compte.<br/> - La connexion <b>par fichier de trousseau</b> va lire les clés (publique et privée) du compte, depuis un fichier, sans besoin de saisir d'identifiants. Plusieurs formats de fichier sont possibles."
},
"GLOSSARY": {
"SECTION": "Glossaire",
"PUBKEY_DEF": "Une clé publique identifie un portefeuille de monnaie, qui peut identifier un membre ou correspondre à un portefeuille anonyme. Dans Cesium la clé publique est calculée (par défaut) grâce à l'identifiant secret et au mot de passe.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">En savoir plus sur la cryptographie</a> par clé publique.",
"MEMBER": "Membre",
"MEMBER_DEF": "Un membre est une personne humaine physique et vivante, désireuse de participer librement à la communauté monétaire. Elle co-produit un dividende universel, suivant une période et un montant tels que définis dans les <span class=\"text-italic\">règles de la monnaie</span>",
"CURRENCY_RULES": "Règles de la monnaie",
"CURRENCY_RULES_DEF": "Les règles de la monnaie sont définies une fois pour toutes. Elle fixe le fonctionnement de la monnaie : le calcul du dividende universel, le nombre de certifications nécessaire pour être membre, le nombre de certification maximum qu'un membre peut donner, etc. <a href=\"#/app/currency\">Voir les règles actuelles</a>.<br/>La non modification des règles dans le temps est possible par l'utilisation d'une <span class=\"text-italic\">BlockChain</span> qui porte et exécute ces règles, et en vérifie constamment la bonne application.",
"BLOCKCHAIN": "Chaîne de blocs (<span class=\"text-italic\">Blockchain</span>)",
"BLOCKCHAIN_DEF": "La BlockChain est un système décentralisé, qui, dans le cas de Duniter, sert à porter et exécuter les <span class=\"text-italic\">règles de la monnaie</span>.<br/><a href=\"https://duniter.org/fr/comprendre/\" target=\"_system\">En savoir plus sur Duniter</a> et le fonctionnement de sa blockchain.",
"UNIVERSAL_DIVIDEND_DEF": "Le Dividende Universel (DU) est la quantité de monnaie co-créée par chaque membre, suivant la période et le calcul définis dans les <span class=\"text-italic\">règles de la monnaie</span>.<br/>A chaque échéance, les membres recoivent sur leur compte la meme quantité de nouvelle monnaie.<br/><br/>Le DU subit une croissance régulière, pour rester juste entre les membres (actuels et à venir), calculée en fonction de l'espérance de vie moyenne, telle que démontré dans la Thérorie Relative de la Monnaie (TRM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">En savoir plus sur la TRM</a> et les monnaies libres.",
"WOT": "Toile de Confiance (TdC)",
"WOT_DEF": "La Toile de Confiance est constituée de l'ensemble des membres de la monnaie, et des liens de certification qui les relient.",
"DISTANCE_RULE": "Règle de distance",
"DISTANCE_RULE_DEF": "La règle de distance de la Toile de Confiance définie <b>une distance maximale à respecter</b> entre un postulant et un nombre minimum de membres référents (ou membres centraux). Cette distance est calculée en utilisant les liens de certification."
},
"TIP": {
"MENU_BTN_CURRENCY": "Le menu <b>{{'MENU.CURRENCY'|translate}}</b> permet la consultation des <b>règles de la monnaie</b> et de son état.",
"CURRENCY_WOT": "Le <b>nombre de membres</b> montre l'importance de la communauté et permet de <b>suivre son évolution</b>.",
"CURRENCY_MASS": "Suivez ici la <b>quantité totale de monnaie</b> existante et sa <b>répartition moyenne</b> par membre.<br/><br/>Ceci permet de juger de l'<b>importance d'un montant</b>, vis à vis de ce que <b>possède les autres</b> sur leur compte (en moyenne).",
"CURRENCY_UNIT_RELATIVE": "L'unité utilisée (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>&rdquo;) signifie que les montants en {{currency|capitalize}} ont été divisés par le <b>Dividende Universel</b> (DU).<br/><br/><small>Cette unité relative est <b>pertinente</b>, car stable malgré la quantitié de monnaie qui augmente en permanence.</small>",
"CURRENCY_CHANGE_UNIT": "L'option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permet de <b>changer d'unité</b>, pour visualiser les montants <b>directement en {{currency|capitalize}}</b> (plutôt qu'en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>&rdquo;).",
"CURRENCY_CHANGE_UNIT_TO_RELATIVE": "L'option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permet de <b>changer d'unité</b>, pour visualiser les montants en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>&rdquo;, c'est-à-dire relativement au Dividende Universel (le montant co-produit par chaque membre).",
"CURRENCY_RULES": "Les <b>règles</b> de la monnaie fixent son fonctionnement <b>exact et prévisible</b>.<br/><br/>Véritable ADN de la monnaie, elles rendent son code monétaire <b>lisible et transparent</b>.",
"MENU_BTN_NETWORK": "Le menu <b>{{'MENU.NETWORK'|translate}}</b> permet la consultation de l'état du réseau.",
"NETWORK_BLOCKCHAIN": "Toutes les opérations de la monnaie sont enregistrées dans un grand livre de compte <b>public et infalsifiable</b>, appelé aussi <b>chaine de blocs</b> (<em>BlockChain</em> en anglais).",
"NETWORK_PEERS": "Les <b>nœuds</b> visibles ici correspondent aux <b>ordinateurs qui actualisent et contrôlent</b> la chaine de blocs.<br/><br/>Plus il y a de nœuds, plus la monnaie a une gestion <b>décentralisée</b> et digne de confiance.",
"NETWORK_PEERS_BLOCK_NUMBER": "Ce <b>numéro</b> (en vert) indique le <b>dernier bloc validé</b> pour ce nœud (dernière page écrite dans le grand livre de comptes).<br/><br/>La couleur verte indique que ce bloc est également validé par <b>la plupart des autres nœuds</b>.",
"NETWORK_PEERS_PARTICIPATE": "<b>Chaque membre</b>, équipé d'un ordinateur avec Internet, <b>peut participer en ajoutant un nœud</b>. Il suffit d'<b>installer le logiciel Duniter</b> (libre et gratuit). <a href=\"{{installDocUrl}}\" target=\"_system\">Voir le manuel d'installation &gt;&gt;</a>.",
"MENU_BTN_ACCOUNT": "Le menu <b>{{'ACCOUNT.TITLE'|translate}}</b> permet d'accéder à la gestion de votre compte.",
"MENU_BTN_ACCOUNT_MEMBER": "Consultez ici l'état de votre compte et les informations sur vos certifications.",
"WALLET_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos certifications (reçues et émises).",
"WALLET_RECEIVED_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications reçues</b>.",
"WALLET_GIVEN_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications émises</b>.",
"WALLET_BALANCE": "Le <b>solde</b> de votre compte s'affiche ici.",
"WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>L'unité utilisée (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>&rdquo;) signifie que le montant en {{currency|capitalize}} a été divisé par le <b>Dividende Universel</b> (DU) co-créé par chaque membre.<br/><br/>Actuellement 1 DU vaut {{currentUD|formatInteger}} {{currency|capitalize}}s.",
"WALLET_BALANCE_CHANGE_UNIT": "Vous pourrez <b>changer l'unité</b> d'affichage des montants dans les <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Par exemple pour visualiser les montants <b>directement en {{currency|capitalize}}</b>, plutôt qu'en unité relative.",
"WALLET_PUBKEY": "Voici la clé publique de votre compte. Vous pouvez la communiquer à un tiers afin qu'il identifie plus simplement votre compte.",
"WALLET_SEND": "Effectuer un paiement en quelques clics.",
"WALLET_SEND_NO_MONEY": "Effectuer un paiement en quelques clics.<br/>(Votre solde ne le permet pas encore)",
"WALLET_OPTIONS": "Ce bouton permet l'accès aux <b>actions d'adhésion</b> et de sécurité.<br/><br/>N'oubliez pas d'y jeter un oeil !",
"WALLET_RECEIVED_CERTS": "S'affichera ici la liste des personnes qui vous ont certifié.",
"WALLET_CERTIFY": "Le bouton <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permet de sélectionner une identité et de la certifier.<br/><br/>Seuls des utilisateurs <b>déjà membres</b> peuvent en certifier d'autres.",
"WALLET_CERT_STOCK": "Votre stock de certifications (émises) est limité à <b>{{sigStock}} certifications</b>.<br/><br/>Ce stock se renouvelle avec le temps, au fur et à mesure que les certifications s'invalident.",
"MENU_BTN_TX_MEMBER": "Le menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> permet de consulter votre solde, l'historique vos transactions et d'envoyer un paiement.",
"MENU_BTN_TX": "Consultez ici <b>l'historique de vos transactions</b> et effectuez de nouvelles opérations.",
"MENU_BTN_WOT": "Le menu <b>{{'MENU.WOT'|translate}}</b> permet de rechercher parmi les <b>utilisateurs</b> de la monnaie (membres ou non).",
"WOT_SEARCH_TEXT_XS": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique).<br/><br/>La recherche se lancera automatiquement.",
"WOT_SEARCH_TEXT": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique). <br/><br/>Appuyer ensuite sur <b>Entrée</b> pour lancer la recherche.",
"WOT_SEARCH_RESULT": "Visualisez la fiche détaillée simplement en <b>cliquant</b> sur une ligne.",
"WOT_VIEW_CERTIFICATIONS": "La ligne <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> montre combien de membres ont validé cette identité.<br/><br/>Ces certifications attestent que le compte appartient à <b>une personne humaine vivante</b> n'ayant <b>aucun autre compte membre</b>.",
"WOT_VIEW_CERTIFICATIONS_COUNT": "Il faut au moins <b>{{sigQty}} certifications</b> pour devenir membre et recevoir le <b>Dividende Universel</b>.",
"WOT_VIEW_CERTIFICATIONS_CLICK": "Un clic ici permet d'ouvrir <b>la liste de toutes les certifications</b> de l'identité (reçues et émises).",
"WOT_VIEW_CERTIFY": "Le bouton <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permet d'ajouter votre certification à cette identité.",
"CERTIFY_RULES": "<b>Attention :</b> Ne certifiez que des <b>personnes physiques vivantes</b>, ne possédant aucun autre compte membre.<br/><br/>La sécurité de la monnaie dépend de la vigilance de chacun !",
"MENU_BTN_SETTINGS": "Les <b>{{'MENU.SETTINGS'|translate}}</b> vous permettront de configurer l'application.",
"HEADER_BAR_BTN_PROFILE": "Cliquez ici pour accéder à votre <b>profil utilisateur.</b>",
"SETTINGS_CHANGE_UNIT": "Vous pourrez <b>changer d'unité d'affichage</b> des montants en cliquant ci-dessus.<br/><br/>- Désactivez l'option pour un affichage des montants en {{currency|capitalize}}.<br/>- Activez l'option pour un affichage relatif en {{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub> (tous les montants seront <b>divisés</b> par le Dividende Universel courant).",
"END_LOGIN": "Cette visite guidée est <b>terminée</b> !<br/><br/>Bonne continuation à vous, dans le nouveau monde de l'<b>économie libre</b> !",
"END_NOT_LOGIN": "Cette visite guidée est <b>terminée</b> !<br/><br/>Si vous souhaitez rejoindre la monnaie {{currency|capitalize}}, il vous suffira de cliquer sur <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> ci-dessous."
}
},
"API" :{
"COMMON": {
"LINK_DOC": "Documentation API",
"LINK_DOC_HELP": "Documentation pour les développeurs",
"LINK_STANDARD_APP": "Version classique",
"LINK_STANDARD_APP_HELP": "Ouvrir la version classique de {{'COMMON.APP_NAME'|translate}}",
"CONNECTION_ERROR": "Nœud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connection Internet, ou contactez l'administrateur du site</a>."
},
"HOME": {
"TITLE": "Documentation API {{'COMMON.APP_NAME'|translate}}",
"MESSAGE": "Bienvenue dans la <b>documentation de l'API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Connectez vos sites web à <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> très simplement !",
"MESSAGE_SHORT": "Connectez vos sites à <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> très simplement !",
"DOC_HEADER": "Services disponibles :"
},
"TRANSFER": {
"TITLE": "{{'COMMON.APP_NAME'|translate}} - Paiement en ligne",
"TITLE_SHORT": "Paiement en ligne",
"SUMMARY": "Récapitulatif du paiement :",
"AMOUNT": "Montant :",
"AMOUNTS_HELP": "Veuillez choisir le montant :",
"NAME": "Nom :",
"PUBKEY": "Clé publique du destinataire :",
"COMMENT": "Référence de l'opération :",
"NODE": "Adresse du nœud :",
"DEMO": {
"SALT": "demo",
"PASSWORD": "demo",
"PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
"HELP": "<b>Mode démonstration</b> : Aucun paiement ne sera réellement envoyé pendant cette simulation.<br/>Veuillez utiliser les identifiants : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
"BAD_CREDENTIALS": "Vérifiez votre saisie.<br/>En mode démonstration, les identifiants sont : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"
},
"INFO": {
"SUCCESS_REDIRECTING_WITH_NAME": "Paiement envoyé.<br/>Redirection vers <b>{{name}}</b>...",
"SUCCESS_REDIRECTING": "Paiement envoyé.<br/>Redirection vers le site du vendeur...",
"CANCEL_REDIRECTING_WITH_NAME": "Paiement annulé.<br/>Redirection vers <b>{{name}}</b>...",
"CANCEL_REDIRECTING": "Paiement annulé.<br/>Redirection vers le site du vendeur..."
},
"ERROR": {
"TRANSFER_FAILED": "Échec du paiement"
}
},
"DOC": {
"DESCRIPTION_DIVIDER": "Description",
"URL_DIVIDER": "Adresse d'appel",
"PARAMETERS_DIVIDER": "Paramètres",
"AVAILABLE_PARAMETERS": "Voici la liste des paramètres possibles :",
"DEMO_DIVIDER": "Tester",
"DEMO_HELP": "Pour tester ce service, cliquez sur le bouton ci-contre. Le résultat s'affichera en dessous.",
"DEMO_RESULT": "Résultat retourné par l'appel :",
"DEMO_RESULT_PEER": "Adresse du nœud utilisé :",
"DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> Succès !",
"DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Annulé par l'utilisateur",
"INTEGRATE_DIVIDER": "Intégrer",
"INTEGRATE_CODE": "Code :",
"INTEGRATE_RESULT": "Prévisualisation du résultat :",
"INTEGRATE_PARAMETERS": "Paramètres",
"TRANSFER": {
"TITLE": "Paiements",
"DESCRIPTION": "Depuis un site (ex: vente en ligne) vous pouvez déléguer le paiement en monnaie libre à Cesium API. Pour cela, il vous suffit de déclencher l'ouverture d'une page sur l'adresse suivante :",
"PARAM_PUBKEY": "Clé publique du destinataire",
"PARAM_PUBKEY_HELP": "Clé publique du destinataire (obligatoire)",
"PARAM_AMOUNT": "Montant",
"PARAM_AMOUNT_HELP": "Montant de la transaction (obligatoire). Valeurs multiples autorisées, en utilisant un séparateur (point-virgule, barre verticale ou espace).",
"PARAM_COMMENT": "Référence (ou commentaire)",
"PARAM_COMMENT_HELP": "Référence ou commentaire. Vous permettra par exemple d'identifier le paiement dans la BlockChain.",
"PARAM_NAME": "Nom (du destinataire ou du site web)",
"PARAM_NAME_HELP": "Le nom du destinataire, ou du site web appelant. Cela peut être un nom lisible (\"Mon site en ligne\"), ou encore une pseudo-adresse web (\"MonSite.com\").",
"PARAM_REDIRECT_URL": "Adresse web de redirection",
"PARAM_REDIRECT_URL_HELP": "Adresse web (URL) de redirection, appelé quand le paiement a été envoyé. Peut contenir les chaînes suivantes, qui seront remplacées par les valeurs de la transaction : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" et \"{node}\".",
"PARAM_CANCEL_URL": "Adresse web d'annulation",
"PARAM_CANCEL_URL_HELP": "Adresse web (URL) en cas d'annulation du paiement, par l'utilisateur. Peut contenir les chaînes suivantes, qui seront remplacées dynamiquement : \"{comment}\", \"{amount}\" et {pubkey}.",
"PARAM_PREFERRED_NODE": "Adresse du nœud préféré",
"PARAM_PREFERRED_NODE_HELP": "Adresse (URL) du nœud Duniter à utiliser de préférence (\"g1.domaine.com:443\" ou \"https://g1.domaine.com\").",
"EXAMPLES_HELP": "Voici des exemples d'intégration :",
"EXAMPLE_BUTTON": "Bouton HTML",
"EXAMPLE_BUTTON_DEFAULT_TEXT": "Payer en {{currency|currencySymbol}}",
"EXAMPLE_BUTTON_DEFAULT_STYLE": "Style personnalisé",
"EXAMPLE_BUTTON_TEXT_HELP": "Texte du bouton",
"EXAMPLE_BUTTON_BG_COLOR": "Couleur du fond",
"EXAMPLE_BUTTON_BG_COLOR_HELP": "Exemple : #fbc14c, black, lightgrey, rgb(180,180,180)",
"EXAMPLE_BUTTON_FONT_COLOR": "Couleur du texte",
"EXAMPLE_BUTTON_FONT_COLOR_HELP": "Exemple : black, orange, rgb(180,180,180)",
"EXAMPLE_BUTTON_TEXT_ICON": "Icône",
"EXAMPLE_BUTTON_TEXT_WIDTH": "Largeur",
"EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Exemple : 200px, 50%",
"EXAMPLE_BUTTON_ICON_NONE": "Aucune",
"EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter",
"EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium",
"EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Ğ1",
"EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Ğ1 (noir)"
}
}
}
}
{
"name": "cesium",
"version": "1.4.12",
"version": "1.7.14",
"description": "Cesium Wallet for G1 libre currency",
"author": "Benoit Lavenier <benoit.lavenier@e-is.pro>",
"license": "AGPL-3.0",
"homepage": "https://cesium.app",
"repository": {
"type": "git",
"url": "git@git.duniter.org:clients/cesium/cesium.git"
},
"scripts": {
"postinstall": "bower install --allow-root && rm hooks/minify-conf.json hooks/uglify-config.json hooks/after_prepare/ionic-minify.js hooks/after_prepare/uglify.js",
"install-platforms": "ionic state restore",
"clean": "gulp clean webClean webExtClean && rm -rf dist/web dist/android && rm -f desktop/**/cesium-*.deb desktop/**/cesium-*.exe platforms/android/**/*.apk",
"postinstall": "node scripts/node/postinstall.js",
"gulp": "gulp",
"lint": "gulp lint",
"install-platforms": "ionic cordova prepare",
"start": "ionic serve",
"start:webExt": "gulp webExtCompile && web-ext run --source-dir ./dist/web/ext/ --devtools",
"start:android": "ionic cordova run android --color",
"docker:build": "sudo docker build . -t cesium/release",
"docker:run": "sudo docker run -ti --rm -p 8100:8100 -p 35729:35729 -v .:/cesium:rw cesium/release",
"build:web": "config --env default && gulp build:web --release"
"build": "gulp build",
"build:web": "gulp config --env default && gulp webBuild --release",
"build:webExt": "gulp config --env default && gulp webExtBuild --release",
"build:android": "ionic cordova build android --warning-mode=none --color --release -- -- --packageType=apk",
"build:ios": "ionic cordova build ios --warning-mode=none --color --release"
},
"keywords": [
"duniter",
"cesium",
"g1",
"ionic",
"angular",
"angularjs",
"cordova",
"crypto-currency"
],
......@@ -30,143 +41,181 @@
"new": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new"
},
"dependencies": {
"cordova": "^9.0.0",
"cordova-android": "6.4.0",
"@bower_components/Leaflet.EasyButton": "CliffCloud/Leaflet.EasyButton#v2.4.0",
"@bower_components/Leaflet.FeatureGroup.SubGroup": "ghybs/Leaflet.FeatureGroup.SubGroup#v0.1.2",
"@bower_components/Leaflet.awesome-markers": "lvoogdt/Leaflet.awesome-markers#v2.0.2",
"@bower_components/aes-js": "ricmoo/aes-js#v3.1.2",
"@bower_components/angular": "angular/bower-angular#v1.5.11",
"@bower_components/angular-animate": "angular/bower-angular-animate#v1.5.11",
"@bower_components/angular-bind-notifier": "aeisenberg/angular-bind-notifier#v1.1.11",
"@bower_components/angular-cache": "jmdobry/angular-cache#4.6.0",
"@bower_components/angular-chart.js": "jtblin/angular-chart#1.1.1",
"@bower_components/angular-expose-api": "duniter-cesium/angular-expose-api#0.3.1",
"@bower_components/angular-file-saver": "alferov/angular-file-saver#1.1.3",
"@bower_components/angular-fullscreen-toggle": "duniter-cesium/angular-fullscreen-toggle#1.0.4",
"@bower_components/angular-image-crop": "duniter-cesium/angular-image-crop#v2.0.2",
"@bower_components/angular-leaflet-directive": "duniter-cesium/angular-leaflet-directive#0.10.1",
"@bower_components/angular-messages": "angular/bower-angular-messages#v1.5.11",
"@bower_components/angular-moment": "urish/angular-moment#1.3.0",
"@bower_components/angular-resource": "angular/bower-angular-resource#v1.5.11",
"@bower_components/angular-sanitize": "angular/bower-angular-sanitize#v1.5.11",
"@bower_components/angular-screenmatch": "bensurman/angular-screenmatch#v1.0.1",
"@bower_components/angular-simple-logger": "nmccready/angular-simple-logger#0.1.7",
"@bower_components/angular-translate": "PascalPrecht/bower-angular-translate#2.18.2",
"@bower_components/angular-ui-router": "angular-ui/angular-ui-router-bower#0.2.18",
"@bower_components/blob-polyfill": "bjornstar/blob-polyfill#~1.0.20150320",
"@bower_components/chart.js": "chartjs/Chart.js#v2.9.3",
"@bower_components/ion-digit-keyboard": "skol-pro/ion-digit-keyboard#973b90c2fc",
"@bower_components/ionic": "driftyco/ionic-bower#v1.3.5",
"@bower_components/ionic-material": "zachsoft/Ionic-Material#v0.4.2",
"@bower_components/jdenticon": "dmester/jdenticon#3.1.0",
"@bower_components/js-nacl": "tonyg/js-nacl#1.4.0",
"@bower_components/js-scrypt": "tonyg/js-scrypt#v1.2.0",
"@bower_components/leaflet": "Leaflet/Leaflet#v0.7.7",
"@bower_components/leaflet-search": "stefanocudini/leaflet-search#v2.7.2",
"@bower_components/leaflet.loading": "ebrelsford/Leaflet.loading#v0.1.24",
"@bower_components/leaflet.markercluster": "Leaflet/Leaflet.markercluster#v0.5.0",
"@bower_components/moment": "moment/moment#2.24.0",
"@bower_components/ng-idle": "HackedByChinese/ng-idle#1.3.2",
"@bower_components/ngCordova": "driftyco/ng-cordova#v0.1.27-alpha",
"@bower_components/numeral": "adamwdraper/Numeral-js#1.5.6",
"@bower_components/qrcode-generator": "kazuhikoarase/qrcode-generator#js1.4.4",
"@bower_components/robotodraft": "raibutera/robotodraft#1.1.0",
"@bower_components/socket.io": "socketio/socket.io#^1.7.4",
"@bower_components/socket.io-client": "socketio/socket.io-client#^1.7.4",
"@bower_components/ui-leaflet": "angular-ui/ui-leaflet#v2.0.0",
"@bower_components/underscore": "jashkenas/underscore#1.10.2",
"through2": "^4.0.2",
"uuid": "3.2.1"
},
"devDependencies": {
"@ionic/cli": "~6.20.9",
"@ionic/v1-toolkit": "^3.2.20",
"@prantlf/gulp-jsonlint": "^2.4.0",
"ansi-colors": "^4.1.1",
"cordova": "^11.1.0",
"cordova-android": "^10.1.2",
"cordova-clipboard": "^1.3.0",
"cordova-ios": "git+https://github.com/bpresles/cordova-ios.git#5.1.0",
"cordova-osx": "^5.0.0",
"cordova-plugin-camera": "^2.4.1",
"cordova-plugin-compat": "^1.2.0",
"cordova-plugin-console": "^1.1.0",
"cordova-plugin-crosswalk-webview": "^2.3.0",
"cordova-plugin-device": "^1.1.7",
"cordova-plugin-dialogs": "^1.3.4",
"cordova-fetch": "^4.0.0",
"cordova-ios": "^6.3.0",
"cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-camera": "^5.0.3",
"cordova-plugin-customurlscheme": "^5.0.2",
"cordova-plugin-device": "^2.1.0",
"cordova-plugin-dialogs": "^2.0.2",
"cordova-plugin-file": "^8.0.0",
"cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.1.2",
"cordova-plugin-minisodium": "git+https://github.com/bpresles/cordova-plugin-minisodium.git",
"cordova-plugin-secure-storage": "^2.6.8",
"cordova-plugin-splashscreen": "^3.2.2",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-vibration": "^2.1.6",
"cordova-plugin-ionic-webview": "^5.0.0",
"cordova-plugin-network-information": "~3.0.0",
"cordova-plugin-secure-storage-android10": "~6.0.7",
"cordova-plugin-splashscreen": "^6.0.2",
"cordova-plugin-statusbar": "^3.0.0",
"cordova-plugin-vibration": "^3.1.1",
"cordova-plugin-websocket": "^0.12.2",
"cordova-plugin-whitelist": "^1.3.4",
"cordova-plugin-x-toast": "^2.7.2",
"moment": "~2.19.3",
"numeral": "1.5.3",
"phonegap-plugin-barcodescanner": "git+https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
},
"devDependencies": {
"bower": "^1.8.0",
"cordova-uglify": "^0.2.3",
"del": "^2.2.0",
"cordova-plugin-x-toast": "^2.7.3",
"del": "^5.1.0",
"delete-empty": "^0.1.3",
"event-stream": "3.3.4",
"fancy-log": "^1.3.3",
"glob": "^5.0.15",
"gulp": "^3.9.1",
"gulp-angular-templatecache": "^1.8.0",
"graceful-fs": "^4.2.3",
"gulp": "^4.0.2",
"gulp-angular-templatecache": "^3.0.1",
"gulp-angular-translate": "^0.1.4",
"gulp-base64": "^0.1.3",
"gulp-bump": "^2.1.0",
"gulp-clean": "^0.3.2",
"gulp-clean-css": "^2.0.10",
"gulp-concat": "^2.2.0",
"gulp-concat-css": "^2.3.0",
"gulp-base64-v2": "^1.0.4",
"gulp-bump": "^3.1.3",
"gulp-clean": "^0.4.0",
"gulp-clean-css": "^4.3.0",
"gulp-cli": "^2.3.0",
"gulp-css-base64": "^1.3.4",
"gulp-csso": "^2.0.0",
"gulp-filter": "^4.0.0",
"gulp-csso": "^4.0.1",
"gulp-debug": "^4.0.0",
"gulp-filter": "^6.0.0",
"gulp-footer": "^2.0.2",
"gulp-header": "^2.0.7",
"gulp-header": "^2.0.9",
"gulp-html-remove": "^0.1.1",
"gulp-htmlmin": "^2.0.0",
"gulp-jshint": "^2.0.1",
"gulp-markdown": "^1.2.0",
"gulp-ng-annotate": "^2.0.0",
"gulp-ng-constant": "^1.1.0",
"gulp-remove-code": "^1.0.2",
"gulp-rename": "^1.2.0",
"gulp-replace": "^0.5.4",
"gulp-rev": "^7.0.0",
"gulp-rev-replace": "^0.4.3",
"gulp-sass": "^2.2.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-uglify": "^2.0.0",
"gulp-useref": "^3.1.0",
"gulp-util": "^3.0.8",
"gulp-zip": "^3.2.0",
"ionic": "^1.7.16",
"ionic-minify": "^2.0.8",
"jshint": "^2.9.2",
"gulp-htmlmin": "^5.0.1",
"gulp-jshint": "^2.1.0",
"gulp-markdown": "^5.0.1",
"gulp-ng-annotate": "^2.1.0",
"gulp-ng-constant": "^1.2.0",
"gulp-remove-code": "^3.0.4",
"gulp-rename": "^2.0.0",
"gulp-replace": "^1.0.0",
"gulp-sass": "^5.1.0",
"gulp-sort": "^2.0.0",
"gulp-sourcemaps": "^2.6.5",
"gulp-sri-hash": "^2.2.1",
"gulp-uglify-es": "^2.0.0",
"gulp-useref": "^4.0.1",
"gulp-zip": "^5.0.2",
"ionic-plugin-keyboard": "^2.2.1",
"jshint": "^2.12.0",
"jshint-stylish": "^2.2.1",
"lazypipe": "^1.0.2",
"map-stream": "0.0.7",
"merge2": "^1.3.0",
"mv": "^2.1.1",
"node-sass": "^3.3.3",
"playup": "^1.0.2",
"shelljs": "^0.3.0",
"yargs": "^4.3.1"
"node-sass": "^9.0.0",
"phonegap-plugin-barcodescanner": "^8.1.0",
"playup": "^1.1.0",
"vinyl-fs": "^3.0.3",
"web-ext": "^7.9.0",
"yargs": "^5.0.0"
},
"cordovaPlugins": [
"cordova-plugin-whitelist",
"cordova-plugin-splashscreen",
"cordova-plugin-console",
"ionic-plugin-keyboard",
"cordova-plugin-device",
"cordova-plugin-statusbar",
"cordova-plugin-camera",
"cordova-plugin-websocket",
"cordova-plugin-vibration",
"cordova-plugin-dialogs",
"cordova-plugin-secure-storage",
"cordova-plugin-x-toast",
"cordova-clipboard",
{
"id": "cordova-plugin-minisodium",
"locator": "https://github.com/E-IS/cordova-plugin-minisodium.git"
"peerDependencies": {
"gulp": "^4.0.2",
"gulp-cli": "^2.3.0",
"leaflet": "Leaflet/Leaflet#v0.7.7",
"nopt": "4.0.1"
},
{
"id": "phonegap-plugin-barcodescanner",
"locator": "https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
},
"cordova-plugin-ionic-keyboard",
"cordova-plugin-ionic-webview@4.1.2"
],
"cordovaPlatforms": [
{
"platform": "ios",
"version": "5.1.0",
"locator": "https://github.com/bpresles/cordova-ios.git#5.1.0"
"resolutions": {
"gulp": "4.0.2",
"gulp-cli": "2.3.0",
"graceful-fs": "4.2.4"
},
{
"platform": "android",
"version": "6.4.0",
"locator": "android@6.4.0"
}
],
"cordova": {
"plugins": {
"cordova-plugin-camera": {},
"cordova-plugin-console": {},
"cordova-plugin-camera": {
"CAMERA_USAGE_DESCRIPTION": "Add picture to the user profile",
"PHOTOLIBRARY_USAGE_DESCRIPTION": "Take a picture for the user profile",
"ANDROID_SUPPORT_V4_VERSION": "28.+"
},
"cordova-plugin-device": {},
"cordova-plugin-dialogs": {},
"cordova-plugin-minisodium": {},
"cordova-plugin-secure-storage": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-vibration": {},
"cordova-plugin-websocket": {},
"cordova-plugin-whitelist": {},
"cordova-plugin-x-toast": {},
"cordova-plugin-ionic-keyboard": {},
"phonegap-plugin-barcodescanner": {
"CAMERA_USAGE_DESCRIPTION": "Scan QRCode"
"CAMERA_USAGE_DESCRIPTION": "To scan QRCode",
"ANDROID_SUPPORT_V4_VERSION": "28.+"
},
"ionic-plugin-keyboard": {},
"cordova-clipboard": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
}
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "28.+"
},
"cordova-plugin-file": {},
"cordova-plugin-androidx-adapter": {},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "june",
"ANDROID_SCHEME": "http",
"ANDROID_HOST": "g1.duniter.org",
"ANDROID_PATHPREFIX": "/wallet"
},
"cordova-plugin-secure-storage-android10": {},
"cordova-plugin-network-information": {}
},
"platforms": [
"ios",
"android",
"osx"
"android"
]
},
"engines": {
"node": ">= 16.17.0",
"yarn": ">= 1.22.0"
}
}
{
"ios": "https://github.com/bpresles/cordova-ios.git#5.1.0",
"android": "6.4.0"
}
These are Cordova resources. You can replace icon.png and splash.png and run
`ionic cordova resources` to generate custom icons and splash screens for your
app. See `ionic cordova resources --help` for details.
Cordova reference documentation:
- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
FROM ubuntu:18.04
LABEL maintainer="benoit [dot] lavenier [at] e-is [dot] pro"
ENV DEBIAN_FRONTEND=noninteractive \
ANDROID_HOME=/opt/android-sdk-linux \
NODE_VERSION=10.20.0 \
NPM_VERSION=6.14.4 \
YARN_VERSION=1.22.4 \
IONIC_CLI_VERSION=6.5.0 \
CORDOVA_VERSION=8.1.2 \
CORDOVA_RES_VERSION=0.11.0 \
NATIVE_RUN_VERSION=1.0.0 \
GRADLE_VERSION=4.10.3 \
GULP_VERSION=2.2.0 \
ANDROID_NDK_VERSION=r19c \
ANDROID_SDK_VERSION=r29.0.2
# Install basics
RUN apt-get update && \
apt-get install -y git wget curl unzip build-essential software-properties-common ruby ruby-dev ruby-ffi gcc make python && \
curl --retry 3 -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && \
tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && \
rm "node-v$NODE_VERSION-linux-x64.tar.gz"
# Install global nodeJS dependencies
RUN npm install -g npm@"$NPM_VERSION" && \
npm install -g yarn@"$YARN_VERSION" gulp@"$GULP_VERSION" cordova@"$CORDOVA_VERSION" cordova-res@"$CORDOVA_RES_VERSION" @ionic/cli@"$IONIC_CLI_VERSION" && \
npm cache clear --force
# Install Cordova
RUN npm install -g cordova@"$CORDOVA_VERSION" cordova-res@"$CORDOVA_RES_VERSION" native-run@"$NATIVE_RUN_VERSION" && \
npm cache clear --force
# Install Android prerequisites
RUN echo ANDROID_HOME="${ANDROID_HOME}" >> /etc/environment && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get -y install openjdk-11-jdk-headless && \
apt-get install -y --force-yes expect ant wget zipalign libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 qemu-kvm kmod && \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Android SDK
#RUN cd /opt && \
# wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_"$ANDROID_SDK_VERSION"-linux.tgz && \
# tar xzf android-sdk.tgz && \
# rm -f android-sdk.tgz && \
# chown -R root. /opt
#
## Install Android NDK
#RUN cd /opt/ && \
# wget --output-document=android-ndk.zip --quiet https://dl.google.com/android/repository/android-ndk-"$ANDROID_NDK_VERSION"-linux-x86_64.zip && \
# unzip android-ndk.zip && \
# rm android-ndk.zip && \
# chown -R root. /opt
# Install Gradle
#RUN cd /opt/ && \
# wget https://services.gradle.org/distributions/gradle-"$GRADLE_VERSION"-bin.zip && \
# mkdir /opt/gradle && \
# unzip -d /opt/gradle gradle-"$GRADLE_VERSION"-bin.zip && \
# rm -rf gradle-$"GRADLE_VERSION"-bin.zip
# Setup environment
#ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/tools:/opt/gradle/gradle-"$GRADLE_VERSION"/bin
# Install sdk elements
#COPY resources/android/build/tools /opt/tools
#RUN chmod u+x /opt/tools/*.sh
#RUN ["/opt/tools/android-accept-licenses.sh", "android update sdk --all --no-ui --filter platform-tools,tools,build-tools-29.0.0,android-29,build-tools-26.0.0,android-26,build-tools-25.0.0,android-25,extra-android-support,extra-android-m2repository,extra-google-m2repository"]
#RUN unzip ${ANDROID_HOME}/temp/*.zip -d ${ANDROID_HOME}
# Install source code
#RUN git config --global user.email "user.name@domain.com" && \
# git config --global user.name "User Name" && \
RUN git clone https://git.duniter.org/clients/cesium-grp/cesium.git && \
cd cesium && \
yarn install --ignore-engines
# Restore cordova platforms
RUN cd cesium && \
yarn run install-platforms
# TODO: Test First Build so that it will be faster later
## ionic cordova build android --prod --no-interactive --release
WORKDIR cesium
EXPOSE 8100 35729
CMD ["yarn", "run", "start"]
package com.crypho.plugins;
import android.annotation.TargetApi;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.Intent;
import android.hardware.biometrics.BiometricPrompt;
import android.os.Build;
import android.os.CancellationSignal;
import android.os.Handler;
import android.provider.Settings;
import android.util.Base64;
import android.util.Log;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.Executor;
/**
* CHANGES :
* 31/05/2023 - BLA - Report MR as a workaround for issue #6 (https://github.com/Sotam/cordova-plugin-secure-storage-android10/issues/6)
* TODO: remove this file after new release, with this fixed issue
*/
public class SecureStorage extends CordovaPlugin {
private static final String TAG = "SecureStorage";
private static final boolean SUPPORTED = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
private static final Boolean IS_API_29_AVAILABLE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
private static final Integer DEFAULT_AUTHENTICATION_VALIDITY_TIME = 60 * 60 * 24; // Fallback to 24h. Workaround to avoid asking for credentials too "often"
private static final String MSG_NOT_SUPPORTED = "API 19 (Android 4.4 KitKat) is required. This device is running API " + Build.VERSION.SDK_INT;
private static final String MSG_DEVICE_NOT_SECURE = "Device is not secure";
private static final String MSG_KEYS_FAILED = "Generate RSA Encryption Keys failed. ";
private Hashtable<String, SharedPreferencesHandler> SERVICE_STORAGE = new Hashtable<String, SharedPreferencesHandler>();
private String INIT_SERVICE;
private String INIT_PACKAGENAME;
private volatile CallbackContext secureDeviceContext, generateKeysContext, unlockCredentialsContext;
private volatile boolean generateKeysContextRunning = false;
private AbstractRSA rsa = RSAFactory.getRSA();
@Override
public void onResume(boolean multitasking) {
if (secureDeviceContext != null) {
if (isDeviceSecure()) {
secureDeviceContext.success();
} else {
secureDeviceContext.error(MSG_DEVICE_NOT_SECURE);
}
secureDeviceContext = null;
}
if (unlockCredentialsContext != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cordova.getThreadPool().execute(new Runnable() {
public void run() {
if (unlockCredentialsContext != null) {
String alias = service2alias(INIT_SERVICE);
if (rsa.userAuthenticationRequired(alias)) {
unlockCredentialsContext.error("User not authenticated");
}
unlockCredentialsContext.success();
unlockCredentialsContext = null;
}
}
});
}
}
}
@Override
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
if (!SUPPORTED) {
Log.w(TAG, MSG_NOT_SUPPORTED);
callbackContext.error(MSG_NOT_SUPPORTED);
return false;
}
if ("init".equals(action)) {
String service = args.getString(0);
JSONObject options = args.getJSONObject(1);
String packageName = options.optString("packageName", getContext().getPackageName());
Context ctx = null;
// Solves #151. By default, we use our own ApplicationContext
// If packageName is provided, we try to get the Context of another Application with that packageName
try {
ctx = getPackageContext(packageName);
} catch (Exception e) {
// This will fail if the application with given packageName is not installed
// OR if we do not have required permissions and cause a security violation
Log.e(TAG, "Init failed :", e);
callbackContext.error(e.getMessage());
}
INIT_PACKAGENAME = ctx.getPackageName();
String alias = service2alias(service);
INIT_SERVICE = service;
SharedPreferencesHandler PREFS = new SharedPreferencesHandler(alias, ctx);
SERVICE_STORAGE.put(service, PREFS);
if (!isDeviceSecure()) {
Log.e(TAG, MSG_DEVICE_NOT_SECURE);
callbackContext.error(MSG_DEVICE_NOT_SECURE);
} else if (!rsa.encryptionKeysAvailable(alias)) {
// Encryption Keys aren't available, proceed to generate them
Integer userAuthenticationValidityDuration = options.optInt("userAuthenticationValidityDuration", DEFAULT_AUTHENTICATION_VALIDITY_TIME);
generateKeysContext = callbackContext;
generateEncryptionKeys(userAuthenticationValidityDuration);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
unlockCredentialsLegacy();
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && rsa.userAuthenticationRequired(alias)) {
// User has to confirm authentication via device credentials.
String title = options.optString("unlockCredentialsTitle", null);
String description = options.optString("unlockCredentialsDescription", null);
unlockCredentialsContext = callbackContext;
unlockCredentials(title, description);
} else {
initSuccess(callbackContext);
}
return true;
}
if ("set".equals(action)) {
final String service = args.getString(0);
final String key = args.getString(1);
final String value = args.getString(2);
final String cipherMode = args.isNull(3) ? null : args.getString(3); // Close #6 - cipherMode is optional
final String adata = service;
cordova.getThreadPool().execute(new Runnable() {
public void run() {
try {
JSONObject result = AES.encrypt(value.getBytes(), adata.getBytes(), cipherMode);
byte[] aes_key = Base64.decode(result.getString("key"), Base64.DEFAULT);
byte[] aes_key_enc = rsa.encrypt(aes_key, service2alias(service));
result.put("key", Base64.encodeToString(aes_key_enc, Base64.DEFAULT));
if (cipherMode != null) result.put("mode", cipherMode);
getStorage(service).store(key, result.toString());
callbackContext.success(key);
} catch (Exception e) {
Log.e(TAG, "Encrypt failed :", e);
callbackContext.error(e.getMessage());
}
}
});
return true;
}
if ("get".equals(action)) {
final String service = args.getString(0);
final String key = args.getString(1);
String value = getStorage(service).fetch(key);
if (value != null) {
JSONObject json = new JSONObject(value);
final byte[] encKey = Base64.decode(json.getString("key"), Base64.DEFAULT);
final JSONObject data = json.getJSONObject("value");
final byte[] ct = Base64.decode(data.getString("ct"), Base64.DEFAULT);
final byte[] iv = Base64.decode(data.getString("iv"), Base64.DEFAULT);
final byte[] adata = Base64.decode(data.getString("adata"), Base64.DEFAULT);
cordova.getThreadPool().execute(new Runnable() {
public void run() {
try {
byte[] decryptedKey = rsa.decrypt(encKey, service2alias(service));
String cipherMode = data.isNull("mode") ? null : data.getString("mode");
String decrypted = new String(AES.decrypt(ct, decryptedKey, iv, adata, cipherMode));
callbackContext.success(decrypted);
} catch (Exception e) {
Log.e(TAG, "Decrypt failed :", e);
callbackContext.error(e.getMessage());
}
}
});
} else {
callbackContext.error("Key [" + key + "] not found.");
}
return true;
}
if ("secureDevice".equals(action)) {
// Open the Security Settings screen. The app developer should inform the user about
// the security requirements of the app and initialize again after the user has changed the screen-lock settings
secureDeviceContext = callbackContext;
secureDevice();
return true;
}
if ("remove".equals(action)) {
String service = args.getString(0);
String key = args.getString(1);
getStorage(service).remove(key);
callbackContext.success(key);
return true;
}
if ("keys".equals(action)) {
String service = args.getString(0);
callbackContext.success(new JSONArray(getStorage(service).keys()));
return true;
}
if ("clear".equals(action)) {
String service = args.getString(0);
getStorage(service).clear();
callbackContext.success();
return true;
}
return false;
}
private boolean isDeviceSecure() {
KeyguardManager keyguardManager = (KeyguardManager) (getContext().getSystemService(Context.KEYGUARD_SERVICE));
try {
Method isSecure = null;
isSecure = keyguardManager.getClass().getMethod("isDeviceSecure");
return ((Boolean) isSecure.invoke(keyguardManager)).booleanValue();
} catch (Exception e) {
return keyguardManager.isKeyguardSecure();
}
}
private String service2alias(String service) {
String res = INIT_PACKAGENAME + "." + service;
return res;
}
private SharedPreferencesHandler getStorage(String service) {
return SERVICE_STORAGE.get(service);
}
private void initSuccess(CallbackContext context) {
context.success();
}
/**
* Create the Confirm Credentials screen.
* You can customize the title and description or Android will provide a generic one for you if you leave it null
*
* @param title
* @param description
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void unlockCredentials(final String title, final String description) {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
if (IS_API_29_AVAILABLE && isDeviceSecure()) {
// Building a biometric prompt instance with custom title and description.
BiometricPrompt.Builder biometricPromptBuilder = new BiometricPrompt.Builder(getContext());
biometricPromptBuilder.setTitle(title);
biometricPromptBuilder.setDescription(description);
//biometricPromptBuilder.setDeviceCredentialAllowed(true);
BiometricPrompt biometricPrompt = biometricPromptBuilder.build();
CancellationSignal cancellationSignal = new CancellationSignal();
final Executor executor = getExecutor();
// Launching the credential confirmation popup to get biometric validation.
// If biometric is not available will open the other unlock methods.
biometricPrompt.authenticate(cancellationSignal, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
super.onAuthenticationHelp(helpCode, helpString);
}
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
}
});
} else {
KeyguardManager keyguardManager = (KeyguardManager) (getContext().getSystemService(Context.KEYGUARD_SERVICE));
Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(title, description);
if (intent != null) {
startActivity(intent);
} else {
Log.e(TAG, "Error creating Confirm Credentials Intent");
unlockCredentialsContext.error("Cant't unlock credentials, error creating Confirm Credentials Intent");
}
}
}
});
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private void unlockCredentialsLegacy() {
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent("com.android.credentials.UNLOCK");
startActivity(intent);
}
});
}
/**
* Generate Encryption Keys in the background.
*
* @param userAuthenticationValidityDuration User authentication validity duration in seconds
*/
private void generateEncryptionKeys(final Integer userAuthenticationValidityDuration) {
if (generateKeysContext != null && !generateKeysContextRunning) {
cordova.getThreadPool().execute(new Runnable() {
public void run() {
generateKeysContextRunning = true;
try {
String alias = service2alias(INIT_SERVICE);
SharedPreferencesHandler storage = getStorage(INIT_SERVICE);
if(storage.isEmpty()){
//Solves Issue #96. The RSA key may have been deleted by changing the lock type.
getStorage(INIT_SERVICE).clear();
rsa.createKeyPair(getContext(), alias, userAuthenticationValidityDuration);
}
generateKeysContext.success();
} catch (Exception e) {
Log.e(TAG, MSG_KEYS_FAILED, e);
generateKeysContext.error(MSG_KEYS_FAILED + e.getMessage());
} finally {
generateKeysContext = null;
generateKeysContextRunning = false;
}
}
});
}
}
/**
* Open Security settings screen.
*/
private void secureDevice() {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
try {
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "Error opening Security settings to secure device : ", e);
secureDeviceContext.error(e.getMessage());
}
}
});
}
private Context getContext() {
return cordova.getActivity().getApplicationContext();
}
/**
* Creates a executor with handler to run runnable tasks.
*/
private Executor getExecutor() {
return new Executor() {
@Override
public void execute(Runnable command) {
Handler handler = new Handler();
handler.post(command);
}
};
}
private Context getPackageContext(String packageName) throws Exception {
Context pkgContext = null;
Context context = getContext();
if (context.getPackageName().equals(packageName)) {
pkgContext = context;
} else {
pkgContext = context.createPackageContext(packageName, 0);
}
return pkgContext;
}
private void startActivity(Intent intent) {
cordova.getActivity().startActivity(intent);
}
}
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.7.1-all.zip
File deleted
resources/android/icon/drawable-hdpi-icon.png

4.16 KiB | W: 0px | H: 0px

resources/android/icon/drawable-hdpi-icon.png

6.5 KiB | W: 0px | H: 0px

resources/android/icon/drawable-hdpi-icon.png
resources/android/icon/drawable-hdpi-icon.png
resources/android/icon/drawable-hdpi-icon.png
resources/android/icon/drawable-hdpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/icon/drawable-ldpi-icon.png

1.62 KiB | W: 0px | H: 0px

resources/android/icon/drawable-ldpi-icon.png

2.54 KiB | W: 0px | H: 0px

resources/android/icon/drawable-ldpi-icon.png
resources/android/icon/drawable-ldpi-icon.png
resources/android/icon/drawable-ldpi-icon.png
resources/android/icon/drawable-ldpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/icon/drawable-mdpi-icon.png

2.54 KiB | W: 0px | H: 0px

resources/android/icon/drawable-mdpi-icon.png

3.8 KiB | W: 0px | H: 0px

resources/android/icon/drawable-mdpi-icon.png
resources/android/icon/drawable-mdpi-icon.png
resources/android/icon/drawable-mdpi-icon.png
resources/android/icon/drawable-mdpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/icon/drawable-xhdpi-icon.png

6.38 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xhdpi-icon.png

9.31 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xhdpi-icon.png
resources/android/icon/drawable-xhdpi-icon.png
resources/android/icon/drawable-xhdpi-icon.png
resources/android/icon/drawable-xhdpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/icon/drawable-xxhdpi-icon.png

10.8 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xxhdpi-icon.png

15.8 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xxhdpi-icon.png
resources/android/icon/drawable-xxhdpi-icon.png
resources/android/icon/drawable-xxhdpi-icon.png
resources/android/icon/drawable-xxhdpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/icon/drawable-xxxhdpi-icon.png

14.5 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xxxhdpi-icon.png

22.4 KiB | W: 0px | H: 0px

resources/android/icon/drawable-xxxhdpi-icon.png
resources/android/icon/drawable-xxxhdpi-icon.png
resources/android/icon/drawable-xxxhdpi-icon.png
resources/android/icon/drawable-xxxhdpi-icon.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/splash/drawable-land-hdpi-screen.png

24.5 KiB | W: 0px | H: 0px

resources/android/splash/drawable-land-hdpi-screen.png

17.8 KiB | W: 0px | H: 0px

resources/android/splash/drawable-land-hdpi-screen.png
resources/android/splash/drawable-land-hdpi-screen.png
resources/android/splash/drawable-land-hdpi-screen.png
resources/android/splash/drawable-land-hdpi-screen.png
  • 2-up
  • Swipe
  • Onion skin
resources/android/splash/drawable-land-ldpi-screen.png

6.61 KiB | W: 0px | H: 0px

resources/android/splash/drawable-land-ldpi-screen.png

9.28 KiB | W: 0px | H: 0px

resources/android/splash/drawable-land-ldpi-screen.png
resources/android/splash/drawable-land-ldpi-screen.png
resources/android/splash/drawable-land-ldpi-screen.png
resources/android/splash/drawable-land-ldpi-screen.png
  • 2-up
  • Swipe
  • Onion skin