Compare commits

...

39 Commits

Author SHA1 Message Date
b0423fad62 „README.md“ ändern 2019-01-27 21:03:13 +01:00
Graham Eades
efa0e80186 Merge branch 'master-wraith' into v1.0.4-work 2018-11-28 17:40:24 +00:00
Graham Eades
5b1a1c57df Updated dump.path 2018-11-28 16:09:39 +00:00
Graham Eades
d66e7b9aa5 Updated Frontend templates 2018-11-28 16:08:35 +00:00
Graham Eades
22fb8b0cf9 Update dump php page 2018-11-28 15:54:01 +00:00
Graham Eades
29ebc61627 Fix offline password authentication 2018-11-28 14:48:07 +00:00
Giulio Cesare Solaroli
127cf24f15
Update README.md
Fixed clone repository URL to use https instead of git
2018-11-26 08:50:41 +01:00
Giulio Cesare Solaroli
608a9c7d67
Merge pull request #120 from bryant1410/master
Fix broken headings in Markdown files
2018-11-25 18:18:07 +01:00
Giulio Cesare Solaroli
670584af80
Merge pull request #126 from Jacoposolmi/patch-1
Fixed wrong Contributor Agreement URL in README.md
2018-11-25 18:17:38 +01:00
Giulio Cesare Solaroli
0370665de4
Merge pull request #132 from clipperz/patch-scss-import
Improved rendering for import table preview
2018-11-25 18:17:22 +01:00
Giulio Cesare Solaroli
8328b75118
Merge branch 'master' into patch-scss-import 2018-11-25 18:17:05 +01:00
Giulio Cesare Solaroli
415720c7b7 Fixed OTP component to correctly handle OTP with status ‘DISABLED’ 2018-11-25 17:33:06 +01:00
Giulio Cesare Solaroli
5d0cb4026c Switched Toll computation inner loop using time instead of iteration count before pausing. 2018-11-25 17:32:45 +01:00
Giulio Cesare Solaroli
0fd0970a42 Disabled trace logging 2018-11-25 17:32:27 +01:00
Giulio Cesare Solaroli
b9fd444c51 Merged pull requests 120 and 126 2018-11-25 17:32:10 +01:00
Giulio Cesare Solaroli
939a07b231 Updated Copyright years range 2018-11-25 17:31:43 +01:00
Giulio Cesare Solaroli
c070ffde03
Improved rendering for import table preview
Fixed issue reported by user where long values in the import data would prevent the wizard to behave properly
2018-09-17 12:55:34 +02:00
Japi
56c39791cd
Fixed wrong Contributor Agreement URL in README.md
Changed the Contributor Agreement URL from https://clipperz.is/contributor_agreement/ (☠️ Error 404) to https://clipperz.is/open_source/contributor_agreement/ (👍)
2018-05-16 12:05:27 +02:00
Giulio Cesare Solaroli
58e89852c3 Updated WebCrypto-shim library 2017-09-16 09:41:03 +02:00
Graham Eades
083a6a5cea Fixed new login with empty records 2017-05-27 14:50:05 +01:00
Graham Eades
a2a216f9c9 Check for NULL in value 2017-05-27 14:36:17 +01:00
Graham Eades
3df61ed87a Fixed POG 2017-05-27 11:24:07 +01:00
Graham Eades
63f5452107 Updated to use mysqli 2017-05-20 10:47:53 +01:00
Santiago Castro
e4db9ee05c Fix broken Markdown headings 2017-04-17 06:56:12 -03:00
Giulio Cesare Solaroli
bc92cbce63 Merge pull request #53 from zertrin/french-translation
Improve french translation and update clipperz.com to clipperz.is
2017-03-21 07:55:30 +01:00
Marc Gallet
db5cde70cc Fix small typo about Firefox in the french translation. 2017-03-13 12:47:59 +08:00
Giulio Cesare Solaroli
f8a0ea7f62 Disabled test script in html 2017-01-22 16:53:27 +01:00
Giulio Cesare Solaroli
0e70ab2c42 Added automatic copying of field values to clipboard 2017-01-21 15:03:42 +01:00
Giulio Cesare Solaroli
228837da16 Minor fixes 2016-11-27 16:05:23 +01:00
Giulio Cesare Solaroli
dcae32b426 Reviewed UI and removed the option to create new certificates 2016-11-27 15:05:10 +01:00
Giulio Cesare Solaroli
dd14c612e4 Merge remote-tracking branch 'clipperz/master' 2016-06-22 22:44:41 +02:00
Giulio Cesare Solaroli
0c4977a431 Merge pull request #106 from jokajak/bitcoin_compatibility
flask backend: Add a stub for bitcoin certificates
2016-06-05 11:49:21 +02:00
Giulio Cesare Solaroli
516f7ef01f Merge pull request #105 from jokajak/access_date_fix
flask backend: fix access_date population
2016-06-05 11:49:05 +02:00
jokajak
4d0550934a flask backend: Add a stub for bitcoin certificates
Returns an empty array. No plans to implement.
2016-05-27 13:02:56 -04:00
jokajak
a25b3aaa22 flask backend: fix access_date population
Enables saving updates to access_date and ensures it is populated
2016-05-27 13:02:37 -04:00
Giulio Cesare Solaroli
f0b1b98023 Fixed rendering issue on iPhones 2016-04-08 18:07:14 +02:00
Giulio Cesare Solaroli
39bacf50bb Fixed SVG rendering of BTC transaction outputs 2016-04-08 18:06:55 +02:00
Giulio Cesare Solaroli
0e407eb6a6 Fixed problem with card Cloning 2016-04-08 18:06:37 +02:00
zertrin
2a21c833aa Improve french translation and update clipperz.com to clipperz.is 2014-01-19 15:17:10 +01:00
193 changed files with 7239 additions and 2582 deletions

View File

@ -1,8 +1,11 @@
Copy of Working Version of Clipperz
Original: http://git.whoc.org.uk/git/password-manager.git
# ![Clipperz icon][icon] CLIPPERZ - Online Password Manager
[icon]: ./Icon.png
##What does Clipperz do?
## What does Clipperz do?
Clipperz is a smart online vault where you can store confidential data without worrying about security. It can be used to save and manage passwords, private notes, burglar alarm codes, credit and debit card details, PINs, software keys, …
Since passwords are the most common type of private information that you need to protect, we have added a great deal of functionality to make Clipperz a great [online password manager][home]. Read more on the [Clipperz website][home].
@ -28,7 +31,7 @@ As an example, the current PHP backend lacks several critical capabilities such
Please note: the actual Clipperz service use a far more robust backend, but the communication protocol between backend and frontend is of course identical.
[app]: https://clipperz.is/app/
[CA]: https://clipperz.is/contributor_agreement/
[CA]: https://clipperz.is/open_source/contributor_agreement/
[contact]: https://clipperz.is/about/contacts/
@ -61,7 +64,7 @@ Please [download][CA] and review the Contributor Agreement for a complete unders
## Building
In order to build the deployable version, you need to invoke the following command:
git clone git@github.com:clipperz/password-manager.git
git clone https://github.com/clipperz/password-manager.git
cd password-manager
./scripts/build install --backends php python --frontends delta

View File

@ -438,6 +438,11 @@ class message(HandlerMixin):
result['oldestUsedEncryptedVersion'] = oldest_encryption_version
result['versions'] = record_versions
result['currentVersion'] = record.current_record_version.reference
record.current_record_version.access()
record.access()
db.session.add(record)
db.session.add(record_version)
db.session.commit()
return jsonify({'result': result})
@login_required
@ -659,6 +664,15 @@ class message(HandlerMixin):
result['result'] = 'done'
return jsonify({'result': result})
@login_required
def getCertificatesStatus(self, parameters, request):
"""
Provides support for BTC Certificate feature.
No idea how it works.
"""
return jsonify({'result': {}})
class logout(HandlerMixin):

View File

@ -104,8 +104,12 @@ class RecordVersion(db.Model):
self.version = self.record.version
self.previous_version_key = recordVersionData['previousVersionKey']
self.update_date = datetime.datetime.utcnow()
self.access_date = datetime.datetime.utcnow()
self.record.update(someData['record'], self)
def access(self):
self.access_date = datetime.datetime.now()
# ------------------------------------------------------------------------------
@ -144,9 +148,13 @@ class Record(db.Model):
self.data = data['data']
self.api_version = data['version']
self.update_date = datetime.datetime.now()
self.access_date = datetime.datetime.now()
self.current_record_version = record_version
self.version += 1
def access(self):
self.access_date = datetime.datetime.now()
# ------------------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
{
"request.path": "../index.php",
"dump.path": "../dump.php",
"dump.path": "/../dump.php?frontend=",
"should.pay.toll": "false"
}

View File

