18 |
19 | Created by Conor
20 | and Ray, 2FAN
21 | (Two Factor Authentication Notifier) strives to help all netizens be more
22 | secure on the web.
23 |
24 |
25 |
26 | Thanks to the folks at twofactorauth.org
27 | for opensourcing their project, which allowed us to build this tool.
28 |
29 |
30 |
31 | Also, thanks to Blair Adams, Perametade Games, anbileru adaleru for
32 | allowing us to use their icons through
33 | thenounproject.com
34 | as well as the Google Design team
35 | for open sourcing their icons.
36 |
37 |
38 |
39 | If you are interested in jumping into the code for 2FAN, we've open sourced
40 | everything on our Github repo here.
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/extension/browserAction/confirmation.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
23 |
24 | Just like that, you've pissed off a hacker. Well done!
25 |
26 |
27 | We'll stop bugging you with reminders for
28 | website.com.
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/extension/browserAction/doesNotSupport2FA.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 | Do you find this extension helpful? Annoying?
20 | Is there something you'd like to see changed or added?
21 |
22 |
23 |
24 | We'd love to hear from you! Drop us a line on our
25 | Github Issues page!
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/extension/browserAction/icons/About.svg:
--------------------------------------------------------------------------------
1 |
22 |
23 | You've enabled 2FA for
24 | website.com.
25 |
26 |
27 | But, in case you need it, here is
28 | the 2FA guide.
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/extension/browserAction/styles2FAN.css:
--------------------------------------------------------------------------------
1 | *{
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | font-family: 'Rubik', sans-serif;
7 | font-size: 16px;
8 | text-rendering: optimizeLegibility;
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
13 | body {
14 | width: 15rem;
15 | padding: 1.5rem;
16 | color: #433E36;
17 |
18 | display: flex;
19 | flex-direction: column;
20 | align-items: flex-start;
21 | }
22 |
23 | svg {
24 | display: block;
25 | }
26 |
27 | .icon {
28 | fill: #9B8333;
29 | width: 24px;
30 | height: 24px;
31 | }
32 |
33 |
34 | .icon__checkmark {
35 | fill: #219653;
36 | }
37 |
38 |
39 |
40 |
41 | .primary-nav {
42 | transition: transform 400ms;
43 | transition-timing-function: cubic-bezier(0.2,1,0.3,1);
44 | width: 20%;
45 | }
46 |
47 | .primary-nav:hover {
48 | transform: translate3d(-0.25rem, 0, 0);
49 | }
50 |
51 |
52 | .hidden {
53 | display: none;
54 | }
55 |
56 |
57 | .methods {
58 | font-weight: 400;
59 | width: 100%;
60 | }
61 |
62 | .methods__info-btn {
63 | align-self: center;
64 | margin-bottom: 1rem;
65 | transition: transform 400ms;
66 | transition-timing-function: cubic-bezier(0.2,1,0.3,1);
67 | }
68 |
69 | .methods__info-btn:hover {
70 | transform: translate3d(0, 0.25rem, 0);
71 | }
72 |
73 |
74 | .methods__title {
75 | font-size: 0.8125rem;
76 | padding: 0.5rem 0;
77 | color: #87847E;
78 | opacity: 0.7;
79 | }
80 |
81 | .methods__list {
82 | list-style-type: none;
83 | padding:0;
84 | margin: 0.5rem 0 0 0;
85 | width: 100%;
86 | }
87 |
88 | .methods__list li {
89 | display: flex;
90 | flex-direction: row;
91 | align-items: center;
92 | justify-content: space-between;
93 | width: 100%;
94 | padding: 0.5rem 1rem 0 1rem;
95 | }
96 |
97 | .methods__list li:first-child {
98 | border-top: solid 1px #F3F0E9;
99 | }
100 | .methods__list li:last-child {
101 | padding-bottom: 0.5rem;
102 | border-bottom: solid 1px #F3F0E9;
103 | }
104 |
105 | .methods__list p {
106 | margin: 0;
107 | font-size: 0.875rem;
108 | }
109 |
110 | .methods--checkmark-right-align {
111 | align-self: flex-end;
112 | }
113 |
114 |
115 |
116 |
117 | .main-art {
118 | width: 192px;
119 | height: 159px;
120 | }
121 |
122 | .extension-headline {
123 | font-size: 1.5rem;
124 | font-weight: 300;
125 | color: #69655E;
126 | text-align: center;
127 | margin:0;
128 | align-self: center;
129 | }
130 |
131 | .extension__body-text {
132 | font-size: 0.8125rem;
133 | text-align: center;
134 | }
135 |
136 | .extension__body-text--bold {
137 | font-weight: 600;
138 | }
139 |
140 | .extension__list {
141 | font-size: 0.8125rem;
142 | padding-left: 1rem;
143 | }
144 |
145 | .extension__list li {
146 | padding-top: 0.5rem;
147 | }
148 |
149 | .cta-btn {
150 | margin: 1rem 0;
151 | width: 100%;
152 | padding: 0.75rem 0;
153 | text-align: center;
154 | text-decoration: none;
155 | background-color: #F3CD50;
156 | box-shadow: 0px 3px 12px rgba(135, 205, 220, 0.34);
157 | border-radius: 200px;
158 | align-self: center;
159 | transition: transform 400ms;
160 | transition-timing-function: cubic-bezier(0.2,1,0.3,1);
161 | }
162 |
163 | .cta-btn::after {
164 | content: '';
165 | position: absolute;
166 | top: 0;
167 | left: 0;
168 | z-index: -1;
169 | width: 100%;
170 | height: 100%;
171 | border-radius: 200px;
172 | align-self: center;
173 | box-shadow: 0px 8px 24px rgba(135, 205, 220, 1);
174 | opacity: 0;
175 | transition: opacity 400ms;
176 | transition-timing-function: cubic-bezier(0.2,1,0.3,1);
177 | }
178 |
179 | .cta-btn:hover {
180 | transform: translate3d(0, -0.25rem, 0);
181 | }
182 |
183 | .cta-btn:hover::after {
184 | opacity: 0.5;
185 | }
186 |
187 | .cta-btn__headline {
188 | font-weight: 700;
189 | font-size: 1.30rem;
190 | display: block;
191 | color: #433E36;
192 | }
193 |
194 | .cta-btn__site-name {
195 | font-weight: 700;
196 | font-size: 0.75rem;
197 | color: #433E36;
198 | }
199 |
200 |
201 |
202 |
203 |
204 | .menu-page-list {
205 | list-style-type: none;
206 | padding:0;
207 | width: 100%;
208 | }
209 |
210 | .menu-page-list li {
211 | display: flex;
212 | flex-direction: row;
213 | border-top: solid 1px #F5F2EB;
214 | width: 100%;
215 | }
216 |
217 | .menu-page-list li:last-child {
218 | border-bottom: solid 1px #F5F2EB;
219 | }
220 |
221 | .menu-page-list a {
222 | text-decoration: none;
223 | display: inline-block;
224 | display: flex;
225 | flex-direction: row;
226 | align-items: center;
227 | transition: transform 400ms;
228 | transition-timing-function: cubic-bezier(0.2,1,0.3,1);
229 | }
230 |
231 | .menu-page-list a:hover{
232 | opacity: 0.7;
233 | transform: translate3d(0.25rem, 0, 0);
234 | }
235 |
236 | .menu-page-list p {
237 | margin-left: 1rem;
238 | font-weight: 400;
239 | color: #433E36;
240 | }
241 |
242 | .extension-body-text p{
243 | font-size: 0.8125rem;
244 | }
245 |
246 | .temporary-hide {
247 | display: none !important;
248 | }
249 |
250 | .missing-docs {
251 | margin: 0.25rem 0;
252 | padding: 0.5rem 0;
253 | width: 100%;
254 | text-align: center;
255 | text-decoration: none;
256 |
257 | align-self: center;
258 | }
259 |
260 | .alreadyEnabled2fa {
261 | margin: 0.25rem 0;
262 | padding: 0.5rem 0;
263 | width: 100%;
264 | text-align: center;
265 | text-decoration: underline;
266 |
267 | align-self: center;
268 | }
269 |
270 | .alreadyEnabled2fa:visited {
271 | color: inherit;
272 | }
--------------------------------------------------------------------------------
/src/extension/icons/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/app_icon_128.png
--------------------------------------------------------------------------------
/src/extension/icons/app_icon_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/app_icon_48.png
--------------------------------------------------------------------------------
/src/extension/icons/no_2fa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/no_2fa.png
--------------------------------------------------------------------------------
/src/extension/icons/no_2fa@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/no_2fa@2x.png
--------------------------------------------------------------------------------
/src/extension/icons/no_2fa@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/no_2fa@3x.png
--------------------------------------------------------------------------------
/src/extension/icons/notification_icon_80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/notification_icon_80.png
--------------------------------------------------------------------------------
/src/extension/icons/notification_icon_80@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/notification_icon_80@2x.png
--------------------------------------------------------------------------------
/src/extension/icons/yes_2fa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/yes_2fa.png
--------------------------------------------------------------------------------
/src/extension/icons/yes_2fa@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/yes_2fa@2x.png
--------------------------------------------------------------------------------
/src/extension/icons/yes_2fa@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conorgil/2fa-notifier/d3ff7ff50a9673045f02258526a145fe6d54cbc9/src/extension/icons/yes_2fa@3x.png
--------------------------------------------------------------------------------
/src/extension/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "2FA Notifier",
3 | "manifest_version": 2,
4 | "version": "0.8.1",
5 | "author": "Conor Gilsenan",
6 | "description": "Notifies users whether the current browser page supports 2FA or not.",
7 |
8 | "background": {
9 | "scripts": [
10 | "generatedJS/background.bundle.js"
11 | ],
12 | "persistent": true
13 | },
14 |
15 | "browser_action": {
16 | "default_popup": "browserAction/popup.html",
17 | "default_title": "2FA Notifier",
18 | "default_icon": {
19 | "16": "icons/no_2fa.png",
20 | "32": "icons/no_2fa@2x.png",
21 | "48": "icons/no_2fa@3x.png"
22 | }
23 | },
24 |
25 | "icons": {
26 | "48": "icons/app_icon_48.png",
27 | "128": "icons/app_icon_128.png"
28 | },
29 |
30 | "permissions": [
31 | "storage",
32 | "tabs",
33 | "notifications"
34 | ],
35 |
36 | "web_accessible_resources": [
37 | "**/*.html",
38 | "**/*.css",
39 | "**/*.js",
40 | "**/*.png"
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/src/extension/options/options.css:
--------------------------------------------------------------------------------
1 | input {
2 | width: 225px;
3 | text-overflow: ellipsis;
4 | }
5 |
6 | hidden {
7 |
8 | }
--------------------------------------------------------------------------------
/src/extension/options/options.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |