1
0
mirror of http://git.whoc.org.uk/git/password-manager.git synced 2024-11-14 18:19:02 +01:00

Added password generator for password fields

This commit is contained in:
Giulio Cesare Solaroli 2015-08-08 11:51:21 +02:00
parent c99e8bcd71
commit 2e6ae458de
9 changed files with 824 additions and 676 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,661 +1,112 @@
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M752 250l186 262-186 262q-26 36-70 36h-468q-34 0-60-25t-26-59v-428q0-34 26-59t60-25h468q44 0 70 36z"
],
"attrs": [
{}
],
"isMulticolor": false,
"tags": [
"label"
],
"defaultCode": 58022,
"grid": 24
},
"attrs": [
{}
],
"properties": {
"order": 27,
"id": 678,
"prevSize": 24,
"code": 58022,
"name": "label",
"ligatures": "label"
},
"setIdx": 0,
"setId": 9,
"iconIdx": 678
},
{
"icon": {
"paths": [
"M704 0c-176.73 0-320 143.268-320 320 0 20.026 1.858 39.616 5.376 58.624l-389.376 389.376v192c0 35.346 28.654 64 64 64h64v-64h128v-128h128v-128h128l83.042-83.042c34.010 12.316 70.696 19.042 108.958 19.042 176.73 0 320-143.268 320-320s-143.27-320-320-320zM799.874 320.126c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"key",
"password",
"login",
"signin"
],
"defaultCode": 57802,
"grid": 16
},
"attrs": [],
"properties": {
"id": 548,
"order": 26,
"prevSize": 32,
"code": 59789,
"ligatures": "generate password",
"name": "key"
},
"setIdx": 2,
"setId": 7,
"iconIdx": 141
},
{
"icon": {
"paths": [
"M512 192c-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.312 0 416.876-130.042 512-320-95.116-189.958-288.688-320-512-320zM764.45 361.704c60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.858-25.486-252.452-73.704-60.158-38.372-111.138-89.772-149.432-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.86-7.3-9.96 27.328-15.41 56.822-15.41 87.596 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-30.774-5.452-60.268-15.408-87.598 3.978 2.378 7.938 4.802 11.858 7.302v0zM512 416c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.982 96 96z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"eye",
"views",
"vision",
"visit"
],
"defaultCode": 58073,
"grid": 16
},
"attrs": [],
"properties": {
"id": 823,
"order": 21,
"prevSize": 32,
"code": 59854,
"ligatures": "view password",
"name": "eye"
},
"setIdx": 2,
"setId": 7,
"iconIdx": 206
},
{
"icon": {
"paths": [
"M96.188 0h288.562c52.906 0 126.796 30.606 164.204 68.014l446.99 446.99c37.408 37.408 37.408 98.624 0 136.032l-344.91 344.906c-37.408 37.41-98.622 37.41-136.030 0l-446.99-446.988c-37.408-37.41-68.014-111.302-68.014-164.204v-288.562c0-52.904 43.286-96.188 96.188-96.188zM224 320c53.020 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"tag",
"price"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 48,
"order": 6,
"prevSize": 32,
"code": 58885,
"name": "tag",
"ligatures": "tag"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 0
},
{
"icon": {
"width": 1088,
"paths": [
"M96 64h224c52.8 0 126.546 30.546 163.882 67.882l376.236 376.236c37.334 37.334 37.334 98.428 0 135.764l-280.236 280.234c-37.334 37.336-98.428 37.336-135.764 0l-376.234-376.234c-37.338-37.336-67.884-111.082-67.884-163.882v-224c0-52.8 43.2-96 96-96zM224 384c53.020 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM1001.374 598.626l-342.378 342.378c36.264 19.16 82.462 13.538 112.886-16.888l280.236-280.234c37.334-37.336 37.334-98.43 0-135.764l-376.236-376.236c-37.336-37.336-111.082-67.882-163.882-67.882l489.374 489.372c12.444 12.446 12.444 32.808 0 45.254z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"tags",
"prices"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 49,
"order": 1,
"prevSize": 32,
"code": 58880,
"name": "tags",
"ligatures": "tags"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"clock",
"time",
"schedule"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 72,
"order": 7,
"prevSize": 32,
"code": 58887,
"name": "clock",
"ligatures": "recent"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 2
},
{
"icon": {
"paths": [
"M384 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM655.53 240.47c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM832 512c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM719.53 783.53c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM448.002 896c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM176.472 783.53c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM144.472 240.47c0 0 0 0 0 0 0-53.019 42.981-96 96-96s96 42.981 96 96c0 0 0 0 0 0 0 53.019-42.981 96-96 96s-96-42.981-96-96zM56 512c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.765-32.235 72-72 72s-72-32.235-72-72z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"spinner",
"loading",
"busy",
"wait",
"wheel"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 120,
"order": 10,
"prevSize": 32,
"code": 58891,
"name": "spinner",
"ligatures": "loading"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 3
},
{
"icon": {
"paths": [
"M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"search",
"magnifier",
"lookup",
"find"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 127,
"order": 5,
"prevSize": 32,
"code": 58886,
"name": "search",
"ligatures": "search"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 4
},
{
"icon": {
"paths": [
"M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM384 896h-128l27.84-139.2c-16.808-11.532-27.84-30.874-27.84-52.8 0-35.346 28.654-64 64-64s64 28.654 64 64c0 21.926-11.032 41.268-27.84 52.8l27.84 139.2zM448 448h-256v-192c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"lock",
"secure",
"private",
"encrypted"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 137,
"order": 15,
"prevSize": 32,
"code": 58896,
"name": "locked",
"ligatures": "locked"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 6
},
{
"icon": {
"paths": [
"M768 64h-128c-105.87 0-192 86.13-192 192v192h-400c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-16v-192c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h128v-192c0-105.87-86.13-192-192-192zM384 896h-128l27.84-139.2c-16.808-11.532-27.84-30.874-27.84-52.8 0-35.346 28.654-64 64-64s64 28.654 64 64c0 21.926-11.032 41.268-27.84 52.8l27.84 139.2z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"unlocked",
"lock"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 138,
"order": 16,
"prevSize": 32,
"code": 58897,
"name": "unlocked",
"ligatures": "unlocked"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 7
},
{
"icon": {
"paths": [
"M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"menu",
"list",
"items",
"lines",
"options"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 184,
"order": 13,
"prevSize": 32,
"code": 58881,
"name": "menu",
"ligatures": "menu"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 8
},
{
"icon": {
"paths": [
"M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"close",
"cancel",
"quit",
"remove",
"cross"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 253,
"order": 3,
"prevSize": 32,
"code": 58882,
"name": "close",
"ligatures": "failure, failed, delete, clear, cancel, close"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 9
},
{
"icon": {
"paths": [
"M864 128l-480 480-224-224-160 160 384 384 640-640z"
],
"attrs": [],
"isMulticolor": false,
"tags": [
"checkmark",
"tick",
"correct",
"accept",
"ok"
],
"grid": 16
},
"attrs": [],
"properties": {
"id": 254,
"order": 2,
"prevSize": 32,
"code": 58883,
"name": "checkmark",
"ligatures": "done, ok, save"
},
"setIdx": 3,
"setId": 6,
"iconIdx": 10
},
{
"icon": {
"paths": [
"M2.259 734.824h279.462v286.917h-279.462v-286.917z",
"M2.259 2.259h279.462v286.917h-279.462v-286.917z",
"M2.259 368.519h279.462v286.917h-279.462v-286.917z"
],
"width": 284,
"grid": 0,
"tags": [
"commands"
],
"attrs": []
},
"attrs": [],
"properties": {
"order": 18,
"id": 1,
"prevSize": 32,
"code": 58899,
"name": "commands",
"ligatures": "commands"
},
"setIdx": 4,
"setId": 4,
"iconIdx": 0
},
{
"icon": {
"paths": [
"M667.586 345.635v-338.544h-268.055v338.544l-299.967-121.263-90.486 257.986 310.037 104.527-198.134 262.808 224.514 164.237 184.802-279.685 203.382 279.685 221.11-164.237-203.382-262.808 319.397-107.080-90.486-257.986zM1220.574 2319.317z"
],
"width": 1080,
"grid": 0,
"tags": [
"logo"
],
"attrs": []
},
"attrs": [],
"properties": {
"order": 4,
"id": 0,
"prevSize": 32,
"code": 58884,
"name": "logo",
"ligatures": "clipperz"
},
"setIdx": 4,
"setId": 4,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M81.613 270.643c24.986 13.466 371.149 199.373 384.051 206.285 12.851 6.912 29.542 10.24 46.336 10.24 16.845 0 33.536-3.328 46.387-10.291 12.902-6.912 359.014-192.819 384-206.285 25.037-13.414 48.691-55.552 2.765-55.552h-866.253c-45.926 0-22.323 42.138 2.714 55.603zM952.986 373.043c-28.416 14.848-377.19 197.171-394.598 206.285s-29.542 10.291-46.387 10.291c-16.794 0-28.928-1.178-46.336-10.291s-366.234-191.488-394.598-206.285c-20.019-10.445-19.866 1.792-19.866 11.213 0 9.421 0 375.552 0 375.552 0 21.504 28.621 49.152 50.79 49.152h820.070c22.221 0 50.739-27.648 50.739-49.101 0 0 0-366.131 0-375.552 0-9.472 0.205-21.709-19.814-11.264z"
],
"tags": [
"mail",
"email",
"message",
"letter",
"envelope",
"contact"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 4,
"order": 19,
"prevSize": 32,
"code": 58894,
"name": "mail",
"ligatures": "email"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 4
},
{
"icon": {
"paths": [
"M819.2 102.4h-410.624c-56.32 0-101.376 45.056-101.376 101.376v410.624c0 56.32 46.080 102.4 102.4 102.4h409.6c56.32 0 102.4-46.080 102.4-102.4v-409.6c0-56.32-46.080-102.4-102.4-102.4zM819.2 614.4h-409.6v-409.6h409.6v409.6zM204.8 512h-102.4v307.2c0 56.32 46.080 102.4 102.4 102.4h307.2v-102.4h-307.2v-307.2z"
],
"tags": [
"popup",
"popout",
"new window"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 35,
"order": 9,
"prevSize": 32,
"code": 58890,
"name": "popup",
"ligatures": "url, direct login"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 35
},
{
"icon": {
"paths": [
"M512 81.92c-237.568 0-430.080 192.614-430.080 430.080 0 237.568 192.563 430.080 430.080 430.080 237.517 0 430.080-192.563 430.080-430.080 0-237.517-192.563-430.080-430.080-430.080zM564.326 564.326v206.182h-104.653v-206.182h-206.234v-104.653h206.182v-206.234h104.704v206.182h206.182v104.704h-206.182z"
],
"tags": [
"plus",
"add",
"sum"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 125,
"order": 14,
"prevSize": 32,
"code": 58895,
"name": "plus",
"ligatures": "add new field, create new OTP"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 125
},
{
"icon": {
"paths": [
"M512 81.92c-237.568 0-430.080 192.614-430.080 430.080 0 237.568 192.563 430.080 430.080 430.080 237.517 0 430.080-192.563 430.080-430.080 0-237.517-192.563-430.080-430.080-430.080zM600.525 512l156.723 156.723-88.525 88.525-156.723-156.723-156.723 156.723-88.474-88.525 156.672-156.723-156.672-156.672 88.474-88.525 156.723 156.672 156.723-156.672 88.525 88.474-156.723 156.723z"
],
"tags": [
"cross",
"cancel",
"close",
"remove",
"delete"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 126,
"order": 17,
"prevSize": 32,
"code": 58898,
"name": "cross",
"ligatures": "remove field, remove tag, remove OTP"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 126
},
{
"icon": {
"paths": [
"M778.189 460.8h-215.040v-215.040c0-28.262-22.886-30.72-51.2-30.72-28.262 0-51.2 2.406-51.2 30.72l-0 215.040h-214.989c-28.314 0-30.72 22.938-30.72 51.2s2.406 51.2 30.72 51.2h214.989v215.040c0 28.262 22.938 30.72 51.2 30.72 28.314 0 51.2-2.458 51.2-30.72v-215.040h215.040c28.314 0 30.771-22.938 30.771-51.2s-2.458-51.2-30.771-51.2z"
],
"tags": [
"plus",
"add",
"sum"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 128,
"order": 20,
"prevSize": 32,
"code": 58888,
"name": "plus3",
"ligatures": "add card"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 128
},
{
"icon": {
"paths": [
"M585.574 231.219c-21.402 20.89-230.502 240.435-230.502 240.435-11.418 11.162-17.101 25.754-17.101 40.346s5.683 29.184 17.101 40.346c0 0 209.101 219.546 230.502 240.384 21.402 20.89 59.904 22.323 82.739 0 22.784-22.272 24.576-53.35-0.051-80.64l-191.846-200.090 191.846-200.090c24.627-27.341 22.835-58.419 0.051-80.691-22.886-22.272-61.389-20.89-82.739-0z"
],
"tags": [
"arrow-left",
"left",
"previous"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 205,
"order": 11,
"prevSize": 32,
"code": 58892,
"name": "arrow-left",
"ligatures": "back"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 205
},
{
"icon": {
"paths": [
"M438.426 231.219c21.402 20.89 230.502 240.435 230.502 240.435 11.469 11.162 17.152 25.754 17.152 40.346s-5.683 29.184-17.152 40.346c0 0-209.101 219.546-230.502 240.384-21.402 20.89-59.853 22.323-82.739 0-22.835-22.272-24.627-53.35 0-80.64l191.898-200.090-191.846-200.090c-24.627-27.341-22.835-58.419 0-80.691 22.835-22.272 61.338-20.89 82.688-0z"
],
"tags": [
"arrow-right",
"right",
"next"
],
"grid": 20,
"attrs": []
},
"attrs": [],
"properties": {
"id": 208,
"order": 12,
"prevSize": 32,
"code": 58893,
"name": "arrow-right",
"ligatures": "show detail"
},
"setIdx": 7,
"setId": 0,
"iconIdx": 208
}
],
"height": 1024,
"metadata": {
"name": "clipperz-icons"
},
"preferences": {
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "clipperz-icons",
"majorVersion": 1,
"minorVersion": 0
},
"showGlyphs": true,
"metrics": {
"emSize": 512,
"baseline": 6.25,
"whitespace": 50
},
"resetPoint": 58880,
"showQuickUse": true,
"quickUsageToken": false,
"showMetrics": true,
"showMetadata": false,
"autoHost": false,
"embed": true,
"showVersion": true,
"ligaReset": "tags"
},
"imagePref": {
"color": 0,
"height": 32,
"columns": 16,
"margin": 16,
"png": false,
"sprites": true,
"prefix": "icon-"
},
"historySize": 100,
"showCodes": false,
"gridSize": 16,
"showLiga": true,
"showGrid": true,
"showGlyphs": true,
"showQuickUse": true,
"search": "",
"quickUsageToken": {
"UntitledProject1": "YzBlN2I0ZDQ5YTQyY2NjYjgwNGRkYzNhYzU4NDZhMDcjMiMxNDAzMTA2OTk5IyMj"
},
"showQuickUse2": true,
"showSVGs": true
}
}
@font-face {
font-family: 'clipperz-icons';
src:url('fonts/clipperz-icons.eot?i5t0ry');
src:url('fonts/clipperz-icons.eot?#iefixi5t0ry') format('embedded-opentype'),
url('fonts/clipperz-icons.ttf?i5t0ry') format('truetype'),
url('fonts/clipperz-icons.woff?i5t0ry') format('woff'),
url('fonts/clipperz-icons.svg?i5t0ry#clipperz-icons') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
font-family: 'clipperz-icons';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Enable Ligatures ================ */
letter-spacing: 0;
-webkit-font-feature-settings: "liga";
-moz-font-feature-settings: "liga=1";
-moz-font-feature-settings: "liga";
-ms-font-feature-settings: "liga" 1;
-o-font-feature-settings: "liga";
font-feature-settings: "liga";
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-log-out:before {
content: "\e609";
}
.icon-mail:before {
content: "\e60e";
}
.icon-popup:before {
content: "\e60a";
}
.icon-plus:before {
content: "\e60f";
}
.icon-cross:before {
content: "\e612";
}
.icon-plus3:before {
content: "\e608";
}
.icon-arrow-left:before {
content: "\e60c";
}
.icon-arrow-right:before {
content: "\e60d";
}
.icon-security:before {
content: "\e125";
}
.icon-label:before {
content: "\e2a6";
}
.icon-gear:before {
content: "\f02f";
}
.icon-key:before {
content: "\e98d";
}
.icon-eye:before {
content: "\e9ce";
}
.icon-loop2:before {
content: "\ea2e";
}
.icon-tag:before {
content: "\e605";
}
.icon-tags:before {
content: "\e600";
}
.icon-clock:before {
content: "\e607";
}
.icon-spinner:before {
content: "\e60b";
}
.icon-search:before {
content: "\e606";
}
.icon-locked:before {
content: "\e610";
}
.icon-unlocked:before {
content: "\e611";
}
.icon-menu:before {
content: "\e601";
}
.icon-close:before {
content: "\e602";
}
.icon-checkmark:before {
content: "\e603";
}
.icon-commands:before {
content: "\e613";
}
.icon-logo:before {
content: "\e604";
}

View File

@ -320,7 +320,6 @@ MochiKit.Base.update(Clipperz.PM.Crypto, {
deferredResult.addCallback(MochiKit.Async.wait, 0.1);
deferredResult.addCallback(Clipperz.Base.evalJSON);
deferredResult.addErrback(function(anError) {
console.log("PIPPO_1", anError)
Clipperz.logError("Error while decrypting data [4]");
throw Clipperz.Crypto.Base.exception.CorruptedMessage;
})
@ -403,7 +402,6 @@ console.log("PIPPO_1", anError)
try {
result = Clipperz.Base.evalJSON(value);
} catch (exception) {
console.log("PIPPO_2", anError)
Clipperz.logError("Error while decrypting data [4]");
throw Clipperz.Crypto.Base.exception.CorruptedMessage;
}

View File

@ -37,6 +37,7 @@ Clipperz.PM.UI.Components.Cards.EditClass = React.createClass({
getInitialState: function() {
return {
'draggedFieldReference': null,
'passwordGeneratorFieldReference': null,
'fromFieldPosition': -1,
'toFieldPosition': -1,
'dropPosition': -1,
@ -216,6 +217,19 @@ console.log("DROP"); //, anEvent);
//============================================================================
setValueFromPasswordGenerator: function (aField, aTextAreaRef) {
var reference = this.props['_reference'];
var self = this;
return function (aValue) {
aField.setValue(aValue);
React.findDOMNode(self.refs[aTextAreaRef]).value = aValue;
self.setState({'passwordGeneratorFieldReference':null});
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'refreshCardEditDetail', reference);
};
},
handleChange: function (anObject , aMethodName) {
var reference = this.props['_reference'];
var method = MochiKit.Base.method(anObject, aMethodName);
@ -270,6 +284,23 @@ console.log("DROP"); //, anEvent);
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'refreshCardEditDetail', reference);
},
showPasswordGenerator: function (aField) {
var result;
if (aField['actionType'] == 'PASSWORD') {
var reference = this.props['_reference'];
var self = this;
result = function (anEvent) {
self.setState({'passwordGeneratorFieldReference':aField['_reference']});
};
} else {
result = null;
}
return result;
},
toggleLock: function (aField) {
var reference = this.props['_reference'];
@ -290,6 +321,10 @@ console.log("DROP"); //, anEvent);
};
},
closePasswordGenerator: function () {
this.setState({'passwordGeneratorFieldReference': null});
},
//============================================================================
renderLabel: function (aLabel) {
@ -320,6 +355,7 @@ console.log("DROP"); //, anEvent);
var cardFieldClasses = {};
var cardFieldValueClasses = {};
var field = aField['_field'];
var fieldValueRef = ref + '_textarea';
//console.log("RENDER FIELD", aField);
cardFieldClasses['cardField'] = true;
@ -355,12 +391,12 @@ console.log("DROP"); //, anEvent);
React.DOM.input({'_className_':'_fieldLabel_', 'onChange':this.handleChange(field, 'setLabel'), 'defaultValue':aField['label'], 'placeholder': "label"}),
]),
React.DOM.div({'className':'fieldValue'}, [
// React.DOM.textarea({'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses), 'onChange':this.handleChange(field, 'setValue'), 'defaultValue':aField['value'], 'placeholder': "value"}),
Clipperz.PM.UI.Components.Cards.TextArea({'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses), 'onChange':this.handleChange(field, 'setValue'), 'onKeyDown':this.handleKeyDown(field), 'defaultValue':aField['value'], 'placeholder': "value"}),
(ref == this.state['passwordGeneratorFieldReference']) ? Clipperz.PM.UI.Components.Cards.PasswordGenerator({'field':aField, 'setValueCallback':this.setValueFromPasswordGenerator(field, fieldValueRef), 'closeClallback':this.closePasswordGenerator}) : null,
Clipperz.PM.UI.Components.Cards.TextArea({'className':Clipperz.PM.UI.Components.classNames(cardFieldValueClasses), 'onChange':this.handleChange(field, 'setValue'), 'onKeyDown':this.handleKeyDown(field), 'defaultValue':aField['value'], 'placeholder': "value", 'ref':fieldValueRef}),
])
]),
React.DOM.div({'className':'fieldAction'}, [
React.DOM.span({'className':'action'}, aField['actionType'].toLowerCase() == 'password' ? 'generate password' : aField['actionType'].toLowerCase()),
React.DOM.span({'className':'action ' + aField['actionType'], 'onClick':this.showPasswordGenerator(aField)}, aField['actionType'].toLowerCase() == 'password' ? 'password generator' : aField['actionType'].toLowerCase()),
React.DOM.span({'className':'toggleLock', 'onClick':this.toggleLock(field)}, aField['isHidden'] ? "locked" : "unlocked")
])
]);

View File

@ -0,0 +1,220 @@
/*
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.
* Clipperz is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
* Clipperz is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
License along with Clipperz. If not, see http://www.gnu.org/licenses/.
*/
'use strict';
Clipperz.Base.module('Clipperz.PM.UI.Components.Cards');
Clipperz.PM.UI.Components.Cards.PasswordGeneratorClass = React.createClass({
charsetBlocks: {
'chars_AZ': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'chars_az': 'abcdefghijklmnopqrstuvwxyz',
'chars_09': '0123456789',
'chars_space': ' ',
'chars_other': '~`!@#$%^&*()-_=+,.<>/?[]{}\\|:;\'"'
},
gradientColors: ['#ff3236', '#e74030', '#cf4e2a', '#b75c24', '#9f6a1e', '#877818', '#6f8612', '#57940c', '#3fa206', '#25ad00', '#25ad00'],
getInitialState: function () {
return {
'length': 32,
'options': 'closed',
'chars_AZ': true,
'chars_az': true,
'chars_09': true,
'chars_space': false,
'chars_other': true,
'charset': '',
'password': '',
'entropy': 0,
};
},
setPasswordValue: function () {
this.props['setValueCallback'](this.state['password']);
},
toggleOptions: function () {
var options;
options = (this.state['options'] == 'closed') ? 'open' : 'closed';
this.setState({'options':options});
},
updateCharset: function () {
var charsetKeys = ['chars_AZ', 'chars_az', 'chars_09', 'chars_space', 'chars_other'];
var self = this;
var charset;
charset = MochiKit.Iter.reduce(function (acc, key) { return acc + self.charsetBlocks[key]}, MochiKit.Base.filter(function (key) { return self.state[key] == true;}, charsetKeys), '');
this.setState({'charset': charset});
MochiKit.Async.callLater(0.1, this.refreshPasswordValue);
},
refreshPasswordValue: function () {
var charsetBitSize;
var passwordString;
var charset;
var passwordLength;
var randomBytes;
var blockIndex;
charset = this.state['charset'];
passwordLength = this.state['length'];
charsetBitSize = 0;
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
blockIndex = 0;
passwordString = "";
while (Math.pow(2, charsetBitSize) < charset.length) {
charsetBitSize ++;
}
if (charsetBitSize > 0) {
// while (Clipperz.PM.Crypto.passwordEntropy(passwordString) < 128) {
while (passwordString.length < passwordLength) {
var randomValue;
if (((blockIndex + 1)*charsetBitSize) > (randomBytes.length() * 8)) {
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
blockIndex = 0;
}
randomValue = randomBytes.bitBlockAtIndexWithSize(blockIndex*charsetBitSize, charsetBitSize);
if (randomValue < charset.length) {
passwordString += charset.charAt(randomValue);
}
blockIndex ++;
}
} else {
passwordString = "";
}
this.setState({
'password': passwordString,
'entropy': Clipperz.PM.Crypto.passwordEntropy(passwordString)
});
},
refreshEntropyValue: function () {
this.setState({
'entropy': Clipperz.PM.Crypto.passwordEntropy(this.state['password'])
});
},
changeStateWithTargetValue: function (aKey, shouldUpdatePasswordValue) {
var self = this;
return function (anEvent) {
var newState = {};
newState[aKey] = anEvent.target.value;
self.setState(newState);
if (shouldUpdatePasswordValue) {
MochiKit.Async.callLater(0.1, self.refreshPasswordValue);
} else {
MochiKit.Async.callLater(0.1, self.refreshEntropyValue);
}
}
},
changeStateWithCheckbox: function (aKey) {
var self = this;
return function (anEvent) {
var newState = {};
newState[aKey] = anEvent.target.checked;
self.setState(newState);
MochiKit.Async.callLater(0.1, self.updateCharset);
}
},
// isPasswordField: function () {
// return this.props['field']['actionType'] == 'PASSWORD';
// },
componentDidMount: function () {
this.updateCharset();
this.refreshPasswordValue();
},
render: function () {
var goodEntropy = 128;
var entropyPercentage;
var entropyWidth;
var entropyColor;
var result;
entropyPercentage = Math.min(this.state['entropy'] / goodEntropy * 100, 100);
entropyWidth = (100 - entropyPercentage)+ '%';
entropyColor = this.gradientColors[Math.floor(entropyPercentage / 10)];
result = React.DOM.div({'className':'passwordGenerator'}, [
React.DOM.div({'className':'passwordGeneratorMask', 'onClick':this.props['closeClallback']}),
React.DOM.div({'className':'passwordGeneratorBaloon'}, [
React.DOM.form({}, [
React.DOM.div({'className':'optionsWrapper'}, [
React.DOM.header({}, [
React.DOM.div({'className':'button', 'onClick':this.toggleOptions}, "options")
]),
React.DOM.div({'className':'options ' + this.state['options']}, [
React.DOM.div({'className':'length'}, [
React.DOM.span({}, "length"),
React.DOM.input({'type':'number', 'placehoder':"", 'value':this.state['length'], 'min':"1", 'max':"99", 'onChange':this.changeStateWithTargetValue('length', true), 'ref':'length'}),
]),
React.DOM.div({'className':'charList'}, [
React.DOM.span({}, "characters"),
React.DOM.div({'className':'charsetSets'}, [
React.DOM.label({}, [ React.DOM.input({'type':'checkbox', 'checked':this.state['chars_AZ'], 'onChange':this.changeStateWithCheckbox('chars_AZ')}), "A-Z"]),
React.DOM.label({}, [ React.DOM.input({'type':'checkbox', 'checked':this.state['chars_az'], 'onChange':this.changeStateWithCheckbox('chars_az')}), "a-z"]),
React.DOM.label({}, [ React.DOM.input({'type':'checkbox', 'checked':this.state['chars_09'], 'onChange':this.changeStateWithCheckbox('chars_09')}), "0-9"]),
React.DOM.label({}, [ React.DOM.input({'type':'checkbox', 'checked':this.state['chars_space'], 'onChange':this.changeStateWithCheckbox('chars_space')}), "space"]),
React.DOM.label({}, [ React.DOM.input({'type':'checkbox', 'checked':this.state['chars_other'], 'onChange':this.changeStateWithCheckbox('chars_other')}), "!#?"]),
]),
Clipperz.PM.UI.Components.Cards.TextArea({'rows':'1', 'value':this.state['charset'], 'onChange':this.changeStateWithTargetValue('charset', true)})
]),
])
]),
React.DOM.div({'className':'passwordValue'}, [
React.DOM.div({'className':'passwordWrapper'}, [
Clipperz.PM.UI.Components.Cards.TextArea({'rows':'1', 'value':this.state['password'], 'onChange':this.changeStateWithTargetValue('password', false)}),
React.DOM.div({'className':'entropyWrapper', 'style':{'backgroundColor':entropyColor}}, [ React.DOM.div({'className':'entropy', 'style':{'width': entropyWidth}})])
]),
React.DOM.div({'className':'button', 'onClick':this.refreshPasswordValue}, "generate new password"),
]),
React.DOM.div({'className':'button setValue', 'onClick':this.setPasswordValue})
])
])
]);
return result;
},
//=========================================================================
});
Clipperz.PM.UI.Components.Cards.PasswordGenerator = React.createFactory(Clipperz.PM.UI.Components.Cards.PasswordGeneratorClass);

View File

@ -211,6 +211,7 @@
"Clipperz/PM/UI/Components/Cards/CommandToolbar.js",
"Clipperz/PM/UI/Components/Cards/EditToolbar.js",
"Clipperz/PM/UI/Components/Cards/TagEditor.js",
"Clipperz/PM/UI/Components/Cards/PasswordGenerator.js",
"Clipperz/PM/UI/Components/AccountStatus.js",

File diff suppressed because one or more lines are too long

View File

@ -462,7 +462,7 @@ $cardViewBasePadding: 10px;
}
$dragHandlerHeight: 24px;
$dragHandlerWidth: 5px;
$dragHandlerWidth: 4px;
.dragHandler {
display: block;
box-sizing: border-box;
@ -486,7 +486,7 @@ $cardViewBasePadding: 10px;
content:'';
position: relative;
left:-1px;
right:-2px;
// right:-2px;
height: 100%;
width: $dragHandlerWidth;
border:2px dotted #FFF;
@ -540,7 +540,8 @@ $cardViewBasePadding: 10px;
// height: 1.3em;
// outline: none;
@include user-select(text);
resize: none;
white-space: pre-wrap;
word-wrap: break-word;
@ -590,7 +591,11 @@ $cardViewBasePadding: 10px;
&.PASSWORD {
cursor: pointer;
&:hover {
color: #888;
};
&.active {
color: #333;
}
@ -646,3 +651,259 @@ $cardViewBasePadding: 10px;
}
}
//=============================================================================
.passwordGenerator {
.passwordGeneratorMask {
position: fixed;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, 0);
z-index: 100;
}
.passwordGeneratorBaloon {
position: relative;
$passwordBaloonColor: #333;
$passwordBaloonBorder: 10px;
$borderRadius: 6px;
z-index: 101;
form {
position: absolute;
bottom: calc(100% + 4px);
left: 0;
min-width: 220px;
width: 80%;
// padding: 10px;
background-color: $passwordBaloonColor;
color: #fff;
@include border-radius($borderRadius);
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .2);
font-size: 9pt;
span {
font-size: 8pt;
color: #ccc;
}
textarea {
resize: none;
white-space: pre-wrap;
word-wrap: break-word;
width: 100%;
}
.optionsWrapper {
header {
height: 12px;
border-bottom: 1px solid #666;
div {
content: "options";
@include icon-font();
// text-align: right;
font-size: 8pt;
line-height: 14px;
color: #999;
padding-left: 5px;
&:hover {
color: white;
}
};
}
.options {
// height: inherit;
background-color: #888;
padding-left: $passwordBaloonBorder;
padding-right: $passwordBaloonBorder /* + 30px */;
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
// @include transition(height, 0.5s, ease-in);
&.closed {
height: 0px;
padding-bottom: 0px;
border-bottom: 0px;
div {
visibility: hidden;
}
}
.length {
span {
margin-right: 3px;
&:after {
content: ':';
}
}
input {
background-color: #888;
color: white;
font-weight: bold;
font-size: 12pt;
border: 0px;
text-align: right;
&::-webkit-outer-spin-button {
opacity: 1;
}
}
}
.charList {
span {
display: inline-block;
line-height: 10px;
&:after {
content: ':';
}
}
.charsetSets {
display: inline-block;
align: right;
// div {
// font-size: 8pt;
// display: inline-block;
// border: 1px solid gray;
// height: 20px;
// line-height: 20px;
// padding: 0px 4px;
// margin: 0px 2px;
// @include border-radius(5px);
//
// &.selected {
// border: 1px solid #aaa;
// background-color: gray;
// }
// }
label {
span {
font-size: 10pt;
color: #eee;
&:after {
content: '';
}
}
padding-right: 5px;
cursor: pointer;
}
}
textarea {
color: gray;
min-height: 34px;
&:focus {
outline: 0;
}
}
}
}
}
.passwordValue {
@include flexbox();
@include flex-direction(row);
padding: $passwordBaloonBorder;
padding-top: 3px;
// padding-bottom: $passwordBaloonBorder - $borderRadius;
padding-bottom: 0px;
.passwordWrapper {
@include flex(auto);
textarea {
font-size: 12pt;
font-weight: bold;
border: 0px;
&:focus {
outline: 0;
}
}
.entropyWrapper {
width: 100%;
height: 2px;
.entropy {
height: 100%;
background-color: white;
float: right;
}
}
}
.button {
@include flex(none);
@include icon-font();
padding-left: 10px;
font-size: 14pt;
font-weight: bold;
color: #999;
width: 20px;
&:hover {
color: white;
};
}
}
.setValue {
background-color: $passwordBaloonColor;
// height: $borderRadius;
height: 10px - $borderRadius;
border-bottom: $borderRadius solid $passwordBaloonColor;
border-bottom-left-radius: $borderRadius;
border-bottom-right-radius: $borderRadius;
$arrowSize: 6px;
$hoverArrowSize: 8px;
// $hoverColor: $clipperz-blue;
$hoverColor: #aaa;
&:after {
content:'';
position:absolute;
top:100%;
// left:10px;
left:10%;
width:0;
height:0;
border-top:$arrowSize solid $passwordBaloonColor;
border-left:$arrowSize solid transparent;
border-right:$arrowSize solid transparent;
}
&:hover {
border-color: $hoverColor;
box-shadow: 0 3px 3px 0 rgba(0, 0, 0, .4);
&:after {
// background-color: $hoverColor;
border-top:$hoverArrowSize solid $hoverColor;
border-left:$hoverArrowSize solid transparent;
border-right:$hoverArrowSize solid transparent;
margin-left: -($hoverArrowSize - $arrowSize) / 2;
}
}
}
}
}
}