-
Notifications
You must be signed in to change notification settings - Fork 3
/
flowerpassword.user.js
132 lines (112 loc) · 4.71 KB
/
flowerpassword.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// ==UserScript==
// @name Flower Password
// @name:zh-CN 花密
// @namespace https://greasyfork.org/zh-CN/scripts/23026-flower-password
// @version 0.5.2
// @author 徐小花, Johnny Jian, xLsDg
// @description 花密 Flower Password - 可记忆的密码管理方案
// @homepageURL https://github.com/xlsdg/flower-password-user-script
// @icon https://cdn.jsdelivr.net/gh/xlsdg/flower-password-user-script/icon.png
// @updateURL https://cdn.jsdelivr.net/gh/xlsdg/flower-password-user-script/flowerpassword.user.js
// @downloadURL https://cdn.jsdelivr.net/gh/xlsdg/flower-password-user-script/flowerpassword.user.js
// @supportURL https://github.com/xlsdg/flower-password-user-script/issues
// @include http://*
// @include https://*
// @match http://*/*
// @match https://*/*
// @require https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/fpcode/dist/flowerpassword.umd.js
// @require https://cdn.jsdelivr.net/npm/punycode@1.4.1/punycode.min.js
// @require https://cdn.jsdelivr.net/gh/gorhill/publicsuffixlist.js/publicsuffixlist.min.js
// @resource FP_STYLE https://cdn.jsdelivr.net/gh/xlsdg/flower-password-user-script/fp.min.css
// @resource PUBLIC_SUFFIX_LIST https://publicsuffix.org/list/public_suffix_list.dat
// @run-at document-end
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_setClipboard
// @license MIT License
// @encoding utf-8
// ==/UserScript==
(function () {
'use strict';
var currentField = null;
function setupInputListeners() {
function insideBox(e) {
return e.parents('#flower-password-input').length > 0;
}
var lstPublicSuffix = GM_getResourceText('PUBLIC_SUFFIX_LIST');
publicSuffixList.parse(lstPublicSuffix, punycode.toASCII);
var hostname = location.hostname.toLowerCase();
var domain = publicSuffixList.getDomain(hostname);
var suffix = publicSuffixList.getPublicSuffix(hostname);
$(document).on('focus', 'input:password', function () {
if (insideBox($(this))) {
return;
}
lazyInject();
if (currentField && currentField.get(0) != this) {
$('#flower-password-password, #flower-password-key').val('');
}
currentField = $(this);
var offset = currentField.offset();
var height = currentField.outerHeight();
$('#flower-password-input')
.css({
left: offset.left + 'px',
top: offset.top + height + 'px',
})
.show();
var code = '';
var key = domain.replace('.' + suffix, '') + code;
$('#flower-password-key').val(key);
});
$(document).on('focus', 'input:not(:password)', function () {
if (insideBox($(this))) {
return;
}
$('#flower-password-input').hide();
});
}
function isInjected() {
return $('#flower-password-input').length > 0;
}
function lazyInject() {
if (isInjected()) {
return;
}
var style = GM_getResourceText('FP_STYLE');
GM_addStyle(style);
var html =
'<div id="flower-password-input" style="display: none;">' +
'<span id="flower-password-close" title="关闭">关闭</span>' +
'<h1>花密 Flower Password</h1>' +
'<label for="flower-password-password">记忆密码</label><input id="flower-password-password" name="flower-password-password" type="password" value=""/>' +
'<br/>' +
'<label for="flower-password-key">区分代号</label><input id="flower-password-key" name="flower-password-key" type="text" value=""/>' +
'<p id="flower-password-hint">· 记忆密码:可选择一个简单易记的密码,用于生成其他高强度密码。<br/>· 区分代号:用于区别不同用途密码的简短代号,如淘宝账号可用“taobao”或“tb”等。<br/>· 按Enter键或Esc键关闭本窗口。<br/>· 花密官网地址:<a href="https://flowerpassword.com/" target="_blank">https://flowerpassword.com/</a></p>' +
'</div>';
$('body').append(html);
var onChange = function () {
var password = $('#flower-password-password').val();
var key = $('#flower-password-key').val();
var result = fpCode(password, key);
if (result) {
currentField.val(result);
GM_setClipboard(result);
}
};
$('#flower-password-password, #flower-password-key')
.change(onChange)
.keyup(onChange)
.keyup(function (e) {
if (e.which === 13 || e.which === 27) {
currentField.focus();
$('#flower-password-input').hide();
}
});
$('#flower-password-close').click(function () {
$('#flower-password-input').hide();
});
}
setupInputListeners();
})();