@ -11,7 +11,22 @@ header('Content-Disposition: attachment; filename=Clipperz_'.date("Ymd").'.html'
include "./objects/class.onetimepassword.php";
include "./objects/class.onetimepasswordstatus.php";
$htmlContent = file_get_contents("../index.html");
//$htmlContent = file_get_contents("../index.html");
switch ($_GET["frontend"]) {
case 'beta':
$htmlContent = file_get_contents("beta/index.html");
break;
case 'gamma':
$htmlContent = file_get_contents("gamma/index.html");
break;
case 'delta':
$htmlContent = file_get_contents("delta/index.html");
break;
default:
exit ("Invalid Frontend");
}
session_start();

View File

@ -409,7 +409,11 @@ error_log("message");
$recordStats["updateDate"] = $record->update_date;
$recordsStats[$record->reference] = $recordStats;
}
if ( isset( $recordsStats ) ) {
$result["recordsStats"] = $recordsStats;
} else {
$result["recordsStats"] = NULL;
}
$result["statistics"] = $user->statistics;
$result["version"] = $user->version;
@ -543,7 +547,11 @@ error_log("message");
$user->Save();
if (isset( $parameters["parameters"]["records"]["deleted"] ) ) {
$recordToDeleteReferenceList = $parameters["parameters"]["records"]["deleted"];
} else {
$recordToDeleteReferenceList = NULL;
}
$recordList = array();
$c = count($recordToDeleteReferenceList);
for ($i=0; $i<$c; $i++) {

View File

@ -17,19 +17,12 @@
$databaseUser = $GLOBALS['configuration']['user'];
$databasePassword = $GLOBALS['configuration']['pass'];
$databasePort = $GLOBALS['configuration']['port'];
$this->connection = mysql_connect ($serverName.":".$databasePort, $databaseUser, $databasePassword);
if ($this->connection)
{
if (!mysql_select_db ($databaseName))
$this->connection = mysqli_connect ($serverName, $databaseUser, $databasePassword , $databaseName, $databasePort);
if (!$this->connection)
{
throw new Exception('I cannot find the specified database "'.$databaseName.'". Please edit configuration.php.');
}
}
else
{
throw new Exception('I cannot connect to the database. Please edit configuration.php with your database configuration.');
}
}
public static function Connect()
{
@ -43,19 +36,19 @@
public static function Reader($query, $connection)
{
$cursor = mysql_query($query, $connection);
$cursor = mysqli_query($connection, $query);
return $cursor;
}
public static function Read($cursor)
{
return mysql_fetch_assoc($cursor);
return mysqli_fetch_assoc($cursor);
}
public static function NonQuery($query, $connection)
{
mysql_query($query, $connection);
$result = mysql_affected_rows($connection);
mysqli_query($connection, $query);
$result = mysqli_affected_rows($connection);
if ($result == -1)
{
return false;
@ -66,14 +59,14 @@
public static function Query($query, $connection)
{
$result = mysql_query($query, $connection);
return mysql_num_rows($result);
$result = mysqli_query($connection, $query);
return mysqli_num_rows($result);
}
public static function InsertOrUpdate($query, $connection)
{
$result = mysql_query($query, $connection);
return intval(mysql_insert_id($connection));
$result = mysqli_query($connection, $query);
return intval(mysqli_insert_id($connection));
}
}
?>

View File

@ -92,10 +92,10 @@ class POG_Base
return $objectList;
}
private function CreateObjects($mysql_result, $objectClass, $lazyLoad = true)
private function CreateObjects($mysqli_result, $objectClass, $lazyLoad = true)
{
$objectList = array();
while ($row = mysql_fetch_assoc($mysql_result))
while ($row = mysqli_fetch_assoc($mysqli_result))
{
$pog_object = new $objectClass();
$this->PopulateObjectAttributes($row, $pog_object);

View File

@ -164,24 +164,26 @@ if(count($_POST) > 0 && $_SESSION['diagnosticsSuccessful']==false)
if ($errors == 0)
{
AddTrace('File Structure....OK!');
if (!mysql_connect ($GLOBALS['configuration']['host'].":".$GLOBALS['configuration']['port'], $GLOBALS['configuration']['user'], $GLOBALS['configuration']['pass']))
#if (!mysql_connect ($GLOBALS['configuration']['host'].":".$GLOBALS['configuration']['port'], $GLOBALS['configuration']['user'], $GLOBALS['configuration']['pass']))
if (!mysqli_connect ($GLOBALS['configuration']['host'], $GLOBALS['configuration']['user'], $GLOBALS['configuration']['pass'],$GLOBALS['configuration']['db'], $GLOBALS['configuration']['port']))
{
$errors++;
AddError('Cannot connect to the specified database server. Edit configuration.php');
AddError('Cannot find the specified database "'.$GLOBALS['configuration']['db'].'". Edit configuration.php');
}
if (isset($GLOBALS['configuration']['db_encoding']) && $GLOBALS['configuration']['db_encoding'] == 1 && !Base64::IsBase64FunctionInstalled())
{
$errors++;
AddError('$configuration[db_encoding] needs to be set to 0 until you install the base64 plugin. Set db_encoding to 0 by editing configuration.php, run setup again and go to the "Manage Plugins" tab. Install the base64 plugin. Then you can set db_encoding = 1');
}
if ($errors == 0)
{
if (!@mysql_select_db ($GLOBALS['configuration']['db']))
{
$errors++;
AddError('Cannot find the specified database "'.$GLOBALS['configuration']['db'].'". Edit configuration.php');
}
}
# if ($errors == 0)
# {
# if (!@mysql_select_db ($GLOBALS['configuration']['db']))
# {
# $errors++;
# AddError('Cannot find the specified database "'.$GLOBALS['configuration']['db'].'". Edit configuration.php');
# }
# }
}
/**

View File

@ -276,10 +276,10 @@
{
$link = '';
$content = file_get_contents($objectFilePath);
$contentParts = split("<b>",$content);
$contentParts = explode("<b>",$content);
if (isset($contentParts[1]))
{
$contentParts2 = split("</b>",$contentParts[1]);
$contentParts2 = explode("</b>",$contentParts[1]);
}
if (isset($contentParts2[0]))
{
@ -287,8 +287,8 @@
}
if (isset($className))
{
$linkParts1 = split("\*\/", $contentParts[1]);
$linkParts2 = split("\@link", $linkParts1[0]);
$linkParts1 = explode("\*\/", $contentParts[1]);
$linkParts2 = explode("\@link", $linkParts1[0]);
if (isset($linkParts2[1]))
{
$link = $linkParts2[1];
@ -313,10 +313,10 @@
function GetObjectName($objectFilePath)
{
$content = file_get_contents($objectFilePath);
$contentParts = split("<b>",$content);
$contentParts = explode("<b>",$content);
if (isset($contentParts[1]))
{
$contentParts2 = split("</b>",$contentParts[1]);
$contentParts2 = explode("</b>",$contentParts[1]);
}
if (isset($contentParts2[0]))
{
@ -593,10 +593,10 @@
//extract sql
$content = file_get_contents($objectFilePath);
$contentParts = split("<b>",$content);
$contentParts = explode("<b>",$content);
if (isset($contentParts[1]))
{
$contentParts2 = split("</b>",$contentParts[1]);
$contentParts2 = explode("</b>",$contentParts[1]);
}
if (isset($contentParts2[0]))
{
@ -604,8 +604,8 @@
}
if (isset($className))
{
$sqlParts = split(";",$contentParts[0]);
$sqlPart = split("CREATE",$sqlParts[0]);
$sqlParts = explode(";",$contentParts[0]);
$sqlPart = explode("CREATE",$sqlParts[0]);
$sql = "CREATE ".$sqlPart[1].";";
//execute sql

View File

@ -1,5 +1,5 @@
#
# Copyright 2008-2015 Clipperz Srl
# Copyright 2008-2018 Clipperz Srl
#
# This file is part of Clipperz, the online password manager.
# For further information about its features and functionalities please

View File

@ -13,7 +13,7 @@
<script>
Clipperz_IEisBroken = false;
Clipperz_normalizedNewLine = '\n';
Clipperz_dumpUrl = "@dump.path@/beta";
Clipperz_dumpUrl = "@dump.path@beta";
</script>
<!--[if IE]><script>

View File

@ -354,7 +354,8 @@ Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, {
this.set_C(someParameters.parameters.C);
this.set_b(new Clipperz.Crypto.BigInt(randomBytes, 16));
v = new Clipperz.Crypto.BigInt(this.userData()['v'], 16);
this.set_B((Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(this.b(), Clipperz.Crypto.SRP.n())));
//this.set_B((Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(this.b(), Clipperz.Crypto.SRP.n())));
this.set_B((Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(this.b(), Clipperz.Crypto.SRP.n())).module(Clipperz.Crypto.SRP.n()));
this.set_A(someParameters.parameters.A);
@ -363,7 +364,7 @@ Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, {
nextTollRequestType = 'CONNECT';
} else if (someParameters.message == "credentialCheck") {
var v, u, s, S, A, K, M1;
var v, u, s, S, A, K, M1, KK;
var stringHash = function (aValue) {
return Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(aValue)).toHexString().substring(2);
};
@ -373,9 +374,11 @@ Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, {
A = new Clipperz.Crypto.BigInt(this.A(), 16);
u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + this.B().asString(10))).toHexString(), 16);
s = new Clipperz.Crypto.BigInt(this.userData()['s'], 16);
S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(this.b(), Clipperz.Crypto.SRP.n());
//S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(this.b(), Clipperz.Crypto.SRP.n());
S = v.powerModule(u, Clipperz.Crypto.SRP.n()).multiply(A).module(Clipperz.Crypto.SRP.n()).powerModule(this.b(), Clipperz.Crypto.SRP.n())
K = stringHash(S.asString(10));
KK = new Clipperz.Crypto.BigInt(K,16);
M1 = stringHash(
"597626870978286801440197562148588907434001483655788865609375806439877501869636875571920406529" +
@ -383,7 +386,7 @@ Clipperz.PM.Proxy.Offline.DataStore.prototype = MochiKit.Base.update(null, {
s.asString(10) +
A.asString(10) +
this.B().asString(10) +
K
KK.asString(10)
);
if (someParameters.parameters.M1 == M1) {
var M2;

View File

@ -4,7 +4,7 @@ Copyright 2008-2015 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
refer to http://www.clipperz.com.
refer to http://www.clipperz.is.
* Clipperz is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@ -22,19 +22,19 @@ refer to http://www.clipperz.com.
*/
Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipperz.PM.Strings.Languages['en-us'], {
'clipperzServiceDescription': "<h2>Gardez le pour vous!</h2> <ul> <li> <h3>Clipperz est:</h3> <ul> <li> <p>un gestionnaire de mots de passe sécurisé</p> </li> <li> <p>une solution fiable dauthentification unique</p> </li> <li> <p>une chambre forte numérique pour vos données confidentielles</p> </li> </ul> </li> <li> <h3>Avec Clipperz vous pouvez:</h3> <ul> <li> <p>enregistrer et gérer vos mots de passe et autres informations d'identification en ligne</p> </li> <li> <p>vous identifier sur vos sites web sans avoir besoin de saisir votre nom dutilisateur ou votre mot de passe</p> </li> <li> <p>protéger toutes vos données sensibles: codes dalarmes, PINs (téléphone portable), carte de crédits, &hellip;</p> </li> <li> <p>partager certaines données confidentielles avec vos proches et vos associés (bientôt disponible!)</p> </li> </ul> </li> <li> <h3>Les avantages de Clipperz:</h3> <ul> <li> <p>c'est gratuit et totalement anonyme</p> </li> <li> <p>accéder à vos données depuis nimporte quel ordinateur</p> </li> <li> <p>vous n'avez besoin d'aucun logiciel et rien n'est à installer sur votre poste</p> </li> <li> <p>cela vous évite de garder des mots de passe sur votre PC ou sur des bouts de papier</p> </li> </ul> </li> <li> <h3>La sécurité de Clipperz:</h3> <ul> <li> <p>vos mots de passe sont localement chiffrés par votre navigateur avant dêtre téléchargé à Clipperz</p> </li> <li> <p>la clé de cryptage est une phrase secrète détenue uniquement par vous même</p> </li> <li> <p>héberge vos données sensibles dans des formulaires cryptés et ne peuvent être consultées directement en clair</p> </li> <li> <p>est développé sur des standard de cryptage réputé sans aucune fantaisie ni de bricolage fait maison</p> </li> <li> <p>vous pouvez consulter le code source autant que vous le souhaitez</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.com\" target=\"_blank\">Plus dinformations</a> </li> </ul> ",
'clipperzServiceDescription': "<h2>Gardez le pour vous!</h2> <ul> <li> <h3>Clipperz est:</h3> <ul> <li> <p>un gestionnaire de mots de passe sécurisé</p> </li> <li> <p>une solution fiable dauthentification unique</p> </li> <li> <p>une chambre forte numérique pour vos données confidentielles</p> </li> </ul> </li> <li> <h3>Avec Clipperz vous pouvez:</h3> <ul> <li> <p>enregistrer et gérer vos mots de passe et autres informations d'identification en ligne</p> </li> <li> <p>vous identifier sur vos sites web sans avoir besoin de saisir votre nom dutilisateur ou votre mot de passe</p> </li> <li> <p>protéger toutes vos données sensibles: codes dalarmes, PINs (téléphone portable), cartes de crédit, &hellip;</p> </li> <li> <p>partager certaines données confidentielles avec vos proches et vos associés (bientôt disponible!)</p> </li> </ul> </li> <li> <h3>Les avantages de Clipperz:</h3> <ul> <li> <p>c'est gratuit et totalement anonyme</p> </li> <li> <p>accéder à vos données depuis nimporte quel ordinateur</p> </li> <li> <p>vous n'avez besoin d'aucun logiciel et rien n'est à installer sur votre poste</p> </li> <li> <p>cela vous évite de garder des mots de passe sur votre PC ou sur des bouts de papier</p> </li> </ul> </li> <li> <h3>La sécurité de Clipperz:</h3> <ul> <li> <p>vos mots de passe sont localement chiffrés par votre navigateur avant dêtre téléchargé à Clipperz</p> </li> <li> <p>la clé de chiffrement est une phrase secrète détenue uniquement par vous même</p> </li> <li> <p>héberge vos données sensibles dans des formulaires chiffrés et ne peuvent être consultées directement en clair</p> </li> <li> <p>est développé sur des standard de chiffrement réputés, sans aucune fantaisie ni de bricolage fait maison</p> </li> <li> <p>vous pouvez consulter le code source autant que vous le souhaitez</p> </li> </ul> </li> <li> <a href=\"http://www.clipperz.is\" target=\"_blank\">Plus dinformations</a> </li> </ul> ",
'loginFormTitle': "identifiez-vous avec votre compte Clipperz",
'loginFormUsernameLabel': "nom dutilisateur",
'loginFormPassphraseLabel': "phrase secrète",
'loginFormDontHaveAnAccountLabel': "vous navez pas de compte?",
'loginFormDontHaveAnAccountLabel': "vous navez pas de compte ?",
'loginFormCreateOneLabel': "créez votre compte",
'loginFormForgotYourCredentialsLabel': "vous avez oublié votre certificat?",
'loginFormAarghThatsBadLabel': "cest fort dommage pour vous!",
'loginFormAfraidOfMaliciousScriptsLabel': "vous avez peur des script malicieux?",
'loginFormForgotYourCredentialsLabel': "vous avez oublié votre certificat ?",
'loginFormAarghThatsBadLabel': "cest fort dommage pour vous !",
'loginFormAfraidOfMaliciousScriptsLabel': "vous avez peur des script malicieux ?",
'loginFormVerifyTheCodeLabel': "vérifiez le code",
'loginFormButtonLabel': "Sidentifer",
'loginPanelSwithLanguageDescription': "<p>Sélectionnez votre langue préféré</p> ",
'browserCompatibilityDescription': "<p>Have a better and safer Clipperz experience with Firefox. However Clipperz works just fine also with Opera and MS Internet Explorer!</p> ",
'loginPanelSwithLanguageDescription': "<p>Sélectionnez votre langue préférée</p> ",
'browserCompatibilityDescription': "<p>Pour une utilisation optimale de Clipperz nous vous conseillons Firefox. Toutefois Clipperz fonctionne aussi bien avec Opera et MS Internet Explorer !</p> ",
'loginMessagePanelInitialTitle': "En cours didentification ...",
'loginMessagePanelInitialButtonLabel': "Annuler",
'loginMessagePanelConnectedTitle': "Connecté",
@ -57,19 +57,19 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'userLoginPanelLoadingUserDataMessageTitle': "Utilisateur identifié",
'userLoginPanelLoadingUserDataMessageText': "Téléchargement des cartes den-têtes chiffrés depuis Clipperz",
'userLoginPanelDecryptingUserDataMessageTitle': "Utilisateur identifié",
'userLoginPanelDecryptingUserDataMessageText': "Décryptage local des en-têtes chiffrés",
'userLoginPanelDecryptingUserDataMessageText': "Déchiffrement local des en-têtes chiffrés",
'userLoginPanelDecryptingUserStatisticsMessageTitle': "Utilisateur identifié",
'userLoginPanelDecryptingUserStatisticsMessageText': "Décryptage local des statistiques",
'userLoginPanelDecryptingUserStatisticsMessageText': "Déchiffrement local des statistiques",
'splashAlertTitle': "Bienvenue sur Clipperz!",
'splashAlertText': "<p>Conseils de sécurité</p> <ul> <li> <p>Le stockage de vos mots de passe sur Clipperz est aussi sécurisé que la phrase que vous avez sélectionnée pour les protéger. Personne ne peux y accéder tant que personne ne connait votre phrase secrète.</p> </li> <li> <p>Si vous allez utiliser Clipperz pour sauvegarder des informations sensibles et critiques assurez-vous dutiliser une phrase secrète compliquée. Plus elle sera longue mieux ce sera!</p> </li> <li> <p>Clipperz ne sera pas capable de récupérer votre phrase secrète!</p> </li> </ul> <p>Pour toute autre information, veuillez vous référer au site <a href=\"http://www.clipperz.com\" target=\"_blank\">Clipperz</a>.</p> ",
'splashAlertText': "<p>Conseils de sécurité</p> <ul> <li> <p>Le stockage de vos mots de passe sur Clipperz est aussi sécurisé que la phrase que vous avez sélectionnée pour les protéger. Personne ne peux y accéder tant que personne ne connait votre phrase secrète.</p> </li> <li> <p>Si vous allez utiliser Clipperz pour sauvegarder des informations sensibles et critiques assurez-vous dutiliser une phrase secrète compliquée. Plus elle sera longue mieux ce sera !</p> </li> <li> <p>Clipperz ne sera pas capable de récupérer votre phrase secrète!</p> </li> </ul> <p>Pour toute autre information, veuillez vous référer au site <a href=\"http://www.clipperz.is\" target=\"_blank\">Clipperz</a>.</p> ",
'splashAlertCloseButtonLabel': "Ok",
'registrationFormTitle': "créer votre compte",
'registrationFormUsernameLabel': "nom dutilisateur",
'registrationFormPassphraseLabel': "phrase secrète",
'registrationFormRetypePassphraseLabel': "re-saisissez votre phrase secrète",
'registrationFormSafetyCheckLabel': "Jaccepte que Clipperz ne pourra pas récupérer ma phrase secrète.",
'registrationFormTermsOfServiceCheckLabel': "Jai lu et jaccepte les <a href='https://www.clipperz.com/terms_service' target='_blank'>Conditions dUtilisation du Service</a>.",
'registrationFormDoYouAlreadyHaveAnAccountLabel': "avez-vous déjà un compte?",
'registrationFormTermsOfServiceCheckLabel': "Jai lu et jaccepte les <a href='https://www.clipperz.is/terms_service' target='_blank'>Conditions dUtilisation du Service</a>.",
'registrationFormDoYouAlreadyHaveAnAccountLabel': "avez-vous déjà un compte ?",
'registrationFormSimplyLoginLabel': "identifiez-vous",
'registrationFormButtonLabel': "Sinscrire",
'registrationFormWarningMessageNotMatchingPassphrases': "Vos phrases secrètes ne correspondent pas, veuillez les saisir à nouveau.",
@ -119,18 +119,18 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'changePasswordFormProgressDialogConnectedMessageTitle': "Connecté",
'changePasswordFormProgressDialogConnectedMessageText': "Terminé",
'changePasswordFormProgressDialogErrorMessageTitle': "Erreur",
'changePasswordFormProgressDialogErrorMessageText': "Changement de identifiants échoué!",
'changePasswordFormProgressDialogErrorMessageText': "Changement de identifiants échoué !",
'changeCredentialsPanelEncryptingDataMessageTitle': "Changement de votre phrase secrète",
'changeCredentialsPanelEncryptingDataMessageText': "Cryptage local des identifiants",
'changeCredentialsPanelCreatingNewCredentialsMessageTitle': "Modifier votre phrase secrète",
'changeCredentialsPanelCreatingNewCredentialsMessageText': "Mettre à jour vos identifiants",
'changeCredentialsPanelSendingNewCredentialsToTheServerMessageTitle': "Modifier votre phrase secrète",
'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText': "Téléchargement de vos identifiants sur Clipperz.com",
'changeCredentialsPanelSendingNewCredentialsToTheServerMessageText': "Téléchargement de vos identifiants sur Clipperz.is",
'changeCredentialsPanelDoneMessageTitle': "Modifier votre phrase secrète",
'changeCredentialsPanelDoneMessageText': "Terminé",
'manageOTPTabLabel': "Mettre à jour votre phrase secrète à usage unique",
'manageOTPTabTitle': "Mettre à jour votre phrase secrète à usage unique",
'manageOTPTabDescription': "<p>Une phrase secrète à usage unique fonctionne comme votre phrase secrète habituelle, mais elle ne peut être utilisé qu'une seule fois.</p> <p>Si la phrase secrète est utilisé de nouveau et que vous tenté de vous identifier à nouveau, vous serez rejeté et le processus d'identification échouera.</p> <p>Juste après une identification correcte, votre phrase secrète à usage unique sera effacée pour interdire tout accès frauduleux.</p> <p>Les phrases secrètes à usage unique sont un excellent choix si vous craignez qu'un logiciel espion ne vole vos données après avoir infecté votre machine.</p> <p> <b>Il est fortement recommandé d'utiliser des phrases secrètes à usage unique lorsque vous accédez à Clipperz depuis un terminal public, comme un cybercafé ou une borne Internet.</b> </p> ",
'manageOTPTabDescription': "<p>Une phrase secrète à usage unique fonctionne comme votre phrase secrète habituelle, mais elle ne peut être utilisée qu'une seule fois.</p> <p>Si la phrase secrète est utilisée de nouveau et que vous tentez de vous identifier à nouveau, vous serez rejeté et le processus d'identification échouera.</p> <p>Juste après une identification correcte, votre phrase secrète à usage unique sera effacée pour interdire tout accès frauduleux.</p> <p>Les phrases secrètes à usage unique sont un excellent choix si vous craignez qu'un logiciel espion ne vole vos données après avoir infecté votre machine.</p> <p> <b>Il est fortement recommandé d'utiliser des phrases secrètes à usage unique lorsque vous accédez à Clipperz depuis un terminal public, comme un cybercafé ou une borne Internet.</b> </p> ",
'accountPreferencesLabel': "Préférences",
'accountPreferencesTabTitle': "Préférences",
'accountPreferencesLanguageTitle': "Choix de la langue",
@ -147,18 +147,18 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'deleteAccountTabTitle': "Supprimer votre compte",
'deleteAccountFormUsernameLabel': "nom dutilisateur",
'deleteAccountFormPassphraseLabel': "phrase secrète",
'deleteAccountFormSafetyCheckboxLabel': "Je sais que toute mes données seront supprimés et que cette action sera irréversible.",
'deleteAccountFormSafetyCheckboxLabel': "Je sais que toute mes données seront supprimées et que cette action sera irréversible.",
'deleteAccountFormSubmitLabel': "Supprimer mon compte",
'deleteAccountFormWrongUsernameWarning': "Nom dutilisateur incorrect",
'deleteAccountFormWrongPassphraseWarning': "Phrase secrète incorrect",
'deleteAccountFormWrongPassphraseWarning': "Phrase secrète incorrecte",
'deleteAccountFormSafetyCheckWarning': "Veuillez lire et cocher la case-à-cocher ci-dessous.",
'accountPanelDeletingAccountPanelConfirmationTitle': "ATTENTION",
'accountPanelDeleteAccountPanelConfirmationText': "Êtes-vous sûr de vouloir supprimer ce compte?",
'accountPanelDeleteAccountPanelConfirmationText': "Êtes-vous sûr de vouloir supprimer ce compte ?",
'accountPanelDeleteAccountPanelConfirmButtonLabel': "Oui",
'accountPanelDeleteAccountPanelDenyButtonLabel': "Non",
'offlineCopyTabLabel': "Copie locale",
'offlineCopyTabTitle': "Copie locale",
'offlineCopyTabDescription': "<p>D'un seul click, vous pouvez télécharger toutes vos données chiffrées des serveurs Clipperz sur votre disque dur, créant ainsi une version déconnecté de Clipperz utilisable lorsque vous n'êtes pas connectés à Internet.</p> <p>Cette version en lecture seule est aussi sécurisée que la version en lecture-écriture, et n'expose pas vos données à un risque plus élevé. Elles partagent en effet le même code et la même architecture de sécurité.</p> <ol> <li> <p>Cliquez sur le liens ci-dessous pour lancer le téléchargement.</p> </li> <li> <p>Votre navigateur vous demandera que faire du fichier “Clipperz_YYYYMMDD.html”. Sauvez le sur votre disque dur.</p> </li> <li> <p>Puis double-cliquez sur le fichier téléchargé pour lancer la version déconnectée dans votre navigateur.</p> </li> <li> <p>Utilisez vos nom dutilisateur et phrase secrète habituels.</p> </li> </ol> ",
'offlineCopyTabDescription': "<p>D'un seul clic, vous pouvez télécharger toutes vos données chiffrées des serveurs Clipperz sur votre disque dur, créant ainsi une version déconnectée de Clipperz utilisable lorsque vous n'êtes pas connecté à Internet.</p> <p>Cette version en lecture seule est aussi sécurisée que la version en lecture-écriture, et n'expose pas vos données à un risque plus élevé. Elles partagent en effet le même code et la même architecture de sécurité.</p> <ol> <li> <p>Cliquez sur le liens ci-dessous pour lancer le téléchargement.</p> </li> <li> <p>Votre navigateur vous demandera que faire du fichier “Clipperz_YYYYMMDD.html”. Sauvez le sur votre disque dur.</p> </li> <li> <p>Puis double-cliquez sur le fichier téléchargé pour lancer la version déconnectée dans votre navigateur.</p> </li> <li> <p>Utilisez vos nom dutilisateur et phrase secrète habituels.</p> </li> </ol> ",
'offlineCopyDownloadLinkLabel': "Télécharger",
'sharingTabLabel': "Partager",
'sharingTabTitle': "Partager",
@ -168,7 +168,7 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'importTabDescription': "<p> <b>Prochainement disponible ...</b> </p> ",
'printingTabLabel': "Exporter",
'printingTabTitle': "Exporter",
'printingTabDescription': "<p> <b>Version dimpression</b> </p> <p>En cliquant sur ce bouton vous ouvrirez une fenêtre contenant vos en-têtes cryptés dans un format dimpression.</p> <p>Si vous imprimez pour des raisons de sauvegarde personnel, veuillez vous tourner vers une solution plus sécurisé comme la version “Copie locale”.</p> ",
'printingTabDescription': "<p> <b>Version dimpression</b> </p> <p>En cliquant sur ce bouton vous ouvrirez une fenêtre contenant vos en-têtes chiffrés dans un format dimpression.</p> <p>Si vous imprimez pour des raisons de sauvegarde personnelle, veuillez vous tourner vers une solution plus sécurisé comme la version “Copie locale”.</p> ",
'printingLinkLabel': "Version imprimable",
'contactsTabLabel': "Contacts",
'contactsTabTitle': "Contacts",
@ -178,20 +178,20 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'bookmarkletTabTitle': "Bookmarklet",
'paswordGeneratorTabDescription': "<p> </p> ",
'passwordGeneratorTabButtonLabel': " Générer un mot de passe",
'bookmarkletTabDescription': "<p>Un bookmarklet est un outil “clique unique” simple qui peut exécuter des tâches très utiles. Il peut être sauvegardé et utilisé comme un signet de page Web normal.</p> <p>Le bookmarklet Clipperz vous aidera à rapidement créer de nouvelles cartes et des nouveaux “accès directs” avec vos cartes existantes.</p> <p> <b>Notez sil vous plaît que le bookmarklet ninclut pas dinformations liées à votre compte (par exemple votre nom dutilisateur ou votre phrase secrète), le bookmarklet est un outil général contenant le même code pour chaque utilisateur Clipperz.</b> </p> <div> <p>Pour installer le bookmarklet <b>glissez & déposez</b> le lien ci-dessous dans votre bar de navigation.</p> </div> ",
'bookmarkletTabDescription': "<p>Un bookmarklet est un outil “clic unique” simple qui peut exécuter des tâches très utiles. Il peut être sauvegardé et utilisé comme un signet de page Web normal.</p> <p>Le bookmarklet Clipperz vous aidera à rapidement créer de nouvelles cartes et des nouveaux “accès directs” avec vos cartes existantes.</p> <p> <b>Notez sil vous plaît que le bookmarklet ninclut pas dinformations liées à votre compte (par exemple votre nom dutilisateur ou votre phrase secrète), le bookmarklet est un outil général contenant le même code pour chaque utilisateur Clipperz.</b> </p> <div> <p>Pour installer le bookmarklet <b>glissez & déposez</b> le lien ci-dessous dans votre barre de navigation.</p> </div> ",
'bookmarkletTabBookmarkletTitle': "Ajouter à Clipperz",
'bookmarkletTabInstructions': "<h3>Comment créer une carte comprenant un lien de “accès direct” à un service en ligne</h3> <ol> <li> <p>Ouvrir la page Web où le site affiche un formulaire didentification. (Cest la page où vous entrez dhabitude vos informations d'identification)</p> </li> <li> <p>Lancer le bookmarklet en cliquant dessus : une fenêtre contextuelle apparait alors sur la page Web.</p> </li> <li> <p>Copier dans le presse-papiers le contenu du grand secteur de texte dans le menu contextuel. (Ctrl-C)</p> </li> <li> <p>Entrer dans votre compte Clipperz et cliquer sur <b>“Ajouter une nouvelle carte”</b>.</p> </li> <li> <p>Coller le presse-papiers dans la zone de texte et rajouter un titre (facultatif). (Ctrl-V)</p> </li> <li> <p>Cliquer sur le bouton <b>“Créer”</b>, repassez en revu les détails et cliquer <b>“Sauver”</b>. De plus amples informations sont disponibles <a href=\"http://www.clipperz.com/support/user_guide/bookmarklet\" target=\"_blank\">ici</a>.</p> </li> </ol> <h3>Comment ajouter un lien de “accès direct” à une carte existante</h3> <ol> <li> <p>Idem que précédemment.</p> </li> <li> <p>Idem que précédemment..</p> </li> <li> <p>Idem que précédemment.</p> </li> <li> <p>Entrer dans votre compte Clipperz et sélectionner la carte crypté qui contient les identifiants pour le service web que vous venez tout juste de visiter et cliquer sur <b>“Modifier”</b>.</p> </li> <li> <p>Coller le presse-papier dans la zone de texte <b>“Accès directs”</b>. (ctrl-V)</p> </li> <li> <p>Cliquer sur <b>“Ajouter un accès direct”</b>, repassez en revu les détails et cliquer <b>“Sauver”</b>.</p> </li> </ol> ",
'bookmarkletTabInstructions': "<h3>Comment créer une carte comprenant un lien de “accès direct” à un service en ligne</h3> <ol> <li> <p>Ouvrir la page Web où le site affiche un formulaire didentification. (Cest la page où vous entrez dhabitude vos informations d'identification)</p> </li> <li> <p>Lancer le bookmarklet en cliquant dessus : une fenêtre contextuelle apparait alors sur la page Web.</p> </li> <li> <p>Copier dans le presse-papiers le contenu du grand secteur de texte dans le menu contextuel. (Ctrl-C)</p> </li> <li> <p>Entrer dans votre compte Clipperz et cliquer sur <b>“Ajouter une nouvelle carte”</b>.</p> </li> <li> <p>Coller le presse-papiers dans la zone de texte et rajouter un titre (facultatif). (Ctrl-V)</p> </li> <li> <p>Cliquer sur le bouton <b>“Créer”</b>, repassez en revu les détails et cliquer <b>“Sauver”</b>. De plus amples informations sont disponibles <a href=\"http://www.clipperz.is/support/user_guide/bookmarklet\" target=\"_blank\">ici</a>.</p> </li> </ol> <h3>Comment ajouter un lien de “accès direct” à une carte existante</h3> <ol> <li> <p>Idem que précédemment.</p> </li> <li> <p>Idem que précédemment..</p> </li> <li> <p>Idem que précédemment.</p> </li> <li> <p>Entrer dans votre compte Clipperz et sélectionner la carte chiffe qui contient les identifiants pour le service web que vous venez tout juste de visiter et cliquer sur <b>“Modifier”</b>.</p> </li> <li> <p>Coller le presse-papier dans la zone de texte <b>“Accès directs”</b>. (ctrl-V)</p> </li> <li> <p>Cliquer sur <b>“Ajouter un accès direct”</b>, repassez en revu les détails et cliquer <b>“Sauver”</b>.</p> </li> </ol> ",
'mainPanelDirectLoginBlockLabel': "Accès directs",
'directLinkReferenceShowButtonLabel': "voir",
'mainPanelDirectLoginBlockDescription': "<p>Ajouter une “accès direct” pour vous identifier sans avoir besoin de taper vos identifiants de connexions!</p> <p>Les “accès directs” augmente considérablement la sécurité de vos mots passes dans la mesure où vous pouvez:</p> <ul> <li> <p>adopter et saisir des mots de passe complexes;</p> </li> <li> <p>ne réutilisez le même mot de passe et ne mettez plus de mots de passe facile à deviner.</p> </li> </ul> <p>Simple et rapide à configurer avec le Clipperz <b>bookmarklet</b>.</p> <a href=\"http://www.clipperz.com/support/user_guide/direct_logins\" target=\"_blank\">Pour en savoir plus sur les “accès directs”</a> ",
'mainPanelDirectLoginBlockDescription': "<p>Ajouter une “accès direct” pour vous identifier sans avoir besoin de taper vos identifiants de connexions!</p> <p>Les “accès directs” augmentent considérablement la sécurité de vos mots passes dans la mesure où vous pouvez :</p> <ul> <li> <p>adopter et saisir des mots de passe complexes;</p> </li> <li> <p>ne pas réutiliser le même mot de passe et ne plus utiliser de mots de passe facile à deviner.</p> </li> </ul> <p>Simple et rapide à configurer avec le <b>bookmarklet</b> Clipperz.</p> <a href=\"http://www.clipperz.is/support/user_guide/direct_logins\" target=\"_blank\">Pour en savoir plus sur les “accès directs”</a> ",
'mainPanelRecordsBlockLabel': "Cartes",
'mainPanelAddRecordButtonLabel': "Ajouter une nouvelle carte",
'mainPanelRemoveRecordButtonLabel': "Supprimer une carte",
'mainPanelRecordFilterBlockAllLabel': "tous",
'mainPanelRecordFilterBlockTagsLabel': "tags",
'mainPanelRecordFilterBlockSearchLabel': "chercher",
'recordDetailNoRecordAtAllTitle': "Bienvenue sur Clipperz!",
'recordDetailNoRecordAtAllDescription': "<h5>Commencez par ajouter des cartes à votre compte.</h5> <p>Les cartes sont des formulaires flexibles ou vous pouvez enregistrer vos mots de passe et autres informations confidentielles.</p> <p>Par exemple, une carte peut contenir les informations d\"identification pour un site web, la combinaison de votre antivol de bicyclette, les détails de votre carte bancaire, ...</p> <h5>N'oubliez pas le bookmarklet!</h5> <p>Avant de commencer, installez le bookmarklet “Ajouter à Clipperz”: il rends la création de carte plus facile et amusante.</p> <p>Allez à l'onglet “outils” pour découvrir comment l'installer et l'utiliser.</p> <p> </p> <p>Ensuite, cliquez tout simplement sur le bouton “Ajouter une nouvelle carte” et profitez de votre compte Clipperz.</p> <p> </p> <a href=\"http://www.clipperz.com/support/user_guide/managing_cards\" target=\"_blank\">En savoir plus sur la création et la gestion des cartes.</a> ",
'recordDetailNoRecordAtAllTitle': "Bienvenue sur Clipperz !",
'recordDetailNoRecordAtAllDescription': "<h5>Commencez par ajouter des cartes à votre compte.</h5> <p>Les cartes sont des formulaires flexibles ou vous pouvez enregistrer vos mots de passe et autres informations confidentielles.</p> <p>Par exemple, une carte peut contenir les informations d'identification pour un site web, la combinaison de votre antivol de bicyclette, les détails de votre carte bancaire, ...</p> <h5>N'oubliez pas le bookmarklet !</h5> <p>Avant de commencer, installez le bookmarklet “Ajouter à Clipperz”: il rend la création de carte plus facile et amusante.</p> <p>Allez à l'onglet “outils” pour découvrir comment l'installer et l'utiliser.</p> <p> </p> <p>Ensuite, cliquez tout simplement sur le bouton “Ajouter une nouvelle carte” et profitez de votre compte Clipperz.</p> <p> </p> <a href=\"http://www.clipperz.is/support/user_guide/managing_cards\" target=\"_blank\">En savoir plus sur la création et la gestion des cartes.</a> ",
'newRecordWizardTitleBox': "<h5>Choisissez un modèle</h5> <p>Les cartes sont des formulaires flexibles ou vous pouvez enregistrer vos mots de passe et autres informations confidentielles.</p> <p>Commencez par choisir un des modèles ci-dessous. Vous pourrez toujours adapter vos cartes plus tard en ajoutant ou supprimant des champs.</p> ",
'newRecordWizardBookmarkletConfigurationTitle': "Accès directs",
'newRecordWizardBookmarkletConfigurationDescriptionConfig': "<p>Collez ici le code de configuration généré par le bookmarlet Clipperz.</p> <p>Cela créera une nouvelle carte avec un accès direct à votre site web.</p> ",
@ -238,7 +238,7 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'description': "<p>Clipperz peux aussi être utilisé comme un nouveau carnet d'adresse privé. Utilisez ce modèle pour ajouter des contacts facilement.</p> ",
'fields': {
'TXT': "Nom",
'TXT': "Adresse eMail",
'TXT': "Adresse email",
'TXT': "Téléphone",
'TXT': "Mobile",
'ADDR': "Adresse"
@ -256,23 +256,23 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
},
'recordFieldTypologies': {
'TXT': {
'description': "simple text field",
'description': "un simple champ de texte",
'shortDescription': "texte"
},
'PWD': {
'description': "simple text field, with default status set to hidden",
'description': "un simple champ de texte dont le contenu sera caché par défaut",
'shortDescription': "mot de passe"
},
'URL': {
'description': "simple text field in edit mode, that became an active url in view mode",
'description': "un champ de teste en mode édition, qui devient une adresse web active en mode vue",
'shortDescription': "adresse de site web"
},
'DATE': {
'description': "a value set with a calendar helper",
'description': "un champ avec un calendrier pour aider à la saisie de dates",
'shortDescription': "date"
},
'ADDR': {
'description': "just like the URL, but the active link points to Google Maps (or similar service) passing the address value as argument",
'description': "comme l'adresse de site web, sauf que l'adresse entrée donnera un lien vers Google Maps (ou un service similaire) en passant l'adresse comme paramètre",
'shortDescription': "adresse"
},
'CHECK': {
@ -303,7 +303,7 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'deleteRecordPanelCollectRecordDataMessageText': "Mise à jour de la liste des cartes",
'deleteRecordPanelEncryptUserDataMessageTitle': "Supprimer la carte",
'deleteRecordPanelEncryptUserDataMessageText': "Chiffrement local des en-têtes de carte",
'deleteRecordPanelSendingDataToTheServerMessageTitle': "Supprimer la carteDelete card",
'deleteRecordPanelSendingDataToTheServerMessageTitle': "Supprimer la carte",
'deleteRecordPanelSendingDataToTheServerMessageText': "Transmission des en-têtes chiffrées à Clipperz",
'deleteRecordPanelUpdatingTheInterfaceMessageTitle': "Supprimer la carte",
'deleteRecordPanelUpdatingTheInterfaceMessageText': "Mise à jour de l'interface",
@ -325,20 +325,20 @@ Clipperz.PM.Strings.Languages['fr-FR'.toLowerCase()] = MochiKit.Base.merge(Clipp
'recordDetailPasswordFieldUnscrambleLabel': "en clair",
'recordDetailDirectLoginBlockTitle': "Accès directs",
'recordDetailNewDirectLoginDescription': "<p>Configuration de l'accès direct</p> ",
'recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription': "<p>Cette carte contient-elle des informations d'identification pour un service en ligne?</p> <p>Utilisez le bookmarklet pour configurer un “accès direct” depuis Clipperz en un seul click!</p> ",
'recordDetailDirectLoginBlockNoDirectLoginConfiguredDescription': "<p>Cette carte contient-elle des informations d'identification pour un service en ligne ?</p> <p>Utilisez le bookmarklet pour configurer un “accès direct” depuis Clipperz en un seul clic !</p> ",
'recordDetailAddNewDirectLoginButtonLabel': "Ajouter un accès direct",
'recordDetailEditButtonLabel': "Modifier",
'recordDetailSaveButtonLabel': "Sauver",
'recordDetailCancelButtonLabel': "Annuler",
'newRecordTitleLabel': "_nouvelle carte_",
'recordSaveChangesPanelCollectRecordInfoMessageTitle': "Enregistrement de la carte",
'recordSaveChangesPanelCollectRecordInfoMessageText': "Updating card headers",
'recordSaveChangesPanelCollectRecordInfoMessageText': "Mise à jour des entêtes de la carte",
'recordSaveChangesPanelEncryptUserDataMessageTitle': "Sauvegarde de la carte",
'recordSaveChangesPanelEncryptUserDataMessageText': "Cryptage local des en-têtes chiffrés",
'recordSaveChangesPanelEncryptUserDataMessageText': "Chiffrement local des en-têtes",
'recordSaveChangesPanelEncryptRecordDataMessageTitle': "Sauvegarde de la carte",
'recordSaveChangesPanelEncryptRecordDataMessageText': "Cryptage local des en-têtes chiffrés",
'recordSaveChangesPanelEncryptRecordDataMessageText': "Chiffrement local des en-têtes",
'recordSaveChangesPanelEncryptRecordVersionDataMessageTitle': "Sauvegarde de la carte",
'recordSaveChangesPanelEncryptRecordVersionDataMessageText': "Cryptage local des données de version de la carte",
'recordSaveChangesPanelEncryptRecordVersionDataMessageText': "Chiffrement local des données de version de la carte",
'recordSaveChangesPanelSendingDataToTheServerMessageTitle': "Sauvegarde de la carte",
'recordSaveChangesPanelSendingDataToTheServerMessageText': "Téléchargement des cartes den-têtes chiffrés depuis Clipperz",
'recordSaveChangesPanelUpdatingTheInterfaceMessageTitle': "Sauvegarde de la carte",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,28 +4,28 @@
{
"icon": {
"paths": [
"M108.018 534.899l148.392 76.747h576.168l-190.68-98.62h-385.488l-208.41-107.792v98.62l7.467 3.858z",
"M48.001 63.785v242.833l208.41 107.788h576.168l-536.16-277.295h593.28v768.365h-768.387v-166.462l135.098 69.865h576.168l-207.951-107.554h-368.217l-208.41-107.799v385.279h915.005v-915.020z"
"M429.696 257.6c54.88 0 68.608 27.424 105.152 22.848 36.576-4.576 4.576-68.576-27.424-114.272s-105.12-22.848-160 9.152c-54.848 32-346.272 209.152-346.272 209.152h254.848c0-0.032 118.848-126.88 173.696-126.88zM0 417.568v416c0 35.328 28.64 64 64 64 0 0 246.72 0 514.656 0 48.064 0 92-149.344 141.344-149.344 42.848 0 75.072 149.344 117.312 149.344 284.576 0 538.656 0 538.656 0 35.36 0 64.032-28.672 64.032-64v-416h-1440zM576 705.6c0 52.992-43.008 96-96 96h-288c-53.024 0-96-43.008-96-96v-96c0-53.024 42.976-96 96-96h288c52.992 0 96 42.976 96 96v96zM1344 705.6c0 52.992-43.008 96-96 96h-288c-53.024 0-96-43.008-96-96v-96c0-53.024 42.976-96 96-96h288c52.992 0 96 42.976 96 96v96zM905.12 280.448c36.576 4.576 50.272-22.848 105.152-22.848 54.848 0 173.728 126.848 173.728 126.848h254.848c0 0-291.424-177.152-346.272-209.152-54.88-32-128-54.848-160-9.152s-64 109.728-27.456 114.304z"
],
"attrs": [],
"isMulticolor": false,
"grid": 0,
"width": 1440,
"tags": [
"CLIPPERZ_SOLO_LOGO-nero"
"3d glasses",
"glasses"
],
"width": 1024
"grid": 32
},
"attrs": [],
"properties": {
"order": 42,
"id": 0,
"prevSize": 32,
"code": 59650,
"name": "CLIPPERZ_SOLO_LOGO-nero",
"ligatures": "clipperz"
"code": 59649,
"name": "3dglasses",
"ligatures": "preview"
},
"setIdx": 0,
"setId": 13,
"setIdx": 1,
"setId": 12,
"iconIdx": 0
},
{
@ -100,39 +100,12 @@
"prevSize": 32,
"code": 58884,
"name": "logo",
"ligatures": "qibberz"
"ligatures": "clipperz"
},
"setIdx": 8,
"setId": 4,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M429.696 257.6c54.88 0 68.608 27.424 105.152 22.848 36.576-4.576 4.576-68.576-27.424-114.272s-105.12-22.848-160 9.152c-54.848 32-346.272 209.152-346.272 209.152h254.848c0-0.032 118.848-126.88 173.696-126.88zM0 417.568v416c0 35.328 28.64 64 64 64 0 0 246.72 0 514.656 0 48.064 0 92-149.344 141.344-149.344 42.848 0 75.072 149.344 117.312 149.344 284.576 0 538.656 0 538.656 0 35.36 0 64.032-28.672 64.032-64v-416h-1440zM576 705.6c0 52.992-43.008 96-96 96h-288c-53.024 0-96-43.008-96-96v-96c0-53.024 42.976-96 96-96h288c52.992 0 96 42.976 96 96v96zM1344 705.6c0 52.992-43.008 96-96 96h-288c-53.024 0-96-43.008-96-96v-96c0-53.024 42.976-96 96-96h288c52.992 0 96 42.976 96 96v96zM905.12 280.448c36.576 4.576 50.272-22.848 105.152-22.848 54.848 0 173.728 126.848 173.728 126.848h254.848c0 0-291.424-177.152-346.272-209.152-54.88-32-128-54.848-160-9.152s-64 109.728-27.456 114.304z"
],
"attrs": [],
"isMulticolor": false,
"width": 1440,
"tags": [
"3d glasses",
"glasses"
],
"grid": 32
},
"attrs": [],
"properties": {
"order": 1,
"id": 0,
"prevSize": 32,
"code": 59649,
"name": "3dglasses",
"ligatures": "preview"
},
"setIdx": 1,
"setId": 12,
"iconIdx": 0
},
{
"icon": {
"paths": [
@ -374,6 +347,36 @@
"setId": 0,
"iconIdx": 208
},
{
"icon": {
"paths": [
"M810 896v-598h-468v598h468zM810 214q34 0 60 25t26 59v598q0 34-26 60t-60 26h-468q-34 0-60-26t-26-60v-598q0-34 26-59t60-25h468zM682 42v86h-512v598h-84v-598q0-34 25-60t59-26h512z"
],
"attrs": [
{}
],
"isMulticolor": false,
"tags": [
"content_copy"
],
"defaultCode": 57457,
"grid": 24
},
"attrs": [
{}
],
"properties": {
"order": 43,
"id": 113,
"prevSize": 24,
"code": 57457,
"name": "content_copy",
"ligatures": "copy"
},
"setIdx": 4,
"setId": 9,
"iconIdx": 113
},
{
"icon": {
"paths": [

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -1242,7 +1242,7 @@ Clipperz.log("Warning: Record.fieldWithLabel('" + aLabel + "') is returning more
Clipperz.Async.collectAll,
Clipperz.Async.or
]
}, {trace:true});
}, {trace:false});
deferredResult.addCallback(MochiKit.Base.values);
deferredResult.addCallback(MochiKit.Base.bind(function(someValues) {
return MochiKit.Iter.some(someValues, MochiKit.Base.operator.identity);

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -836,13 +836,15 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more
var user = this;
return Clipperz.Async.callbacks("User.cloneRecord", [
MochiKit.Base.method(this, 'hasPendingChanges'),
Clipperz.Async.deferredIf("User has pending changes", [
MochiKit.Async.fail
], [
// MochiKit.Base.method(this, 'hasPendingChanges'),
// Clipperz.Async.deferredIf("User has pending changes", [
/// MochiKit.Async.fail
// ], [
// MochiKit.Base.method(user, 'createNewRecord'),
// MochiKit.Base.methodcaller('setUpWithRecord', aRecord),
// ])
MochiKit.Base.method(user, 'createNewRecord'),
MochiKit.Base.methodcaller('setUpWithRecord', aRecord),
])
], {trace:false});
},

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -434,7 +434,8 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
randomBytes = Clipperz.Crypto.Base.generateRandomSeed();
aConnection['b'] = new Clipperz.Crypto.BigInt(randomBytes, 16);
v = new Clipperz.Crypto.BigInt(aConnection['userData']['v'], 16);
aConnection['B'] = (Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(aConnection['b'], Clipperz.Crypto.SRP.n()));
//aConnection['B'] = (Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(aConnection['b'], Clipperz.Crypto.SRP.n()));
aConnection['B'] = ((Clipperz.Crypto.SRP.k().multiply(v)).add(Clipperz.Crypto.SRP.g().powerModule(aConnection['b'], Clipperz.Crypto.SRP.n())).module(Clipperz.Crypto.SRP.n()));
aConnection['A'] = someParameters.parameters.A;
@ -443,7 +444,7 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
nextTollRequestType = 'CONNECT';
} else if (someParameters.message == "credentialCheck") {
var v, u, s, S, A, K, M1;
var v, u, s, S, A, K, M1, KK;
var stringHash = function (aValue) {
return Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(aValue)).toHexString().substring(2);
};
@ -452,9 +453,11 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
A = new Clipperz.Crypto.BigInt(aConnection['A'], 16);
u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + aConnection['B'].asString(10))).toHexString(), 16);
s = new Clipperz.Crypto.BigInt(aConnection['userData']['s'], 16);
S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(aConnection['b'], Clipperz.Crypto.SRP.n());
//S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(aConnection['b'], Clipperz.Crypto.SRP.n());
S = v.powerModule(u, Clipperz.Crypto.SRP.n()).multiply(A).module(Clipperz.Crypto.SRP.n()).powerModule(aConnection['b'], Clipperz.Crypto.SRP.n());
K = stringHash(S.asString(10));
KK = new Clipperz.Crypto.BigInt(K,16);
M1 = stringHash(
"597626870978286801440197562148588907434001483655788865609375806439877501869636875571920406529" +
@ -462,7 +465,7 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, {
s.asString(10) +
A.asString(10) +
aConnection['B'].asString(10) +
K
KK.asString(10)
);
if (someParameters.parameters.M1 == M1) {
var M2;

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -107,20 +107,26 @@ Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, {
var deferredResult;
var result;
var payment;
var i;
var startTime;
var currentTime;
var elapsedTime;
currentTime = (new Date()).getMilliseconds();
startTime = currentTime;
result = null;
payment = aPayment;
i = 0;
elapsedTime = currentTime - startTime;
while ((result == null) && (i < Clipperz.PM.Toll.numberOfCloseLoopIterations)) {
while ((result == null) && (elapsedTime < Clipperz.PM.Toll.maxTimeForCloseLoopIterations)) {
if (Clipperz.ByteArray.prefixMatchingBits(aTargetValue, Clipperz.Crypto.SHA.sha256(payment)) > aCost) {
result = payment;
} else {
payment.increment();
}
i ++;
currentTime = (new Date()).getMilliseconds();
elapsedTime = currentTime - startTime;
}
if (result == null) {
@ -137,8 +143,7 @@ Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, {
var toll;
toll = this;
deferredResult = new Clipperz.Async.Deferred("Toll.deferredPay");
//deferredResult.addLog("--->>> deferredPay - " + this.cost());
deferredResult = new Clipperz.Async.Deferred("Toll.deferredPay", {trace:false});
deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'getRandomBytes', 32);
deferredResult.addMethod(toll, 'innerDeferredPay', new Clipperz.ByteArray("0x" + this.targetValue()), this.cost());
deferredResult.addCallback(MochiKit.Base.bind(function(aPayment) {
@ -151,7 +156,6 @@ Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, {
return result;
}, this));
//deferredResult.addLog("<<<--- deferredPay - " + this.cost());
deferredResult.callback();
return deferredResult;
@ -185,5 +189,5 @@ Clipperz.PM.Toll.validate = function(aTargetValue, aToll, aCost) {
return result;
};
Clipperz.PM.Toll.numberOfCloseLoopIterations = 50;
Clipperz.PM.Toll.pauseBetweenEachCloseLoop = 0.5;
Clipperz.PM.Toll.maxTimeForCloseLoopIterations = 500; // milliseconds
Clipperz.PM.Toll.pauseBetweenEachCloseLoop = 0.1; // seconds

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -34,7 +34,7 @@ Clipperz.PM.UI.AttachmentController = function(someParameters) {
this.LATEST_ENCRYPTION_VERSION = '1.0'; // Versions aren't handled completely yet!
this.fileQueue = [];
this.notifications = [];
// this.notifications = [];
this.operationsCount = null;
this.encryptedDocument = null;
@ -56,19 +56,20 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
},
//-------------------------------------------------------------------------
/*
notifyUpdate: function() {
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'updateAttachmentQueueInfo', this.getQueueInfo(), this.getNotificationsInfo());
// MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'updateAttachmentQueueInfo', this.getQueueInfo(), this.getNotificationsInfo());
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'updateNotifications');
},
*/
getQueueInfo: function() {
return this.fileQueue;
},
/*
getNotificationsInfo: function() {
return this.notifications;
},
*/
//=========================================================================
// Entry points
//=========================================================================
@ -164,7 +165,7 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
var count = this.updateOperationsCount();
this.notifyUpdate();
// this.notifyUpdate();
processNextElements = true;
for (i in this.fileQueue) {
@ -209,7 +210,7 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
case 'WAITING_SAVE':
this.saveFile(currentElement['reference'], currentElement['decryptedArray'], currentElement['meta']['name'], currentElement['meta']['type']);
processNextElements = false;
Clipperz.Sound.beep();
// Clipperz.Sound.beep();
break;
}
}
@ -247,7 +248,6 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
addFileToQueue: function(someParameters) {
this.fileQueue.push(someParameters);
this.addNotification(someParameters);
this.dispatchQueueOperations();
},
@ -268,6 +268,10 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
MochiKit.Base.update(this.fileQueue[queuePosition], someParameters);
if ((someParameters['status'] == 'DONE') || (someParameters['status'] == 'FAILED')) {
this.addNotification(this.fileQueue[queuePosition], someParameters['status']);
}
this.dispatchQueueOperations();
},
@ -293,13 +297,38 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
// Notifications
//=========================================================================
addNotification: function(aQueueElement) {
this.notifications.push({
'id': this.randomId(),
'queueElement': aQueueElement
})
},
addNotification: function(aQueueElement, aStatus) {
//console.log("ADD ATTACHMENT NOTIFICATION", aQueueElement);
var messagePrefix = "";
var message;
var filename;
var level;
if (aStatus == 'DONE') {
level = 'info';
if (aQueueElement['process'] == 'DOWNLOAD') {
messagePrefix = "downloaded attachment ";
} else if (aQueueElement['process'] == 'UPLOAD') {
messagePrefix = "uploaded attachment ";
}
} else if (aStatus == 'FAILED') {
level = 'error';
if (aQueueElement['process'] == 'DOWNLOAD') {
messagePrefix = "error downloading attachment ";
} else if (aQueueElement['process'] == 'UPLOAD') {
messagePrefix = "error uploading attachment ";
}
} else {
level = 'warning';
messagePrefix = "???";
}
filename = aQueueElement['meta']['name'];
message = messagePrefix + filename;
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'addNotification', {'message':message, 'level':level});
},
/*
removeNotification: function(aNotificationId) {
var i, position;
@ -314,14 +343,15 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
this.notifications.splice(position, 1);
}
this.notifyUpdate();
// this.notifyUpdate();
},
*/
/*
randomId: function() {
return Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
return Clipperz.Crypto.randomKey();
// return Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
},
*/
//=========================================================================
// Queue Processing: READ
//=========================================================================
@ -432,6 +462,7 @@ MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, {
'status': 'DONE',
'requestProgress': 1,
}),
// add notification
], {trace:false});
},

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -34,7 +34,9 @@ Clipperz.PM.UI.Components.ButtonClass = React.createClass({
'handler': React.PropTypes.func.isRequired,
'className': React.PropTypes.string,
'badgeTopContent': React.PropTypes.number,
'badgeTopLevel': React.PropTypes.string,
'badgeBottomContent': React.PropTypes.number,
'badgeBottomLevel': React.PropTypes.string,
},
//=========================================================================
@ -52,18 +54,18 @@ Clipperz.PM.UI.Components.ButtonClass = React.createClass({
badgeTop = null;
if (this.props['badgeTopContent']) {
badgeTop = React.DOM.span({'className': 'badge top'}, this.props['badgeTopContent']);
badgeTop = React.DOM.span({'className': Clipperz.PM.UI.Components.classNames('badge', 'top', this.props['badgeTopLevel'])}, this.props['badgeTopContent']);
};
badgeBottom = null;
if (this.props['badgeBottomContent']) {
badgeBottom = React.DOM.span({'className': 'badge bottom'}, this.props['badgeBottomContent']);
badgeBottom = React.DOM.span({'className': Clipperz.PM.UI.Components.classNames('badge', 'bottom', this.props['badgeBottomLevel'])}, this.props['badgeBottomContent']);
};
return React.DOM.div({className:Clipperz.PM.UI.Components.classNames(classes), onClick:this.props['handler']}, [
React.DOM.div({className:this.props['eventName']}, [
React.DOM.h3({className:'label'}, this.props['label']),
return React.DOM.div({'className':Clipperz.PM.UI.Components.classNames(classes), onClick:this.props['handler']}, [
React.DOM.div({'className':this.props['eventName']}, [
React.DOM.h3({'className':'label'}, this.props['label']),
badgeTop,
badgeBottom,
])

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -63,33 +63,66 @@ Clipperz.PM.UI.Components.CardToolbarClass = React.createClass({
//============================================================================
renderWithSidePanels: function () {
notificationCounter: function () {
var result;
// console.log("CARD TOOLBAR NOTIFICATIONS", this.props['notifications']);
if (this.props['notifications']) {
result = this.props['notifications'].length;
} else {
result = null;
}
/*
var attachmentDownloadNotificationNumber = MochiKit.Base.filter(function(anElement) {
return anElement['queueElement']['process'] == 'DOWNLOAD';
}, this.props['attachmentQueueInfo']['notifications']).length;
var attachmentUploadNotificationNumber = this.props['attachmentQueueInfo']['notifications'].length - attachmentDownloadNotificationNumber;
// attachmentDownloadNotificationNumber = 2;
// attachmentUploadNotificationNumber = 3;
/*
var verifyingCertificateNotificationNumber = this.props['certificateQueueInfo'] ? MochiKit.Base.filter(function (anCertificationInfo) {
return anCertificationInfo['status'] == 'requested';
}, this.props['certificateQueueInfo']).length : 0;
var verifiedCertificateNotificationNumber = this.props['certificateQueueInfo'] ? MochiKit.Base.filter(function (anCertificationInfo) {
return anCertificationInfo['status'] == 'published';
}, this.props['certificateQueueInfo']).length : 0;
*/
return result;
},
notificationLevel: function () {
var result = 'info';
var i, c;
c = this.props['notifications'].length;
for (i=0; i<c; i++) {
var level;
level = this.props['notifications'][i]['level'];
if (level == 'error') {
result = 'error';
} else if ((level == 'warning') && (result == 'info')) {
result = 'warning';
}
}
return result;
},
renderWithSidePanels: function () {
return [
React.DOM.div({className:'selectionToggle'}, [
Clipperz.PM.UI.Components.Button({eventName:'selectionToggleButton', label:"tags", handler:this.selectionToggleHandler})
Clipperz.PM.UI.Components.Button({'eventName':'selectionToggleButton', 'label':"tags", 'handler':this.selectionToggleHandler})
]),
this.renderWithoutSidePanels(),
// TODO: validate and adjust names
React.DOM.div({className:'settingsToggle'}, [
Clipperz.PM.UI.Components.Button({eventName:'certificateQueueToggleButton', label:"certificate", handler:this.certificateQueueToggleHandler, badgeTopContent:verifyingCertificateNotificationNumber, badgeBottomContent:verifiedCertificateNotificationNumber}),
Clipperz.PM.UI.Components.Button({eventName:'attachmentQueueToggleButton', label:"\u2191\u2193", handler:this.attachmentQueueToggleHandler, badgeTopContent:attachmentDownloadNotificationNumber, badgeBottomContent:attachmentUploadNotificationNumber}),
Clipperz.PM.UI.Components.Button({eventName:'settingsToggleButton', label:"menu", handler:this.settingsToggleHandler})
React.DOM.div({'className':'settingsToggle'}, [
// Clipperz.PM.UI.Components.Button({eventName:'certificateQueueToggleButton', label:"certificate", handler:this.certificateQueueToggleHandler, badgeTopContent:verifyingCertificateNotificationNumber, badgeBottomContent:verifiedCertificateNotificationNumber}),
// Clipperz.PM.UI.Components.Button({eventName:'attachmentQueueToggleButton', label:"\u2191\u2193", handler:this.attachmentQueueToggleHandler, badgeTopContent:attachmentDownloadNotificationNumber, badgeBottomContent:attachmentUploadNotificationNumber}),
Clipperz.PM.UI.Components.Button({'eventName':'settingsToggleButton', 'label':"menu", 'handler':this.settingsToggleHandler, 'badgeTopContent':this.notificationCounter(), 'badgeTopLevel':this.notificationLevel()})
])
];
},
@ -102,36 +135,36 @@ Clipperz.PM.UI.Components.CardToolbarClass = React.createClass({
//console.log("CARD TOOLBAR", this.props['filter']['type']);
if (this.props['filter']['type'] == 'RECENT') {
result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo recent'}, "recent")])];
result = [React.DOM.div({'className':'clipperz'}, [React.DOM.span({'className':'logo recent'}, "recent")])];
} else if (this.props['filter']['type'] == 'WITH_ATTACHMENTS') {
result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo withAttachments'}, "attachment")])];
result = [React.DOM.div({'className':'clipperz'}, [React.DOM.span({'className':'logo withAttachments'}, "attachment")])];
} else if (this.props['filter']['type'] == 'TAG') {
result = [React.DOM.div({className:'clipperz'}, [
React.DOM.span({className:'logo tag'}, "tag"),
React.DOM.span({className:'value'}, this.props['filter']['value'])
result = [React.DOM.div({'className':'clipperz'}, [
React.DOM.span({'className':'logo tag'}, "tag"),
React.DOM.span({'className':'value'}, this.props['filter']['value'])
])];
} else if (this.props['filter']['type'] == 'UNTAGGED') {
result = [React.DOM.div({className:'clipperz'}, [
React.DOM.span({className:'logo tag'}, "tag"),
React.DOM.span({className:'value'}, "untagged")
result = [React.DOM.div({'className':'clipperz'}, [
React.DOM.span({'className':'logo tag'}, "tag"),
React.DOM.span({'className':'value'}, "untagged")
])];
} else if (this.props['filter']['type'] == 'SEARCH') {
result = [React.DOM.div({className:'clipperz'}, [
React.DOM.span({className:'logo search'}, "search"),
React.DOM.span({className:'value'}, this.props['filter']['value'])
result = [React.DOM.div({'className':'clipperz'}, [
React.DOM.span({'className':'logo search'}, "search"),
React.DOM.span({'className':'value'}, this.props['filter']['value'])
])];
} else {
result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo clipperz'}, "clipperz")])];
result = [React.DOM.div({'className':'clipperz'}, [React.DOM.span({'className':'logo clipperz'}, "clipperz")])];
}
} else {
result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo clipperz'}, "clipperz")])];
result = [React.DOM.div({'className':'clipperz'}, [React.DOM.span({'className':'logo clipperz'}, "clipperz")])];
}
return result;
},
render: function () {
return React.DOM.div({className:'cardToolbar ' + this.props['style']}, [
return React.DOM.div({'className':'cardToolbar ' + this.props['style']}, [
React.DOM.header({}, this.props['enableSidePanels'] ? this.renderWithSidePanels() : this.renderWithoutSidePanels()),
Clipperz.PM.UI.Components.AccountStatus(MochiKit.Base.update(this.props['accountInfo'], this.props['proxyInfo'])),
Clipperz.PM.UI.Components.MessageBox(this.props['messageBox']),

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -66,7 +66,7 @@ Clipperz.PM.UI.Components.Cards.CertificateRendererClass = React.createClass({
];
};
return React.DOM.svg({'viewBox':'0 0 600 ' + height, 'width':'100%', 'height':height, 'fill':'currentcolor'}, [
return React.DOM.svg({'viewBox':'0 0 630 ' + height, 'width':'100%', 'height':height, 'fill':'currentcolor'}, [
arrow(0, height/2),
React.DOM.rect({'x':arrowLength, 'y':0, 'width':rectWidth, 'height':height, 'fill':'blue', 'opacity':0.3}),
React.DOM.rect({'x':arrowLength, 'y':0, 'width':rectWidth, 'height':height, 'fill':'none', 'stroke':'black', 'strokeWidth':1, 'opacity':1}),

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -65,7 +65,7 @@ Clipperz.PM.UI.Components.Cards.CommandToolbarClass = React.createClass({
'archive': { 'label': archiveLabel, 'broadcastEvent': 'toggleArchiveCard', 'enabled': this.isFeatureEnabled('EDIT_CARD')},
// 'share': { 'label': "share", 'broadcastEvent': 'shareCard' },
'clone': { 'label': "clone", 'broadcastEvent': 'cloneCard', 'enabled': this.isFeatureEnabled('ADD_CARD')},
'register': { 'label': "register", 'broadcastEvent': 'createCertificate', 'enabled': this.isFeatureEnabled('REGISTER_CARD') && !this.isCardCertified()},
// 'register': { 'label': "register", 'broadcastEvent': 'createCertificate', 'enabled': this.isFeatureEnabled('REGISTER_CARD') && !this.isCardCertified()},
'edit': { 'label': "edit", 'broadcastEvent': 'editCard', 'enabled': this.isFeatureEnabled('EDIT_CARD') && !this.isCardCertified()}
};
},

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
@ -306,6 +306,33 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({
return result;
},
onClickOnFieldValue: function (event) {
var succeeded;
var element;
element = event.target;
// event.target.focus();
// event.target.select();
// event.target.selectionStart = 0;
// event.target.selectionEnd = event.target.value.length;
// event.stopPropagation();
// event.preventDefault();
element.focus();
element.setSelectionRange(0, element.value.length);
event.stopPropagation();
event.preventDefault();
// selectedText = element.value;
succeeded = document.execCommand('copy');
if (succeeded === true) {
window.getSelection().removeAllRanges();
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'copyFieldValueFeedback');
}
},
//............................................................................
renderField: function (aField) {
@ -331,10 +358,10 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({
React.DOM.div({'className':'fieldValues'}, [
React.DOM.div({'className':'fieldLabel'}, aField['label']),
Clipperz.PM.UI.Components.Cards.TextArea({
// React.DOM.textarea({
'readOnly': true,
// 'onMouseUp': function(e) { e.target.focus(); e.target.select(); e.stopPropagation(); e.preventDefault();},
'onClick': function(e) { e.target.focus(); e.target.select(); e.target.selectionStart = 0; e.target.selectionEnd = e.target.value.length; e.stopPropagation(); e.preventDefault(); },
// 'onClick': function(e) { e.target.focus(); e.target.select(); e.target.selectionStart = 0; e.target.selectionEnd = e.target.value.length; e.stopPropagation(); e.preventDefault(); },
'onClick': this.onClickOnFieldValue,
'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses),
'value': aField['value'],
'rows': 1

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

View File

@ -1,6 +1,6 @@
/*
Copyright 2008-2015 Clipperz Srl
Copyright 2008-2018 Clipperz Srl
This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please

Some files were not shown because too many files have changed in this diff Show More