Merge branch 'master' of github.com:bil-elmoussaoui/Gnome-TwoFactorAuth
24
README.md
|
@ -1,13 +1,15 @@
|
|||
 [](https://github.com/bil-elmoussaoui/Gnome-TwoFactorAuth/releases)  [](https://github.com/bil-elmoussaoui/Gnome-TwoFactorAuth/releases) 
|
||||
|
||||
# Gnome TwoFactorAuth
|
||||
Two-factor authentication code generator for Gnome <br>
|
||||
For translators : https://www.transifex.com/twofactorauth/twofactorauth/
|
||||
### Dependecies
|
||||
### Dependecies
|
||||
- `Python 3.3+`
|
||||
- `Gtk 3.16+`
|
||||
- `PyOTP`
|
||||
- `zbarlight`
|
||||
- `yaml`
|
||||
- `GnomeKeyring`
|
||||
|
||||
<sub>PS: The application was only tested on Arch with Gtk 3.20+, but it should work nicely with older versions too. Keyboard shortcuts widget won't be shown for older versions.</sub>
|
||||
|
@ -21,10 +23,11 @@ For translators : https://www.transifex.com/twofactorauth/twofactorauth/
|
|||
- On Arch :
|
||||
```bash
|
||||
yaourt -S gnome-twofactourauth
|
||||
```
|
||||
```
|
||||
|
||||
### Credits
|
||||
- Websites and application icons are from Paper theme, created by [Sam Hewitt](https://github.com/snwh)
|
||||
- Applications/Websites database are from [twofactorauth](https://github.com/2factorauth/twofactorauth), by 2factorauth team
|
||||
|
||||
### How to build from source
|
||||
1 - Clone the repository
|
||||
|
@ -35,15 +38,24 @@ For translators : https://www.transifex.com/twofactorauth/twofactorauth/
|
|||
```bash
|
||||
sudo pip install pyotp
|
||||
```
|
||||
3 - Install `zbarlight`
|
||||
```bash
|
||||
sudo pip install zbarlight
|
||||
```
|
||||
4 - Install `yaml`
|
||||
```bash
|
||||
sudo pip install pyyaml
|
||||
```
|
||||
|
||||
<sub>PS : In some distributions you will need to use `pip3` instead of `pip` to install the compatible version of the package with Python 3.</sub> <br>
|
||||
3 - Afterwards
|
||||
5 - Afterwards
|
||||
```bash
|
||||
./autogen.sh
|
||||
make
|
||||
sudo make install
|
||||
```
|
||||
4 - You can run the application from the desktop file or from terminal using
|
||||
6 - You can run the application from the desktop file or from terminal using
|
||||
```bash
|
||||
gnome-twofactorauth
|
||||
```
|
||||
<sub>Arch users can build from source directly using AUR `yaourt -S gnome-twofactorauth-git`</sub>
|
||||
<sub>Arch users can build from source directly using AUR `yaourt -S gnome-twofactorauth-git`</sub>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
app_PYTHON = \
|
||||
application.py \
|
||||
utils.py \
|
||||
__init__.py
|
||||
|
||||
appdir = $(pythondir)/TwoFactorAuth
|
||||
|
|
|
@ -4,9 +4,10 @@ require_version("Gtk", "3.0")
|
|||
require_version("GnomeKeyring", "1.0")
|
||||
from gi.repository import Gtk, GLib, Gio, Gdk, GObject, GnomeKeyring as GK
|
||||
from TwoFactorAuth.widgets.window import Window
|
||||
from TwoFactorAuth.models.authenticator import Authenticator
|
||||
from TwoFactorAuth.models.database import Database
|
||||
from TwoFactorAuth.widgets.settings import SettingsWindow
|
||||
from TwoFactorAuth.models.settings import SettingsReader
|
||||
from TwoFactorAuth.utils import *
|
||||
import logging
|
||||
import signal
|
||||
from gettext import gettext as _
|
||||
|
@ -16,12 +17,10 @@ class Application(Gtk.Application):
|
|||
win = None
|
||||
alive = True
|
||||
locked = False
|
||||
menu = Gio.Menu()
|
||||
auth = Authenticator()
|
||||
use_GMenu = True
|
||||
|
||||
settings_window = None
|
||||
settings_action = None
|
||||
|
||||
def __init__(self):
|
||||
Gtk.Application.__init__(self,
|
||||
application_id="org.gnome.TwoFactorAuth",
|
||||
|
@ -29,19 +28,15 @@ class Application(Gtk.Application):
|
|||
GLib.set_application_name(_("TwoFactorAuth"))
|
||||
GLib.set_prgname("Gnome-TwoFactorAuth")
|
||||
|
||||
current_desktop = env.get("XDG_CURRENT_DESKTOP")
|
||||
if current_desktop:
|
||||
self.use_GMenu = current_desktop.lower() == "gnome"
|
||||
else:
|
||||
self.use_GMenu = False
|
||||
self.menu = Gio.Menu()
|
||||
self.db = Database()
|
||||
self.cfg = SettingsReader()
|
||||
self.locked = self.cfg.read("state", "login")
|
||||
|
||||
result = GK.unlock_sync("Gnome-TwoFactorAuth", None)
|
||||
if result == GK.Result.CANCELLED:
|
||||
self.quit()
|
||||
|
||||
self.cfg = SettingsReader()
|
||||
if self.cfg.read("state", "login"):
|
||||
self.locked = True
|
||||
cssProviderFile = Gio.File.new_for_uri('resource:///org/gnome/TwoFactorAuth/style.css')
|
||||
cssProvider = Gtk.CssProvider()
|
||||
screen = Gdk.Screen.get_default()
|
||||
|
@ -95,26 +90,21 @@ class Application(Gtk.Application):
|
|||
action.connect("activate", self.on_quit)
|
||||
self.add_action(action)
|
||||
|
||||
if self.use_GMenu:
|
||||
if is_gnome():
|
||||
self.set_app_menu(self.menu)
|
||||
logging.debug("Adding gnome shell menu")
|
||||
|
||||
def do_activate(self, *args):
|
||||
self.win = Window(self)
|
||||
self.win.show_all()
|
||||
self.add_window(self.win)
|
||||
if not self.win:
|
||||
self.win = Window(self)
|
||||
self.win.show_all()
|
||||
self.add_window(self.win)
|
||||
else:
|
||||
self.win.present()
|
||||
|
||||
def refresh_menu(self):
|
||||
if self.use_GMenu:
|
||||
self.settings_action.set_enabled(
|
||||
not self.settings_action.get_enabled())
|
||||
|
||||
def on_toggle_lock(self, *args):
|
||||
if not self.locked:
|
||||
self.locked = not self.locked
|
||||
self.win.password_entry.grab_focus_without_selecting()
|
||||
self.refresh_menu()
|
||||
self.win.refresh_window()
|
||||
is_enabled = self.settings_action.get_enabled()
|
||||
self.settings_action.set_enabled(not is_enabled)
|
||||
|
||||
def on_shortcuts(self, *args):
|
||||
"""
|
||||
|
@ -143,8 +133,11 @@ class Application(Gtk.Application):
|
|||
"""
|
||||
Shows settings window
|
||||
"""
|
||||
settings_window = SettingsWindow(self.win)
|
||||
settings_window.show_window()
|
||||
if not self.settings_window:
|
||||
self.settings_window = SettingsWindow(self.win)
|
||||
self.settings_window.show_window()
|
||||
else:
|
||||
self.settings_window.present()
|
||||
|
||||
def on_quit(self, *args):
|
||||
"""
|
||||
|
|
|
@ -2,5 +2,6 @@ appdir = $(pythondir)/TwoFactorAuth/models
|
|||
|
||||
app_PYTHON = \
|
||||
code.py \
|
||||
authenticator.py \
|
||||
database.py \
|
||||
qr_reader.py \
|
||||
settings.py
|
||||
|
|
|
@ -1,29 +1,15 @@
|
|||
import sqlite3
|
||||
import logging
|
||||
from os import path, mknod, makedirs, environ as env
|
||||
from gi.repository import GdkPixbuf, Gtk
|
||||
from gi.repository import GnomeKeyring as GK
|
||||
from hashlib import sha256
|
||||
from TwoFactorAuth.utils import create_file, get_home_path
|
||||
|
||||
class Authenticator:
|
||||
class Database:
|
||||
|
||||
def __init__(self):
|
||||
home = path.expanduser("~")
|
||||
database_file = home + '/.config/TwoFactorAuth/database.db'
|
||||
# Create missing folders
|
||||
if not (path.isfile(database_file) and path.exists(database_file)):
|
||||
dirs = database_file.split("/")
|
||||
i = 0
|
||||
while i < len(dirs) - 1:
|
||||
directory = "/".join(dirs[0:i + 1]).strip()
|
||||
if not path.exists(directory) and len(directory) != 0:
|
||||
makedirs(directory)
|
||||
logging.debug("Creating directory %s " % directory)
|
||||
i += 1
|
||||
# create database file
|
||||
mknod(database_file)
|
||||
database_file = get_home_path() + '/.config/TwoFactorAuth/database.db'
|
||||
if create_file(database_file):
|
||||
logging.debug("Creating database file %s " % database_file)
|
||||
# Connect to database
|
||||
self.conn = sqlite3.connect(database_file)
|
||||
if not self.is_table_exists():
|
||||
logging.debug(
|
||||
|
@ -134,28 +120,6 @@ class Authenticator:
|
|||
logging.error("SQL: Couldn't fetch accounts list %s" % str(e))
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_auth_icon(image):
|
||||
"""
|
||||
Generate a GdkPixbuf image
|
||||
:param image: icon name or image path
|
||||
:return: GdkPixbux Image
|
||||
"""
|
||||
directory = path.join(env.get("DATA_DIR"), "applications") + "/"
|
||||
theme = Gtk.IconTheme.get_default()
|
||||
if path.isfile(directory + image) and path.exists(directory + image):
|
||||
icon = GdkPixbuf.Pixbuf.new_from_file(directory + image)
|
||||
elif path.isfile(image) and path.exists(image):
|
||||
icon = GdkPixbuf.Pixbuf.new_from_file(image)
|
||||
elif theme.has_icon(path.splitext(image)[0]):
|
||||
icon = theme.load_icon(path.splitext(image)[0], 48, 0)
|
||||
else:
|
||||
icon = theme.load_icon("image-missing", 48, 0)
|
||||
if icon.get_width() != 48 or icon.get_height() != 48:
|
||||
icon = icon.scale_simple(48, 48,
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
return icon
|
||||
|
||||
def get_latest_id(self):
|
||||
"""
|
||||
Get the latest uid on accounts table
|
41
TwoFactorAuth/models/qr_reader.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
from PIL import Image
|
||||
import zbarlight
|
||||
from urllib.parse import urlparse, parse_qsl
|
||||
import logging
|
||||
from os import remove, path
|
||||
from TwoFactorAuth.models.code import Code
|
||||
|
||||
class QRReader:
|
||||
|
||||
def __init__(self, filename):
|
||||
self.filename = filename
|
||||
|
||||
def read(self):
|
||||
with open(self.filename, 'rb') as image_file:
|
||||
image = Image.open(image_file)
|
||||
image.load()
|
||||
self.codes = zbarlight.scan_codes('qrcode', image)
|
||||
if self.codes:
|
||||
otpauth_url = self.codes[0].decode()
|
||||
self.codes = dict(parse_qsl(urlparse(otpauth_url)[4]))
|
||||
return self.codes
|
||||
else:
|
||||
logging.error("Invalid QR image")
|
||||
return None
|
||||
|
||||
def remove(self):
|
||||
"""
|
||||
remove image file for security reasons
|
||||
"""
|
||||
if path.isfile(self.filename):
|
||||
remove(filename)
|
||||
logging.debug("QR code image was removed for security reasons")
|
||||
|
||||
def is_valid(self):
|
||||
if isinstance(self.codes, dict):
|
||||
if set(["issuer", "secret"]).issubset(self.codes.keys()):
|
||||
return Code.is_valid(self.codes["secret"])
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
66
TwoFactorAuth/utils.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
from os import path, mknod, makedirs, environ as env
|
||||
from gi.repository import GdkPixbuf, Gtk
|
||||
import logging
|
||||
from subprocess import PIPE, Popen, call
|
||||
from time import strftime
|
||||
|
||||
def is_gnome():
|
||||
return env.get("XDG_CURRENT_DESKTOP").lower() == "gnome"
|
||||
|
||||
def get_home_path():
|
||||
return path.expanduser("~")
|
||||
|
||||
def get_icon(image):
|
||||
"""
|
||||
Generate a GdkPixbuf image
|
||||
:param image: icon name or image path
|
||||
:return: GdkPixbux Image
|
||||
"""
|
||||
directory = path.join(env.get("DATA_DIR"), "applications") + "/"
|
||||
theme = Gtk.IconTheme.get_default()
|
||||
if path.isfile(directory + image) and path.exists(directory + image):
|
||||
icon = GdkPixbuf.Pixbuf.new_from_file(directory + image)
|
||||
elif path.isfile(image) and path.exists(image):
|
||||
icon = GdkPixbuf.Pixbuf.new_from_file(image)
|
||||
elif theme.has_icon(path.splitext(image)[0]):
|
||||
icon = theme.load_icon(path.splitext(image)[0], 48, 0)
|
||||
else:
|
||||
icon = theme.load_icon("image-missing", 48, 0)
|
||||
if icon.get_width() != 48 or icon.get_height() != 48:
|
||||
icon = icon.scale_simple(48, 48, GdkPixbuf.InterpType.BILINEAR)
|
||||
return icon
|
||||
|
||||
def create_file(file_path):
|
||||
if not (path.isfile(file_path) and path.exists(file_path)):
|
||||
dirs = file_path.split("/")
|
||||
i = 0
|
||||
while i < len(dirs) - 1:
|
||||
directory = "/".join(dirs[0:i + 1]).strip()
|
||||
if not path.exists(directory) and len(directory) != 0:
|
||||
makedirs(directory)
|
||||
logging.debug("Creating directory %s " % directory)
|
||||
i += 1
|
||||
mknod(file_path)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def screenshot_area(file_name):
|
||||
ink_flag = call(['which', 'gnome-screenshot'], stdout=PIPE, stderr=PIPE)
|
||||
if ink_flag == 0:
|
||||
p = Popen(["gnome-screenshot", "-a" , "-f", file_name],
|
||||
stdout=PIPE, stderr=PIPE)
|
||||
output, error = p.communicate()
|
||||
if error:
|
||||
error = error.decode("utf-8").split("\n")
|
||||
logging.debug("\n".join([e for e in error]))
|
||||
if not path.isfile(file_name):
|
||||
logging.debug("The screenshot was not token")
|
||||
return False
|
||||
return True
|
||||
else:
|
||||
logging.error("Couldn't find gnome-screenshot, please install it first")
|
||||
return False
|
||||
|
||||
def current_date_time():
|
||||
return strftime("%d_%m_%Y-%H:%M:%S")
|
|
@ -4,9 +4,14 @@ app_PYTHON = \
|
|||
add_account.py \
|
||||
confirmation.py \
|
||||
account_row.py \
|
||||
accounts_list.py \
|
||||
accounts_window.py \
|
||||
login_window.py \
|
||||
headerbar.py \
|
||||
applications_list.py \
|
||||
application_row.py \
|
||||
change_password.py \
|
||||
no_account_window.py \
|
||||
search_bar.py \
|
||||
settings.py \
|
||||
window.py
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GObject, GLib
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
from TwoFactorAuth.models.code import Code
|
||||
from TwoFactorAuth.models.authenticator import Authenticator
|
||||
from TwoFactorAuth.models.settings import SettingsReader
|
||||
from TwoFactorAuth.models.database import Database
|
||||
from TwoFactorAuth.widgets.confirmation import ConfirmationMessage
|
||||
from TwoFactorAuth.utils import get_icon
|
||||
from threading import Thread
|
||||
from time import sleep
|
||||
import logging
|
||||
|
@ -18,24 +20,25 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
code_generated = True
|
||||
alive = True
|
||||
|
||||
def __init__(self, parent, uid, name, secret_code, logo):
|
||||
def __init__(self, parent, window, app):
|
||||
Thread.__init__(self)
|
||||
Gtk.ListBoxRow.__init__(self)
|
||||
# Read default values
|
||||
cfg = SettingsReader()
|
||||
self.counter_max = cfg.read("refresh-time", "preferences")
|
||||
self.counter = self.counter_max
|
||||
self.window = window
|
||||
self.parent = parent
|
||||
self.id = uid
|
||||
self.name = name
|
||||
self.secret_code = Authenticator.fetch_secret_code(secret_code)
|
||||
self.id = app[0]
|
||||
self.name = app[1]
|
||||
self.secret_code = Database.fetch_secret_code(app[2])
|
||||
if self.secret_code:
|
||||
self.code = Code(self.secret_code)
|
||||
else:
|
||||
self.code_generated = False
|
||||
logging.error(
|
||||
"Could not read the secret code from, the keyring keys were reset manually")
|
||||
self.logo = logo
|
||||
self.logo = app[3]
|
||||
# Create needed widgets
|
||||
self.code_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
self.revealer = Gtk.Revealer()
|
||||
|
@ -46,6 +49,7 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
# Create the list row
|
||||
self.create_row()
|
||||
self.start()
|
||||
self.window.connect("key-press-event", self.__on_key_press)
|
||||
GLib.timeout_add_seconds(1, self.refresh_listbox)
|
||||
|
||||
def get_id(self):
|
||||
|
@ -94,16 +98,23 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
"""
|
||||
self.alive = False
|
||||
|
||||
def copy_code(self, event_box, box):
|
||||
def copy_code(self, *args):
|
||||
"""
|
||||
Copy code shows the code box for a while (10s by default)
|
||||
"""
|
||||
self.timer = 0
|
||||
self.parent.copy_code(event_box)
|
||||
code = self.get_code().get_secret_code()
|
||||
try:
|
||||
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||
clipboard.clear()
|
||||
clipboard.set_text(code, len(code))
|
||||
logging.debug("Secret code copied to clipboard")
|
||||
except Exception as e:
|
||||
logging.error(str(e))
|
||||
self.code_box.set_visible(True)
|
||||
self.code_box.set_no_show_all(False)
|
||||
self.code_box.show_all()
|
||||
GObject.timeout_add_seconds(1, self.update_timer)
|
||||
GLib.timeout_add_seconds(1, self.update_timer)
|
||||
|
||||
def update_timer(self, *args):
|
||||
"""
|
||||
|
@ -133,7 +144,7 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
h_box.pack_start(self.checkbox, False, True, 0)
|
||||
|
||||
# account logo
|
||||
auth_icon = Authenticator.get_auth_icon(self.logo)
|
||||
auth_icon = get_icon(self.logo)
|
||||
auth_logo = Gtk.Image(xalign=0)
|
||||
auth_logo.set_from_pixbuf(auth_icon)
|
||||
h_box.pack_start(auth_logo, False, True, 6)
|
||||
|
@ -158,12 +169,11 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
# Remove button
|
||||
remove_event = Gtk.EventBox()
|
||||
remove_button = Gtk.Image(xalign=0)
|
||||
remove_button.set_from_icon_name(
|
||||
"user-trash-symbolic", Gtk.IconSize.SMALL_TOOLBAR)
|
||||
remove_button.set_from_icon_name("user-trash-symbolic",
|
||||
Gtk.IconSize.SMALL_TOOLBAR)
|
||||
remove_button.set_tooltip_text(_("Remove the account"))
|
||||
remove_event.add(remove_button)
|
||||
remove_event.connect("button-press-event",
|
||||
self.parent.remove_account)
|
||||
remove_event.connect("button-press-event", self.remove)
|
||||
h_box.pack_end(remove_event, False, True, 6)
|
||||
|
||||
self.timer_label.set_label(_("Expires in %s seconds") % self.counter)
|
||||
|
@ -187,7 +197,7 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
self.toggle_code_box()
|
||||
|
||||
def run(self):
|
||||
while self.code_generated and self.parent.app.alive and self.alive:
|
||||
while self.code_generated and self.window.app.alive and self.alive:
|
||||
self.counter -= 1
|
||||
if self.counter == 0:
|
||||
self.counter = self.counter_max
|
||||
|
@ -199,8 +209,7 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
sleep(1)
|
||||
|
||||
def refresh_listbox(self):
|
||||
self.parent.list_box.hide()
|
||||
self.parent.list_box.show_all()
|
||||
self.window.accounts_list.refresh()
|
||||
return self.code_generated
|
||||
|
||||
def regenerate_code(self):
|
||||
|
@ -221,5 +230,38 @@ class AccountRow(Thread, Gtk.ListBoxRow):
|
|||
label.set_text(_("Couldn't generate the secret code"))
|
||||
self.code_generated = False
|
||||
|
||||
def __on_key_press(self, widget, event):
|
||||
keyname = Gdk.keyval_name(event.keyval).lower()
|
||||
if not self.window.is_locked():
|
||||
if self.parent.get_selected_row_id() == self.get_id():
|
||||
is_search_bar = self.window.search_bar.is_visible()
|
||||
if keyname == "delete" and not is_search_bar:
|
||||
self.remove()
|
||||
return True
|
||||
|
||||
if keyname == "return":
|
||||
self.toggle_code_box()
|
||||
return True
|
||||
|
||||
if event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
if keyname == 'c':
|
||||
self.copy_code()
|
||||
return True
|
||||
return False
|
||||
|
||||
def remove(self, *args):
|
||||
"""
|
||||
Remove an account
|
||||
"""
|
||||
message = _("Do you really want to remove this account?")
|
||||
confirmation = ConfirmationMessage(self.window, message)
|
||||
confirmation.show()
|
||||
if confirmation.get_confirmation():
|
||||
self.kill()
|
||||
self.window.accounts_list.remove(self)
|
||||
self.window.app.db.remove_by_id(self.get_id())
|
||||
confirmation.destroy()
|
||||
self.window.refresh_window()
|
||||
|
||||
def update_timer_label(self):
|
||||
self.timer_label.set_label(_("Expires in %s seconds") % self.counter)
|
||||
|
|
150
TwoFactorAuth/widgets/accounts_list.py
Normal file
|
@ -0,0 +1,150 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio, Gdk, GObject, GLib
|
||||
from TwoFactorAuth.widgets.confirmation import ConfirmationMessage
|
||||
from TwoFactorAuth.widgets.account_row import AccountRow
|
||||
import logging
|
||||
from gettext import gettext as _
|
||||
from hashlib import sha256
|
||||
|
||||
|
||||
class AccountsList(Gtk.ListBox):
|
||||
scrolled_win = None
|
||||
selected_count = 0
|
||||
|
||||
def __init__(self, application, window):
|
||||
self.app = application
|
||||
self.window = window
|
||||
self.generate()
|
||||
self.window.connect("key-press-event", self.on_key_press)
|
||||
|
||||
def generate(self):
|
||||
Gtk.ListBox.__init__(self)
|
||||
# Create a ScrolledWindow for accounts
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
|
||||
|
||||
self.get_style_context().add_class("applications-list")
|
||||
self.set_adjustment()
|
||||
self.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
box.pack_start(self, True, True, 0)
|
||||
|
||||
self.scrolled_win = Gtk.ScrolledWindow()
|
||||
self.scrolled_win.add_with_viewport(box)
|
||||
|
||||
apps = self.app.db.fetch_apps()
|
||||
count = len(apps)
|
||||
|
||||
for app in apps:
|
||||
self.add(AccountRow(self, self.window, app))
|
||||
|
||||
if count != 0:
|
||||
self.select_row(self.get_row_at_index(0))
|
||||
self.show_all()
|
||||
|
||||
def on_key_press(self, app, key_event):
|
||||
"""
|
||||
Keyboard Listener handling
|
||||
"""
|
||||
keyname = Gdk.keyval_name(key_event.keyval).lower()
|
||||
if not self.window.is_locked():
|
||||
if not self.window.no_account_box.is_visible():
|
||||
if keyname == "up" or keyname == "down":
|
||||
count = self.app.db.count()
|
||||
dx = -1 if keyname == "up" else 1
|
||||
selected_row = self.get_selected_row()
|
||||
if selected_row is not None:
|
||||
index = selected_row.get_index()
|
||||
index = (index + dx)%count
|
||||
self.select_row(self.get_row_at_index(index))
|
||||
return True
|
||||
return False
|
||||
|
||||
def toggle_select_mode(self):
|
||||
is_select_mode = self.window.is_select_mode
|
||||
if is_select_mode:
|
||||
self.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
|
||||
else:
|
||||
self.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
|
||||
self.select_row(self.get_row_at_index(0))
|
||||
|
||||
for row in self.get_children():
|
||||
checkbox = row.get_checkbox()
|
||||
code_label = row.get_code_label()
|
||||
visible = checkbox.get_visible()
|
||||
selected = checkbox.get_active()
|
||||
style_context = code_label.get_style_context()
|
||||
if is_select_mode:
|
||||
self.select_account(checkbox)
|
||||
style_context.add_class("application-secret-code-select-mode")
|
||||
else:
|
||||
style_context.remove_class(
|
||||
"application-secret-code-select-mode")
|
||||
|
||||
checkbox.set_visible(not visible)
|
||||
checkbox.set_no_show_all(visible)
|
||||
|
||||
def append(self, app):
|
||||
"""
|
||||
Add an element to the ListBox
|
||||
"""
|
||||
app[2] = sha256(app[2].encode('utf-8')).hexdigest()
|
||||
self.add(AccountRow(self, self.window, app))
|
||||
self.show_all()
|
||||
|
||||
def remove_selected(self, *args):
|
||||
"""
|
||||
Remove selected accounts
|
||||
"""
|
||||
for row in self.get_selected_rows():
|
||||
checkbox = row.get_checkbox()
|
||||
if checkbox.get_active():
|
||||
row.remove()
|
||||
self.unselect_all()
|
||||
self.window.toggle_select()
|
||||
self.window.refresh_window()
|
||||
|
||||
def select_account(self, checkbutton):
|
||||
"""
|
||||
Select an account
|
||||
:param checkbutton:
|
||||
"""
|
||||
is_active = checkbutton.get_active()
|
||||
is_visible = checkbutton.get_visible()
|
||||
listbox_row = checkbutton.get_parent().get_parent().get_parent()
|
||||
if is_active:
|
||||
self.select_row(listbox_row)
|
||||
if is_visible:
|
||||
self.selected_count += 1
|
||||
else:
|
||||
self.unselect_row(listbox_row)
|
||||
if is_visible:
|
||||
self.selected_count -= 1
|
||||
self.window.hb.remove_button.set_sensitive(self.selected_count > 0)
|
||||
|
||||
def get_selected_row_id(self):
|
||||
selected_row = self.get_selected_row()
|
||||
if selected_row:
|
||||
return selected_row.get_id()
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_scrolled_win(self):
|
||||
return self.scrolled_win
|
||||
|
||||
def toggle(self, visible):
|
||||
self.set_visible(visible)
|
||||
self.set_no_show_all(not visible)
|
||||
|
||||
def is_visible(self):
|
||||
return self.get_visible()
|
||||
|
||||
def hide(self):
|
||||
self.toggle(False)
|
||||
|
||||
def show(self):
|
||||
self.toggle(True)
|
||||
|
||||
def refresh(self):
|
||||
self.scrolled_win.hide()
|
||||
self.scrolled_win.show_all()
|
55
TwoFactorAuth/widgets/accounts_window.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio, Gdk, GObject, GLib
|
||||
from TwoFactorAuth.widgets.accounts_list import AccountsList
|
||||
from TwoFactorAuth.widgets.search_bar import SearchBar
|
||||
import logging
|
||||
from gettext import gettext as _
|
||||
from hashlib import sha256
|
||||
|
||||
class AccountsWindow(Gtk.Box):
|
||||
|
||||
def __init__(self, application, window):
|
||||
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
|
||||
self.app = application
|
||||
self.window = window
|
||||
self.generate()
|
||||
|
||||
def generate(self):
|
||||
self.generate_accounts_list()
|
||||
self.generate_search_bar()
|
||||
self.pack_start(self.search_bar, False, True, 0)
|
||||
self.pack_start(self.scrolled_win, True, True, 0)
|
||||
|
||||
def generate_accounts_list(self):
|
||||
"""
|
||||
Generate an account ListBox inside of a ScrolledWindow
|
||||
"""
|
||||
self.accounts_list = AccountsList(self.app, self.window)
|
||||
self.scrolled_win = self.accounts_list.get_scrolled_win()
|
||||
|
||||
def generate_search_bar(self):
|
||||
"""
|
||||
Generate search bar box and entry
|
||||
"""
|
||||
self.search_bar = SearchBar(self.accounts_list, self.window,
|
||||
self.window.hb.search_button)
|
||||
|
||||
def get_accounts_list(self):
|
||||
return self.accounts_list
|
||||
|
||||
def get_search_bar(self):
|
||||
return self.search_bar
|
||||
|
||||
def toggle(self, visible):
|
||||
self.set_visible(visible)
|
||||
self.set_no_show_all(not visible)
|
||||
|
||||
def is_visible(self):
|
||||
return self.get_visible()
|
||||
|
||||
def hide(self):
|
||||
self.toggle(False)
|
||||
|
||||
def show(self):
|
||||
self.toggle(True)
|
|
@ -1,10 +1,12 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk
|
||||
from gi.repository import Gtk, Gdk, Gio
|
||||
import logging
|
||||
from TwoFactorAuth.utils import screenshot_area, current_date_time
|
||||
from TwoFactorAuth.widgets.applications_list import ApplicationChooserWindow
|
||||
from TwoFactorAuth.models.code import Code
|
||||
from TwoFactorAuth.models.authenticator import Authenticator
|
||||
from TwoFactorAuth.models.qr_reader import QRReader
|
||||
from TwoFactorAuth.utils import get_icon
|
||||
from gettext import gettext as _
|
||||
|
||||
|
||||
|
@ -13,9 +15,9 @@ class AddAccount(Gtk.Window):
|
|||
def __init__(self, window):
|
||||
self.parent = window
|
||||
|
||||
self.selected_image = None
|
||||
self.selected_logo = None
|
||||
self.step = 1
|
||||
self.logo_image = Gtk.Image(xalign=0)
|
||||
self.account_image = Gtk.Image(xalign=0)
|
||||
self.secret_code = Gtk.Entry()
|
||||
self.name_entry = Gtk.Entry()
|
||||
self.hb = Gtk.HeaderBar()
|
||||
|
@ -28,9 +30,9 @@ class AddAccount(Gtk.Window):
|
|||
Gtk.Window.__init__(self, type=Gtk.WindowType.TOPLEVEL, title=_("Add a new account"),
|
||||
modal=True, destroy_with_parent=True)
|
||||
self.connect("delete-event", self.close_window)
|
||||
self.resize(410, 300)
|
||||
self.resize(420, 300)
|
||||
self.set_border_width(18)
|
||||
self.set_size_request(410, 300)
|
||||
self.set_size_request(420, 300)
|
||||
self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
|
||||
self.set_resizable(False)
|
||||
self.set_transient_for(self.parent)
|
||||
|
@ -54,6 +56,15 @@ class AddAccount(Gtk.Window):
|
|||
self.apply_button.get_style_context().add_class("suggested-action")
|
||||
self.apply_button.connect("clicked", self.add_account)
|
||||
self.apply_button.set_sensitive(False)
|
||||
|
||||
qr_button = Gtk.Button()
|
||||
qr_icon = Gio.ThemedIcon(name="camera-photo-symbolic")
|
||||
qr_image = Gtk.Image.new_from_gicon(qr_icon, Gtk.IconSize.BUTTON)
|
||||
qr_button.set_tooltip_text(_("Scan a QR code"))
|
||||
qr_button.set_image(qr_image)
|
||||
qr_button.connect("clicked", self.on_qr_scan)
|
||||
|
||||
right_box.add(qr_button)
|
||||
right_box.add(self.apply_button)
|
||||
|
||||
self.hb.pack_start(left_box)
|
||||
|
@ -68,51 +79,75 @@ class AddAccount(Gtk.Window):
|
|||
labels_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
|
||||
logo_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
|
||||
hbox_title = Gtk.Box(
|
||||
hbox_name = Gtk.Box(
|
||||
orientation=Gtk.Orientation.HORIZONTAL, spacing=18)
|
||||
title_label = Gtk.Label()
|
||||
title_label.set_text(_("Account Name"))
|
||||
account_name = Gtk.Label()
|
||||
account_name.set_text(_("Account Name"))
|
||||
|
||||
hbox_title.pack_end(self.name_entry, False, True, 0)
|
||||
hbox_title.pack_end(title_label, False, True, 0)
|
||||
hbox_name.pack_end(self.name_entry, False, True, 0)
|
||||
hbox_name.pack_end(account_name, False, True, 0)
|
||||
|
||||
hbox_two_factor = Gtk.Box(
|
||||
hbox_secret_code = Gtk.Box(
|
||||
orientation=Gtk.Orientation.HORIZONTAL, spacing=18)
|
||||
two_factor_label = Gtk.Label()
|
||||
two_factor_label.set_text(_("Secret Code"))
|
||||
secret_code_label = Gtk.Label()
|
||||
secret_code_label.set_text(_("Secret Code"))
|
||||
self.secret_code.connect("changed", self.validate_ascii_code)
|
||||
|
||||
hbox_two_factor.pack_end(self.secret_code, False, True, 0)
|
||||
hbox_two_factor.pack_end(two_factor_label, False, True, 0)
|
||||
hbox_secret_code.pack_end(self.secret_code, False, True, 0)
|
||||
hbox_secret_code.pack_end(secret_code_label, False, True, 0)
|
||||
|
||||
auth_icon = Authenticator.get_auth_icon("image-missing")
|
||||
self.logo_image.set_from_pixbuf(auth_icon)
|
||||
self.logo_image.get_style_context().add_class("application-logo-add")
|
||||
logo_box.pack_start(self.logo_image, True, False, 6)
|
||||
account_logo = get_icon("image-missing")
|
||||
self.account_image.set_from_pixbuf(account_logo)
|
||||
self.account_image.get_style_context().add_class("application-logo-add")
|
||||
logo_box.pack_start(self.account_image, True, False, 6)
|
||||
logo_box.set_property("margin-bottom", 20)
|
||||
|
||||
vbox.add(hbox_title)
|
||||
vbox.add(hbox_two_factor)
|
||||
vbox.add(hbox_name)
|
||||
vbox.add(hbox_secret_code)
|
||||
labels_box.pack_start(vbox, True, False, 6)
|
||||
main_box.pack_start(logo_box, False, True, 6)
|
||||
main_box.pack_start(labels_box, False, True, 6)
|
||||
self.add(main_box)
|
||||
|
||||
def on_qr_scan(self, *args):
|
||||
filename = "/tmp/TwoFactorAuth-%s.png" % current_date_time()
|
||||
if screenshot_area(filename):
|
||||
qr = QRReader(filename)
|
||||
data = qr.read()
|
||||
if qr.is_valid():
|
||||
self.name_entry.set_text(data["issuer"])
|
||||
self.secret_code.set_text(data["secret"])
|
||||
self.apply_button.set_sensitive(True)
|
||||
|
||||
def on_key_press(self, key, key_event):
|
||||
"""
|
||||
Keyboard Listener handler
|
||||
"""
|
||||
if Gdk.keyval_name(key_event.keyval) == "Escape":
|
||||
key_name = Gdk.keyval_name(key_event.keyval).lower()
|
||||
if key_name == "escape":
|
||||
self.close_window()
|
||||
return True
|
||||
|
||||
if key_name == "return":
|
||||
if self.apply_button.get_sensitive():
|
||||
self.add_account()
|
||||
return True
|
||||
|
||||
if key_event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
if key_name == 's':
|
||||
self.on_qr_scan()
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def update_logo(self, image):
|
||||
"""
|
||||
Update image logo
|
||||
"""
|
||||
self.selected_image = image
|
||||
auth_icon = Authenticator.get_auth_icon(image)
|
||||
self.logo_image.clear()
|
||||
self.logo_image.set_from_pixbuf(auth_icon)
|
||||
self.selected_logo = image
|
||||
account_icon = get_icon(image)
|
||||
self.account_image.clear()
|
||||
self.account_image.set_from_pixbuf(account_icon)
|
||||
|
||||
def validate_ascii_code(self, entry):
|
||||
"""
|
||||
|
@ -132,15 +167,13 @@ class AddAccount(Gtk.Window):
|
|||
"""
|
||||
Add a new application to the database
|
||||
"""
|
||||
name_entry = self.name_entry.get_text()
|
||||
secret_entry = self.secret_code.get_text()
|
||||
image_entry = self.selected_image if self.selected_image else "image-missing"
|
||||
name = self.name_entry.get_text()
|
||||
secret_code = self.secret_code.get_text()
|
||||
logo = self.selected_logo if self.selected_logo else "image-missing"
|
||||
try:
|
||||
self.parent.app.auth.add_account(name_entry, secret_entry,
|
||||
image_entry)
|
||||
uid = self.parent.app.auth.get_latest_id()
|
||||
self.parent.append_list_box(
|
||||
uid, name_entry, secret_entry, image_entry)
|
||||
self.parent.app.db.add_account(name, secret_code, logo)
|
||||
uid = self.parent.app.db.get_latest_id()
|
||||
self.parent.accounts_list.append([uid, name, secret_code, logo])
|
||||
self.parent.refresh_window()
|
||||
self.close_window()
|
||||
except Exception as e:
|
||||
|
@ -151,6 +184,7 @@ class AddAccount(Gtk.Window):
|
|||
if self.step == 1:
|
||||
applications_choose_window = ApplicationChooserWindow(self)
|
||||
applications_choose_window.show_window()
|
||||
applications_choose_window.present()
|
||||
self.step = 2
|
||||
else:
|
||||
self.show_all()
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk
|
||||
from TwoFactorAuth.utils import get_icon
|
||||
import logging
|
||||
from gettext import gettext as _
|
||||
|
||||
|
||||
class ApplicationRow(Gtk.ListBoxRow):
|
||||
|
||||
def __init__(self, name, logo):
|
||||
def __init__(self, name, image):
|
||||
Gtk.ListBoxRow.__init__(self)
|
||||
self.name = name
|
||||
self.logo = logo
|
||||
self.image = image
|
||||
# Create the list row
|
||||
self.create_row()
|
||||
|
||||
|
@ -21,6 +22,9 @@ class ApplicationRow(Gtk.ListBoxRow):
|
|||
"""
|
||||
return self.name
|
||||
|
||||
def get_icon_name(self):
|
||||
return self.image
|
||||
|
||||
def create_row(self):
|
||||
"""
|
||||
Create ListBoxRow
|
||||
|
@ -30,8 +34,9 @@ class ApplicationRow(Gtk.ListBoxRow):
|
|||
hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
|
||||
# Application logo
|
||||
application_logo = get_icon(self.image)
|
||||
application_image = Gtk.Image(xalign=0)
|
||||
application_image.set_from_pixbuf(self.logo)
|
||||
application_image.set_from_pixbuf(application_logo)
|
||||
hbox.pack_start(application_image, False, True, 6)
|
||||
|
||||
# Application name
|
||||
|
|
|
@ -1,27 +1,24 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GLib, Gio, Gdk
|
||||
from TwoFactorAuth.models.authenticator import Authenticator
|
||||
from TwoFactorAuth.widgets.search_bar import SearchBar
|
||||
from TwoFactorAuth.widgets.application_row import ApplicationRow
|
||||
from os import path, listdir, environ as env
|
||||
from os import path, environ as env
|
||||
from gettext import gettext as _
|
||||
|
||||
import yaml
|
||||
from glob import glob
|
||||
|
||||
class ApplicationChooserWindow(Gtk.Window):
|
||||
db = []
|
||||
|
||||
def __init__(self, window):
|
||||
# directory that contains the main icons
|
||||
|
||||
directory = path.join(env.get("DATA_DIR"), "applications") + "/"
|
||||
self.logos = listdir(directory)
|
||||
self.logos.sort()
|
||||
self.parent = window
|
||||
|
||||
self.search_button = Gtk.ToggleButton()
|
||||
self.listbox = Gtk.ListBox()
|
||||
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
if len(self.db) == 0:
|
||||
self.read_database()
|
||||
self.generate_window()
|
||||
self.generate_search_bar()
|
||||
self.generate_components()
|
||||
|
@ -48,24 +45,27 @@ class ApplicationChooserWindow(Gtk.Window):
|
|||
Generate window compenents
|
||||
"""
|
||||
box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
|
||||
if len(self.logos) > 0:
|
||||
if len(self.db) > 0:
|
||||
# Create a ScrolledWindow for installed applications
|
||||
scrolled_win = Gtk.ScrolledWindow()
|
||||
scrolled_win.add_with_viewport(box_outer)
|
||||
self.main_box.pack_start(scrolled_win, True, True, 0)
|
||||
self.scrolled_win = Gtk.ScrolledWindow()
|
||||
self.scrolled_win.add_with_viewport(box_outer)
|
||||
self.main_box.pack_start(self.scrolled_win, True, True, 0)
|
||||
|
||||
self.listbox.get_style_context().add_class("applications-list")
|
||||
self.listbox.set_adjustment()
|
||||
self.listbox.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
box_outer.pack_start(self.listbox, True, True, 0)
|
||||
i = 0
|
||||
while i < len(self.logos):
|
||||
img_path = self.logos[i]
|
||||
app_name = path.splitext(img_path)[0].strip(".").title()
|
||||
directory = path.join(env.get("DATA_DIR"), "applications") + "/images/"
|
||||
|
||||
self.db = sorted(self.db, key=lambda k: k['name'].lower())
|
||||
while i < len(self.db):
|
||||
img_path = directory + self.db[i]["img"]
|
||||
app_name = self.db[i]["name"]
|
||||
# Application logo
|
||||
app_logo = Authenticator.get_auth_icon(img_path)
|
||||
self.listbox.add(ApplicationRow(app_name, app_logo))
|
||||
self.listbox.add(ApplicationRow(app_name, img_path))
|
||||
i += 1
|
||||
self.listbox.select_row(self.listbox.get_row_at_index(0))
|
||||
|
||||
def generate_header_bar(self):
|
||||
"""
|
||||
|
@ -90,7 +90,7 @@ class ApplicationChooserWindow(Gtk.Window):
|
|||
|
||||
next_button = Gtk.Button.new_with_label(_("Next"))
|
||||
next_button.get_style_context().add_class("suggested-action")
|
||||
next_button.connect("clicked", self.select_logo)
|
||||
next_button.connect("clicked", self.select_application)
|
||||
|
||||
right_box.pack_start(self.search_button, False, False, 6)
|
||||
right_box.pack_start(next_button, False, False, 6)
|
||||
|
@ -103,35 +103,59 @@ class ApplicationChooserWindow(Gtk.Window):
|
|||
"""
|
||||
Generate the search bar
|
||||
"""
|
||||
self.search_bar = SearchBar(self.listbox)
|
||||
self.search_button.connect("toggled", self.search_bar.toggle)
|
||||
|
||||
self.search_bar = SearchBar(self.listbox, self, self.search_button)
|
||||
self.main_box.pack_start(self.search_bar, False, True, 0)
|
||||
|
||||
def read_database(self):
|
||||
db_dir = path.join(env.get("DATA_DIR"), "applications") + "/data/*.yml"
|
||||
db_files = glob(db_dir)
|
||||
for db_file in db_files:
|
||||
with open(db_file, 'r') as data:
|
||||
try:
|
||||
websites = yaml.load(data)["websites"]
|
||||
for app in websites:
|
||||
if self.is_valid_app(app):
|
||||
self.db.append(app)
|
||||
except yaml.YAMLError as error:
|
||||
logging.error("Error loading yml file : %s " % str(error))
|
||||
|
||||
def is_valid_app(self, app):
|
||||
if set(["tfa", "software"]).issubset(app.keys()):
|
||||
return app["tfa"] and app["software"]
|
||||
else:
|
||||
return False
|
||||
|
||||
def on_key_press(self, label, key_event):
|
||||
"""
|
||||
Keyboard listener handling
|
||||
"""
|
||||
key_pressed = Gdk.keyval_name(key_event.keyval).lower()
|
||||
if key_pressed == "escape":
|
||||
if self.search_bar.is_visible():
|
||||
self.search_bar.toggle()
|
||||
else:
|
||||
self.close_window()
|
||||
elif key_pressed == "f":
|
||||
if key_event.state == Gdk.ModifierType.CONTROL_MASK:
|
||||
self.search_button.set_active(
|
||||
not self.search_button.get_active())
|
||||
elif key_pressed == "return":
|
||||
self.select_logo()
|
||||
keyname = Gdk.keyval_name(key_event.keyval).lower()
|
||||
|
||||
def select_logo(self, *args):
|
||||
if keyname == "escape":
|
||||
if not self.search_bar.is_visible():
|
||||
self.close_window()
|
||||
return True
|
||||
|
||||
if keyname == "up" or keyname == "down":
|
||||
dx = -1 if keyname == "up" else 1
|
||||
index = self.listbox.get_selected_row().get_index()
|
||||
index = (index + dx)%len(self.db)
|
||||
selected_row = self.listbox.get_row_at_index(index)
|
||||
self.listbox.select_row(selected_row)
|
||||
return True
|
||||
|
||||
if keyname == "return":
|
||||
self.select_application()
|
||||
return True
|
||||
return False
|
||||
|
||||
def select_application(self, *args):
|
||||
"""
|
||||
Select a logo and return its path to the add application window
|
||||
"""
|
||||
index = self.listbox.get_selected_row().get_index()
|
||||
if len(self.logos) > 0:
|
||||
img_path = self.logos[index]
|
||||
selected_row = self.listbox.get_selected_row()
|
||||
if selected_row:
|
||||
img_path = selected_row.get_icon_name()
|
||||
self.parent.update_logo(img_path)
|
||||
self.parent.show_window()
|
||||
self.close_window()
|
||||
|
|
195
TwoFactorAuth/widgets/headerbar.py
Normal file
|
@ -0,0 +1,195 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio
|
||||
import logging
|
||||
from gettext import gettext as _
|
||||
from TwoFactorAuth.utils import *
|
||||
|
||||
class HeaderBar(Gtk.HeaderBar):
|
||||
|
||||
search_button = Gtk.ToggleButton()
|
||||
add_button = Gtk.Button()
|
||||
settings_button = Gtk.Button()
|
||||
remove_button = Gtk.Button()
|
||||
cancel_button = Gtk.Button()
|
||||
select_button = Gtk.Button()
|
||||
lock_button = Gtk.Button()
|
||||
|
||||
popover = None
|
||||
|
||||
def __init__(self, app, window):
|
||||
self.app = app
|
||||
self.window = window
|
||||
Gtk.HeaderBar.__init__(self)
|
||||
self.generate()
|
||||
|
||||
def generate(self):
|
||||
self.set_show_close_button(True)
|
||||
right_box = self.generate_right_box()
|
||||
left_box = self.generate_left_box()
|
||||
|
||||
if not is_gnome():
|
||||
# add settings menu
|
||||
self.generate_popover(right_box)
|
||||
|
||||
self.pack_start(left_box)
|
||||
self.pack_end(right_box)
|
||||
|
||||
def generate_left_box(self):
|
||||
left_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
|
||||
remove_icon = Gio.ThemedIcon(name="user-trash-symbolic")
|
||||
remove_image = Gtk.Image.new_from_gicon(
|
||||
remove_icon, Gtk.IconSize.BUTTON)
|
||||
self.remove_button.set_tooltip_text(_("Remove selected accounts"))
|
||||
self.remove_button.set_image(remove_image)
|
||||
self.remove_button.set_sensitive(False)
|
||||
self.toggle_remove_button(False)
|
||||
|
||||
add_icon = Gio.ThemedIcon(name="list-add-symbolic")
|
||||
add_image = Gtk.Image.new_from_gicon(add_icon, Gtk.IconSize.BUTTON)
|
||||
self.add_button.set_tooltip_text(_("Add a new account"))
|
||||
self.add_button.set_image(add_image)
|
||||
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
can_be_locked = not self.app.locked and pass_enabled
|
||||
lock_icon = Gio.ThemedIcon(name="changes-prevent-symbolic")
|
||||
lock_image = Gtk.Image.new_from_gicon(lock_icon, Gtk.IconSize.BUTTON)
|
||||
self.lock_button.set_tooltip_text(_("Lock the Application"))
|
||||
self.lock_button.set_image(lock_image)
|
||||
self.toggle_lock_button(can_be_locked)
|
||||
|
||||
left_box.add(self.remove_button)
|
||||
left_box.add(self.add_button)
|
||||
left_box.add(self.lock_button)
|
||||
return left_box
|
||||
|
||||
def generate_right_box(self):
|
||||
count = self.app.db.count()
|
||||
|
||||
right_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
select_icon = Gio.ThemedIcon(name="object-select-symbolic")
|
||||
select_image = Gtk.Image.new_from_gicon(
|
||||
select_icon, Gtk.IconSize.BUTTON)
|
||||
self.select_button.set_tooltip_text(_("Selection mode"))
|
||||
self.select_button.set_image(select_image)
|
||||
self.toggle_select_button(count > 0)
|
||||
|
||||
search_icon = Gio.ThemedIcon(name="system-search-symbolic")
|
||||
search_image = Gtk.Image.new_from_gicon(
|
||||
search_icon, Gtk.IconSize.BUTTON)
|
||||
self.search_button.set_tooltip_text(_("Search"))
|
||||
self.search_button.set_image(search_image)
|
||||
self.toggle_search_button(count > 0)
|
||||
|
||||
self.cancel_button.set_label(_("Cancel"))
|
||||
self.toggle_cancel_button(False)
|
||||
|
||||
right_box.add(self.search_button)
|
||||
right_box.add(self.select_button)
|
||||
right_box.add(self.cancel_button)
|
||||
return right_box
|
||||
|
||||
def generate_popover(self, box):
|
||||
settings_icon = Gio.ThemedIcon(name="open-menu-symbolic")
|
||||
settings_image = Gtk.Image.new_from_gicon(
|
||||
settings_icon, Gtk.IconSize.BUTTON)
|
||||
self.settings_button.set_tooltip_text(_("Settings"))
|
||||
self.settings_button.set_image(settings_image)
|
||||
self.settings_button.connect("clicked", self.toggle_popover)
|
||||
|
||||
self.popover = Gtk.Popover.new_from_model(
|
||||
self.settings_button, self.app.menu)
|
||||
self.popover.props.width_request = 200
|
||||
box.add(self.settings_button)
|
||||
|
||||
def toggle_popover(self, *args):
|
||||
if self.popover:
|
||||
if self.popover.get_visible():
|
||||
self.popover.hide()
|
||||
else:
|
||||
self.popover.show_all()
|
||||
|
||||
def toggle_select_mode(self):
|
||||
is_select_mode = self.window.is_select_mode
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
|
||||
self.toggle_remove_button(is_select_mode)
|
||||
self.toggle_cancel_button(is_select_mode)
|
||||
self.set_show_close_button(not is_select_mode)
|
||||
self.toggle_settings_button(not is_select_mode)
|
||||
|
||||
self.toggle_lock_button(not is_select_mode and pass_enabled)
|
||||
self.toggle_add_button(not is_select_mode)
|
||||
self.toggle_select_button(not is_select_mode)
|
||||
|
||||
if is_select_mode:
|
||||
self.get_style_context().add_class("selection-mode")
|
||||
else:
|
||||
self.get_style_context().remove_class("selection-mode")
|
||||
|
||||
def toggle_search(self):
|
||||
self.search_button.set_active(not self.search_button.get_active())
|
||||
|
||||
def toggle_search_button(self, visible):
|
||||
self.search_button.set_visible(visible)
|
||||
self.search_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_select_button(self, visible):
|
||||
self.select_button.set_visible(visible)
|
||||
self.select_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_settings_button(self, visible):
|
||||
if not is_gnome():
|
||||
self.settings_button.set_visible(visible)
|
||||
self.settings_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_lock_button(self, visible):
|
||||
self.lock_button.set_visible(visible)
|
||||
self.lock_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_add_button(self, visible):
|
||||
self.add_button.set_visible(visible)
|
||||
self.add_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_cancel_button(self, visible):
|
||||
self.cancel_button.set_visible(visible)
|
||||
self.cancel_button.set_no_show_all(not visible)
|
||||
|
||||
def toggle_remove_button(self, visible):
|
||||
self.remove_button.set_visible(visible)
|
||||
self.remove_button.set_no_show_all(not visible)
|
||||
|
||||
def hide(self):
|
||||
self.toggle_add_button(False)
|
||||
self.toggle_lock_button(False)
|
||||
self.toggle_cancel_button(False)
|
||||
self.toggle_remove_button(False)
|
||||
self.toggle_search_button(False)
|
||||
self.toggle_settings_button(True)
|
||||
self.toggle_select_button(False)
|
||||
|
||||
def refresh(self):
|
||||
is_locked = self.app.locked
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
can_be_locked = not is_locked and pass_enabled
|
||||
count = self.app.db.count()
|
||||
if is_locked:
|
||||
self.hide()
|
||||
else:
|
||||
if count == 0:
|
||||
self.toggle_add_button(True)
|
||||
self.toggle_select_button(False)
|
||||
self.toggle_remove_button(False)
|
||||
self.toggle_search_button(False)
|
||||
self.toggle_lock_button(can_be_locked)
|
||||
self.toggle_settings_button(True)
|
||||
self.toggle_cancel_button(False)
|
||||
else:
|
||||
self.toggle_add_button(True)
|
||||
self.toggle_select_button(True)
|
||||
self.toggle_remove_button(False)
|
||||
self.toggle_search_button(True)
|
||||
self.toggle_lock_button(can_be_locked)
|
||||
self.toggle_settings_button(True)
|
||||
self.toggle_cancel_button(False)
|
88
TwoFactorAuth/widgets/login_window.py
Normal file
|
@ -0,0 +1,88 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk
|
||||
import logging
|
||||
from hashlib import sha256
|
||||
from gettext import gettext as _
|
||||
|
||||
class LoginWindow(Gtk.Box):
|
||||
password_entry = None
|
||||
unlock_button = None
|
||||
|
||||
def __init__(self, application, window):
|
||||
Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
|
||||
self.app = application
|
||||
self.window = window
|
||||
self.password_entry = Gtk.Entry()
|
||||
self.unlock_button = Gtk.Button()
|
||||
self.generate()
|
||||
self.window.connect("key-press-event", self.__on_key_press)
|
||||
|
||||
def generate(self):
|
||||
password_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
self.password_entry.set_visibility(False)
|
||||
self.password_entry.set_placeholder_text(_("Enter your password"))
|
||||
password_box.pack_start(self.password_entry, False, False, 6)
|
||||
|
||||
self.unlock_button.set_label(_("Unlock"))
|
||||
self.unlock_button.connect("clicked", self.on_unlock)
|
||||
|
||||
password_box.pack_start(self.unlock_button, False, False, 6)
|
||||
self.pack_start(password_box, True, False, 6)
|
||||
|
||||
def on_unlock(self, *args):
|
||||
"""
|
||||
Password check and unlock
|
||||
"""
|
||||
typed_pass = self.password_entry.get_text()
|
||||
ecrypted_pass = sha256(typed_pass.encode("utf-8")).hexdigest()
|
||||
login_pass = self.app.cfg.read("password", "login")
|
||||
if ecrypted_pass == login_pass or login_pass == typed_pass == "":
|
||||
self.password_entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, None)
|
||||
self.toggle_lock()
|
||||
self.password_entry.set_text("")
|
||||
else:
|
||||
self.password_entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, "dialog-error-symbolic")
|
||||
|
||||
def __on_key_press(self, widget, event):
|
||||
keyname = Gdk.keyval_name(event.keyval).lower()
|
||||
if self.window.is_locked():
|
||||
if keyname == "return":
|
||||
self.on_unlock()
|
||||
return True
|
||||
else:
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
if keyname == "l" and pass_enabled:
|
||||
if event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
self.toggle_lock()
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def toggle_lock(self, *args):
|
||||
"""
|
||||
Lock/unlock the application
|
||||
"""
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
if pass_enabled:
|
||||
self.app.locked = not self.app.locked
|
||||
if self.app.locked:
|
||||
self.focus()
|
||||
self.app.refresh_menu()
|
||||
self.app.win.refresh_window()
|
||||
|
||||
def toggle(self, visible):
|
||||
self.set_visible(visible)
|
||||
self.set_no_show_all(not visible)
|
||||
|
||||
def hide(self):
|
||||
self.toggle(False)
|
||||
|
||||
def show(self):
|
||||
self.toggle(True)
|
||||
|
||||
def focus(self):
|
||||
self.password_entry.grab_focus_without_selecting()
|
35
TwoFactorAuth/widgets/no_account_window.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk
|
||||
import logging
|
||||
from gettext import gettext as _
|
||||
|
||||
class NoAccountWindow(Gtk.Box):
|
||||
|
||||
def __init__(self):
|
||||
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL,
|
||||
spacing=6)
|
||||
self.generate()
|
||||
|
||||
def generate(self):
|
||||
logo_image = Gtk.Image()
|
||||
logo_image.set_from_icon_name("dialog-information-symbolic",
|
||||
Gtk.IconSize.DIALOG)
|
||||
no_apps_label = Gtk.Label()
|
||||
no_apps_label.set_text(_("There's no account at the moment"))
|
||||
|
||||
self.pack_start(logo_image, False, False, 6)
|
||||
self.pack_start(no_apps_label, False, False, 6)
|
||||
|
||||
def toggle(self, visible):
|
||||
self.set_visible(visible)
|
||||
self.set_no_show_all(not visible)
|
||||
|
||||
def is_visible(self):
|
||||
return self.get_visible()
|
||||
|
||||
def hide(self):
|
||||
self.toggle(False)
|
||||
|
||||
def show(self):
|
||||
self.toggle(True)
|
|
@ -1,41 +1,42 @@
|
|||
from gi import require_version
|
||||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio
|
||||
from gi.repository import Gtk, Gio, Gdk
|
||||
import logging
|
||||
|
||||
|
||||
class SearchBar(Gtk.Box):
|
||||
class SearchBar(Gtk.Revealer):
|
||||
|
||||
def __init__(self, list_accounts):
|
||||
self.search_entry = Gtk.Entry()
|
||||
self.list_accounts = list_accounts
|
||||
def __init__(self, listbox, window, search_button):
|
||||
self.search_entry = Gtk.SearchEntry()
|
||||
self.listbox = listbox
|
||||
self.search_button = search_button
|
||||
self.window = window
|
||||
self.generate()
|
||||
self.search_button.connect("toggled", self.toggle)
|
||||
self.window.connect("key-press-event", self.__on_key_press)
|
||||
|
||||
def generate(self):
|
||||
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
|
||||
self.revealer = Gtk.Revealer()
|
||||
Gtk.Revealer.__init__(self)
|
||||
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
|
||||
self.search_entry.set_width_chars(28)
|
||||
self.search_entry.connect("changed", self.filter_applications)
|
||||
self.search_entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY,
|
||||
"system-search-symbolic")
|
||||
self.search_entry.connect("search-changed", self.filter_applications)
|
||||
|
||||
box.pack_start(self.search_entry, True, False, 12)
|
||||
box.props.margin = 6
|
||||
self.revealer.add(box)
|
||||
self.revealer.set_reveal_child(False)
|
||||
self.pack_start(self.revealer, True, False, 0)
|
||||
|
||||
self.add(box)
|
||||
self.set_reveal_child(False)
|
||||
|
||||
def toggle(self, *args):
|
||||
if self.revealer.get_reveal_child():
|
||||
self.revealer.set_reveal_child(False)
|
||||
if self.is_visible():
|
||||
self.set_reveal_child(False)
|
||||
self.search_entry.set_text("")
|
||||
self.list_accounts.set_filter_func(lambda x, y, z: True,
|
||||
self.listbox.set_filter_func(lambda x, y, z: True,
|
||||
None, False)
|
||||
else:
|
||||
self.revealer.set_reveal_child(True)
|
||||
self.search_entry.grab_focus_without_selecting()
|
||||
self.set_reveal_child(True)
|
||||
self.focus()
|
||||
|
||||
def filter_func(self, row, data, notify_destroy):
|
||||
"""
|
||||
|
@ -48,23 +49,35 @@ class SearchBar(Gtk.Box):
|
|||
else:
|
||||
return True
|
||||
|
||||
def __on_key_press(self, widget, event):
|
||||
keyname = Gdk.keyval_name(event.keyval).lower()
|
||||
if keyname == 'escape' and self.search_button.get_active():
|
||||
if self.search_entry.is_focus():
|
||||
self.search_button.set_active(False)
|
||||
else:
|
||||
self.focus()
|
||||
|
||||
if not "is_locked" in dir(self.window) or not self.window.is_locked():
|
||||
if keyname == "backspace":
|
||||
if self.is_empty():
|
||||
self.search_button.set_active(False)
|
||||
return True
|
||||
|
||||
if event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
if keyname == 'f':
|
||||
self.search_button.set_active(not self.search_button.get_active())
|
||||
return True
|
||||
return False
|
||||
|
||||
def focus(self):
|
||||
self.search_entry.grab_focus_without_selecting()
|
||||
|
||||
def is_visible(self):
|
||||
return self.revealer.get_reveal_child()
|
||||
return self.get_reveal_child()
|
||||
|
||||
def is_empty(self):
|
||||
return len(self.search_entry.get_text()) == 0
|
||||
|
||||
def on_icon_pressed(self, entry, icon_pos, event):
|
||||
if icon_pos == Gtk.EntryIconPosition.SECONDARY:
|
||||
self.search_entry.set_text("")
|
||||
|
||||
def filter_applications(self, entry):
|
||||
data = entry.get_text().strip()
|
||||
if len(data) != 0:
|
||||
entry.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY,
|
||||
"edit-clear-symbolic")
|
||||
entry.connect("icon-press", self.on_icon_pressed)
|
||||
else:
|
||||
entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, None)
|
||||
self.list_accounts.set_filter_func(self.filter_func, data, False)
|
||||
self.listbox.set_filter_func(self.filter_func, data, False)
|
||||
|
|
|
@ -2,49 +2,27 @@ from gi import require_version
|
|||
require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio, Gdk, GObject, GLib
|
||||
from TwoFactorAuth.widgets.add_account import AddAccount
|
||||
from TwoFactorAuth.widgets.confirmation import ConfirmationMessage
|
||||
from TwoFactorAuth.widgets.account_row import AccountRow
|
||||
from TwoFactorAuth.widgets.search_bar import SearchBar
|
||||
from TwoFactorAuth.widgets.accounts_window import AccountsWindow
|
||||
from TwoFactorAuth.widgets.login_window import LoginWindow
|
||||
from TwoFactorAuth.widgets.no_account_window import NoAccountWindow
|
||||
from TwoFactorAuth.widgets.headerbar import HeaderBar
|
||||
import logging
|
||||
from hashlib import sha256
|
||||
from gettext import gettext as _
|
||||
|
||||
|
||||
class Window(Gtk.ApplicationWindow):
|
||||
app = None
|
||||
selected_app_idx = None
|
||||
selected_count = 0
|
||||
counter = 0
|
||||
|
||||
hb = Gtk.HeaderBar()
|
||||
main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
login_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
no_apps_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
|
||||
apps_list_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
|
||||
apps_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
list_box = Gtk.ListBox()
|
||||
search_button = Gtk.ToggleButton()
|
||||
add_button = Gtk.Button()
|
||||
settings_button = Gtk.Button()
|
||||
remove_button = Gtk.Button()
|
||||
cancel_button = Gtk.Button()
|
||||
select_button = Gtk.Button()
|
||||
lock_button = Gtk.Button()
|
||||
|
||||
popover = None
|
||||
settings_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
pop_settings = Gtk.ModelButton.new()
|
||||
password_entry = Gtk.Entry()
|
||||
is_select_mode = False
|
||||
|
||||
def __init__(self, application):
|
||||
self.app = application
|
||||
self.generate_window()
|
||||
self.generate_header_bar()
|
||||
self.generate_search_bar()
|
||||
self.generate_accounts_list()
|
||||
self.generate_no_apps_box()
|
||||
self.generate_login_form()
|
||||
self.generate_accounts_box()
|
||||
self.generate_no_accounts_box()
|
||||
self.generate_login_box()
|
||||
self.refresh_window()
|
||||
GLib.timeout_add_seconds(60, self.refresh_counter)
|
||||
|
||||
|
@ -68,50 +46,21 @@ class Window(Gtk.ApplicationWindow):
|
|||
"""
|
||||
Keyboard Listener handling
|
||||
"""
|
||||
keypress = Gdk.keyval_name(key_event.keyval).lower()
|
||||
if not self.app.locked:
|
||||
control_mask = Gdk.ModifierType.CONTROL_MASK
|
||||
count = self.app.auth.count()
|
||||
if keypress == "c":
|
||||
if key_event.state == control_mask:
|
||||
self.copy_code()
|
||||
elif keypress == "f":
|
||||
if key_event.state == control_mask:
|
||||
self.search_button.set_active(
|
||||
not self.search_button.get_active())
|
||||
elif keypress == "s":
|
||||
if key_event.state == control_mask:
|
||||
self.toggle_select()
|
||||
elif keypress == "n":
|
||||
if key_event.state == control_mask:
|
||||
keyname = Gdk.keyval_name(key_event.keyval).lower()
|
||||
if not self.is_locked():
|
||||
|
||||
if not self.no_account_box.is_visible():
|
||||
if keyname == "s" or keyname == "escape":
|
||||
if key_event.state == Gdk.ModifierType.CONTROL_MASK or not self.hb.select_button.get_visible():
|
||||
self.toggle_select()
|
||||
return True
|
||||
|
||||
if keyname == "n":
|
||||
if key_event.state == Gdk.ModifierType.CONTROL_MASK:
|
||||
self.add_account()
|
||||
elif keypress == "delete" and not self.search_bar.is_visible():
|
||||
self.remove_account()
|
||||
elif keypress == "return":
|
||||
if count > 0:
|
||||
if self.list_box.get_selected_row():
|
||||
index = self.list_box.get_selected_row().get_index()
|
||||
else:
|
||||
index = 0
|
||||
self.list_box.get_row_at_index(index).toggle_code_box()
|
||||
elif keypress == "backspace":
|
||||
if self.search_bar.is_empty():
|
||||
self.search_button.set_active(False)
|
||||
elif keypress == "escape":
|
||||
if self.search_bar.is_visible():
|
||||
self.search_button.set_active(False)
|
||||
if not self.select_button.get_visible():
|
||||
self.toggle_select()
|
||||
elif keypress == "up" or keypress == "down":
|
||||
dx = -1 if keypress == "up" else 1
|
||||
if count != 0:
|
||||
index = self.list_box.get_selected_row().get_index()
|
||||
index = (index + dx)%count
|
||||
selected_row = self.list_box.get_row_at_index(index)
|
||||
self.list_box.select_row(selected_row)
|
||||
else:
|
||||
if keypress == "return":
|
||||
self.on_unlock_clicked()
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def refresh_counter(self):
|
||||
"""
|
||||
|
@ -122,193 +71,35 @@ class Window(Gtk.ApplicationWindow):
|
|||
if self.app.cfg.read("auto-lock", "preferences"):
|
||||
if self.counter == self.app.cfg.read("auto-lock-time", "preferences") - 1:
|
||||
self.counter = 0
|
||||
self.toggle_app_lock()
|
||||
self.toggle_lock()
|
||||
return True
|
||||
|
||||
def generate_search_bar(self):
|
||||
"""
|
||||
Generate search bar box and entry
|
||||
"""
|
||||
self.search_bar = SearchBar(self.list_box)
|
||||
self.search_button.connect("toggled", self.search_bar.toggle)
|
||||
|
||||
self.apps_box.pack_start(self.search_bar, False, True, 0)
|
||||
self.main_box.pack_start(self.apps_box, True, True, 0)
|
||||
|
||||
def remove_selected(self, *args):
|
||||
"""
|
||||
Remove selected accounts
|
||||
"""
|
||||
message = _("Do you really want to remove selected accounts?")
|
||||
confirmation = ConfirmationMessage(self, message)
|
||||
confirmation.show()
|
||||
if confirmation.get_confirmation():
|
||||
for row in self.list_box.get_children():
|
||||
checkbox = row.get_checkbox()
|
||||
if checkbox.get_active():
|
||||
label_id = row.get_id()
|
||||
row.kill()
|
||||
self.app.auth.remove_by_id(label_id)
|
||||
self.list_box.remove(row)
|
||||
self.list_box.unselect_all()
|
||||
confirmation.destroy()
|
||||
self.toggle_select()
|
||||
self.refresh_window()
|
||||
|
||||
def generate_login_form(self):
|
||||
def generate_login_box(self):
|
||||
"""
|
||||
Generate login form
|
||||
"""
|
||||
password_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||
|
||||
self.password_entry.set_visibility(False)
|
||||
self.password_entry.set_placeholder_text(_("Enter your password"))
|
||||
password_box.pack_start(self.password_entry, False, False, 6)
|
||||
|
||||
unlock_button = Gtk.Button()
|
||||
unlock_button.set_label(_("Unlock"))
|
||||
unlock_button.connect("clicked", self.on_unlock_clicked)
|
||||
|
||||
password_box.pack_start(unlock_button, False, False, 6)
|
||||
self.login_box.pack_start(password_box, True, False, 6)
|
||||
|
||||
self.login_box = LoginWindow(self.app, self)
|
||||
self.hb.lock_button.connect("clicked", self.login_box.toggle_lock)
|
||||
self.main_box.pack_start(self.login_box, True, False, 0)
|
||||
|
||||
def on_unlock_clicked(self, *args):
|
||||
"""
|
||||
Password check and unlock
|
||||
"""
|
||||
typed_pass = self.password_entry.get_text()
|
||||
ecrypted_pass = sha256(typed_pass.encode("utf-8")).hexdigest()
|
||||
login_pass = self.app.cfg.read("password", "login")
|
||||
if ecrypted_pass == login_pass or login_pass == typed_pass:
|
||||
self.password_entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, None)
|
||||
self.toggle_app_lock()
|
||||
self.password_entry.set_text("")
|
||||
else:
|
||||
self.password_entry.set_icon_from_icon_name(
|
||||
Gtk.EntryIconPosition.SECONDARY, "dialog-error-symbolic")
|
||||
|
||||
def toggle_app_lock(self):
|
||||
"""
|
||||
Lock/unlock the application
|
||||
"""
|
||||
self.app.locked = not self.app.locked
|
||||
self.app.refresh_menu()
|
||||
self.refresh_window()
|
||||
|
||||
def toggle_boxes(self, apps_box, no_apps_box, login_box):
|
||||
"""
|
||||
Change the status of all the boxes in one time
|
||||
:param apps_box: bool
|
||||
:param no_apps_box: bool
|
||||
:param login_box: bool
|
||||
:return:
|
||||
"""
|
||||
self.login_box.set_visible(login_box)
|
||||
self.login_box.set_no_show_all(not login_box)
|
||||
self.apps_box.set_visible(apps_box)
|
||||
self.apps_box.set_no_show_all(not apps_box)
|
||||
self.no_apps_box.set_visible(no_apps_box)
|
||||
self.no_apps_box.set_no_show_all(not no_apps_box)
|
||||
|
||||
def hide_header_bar(self):
|
||||
"""
|
||||
Hide all buttons on the header bar
|
||||
"""
|
||||
self.toggle_hb_buttons(False, False, False, False, False, False, False)
|
||||
def generate_accounts_box(self):
|
||||
self.accounts_box = AccountsWindow(self.app, self)
|
||||
self.accounts_list = self.accounts_box.get_accounts_list()
|
||||
self.hb.remove_button.connect("clicked", self.accounts_list.remove_selected)
|
||||
self.search_bar = self.accounts_box.get_search_bar()
|
||||
self.main_box.pack_start(self.accounts_box, True, True, 0)
|
||||
|
||||
def generate_header_bar(self):
|
||||
"""
|
||||
Generate a header bar box
|
||||
"""
|
||||
count = self.app.auth.count()
|
||||
self.hb.set_show_close_button(True)
|
||||
|
||||
left_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
right_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
|
||||
remove_icon = Gio.ThemedIcon(name="user-trash-symbolic")
|
||||
remove_image = Gtk.Image.new_from_gicon(
|
||||
remove_icon, Gtk.IconSize.BUTTON)
|
||||
self.remove_button.set_tooltip_text(_("Remove selected accounts"))
|
||||
self.remove_button.set_image(remove_image)
|
||||
self.remove_button.set_sensitive(False)
|
||||
self.remove_button.set_no_show_all(True)
|
||||
self.remove_button.connect("clicked", self.remove_selected)
|
||||
|
||||
add_icon = Gio.ThemedIcon(name="list-add-symbolic")
|
||||
add_image = Gtk.Image.new_from_gicon(add_icon, Gtk.IconSize.BUTTON)
|
||||
self.add_button.set_tooltip_text(_("Add a new account"))
|
||||
self.add_button.set_image(add_image)
|
||||
self.add_button.connect("clicked", self.add_account)
|
||||
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
can_be_locked = not self.app.locked and pass_enabled
|
||||
lock_icon = Gio.ThemedIcon(name="changes-prevent-symbolic")
|
||||
lock_image = Gtk.Image.new_from_gicon(lock_icon, Gtk.IconSize.BUTTON)
|
||||
self.lock_button.set_tooltip_text(_("Lock the Application"))
|
||||
self.lock_button.set_image(lock_image)
|
||||
self.lock_button.connect("clicked", self.app.on_toggle_lock)
|
||||
self.lock_button.set_no_show_all(not can_be_locked)
|
||||
self.lock_button.set_visible(can_be_locked)
|
||||
left_box.add(self.remove_button)
|
||||
left_box.add(self.add_button)
|
||||
left_box.add(self.lock_button)
|
||||
|
||||
select_icon = Gio.ThemedIcon(name="object-select-symbolic")
|
||||
select_image = Gtk.Image.new_from_gicon(
|
||||
select_icon, Gtk.IconSize.BUTTON)
|
||||
self.select_button.set_tooltip_text(_("Selection mode"))
|
||||
self.select_button.set_image(select_image)
|
||||
self.select_button.connect("clicked", self.toggle_select)
|
||||
self.select_button.set_no_show_all(not count > 0)
|
||||
self.select_button.set_visible(count > 0)
|
||||
|
||||
search_icon = Gio.ThemedIcon(name="system-search-symbolic")
|
||||
search_image = Gtk.Image.new_from_gicon(
|
||||
search_icon, Gtk.IconSize.BUTTON)
|
||||
self.search_button.set_tooltip_text(_("Search"))
|
||||
self.search_button.set_image(search_image)
|
||||
self.search_button.set_no_show_all(not count > 0)
|
||||
self.search_button.set_visible(count > 0)
|
||||
|
||||
self.cancel_button.set_label(_("Cancel"))
|
||||
self.cancel_button.connect("clicked", self.toggle_select)
|
||||
self.cancel_button.set_no_show_all(True)
|
||||
|
||||
right_box.add(self.search_button)
|
||||
right_box.add(self.select_button)
|
||||
right_box.add(self.cancel_button)
|
||||
|
||||
if not self.app.use_GMenu:
|
||||
self.generate_popover(right_box)
|
||||
|
||||
self.hb.pack_start(left_box)
|
||||
self.hb.pack_end(right_box)
|
||||
self.hb = HeaderBar(self.app, self)
|
||||
# connect signals
|
||||
self.hb.cancel_button.connect("clicked", self.toggle_select)
|
||||
self.hb.select_button.connect("clicked", self.toggle_select)
|
||||
self.hb.add_button.connect("clicked", self.add_account)
|
||||
self.set_titlebar(self.hb)
|
||||
|
||||
def generate_popover(self, box):
|
||||
settings_icon = Gio.ThemedIcon(name="open-menu-symbolic")
|
||||
settings_image = Gtk.Image.new_from_gicon(
|
||||
settings_icon, Gtk.IconSize.BUTTON)
|
||||
self.settings_button.set_tooltip_text(_("Settings"))
|
||||
self.settings_button.set_image(settings_image)
|
||||
self.settings_button.connect("clicked", self.toggle_popover)
|
||||
|
||||
self.popover = Gtk.Popover.new_from_model(
|
||||
self.settings_button, self.app.menu)
|
||||
self.popover.props.width_request = 200
|
||||
box.add(self.settings_button)
|
||||
|
||||
def toggle_popover(self, *args):
|
||||
if self.popover:
|
||||
if self.popover.get_visible():
|
||||
self.popover.hide()
|
||||
else:
|
||||
self.popover.show_all()
|
||||
|
||||
def add_account(self, *args):
|
||||
"""
|
||||
Create add application window
|
||||
|
@ -320,231 +111,39 @@ class Window(Gtk.ApplicationWindow):
|
|||
"""
|
||||
Toggle select mode
|
||||
"""
|
||||
is_visible = self.remove_button.get_visible()
|
||||
self.is_select_mode = not self.is_select_mode
|
||||
self.hb.toggle_select_mode()
|
||||
self.accounts_list.toggle_select_mode()
|
||||
|
||||
self.remove_button.set_visible(not is_visible)
|
||||
self.remove_button.set_no_show_all(is_visible)
|
||||
|
||||
self.hb.set_show_close_button(is_visible)
|
||||
self.cancel_button.set_visible(not is_visible)
|
||||
self.remove_button.set_visible(not is_visible)
|
||||
if not self.app.use_GMenu:
|
||||
self.settings_button.set_visible(is_visible)
|
||||
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
self.lock_button.set_visible(is_visible and pass_enabled)
|
||||
self.add_button.set_visible(is_visible)
|
||||
self.select_button.set_visible(is_visible)
|
||||
|
||||
if not is_visible:
|
||||
self.list_box.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
|
||||
self.hb.get_style_context().add_class("selection-mode")
|
||||
else:
|
||||
self.list_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
self.hb.get_style_context().remove_class("selection-mode")
|
||||
|
||||
if self.selected_app_idx:
|
||||
index = self.selected_app_idx
|
||||
else:
|
||||
index = 0
|
||||
list_row_box = self.list_box.get_row_at_index(index)
|
||||
self.list_box.select_row(list_row_box)
|
||||
|
||||
for row in self.list_box.get_children():
|
||||
checkbox = row.get_checkbox()
|
||||
code_label = row.get_code_label()
|
||||
visible = checkbox.get_visible()
|
||||
selected = checkbox.get_active()
|
||||
if not is_visible:
|
||||
self.select_account(checkbox)
|
||||
code_label.get_style_context().add_class("application-secret-code-select-mode")
|
||||
else:
|
||||
code_label.get_style_context().remove_class(
|
||||
"application-secret-code-select-mode")
|
||||
|
||||
checkbox.set_visible(not visible)
|
||||
checkbox.set_no_show_all(visible)
|
||||
|
||||
def select_account(self, checkbutton):
|
||||
"""
|
||||
Select an account
|
||||
:param checkbutton:
|
||||
"""
|
||||
is_active = checkbutton.get_active()
|
||||
is_visible = checkbutton.get_visible()
|
||||
listbox_row = checkbutton.get_parent().get_parent().get_parent()
|
||||
if is_active:
|
||||
self.list_box.select_row(listbox_row)
|
||||
if is_visible:
|
||||
self.selected_count += 1
|
||||
else:
|
||||
self.list_box.unselect_row(listbox_row)
|
||||
if is_visible:
|
||||
self.selected_count -= 1
|
||||
self.remove_button.set_sensitive(self.selected_count > 0)
|
||||
|
||||
def select_row(self, list_box, listbox_row):
|
||||
"""
|
||||
Select row @override the clicked event by default for ListBoxRow
|
||||
"""
|
||||
index = listbox_row.get_index()
|
||||
button_visible = self.remove_button.get_visible()
|
||||
checkbox = listbox_row.get_checkbox()
|
||||
if button_visible:
|
||||
checkbox.set_active(not checkbox.get_active())
|
||||
else:
|
||||
if self.selected_app_idx:
|
||||
selected_row = self.list_box.get_row_at_index(
|
||||
self.selected_app_idx)
|
||||
if selected_row:
|
||||
self.list_box.unselect_row(selected_row)
|
||||
self.selected_app_idx = index
|
||||
self.list_box.select_row(self.list_box.get_row_at_index(index))
|
||||
|
||||
def generate_accounts_list(self):
|
||||
"""
|
||||
Generate an account ListBox inside of a ScrolledWindow
|
||||
"""
|
||||
count = self.app.auth.count()
|
||||
|
||||
# Create a ScrolledWindow for accounts
|
||||
self.list_box.get_style_context().add_class("applications-list")
|
||||
self.list_box.set_adjustment()
|
||||
self.list_box.connect("row_activated", self.select_row)
|
||||
self.list_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
self.apps_list_box.pack_start(self.list_box, True, True, 0)
|
||||
|
||||
scrolled_win = Gtk.ScrolledWindow()
|
||||
scrolled_win.add_with_viewport(self.apps_list_box)
|
||||
self.apps_box.pack_start(scrolled_win, True, True, 0)
|
||||
|
||||
apps = self.app.auth.fetch_apps()
|
||||
i = 0
|
||||
count = len(apps)
|
||||
while i < count:
|
||||
self.list_box.add(AccountRow(self, apps[i][0], apps[i][1], apps[i][2],
|
||||
apps[i][3]))
|
||||
i += 1
|
||||
|
||||
def generate_no_apps_box(self):
|
||||
def generate_no_accounts_box(self):
|
||||
"""
|
||||
Generate a box with no accounts message
|
||||
"""
|
||||
logo_image = Gtk.Image()
|
||||
logo_image.set_from_icon_name("dialog-information-symbolic",
|
||||
Gtk.IconSize.DIALOG)
|
||||
|
||||
no_apps_label = Gtk.Label()
|
||||
no_apps_label.set_text(_("There's no account at the moment"))
|
||||
|
||||
self.no_apps_box.pack_start(logo_image, False, False, 6)
|
||||
self.no_apps_box.pack_start(no_apps_label, False, False, 6)
|
||||
self.main_box.pack_start(self.no_apps_box, True, False, 0)
|
||||
|
||||
def append_list_box(self, uid, name, secret_code, image):
|
||||
"""
|
||||
Add an element to the ListBox
|
||||
:param uid: account id
|
||||
:param name: account name
|
||||
:param secret_code: account secret code
|
||||
:param image: account image path or icon name
|
||||
"""
|
||||
secret_code = sha256(secret_code.encode('utf-8')).hexdigest()
|
||||
self.list_box.add(AccountRow(self, uid, name, secret_code, image))
|
||||
self.list_box.show_all()
|
||||
|
||||
def copy_code(self, *args):
|
||||
"""
|
||||
Copy the secret code to clipboard
|
||||
"""
|
||||
if len(args) > 0:
|
||||
# if the code is called by clicking on copy button, select the
|
||||
# right ListBowRow
|
||||
row = args[0].get_parent().get_parent().get_parent()
|
||||
self.list_box.select_row(row)
|
||||
selected_row = self.list_box.get_selected_row()
|
||||
code = selected_row.get_code()
|
||||
try:
|
||||
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||
clipboard.clear()
|
||||
clipboard.set_text(code, len(code))
|
||||
logging.debug("Secret code copied to clipboard")
|
||||
except Exception as e:
|
||||
logging.error(str(e))
|
||||
self.no_account_box = NoAccountWindow()
|
||||
self.main_box.pack_start(self.no_account_box, True, False, 0)
|
||||
|
||||
def refresh_window(self):
|
||||
"""
|
||||
Refresh windows components
|
||||
"""
|
||||
count = self.app.auth.count()
|
||||
is_locked = self.app.locked
|
||||
pass_enabled = self.app.cfg.read("state", "login")
|
||||
can_be_locked = not is_locked and pass_enabled
|
||||
if is_locked:
|
||||
self.toggle_boxes(False, False, True)
|
||||
self.hide_header_bar()
|
||||
count = self.app.db.count()
|
||||
if self.is_locked():
|
||||
self.login_box.show()
|
||||
self.no_account_box.hide()
|
||||
self.accounts_box.hide()
|
||||
else:
|
||||
self.login_box.hide()
|
||||
if count == 0:
|
||||
self.toggle_boxes(False, True, False)
|
||||
self.toggle_hb_buttons(
|
||||
False, True, False, False, False, True, can_be_locked)
|
||||
self.no_account_box.show()
|
||||
self.accounts_box.hide()
|
||||
else:
|
||||
self.toggle_boxes(True, False, False)
|
||||
self.toggle_hb_buttons(
|
||||
False, True, True, True, False, True, can_be_locked)
|
||||
|
||||
self.pop_settings.set_sensitive(not is_locked)
|
||||
self.accounts_box.show()
|
||||
self.no_account_box.hide()
|
||||
self.hb.refresh()
|
||||
self.main_box.show_all()
|
||||
self.list_box.set_selection_mode(Gtk.SelectionMode.SINGLE)
|
||||
|
||||
def toggle_hb_buttons(self, remove, add, search, select, cancel, settings, lock):
|
||||
"""
|
||||
Toggle header bar buttons visibility
|
||||
:param remove: (bool)
|
||||
:param add: (bool)
|
||||
:param search: (bool)
|
||||
:param select: (bool)
|
||||
:param cancel: (bool)
|
||||
:param settings: (bool)
|
||||
:param lock: (bool)
|
||||
"""
|
||||
|
||||
self.add_button.set_visible(add)
|
||||
self.add_button.set_no_show_all(not add)
|
||||
self.remove_button.set_visible(remove)
|
||||
self.remove_button.set_no_show_all(not remove)
|
||||
self.cancel_button.set_visible(cancel)
|
||||
self.cancel_button.set_no_show_all(not cancel)
|
||||
self.select_button.set_visible(select)
|
||||
self.select_button.set_no_show_all(not select)
|
||||
self.search_button.set_visible(search)
|
||||
self.search_button.set_no_show_all(not search)
|
||||
self.lock_button.set_visible(lock)
|
||||
self.lock_button.set_no_show_all(not lock)
|
||||
if not self.app.use_GMenu:
|
||||
self.settings_button.set_visible(settings)
|
||||
self.settings_button.set_no_show_all(not settings)
|
||||
|
||||
def remove_account(self, *args):
|
||||
"""
|
||||
Remove an application
|
||||
"""
|
||||
if len(args) > 0:
|
||||
row = args[0].get_parent().get_parent().get_parent()
|
||||
self.list_box.select_row(row)
|
||||
|
||||
message = _("Do you really want to remove this account?")
|
||||
confirmation = ConfirmationMessage(self, message)
|
||||
confirmation.show()
|
||||
if confirmation.get_confirmation():
|
||||
if self.list_box.get_selected_row():
|
||||
selected_row = self.list_box.get_selected_row()
|
||||
app_id = selected_row.get_id()
|
||||
selected_row.kill()
|
||||
self.list_box.remove(selected_row)
|
||||
self.app.auth.remove_by_id(app_id)
|
||||
confirmation.destroy()
|
||||
self.refresh_window()
|
||||
def is_locked(self):
|
||||
return self.app.locked
|
||||
|
||||
def save_window_state(self):
|
||||
"""
|
||||
|
|
|
@ -28,6 +28,8 @@ AC_CONFIG_FILES([
|
|||
Makefile
|
||||
data/Makefile
|
||||
data/applications/Makefile
|
||||
data/applications/images/Makefile
|
||||
data/applications/data/Makefile
|
||||
data/gnome-twofactorauth.desktop
|
||||
TwoFactorAuth/Makefile
|
||||
TwoFactorAuth/models/Makefile
|
||||
|
|
|
@ -1,15 +1,2 @@
|
|||
applicationsdir = $(pkgdatadir)/applications
|
||||
applications_DATA = amazon.png \
|
||||
dropbox.png \
|
||||
facebook.png \
|
||||
flickr.png \
|
||||
foursquare.png \
|
||||
gitter.png \
|
||||
google.png \
|
||||
microsoft.png \
|
||||
owncloud.png \
|
||||
pocket.png \
|
||||
reddit.png \
|
||||
slack.png \
|
||||
twitter.png \
|
||||
yahoo.png
|
||||
SUBDIRS = images \
|
||||
data
|
||||
|
|
25
data/applications/data/Makefile.am
Normal file
|
@ -0,0 +1,25 @@
|
|||
yamldir = $(pkgdatadir)/applications/data
|
||||
yaml_DATA = backup.yml \
|
||||
banking.yml \
|
||||
cloud.yml \
|
||||
communication.yml \
|
||||
cryptocurrencies.yml \
|
||||
developer.yml \
|
||||
domains.yml \
|
||||
education.yml \
|
||||
email.yml \
|
||||
entertainment.yml \
|
||||
finance.yml \
|
||||
food.yml \
|
||||
gaming.yml \
|
||||
health.yml \
|
||||
hosting.yml \
|
||||
investing.yml \
|
||||
other.yml \
|
||||
payments.yml \
|
||||
remote.yml \
|
||||
retail.yml \
|
||||
security.yml \
|
||||
social.yml \
|
||||
transport.yml \
|
||||
utilities.yml
|
213
data/applications/data/backup.yml
Normal file
|
@ -0,0 +1,213 @@
|
|||
websites:
|
||||
- name: AeroFS
|
||||
url: https://www.aerofs.com/
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
img: aerofs.png
|
||||
doc: https://blog.aerofs.com/two-factor-authentication-for-hybrid-and-private-cloud/
|
||||
|
||||
- name: Apple iCloud
|
||||
url: https://www.icloud.com
|
||||
img: icloud.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "See http://support.apple.com/kb/HT5593 for a list of supported SMS carriers."
|
||||
doc: http://support.apple.com/kb/ht5570
|
||||
|
||||
- name: Backblaze
|
||||
url: http://www.backblaze.com
|
||||
img: backblaze.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://www.backblaze.com/blog/two-factor-verification-for-backblaze/
|
||||
|
||||
- name: Bitcasa
|
||||
url: http://www.bitcasa.com/
|
||||
twitter: Bitcasa
|
||||
img: bitcasa.png
|
||||
tfa: No
|
||||
|
||||
- name: Box
|
||||
url: https://app.box.com/
|
||||
img: box.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://support.box.com/hc/en-us/articles/200526658-Can-I-enable-2-step-verification-for-my-account-
|
||||
|
||||
- name: CloudApp
|
||||
url: http://www.getcloudapp.com/
|
||||
twitter: cloudapp
|
||||
img: cloudapp.png
|
||||
tfa: No
|
||||
|
||||
- name: CrashPlan
|
||||
url: http://www.crashplan.com
|
||||
twitter: crashplan
|
||||
img: crashplan.png
|
||||
tfa: No
|
||||
|
||||
- name: Dropbox
|
||||
url: https://www.dropbox.com
|
||||
img: dropbox.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.dropbox.com/help/363/en
|
||||
|
||||
- name: Evernote
|
||||
url: https://evernote.com
|
||||
img: evernote.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://blog.evernote.com/blog/2013/10/04/two-step-verification-available-to-all-users/
|
||||
|
||||
- name: FileThis
|
||||
url: https://filethis.com
|
||||
twitter: FileThisCompany
|
||||
img: filethis.png
|
||||
tfa: No
|
||||
|
||||
- name: Frostbox
|
||||
url: http://frostbox.com
|
||||
img: frostbox.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://app.frostbox.com/main.php?action=2fa
|
||||
|
||||
- name: Google Drive
|
||||
url: https://drive.google.com
|
||||
img: drive.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: hubiC
|
||||
url: https://hubic.com/
|
||||
twitter: hubic
|
||||
img: hubic.png
|
||||
tfa: No
|
||||
|
||||
- name: IDrive
|
||||
url: https://www.idrive.com
|
||||
twitter: IDriveBackup
|
||||
img: idrive.png
|
||||
tfa: No
|
||||
|
||||
- name: JustCloud
|
||||
url: https://www.justcloud.com
|
||||
twitter: justcloudcom
|
||||
img: justcloud.png
|
||||
tfa: No
|
||||
|
||||
- name: Mega
|
||||
url: https://mega.co.nz/
|
||||
twitter: MEGAprivacy
|
||||
img: mega.png
|
||||
tfa: No
|
||||
|
||||
- name: OneDrive
|
||||
url: https://onedrive.live.com
|
||||
img: onedrive.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-us/windows/two-step-verification-faq
|
||||
|
||||
- name: Pogoplug
|
||||
url: https://pogoplug.com/
|
||||
twitter: pogoplug
|
||||
img: pogoplug.png
|
||||
tfa: No
|
||||
status: https://twitter.com/pogoplug/status/486192568745476096
|
||||
|
||||
- name: QNAP
|
||||
url: https://www.qnap.com
|
||||
img: qnap.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://www.qnap.com/i/useng/tutorial/con_show.php?op=showone&cid=151
|
||||
|
||||
- name: SmartBox
|
||||
url: https://www.panterranetworks.com/smartbox/smartbox_overview.php
|
||||
img: smartbox.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://www.panterranetworks.com/smartbox/sb_features/sbf_security.php
|
||||
|
||||
- name: SpiderOak
|
||||
url: https://spideroak.com
|
||||
twitter: spideroak
|
||||
img: spideroak.png
|
||||
tfa: No
|
||||
|
||||
- name: SugarSync
|
||||
twitter: SugarSync
|
||||
url: https://www.sugarsync.com/
|
||||
img: sugarsync.png
|
||||
tfa: No
|
||||
|
||||
- name: Sync
|
||||
url: https://sync.com
|
||||
img: sync.png
|
||||
software: Yes
|
||||
email: Yes
|
||||
tfa: Yes
|
||||
doc: https://www.sync.com/help/how-do-i-setup-two-factor-authentication/
|
||||
|
||||
- name: Synology
|
||||
url: https://www.synology.com/
|
||||
img: synology.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
email: Yes
|
||||
doc: https://originwww.synology.com/en-us/knowledgebase/tutorials/615#t5
|
||||
|
||||
- name: ThisData
|
||||
url: https://thisdata.com
|
||||
img: thisdata.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://thisdata.com/blog/how-to-enable-two-factor-authentication/
|
||||
|
||||
- name: Tresorit
|
||||
url: https://tresorit.com/
|
||||
img: tresorit.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
email: Yes
|
||||
doc: https://support.tresorit.com/entries/104192996-How-to-set-up-two-step-verification
|
||||
|
||||
- name: XXL Cloud
|
||||
url: https://xxlcloud.com
|
||||
twitter: xxlcloud
|
||||
img: xxlcloud.png
|
||||
tfa: No
|
||||
status: https://xxlcloud.com/en/blog/2factorauthentication
|
||||
|
||||
- name: Yandex.Disk
|
||||
url: https://disk.yandex.com
|
||||
img: yandexdisk.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required for initial setup."
|
||||
doc: https://yandex.com/support/passport/authorization/twofa.xml
|
||||
|
||||
- name: Zetta.net
|
||||
url: http://zetta.net/
|
||||
img: zetta.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.zetta.net/blog/set-zetta-net-two-factor-authentication/
|
540
data/applications/data/banking.yml
Normal file
|
@ -0,0 +1,540 @@
|
|||
websites:
|
||||
- name: Actors Federal Credit Union
|
||||
url: http://www.actorsfcu.com/
|
||||
twitter: ActorsFCU
|
||||
img: actorsfcu.png
|
||||
tfa: No
|
||||
|
||||
- name: Ally Bank
|
||||
url: http://www.ally.com/
|
||||
img: allybank.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
doc: http://www.ally.com/messages/sms/index.html
|
||||
|
||||
- name: Altra Federal Credit Union
|
||||
url: https://www.altra.org/
|
||||
twitter: AltraCU
|
||||
img: altrafcu.png
|
||||
tfa: No
|
||||
|
||||
- name: American Express
|
||||
url: https://www.americanexpress.com/
|
||||
twitter: AmericanExpress
|
||||
img: americanexpress.png
|
||||
tfa: No
|
||||
|
||||
- name: America First Credit Union
|
||||
url: https://www.americafirst.com/
|
||||
twitter: AFCU
|
||||
img: americafirstcu.png
|
||||
tfa: No
|
||||
|
||||
- name: Banca Mediolanum
|
||||
url: https://www.bmedonline.it
|
||||
img: mediolanum.png
|
||||
tfa: No
|
||||
twitter: BancaMediolanum
|
||||
|
||||
- name: Bank Central Asia (BCA)
|
||||
url: http://www.bca.co.id/en/individual/individual.jsp
|
||||
img: bankcentralasia.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.bca.co.id/en/individual/produk_dan_layanan/e-banking/klikbca/klikbca-keybca/klikbca-keybca.jsp
|
||||
|
||||
- name: Bank of America
|
||||
url: https://www.bankofamerica.com/
|
||||
img: bankofamerica.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.bankofamerica.com/privacy/online-mobile-banking-privacy/safepass.go
|
||||
|
||||
- name: Bank of China (Hong Kong)
|
||||
url: http://www.bochk.com
|
||||
img: BOCHK.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.bochk.com/en/security/2factorauthentication.html
|
||||
|
||||
- name: Barclays UK
|
||||
url: http://www.barclays.co.uk/
|
||||
img: barclays.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://ask.barclays.co.uk/help/security/protection
|
||||
|
||||
- name: Barclays US
|
||||
url: https://www.banking.barclaysus.com/index.html
|
||||
img: barclays.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
email: Yes
|
||||
|
||||
- name: BMO Bank of Montreal
|
||||
url: https://www.bmo.com/
|
||||
twitter: BMO
|
||||
img: bmo.png
|
||||
tfa: No
|
||||
|
||||
- name: BMO Harris Bank
|
||||
url: https://www.bmoharris.com/
|
||||
twitter: BMOHarrisBank
|
||||
img: bmo.png
|
||||
tfa: No
|
||||
|
||||
- name: Boeing Employee Credit Union
|
||||
url: https://www.becu.org/
|
||||
twitter: BECU
|
||||
img: becu.png
|
||||
tfa: No
|
||||
|
||||
- name: Capital One
|
||||
url: https://www.capitalone.com/
|
||||
twitter: CapitalOne
|
||||
img: capitalone.png
|
||||
tfa: No
|
||||
|
||||
- name: Capital One 360
|
||||
url: https://home.capitalone360.com/
|
||||
twitter: CapitalOne360
|
||||
img: capitalone360.png
|
||||
tfa: No
|
||||
|
||||
- name: CDC Federal Credit Union
|
||||
url: https://www.cdcfcu.com
|
||||
twitter: CDCCreditUnion
|
||||
img: cdcfcu.png
|
||||
tfa: No
|
||||
|
||||
- name: Chase
|
||||
url: https://www.chase.com/
|
||||
img: chase.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
email: Yes
|
||||
doc: /notes/chase/
|
||||
|
||||
- name: CIBC
|
||||
url: http://www.cibc.ca
|
||||
twitter: cibc
|
||||
img: cibc.png
|
||||
tfa: No
|
||||
|
||||
- name: Citibank
|
||||
url: https://online.citibank.com/US/Welcome.c
|
||||
twitter: Citibank
|
||||
img: citibank.png
|
||||
tfa: No
|
||||
|
||||
- name: Citibank Australia
|
||||
url: https://www.citibank.com.au/
|
||||
img: citibank.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: http://www.citibank.com.au/otp/
|
||||
|
||||
- name: Citizens Bank
|
||||
url: https://www.citizensbank.com
|
||||
twitter: citizensbank
|
||||
img: citizensbank.png
|
||||
tfa: No
|
||||
|
||||
- name: comdirect
|
||||
url: https://www.comdirect.de/
|
||||
twitter: comdirect
|
||||
img: comdirect.png
|
||||
tfa: No
|
||||
|
||||
- name: Commonwealth Bank of Australia
|
||||
url: https://www.commbank.com.au/
|
||||
img: commbank.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://www.commbank.com.au/security-privacy/netcode.html
|
||||
|
||||
- name: Discover
|
||||
url: https://www.discover.com/
|
||||
img: discover.png
|
||||
tfa: no
|
||||
twitter: Discover
|
||||
|
||||
- name: DNB
|
||||
url: https://www.dnb.no/
|
||||
img: dnb.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.dnb.no/privat/kundeservice/innlogging-nettbank.html
|
||||
|
||||
- name: everbank.com
|
||||
url: https://everbank.com
|
||||
img: everbank.png
|
||||
tfa: Yes
|
||||
phone: Yes
|
||||
sms: Yes
|
||||
|
||||
- name: Fairwinds
|
||||
url: https://www.fairwinds.org
|
||||
img: fairwinds.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
phone: Yes
|
||||
doc: "https://www.fairwinds.org/inside/privacy/security_we.asp#multifactor-auth"
|
||||
|
||||
- name: Fifth Third Bank
|
||||
url: https://www.53.com/
|
||||
twitter: fifththird
|
||||
img: fifththird.png
|
||||
tfa: No
|
||||
|
||||
- name: First Direct
|
||||
url: http://www1.firstdirect.com/
|
||||
img: firstdirect.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www1.firstdirect.com/1/2/securekey/
|
||||
|
||||
- name: First Republic Bank
|
||||
url: https://www.firstrepublic.com/
|
||||
img: first-republic.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
email: Yes
|
||||
doc: https://www.firstrepublic.com/resource/banking-online-faqs#su10
|
||||
|
||||
- name: First Tech Federal Credit Union
|
||||
url: https://www.firsttechfed.com/
|
||||
img: firsttechfcu.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.firsttechfed.com/OnlineServices/bankonlinesecurely/SecurityKey
|
||||
|
||||
- name: GE Capital Bank
|
||||
url: https://www.gecapitalbank.com
|
||||
twitter: GECapital
|
||||
img: GECapitalBank.png
|
||||
tfa: No
|
||||
|
||||
- name: Halifax
|
||||
url: http://www.halifax.co.uk
|
||||
twitter: AskHalifaxBank
|
||||
img: halifax.png
|
||||
tfa: No
|
||||
|
||||
- name: Handelsbanken
|
||||
url: https://www.handelsbanken.se/
|
||||
img: handelsbanken.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.handelsbanken.se/shb/INeT/ICentSv.nsf/Default/qAE99695C4C1D033DC12579120036EB43?Opendocument
|
||||
|
||||
- name: HSBC
|
||||
url: https://www.hsbc.com
|
||||
img: hsbc.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.hsbc.co.uk/1/2/customer-support/online-banking-security/secure-key
|
||||
|
||||
- name: Huntington National Bank
|
||||
url: https://www.huntington.com
|
||||
twitter: Huntington_Bank
|
||||
img: huntingtonnationalbank.png
|
||||
tfa: No
|
||||
|
||||
- name: Intesa Sanpaolo
|
||||
url: https://www.intesasanpaolo.com
|
||||
img: intesasanpaolo.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.intesasanpaolo.com/servizi-multicanale/sicurezza.jsp
|
||||
|
||||
- name: LendingClub
|
||||
url: https://www.lendingclub.com/
|
||||
twitter: lendingclub
|
||||
img: lendingclub.png
|
||||
tfa: No
|
||||
|
||||
- name: Lloyds Bank
|
||||
url: http://www.lloydsbank.com/
|
||||
twitter: AskLloydsBank
|
||||
img: lloydsbank.png
|
||||
tfa: No
|
||||
|
||||
- name: MandT Bank
|
||||
url: https://www.mtb.com/
|
||||
img: mtbank.png
|
||||
tfa: No
|
||||
twitter: MandT_Help
|
||||
|
||||
- name: MBNA Canada
|
||||
url: http://www.mbna.ca
|
||||
img: mbnacanada.png
|
||||
tfa: No
|
||||
|
||||
- name: Meridian Credit Union
|
||||
url: https://www.meridiancu.ca
|
||||
img: meridian.png
|
||||
twitter: meridiancu
|
||||
tfa: No
|
||||
|
||||
- name: Nationwide Building Society
|
||||
url: http://www.nationwide.co.uk/
|
||||
img: nationwide.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.nationwide.co.uk/support/security-centre/internet-banking-security/card-reader-and-security-questions
|
||||
|
||||
- name: Natwest UK
|
||||
url: https://www.natwest.com/personal.ashx
|
||||
img: natwest.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.natwest.com/personal/online-banking/g1/banking-safely-online/card-reader.ashx
|
||||
|
||||
- name: Navy Federal Credit Union
|
||||
url: https://www.navyfederal.org/
|
||||
img: navyfederal.png
|
||||
tfa: No
|
||||
twitter: NavyFederal
|
||||
|
||||
- name: Nordea Sverige
|
||||
url: https://www.nordea.se/
|
||||
img: nordea.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www.nordea.se/privat/vardagstjanster/internet-mobil-telefon/bank-id.html
|
||||
|
||||
- name: Nordnet
|
||||
url: https://www.nordnet.fi/
|
||||
img: nordnet.png
|
||||
tfa: No
|
||||
twitter: nordnetFI
|
||||
|
||||
- name: Pacific Continental
|
||||
url: https://www.therightbank.com/
|
||||
img: pcb.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://www.therightbank.com/sites/www.therightbank.com/files/files/online-services-instructions.pdf
|
||||
|
||||
- name: Partners Federal Credit Union
|
||||
url: https://partnersfcu.org/
|
||||
img: partners.png
|
||||
tfa: No
|
||||
|
||||
- name: Patelco Credit Union
|
||||
url: https://www.patelco.org/
|
||||
img: patelco.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
phone: Yes
|
||||
doc: https://www.patelco.org/Privacy-Security/Protection
|
||||
|
||||
- name: PenFed
|
||||
url: https://www.penfed.org/
|
||||
twitter: PenFed
|
||||
img: penfed.png
|
||||
tfa: No
|
||||
|
||||
- name: PNC Bank
|
||||
url: https://www.pnc.com/
|
||||
twitter: pncnews
|
||||
img: pncbank.png
|
||||
tfa: No
|
||||
|
||||
- name: Postbank
|
||||
url: https://www.postbank.com/
|
||||
twitter: postbank
|
||||
img: postbank.png
|
||||
tfa: No
|
||||
|
||||
- name: Raiffeisen Bank CZ
|
||||
url: http://www.rb.cz/
|
||||
img: raiffeisenbank_cz.png
|
||||
doc: http://www.rb.cz/firemni-finance/podnikatele-a-male-firmy/prime-bankovnictvi/sluzby-pro-firemni-ucty/bezpecnost-internetoveho-bankovnictvi/
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
|
||||
- name: RBC Royal Bank
|
||||
url: http://www.rbcroyalbank.com
|
||||
twitter: RBC_Canada
|
||||
img: rbc.png
|
||||
tfa: No
|
||||
|
||||
- name: San Diego County Credit Union
|
||||
url: https://www.sdccu.com
|
||||
twitter: sdccu
|
||||
img: sdccu.png
|
||||
tfa: No
|
||||
|
||||
- name: San Francisco Fire Credit Union
|
||||
url: https://www.sffirecu.org
|
||||
twitter: SFFireCU
|
||||
img: sffirecu.png
|
||||
tfa: No
|
||||
status: https://twitter.com/sffirecu/status/577532435228991488
|
||||
|
||||
- name: Santa Clara County Federal Credit Union
|
||||
url: https://www.sccfcu.org/
|
||||
twitter: SCCFCU
|
||||
img: sccfcu.png
|
||||
tfa: No
|
||||
|
||||
- name: SchoolsFirst FCU
|
||||
url: https://www.schoolsfirstfcu.org/
|
||||
twitter: SchoolsFirstFCU
|
||||
img: schoolsfirst.png
|
||||
tfa: No
|
||||
|
||||
- name: SEB
|
||||
url: http://www.seb.se/pow/default.asp
|
||||
img: seb.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.seb.se/pow/wcp/index.asp?ss=/pow/wcp/templates/sebcollection.cfmc.asp%3FDUID%3DDUID_623697DCF55C4576C1256DEF00637BE3
|
||||
|
||||
- name: Simple
|
||||
url: https://www.simple.com/
|
||||
twitter: simple
|
||||
img: simple.png
|
||||
tfa: No
|
||||
|
||||
- name: State Bank of India
|
||||
url: https://www.onlinesbi.com/
|
||||
img: sbi.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://www.onlinesbi.com/sbijava/mobile/sbsecure_otp_app_faq.html
|
||||
|
||||
- name: SunTrust
|
||||
url: https://www.suntrust.com/
|
||||
twitter: SunTrust
|
||||
img: suntrust.png
|
||||
tfa: No
|
||||
|
||||
- name: Swedbank
|
||||
url: https://www.swedbank.se/
|
||||
img: swedbank.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://hjalp.swedbank.se/logga-in/index.htm
|
||||
|
||||
- name: Tangerine
|
||||
url: http://www.tangerine.ca/
|
||||
twitter: tangerinebank
|
||||
img: tangerine.png
|
||||
tfa: No
|
||||
|
||||
- name: TARGOBANK
|
||||
url: https://www.targobank.de/
|
||||
img: targobank.png
|
||||
tfa: No
|
||||
twitter: TARGOBANK
|
||||
|
||||
- name: TBC Bank
|
||||
url: http://www.tbcbank.ge
|
||||
img: tbcbank.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://old.tbcbank.ge/en/private/banking/tbc_digipass/
|
||||
|
||||
- name: TD Bank
|
||||
url: https://www.tdbank.com
|
||||
twitter: TDBank_US
|
||||
img: tdbank.png
|
||||
tfa: No
|
||||
|
||||
- name: TD Canada Trust
|
||||
url: https://www.tdcanadatrust.com
|
||||
twitter: TD_Canada
|
||||
img: tdbank.png
|
||||
tfa: No
|
||||
|
||||
- name: Triodos Bank Deutschland
|
||||
url: https://www.triodos.de
|
||||
twitter: triodosde
|
||||
img: triodosbank.png
|
||||
tfa: No
|
||||
|
||||
- name: Umpqua Bank
|
||||
url: https://www.umpquabank.com/
|
||||
twitter: askumpquabank
|
||||
img: umpqua.png
|
||||
tfa: No
|
||||
|
||||
- name: Union Bank
|
||||
url: https://www.unionbank.com/
|
||||
twitter: UnionBank
|
||||
img: unionbank.png
|
||||
tfa: No
|
||||
|
||||
- name: US Bank
|
||||
url: https://www.usbank.com/
|
||||
twitter: usbank
|
||||
img: usbank.png
|
||||
tfa: No
|
||||
|
||||
- name: USAA
|
||||
url: https://www.usaa.com/
|
||||
img: usaa.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.usaa.com/inet/pages/security_token_logon_options
|
||||
|
||||
- name: UW Credit Union
|
||||
url: http://www.uwcu.org/
|
||||
img: uwcu.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
doc: http://www.uwcu.org/OnlineBanking/OnlineSecurity/VerifyU.aspx
|
||||
|
||||
- name: Wells Fargo
|
||||
url: https://www.wellsfargo.com/
|
||||
img: wellsfargo.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.wellsfargo.com/privacy-security/advanced-access
|
||||
|
||||
- name: Wescom Credit Union
|
||||
url: https://www.wescom.org/
|
||||
twitter: Liz_Wescom
|
||||
img: wescom.png
|
||||
tfa: No
|
||||
|
||||
- name: Zag Bank
|
||||
url: https://www.zagbank.ca/
|
||||
twitter: zagbank
|
||||
img: zagbank.png
|
||||
tfa: No
|
||||
|
||||
- name: ZenBanx
|
||||
url: http://zenbanx.ca/
|
||||
twitter: ZenBanx
|
||||
img: zenbanx.png
|
||||
tfa: No
|
189
data/applications/data/cloud.yml
Normal file
|
@ -0,0 +1,189 @@
|
|||
websites:
|
||||
- name: appFog
|
||||
url: https://www.appfog.com/
|
||||
twitter: appfog
|
||||
img: appfog.png
|
||||
tfa: No
|
||||
|
||||
- name: Amazon Web Services
|
||||
url: https://aws.amazon.com
|
||||
img: aws.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://aws.amazon.com/iam/details/mfa/
|
||||
|
||||
- name: Cloud 66
|
||||
url: http://www.cloud66.com
|
||||
img: cloud66.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://blog.cloud66.com/two-factor-authentication-for-your-accounts/
|
||||
|
||||
- name: cloud.ca
|
||||
url: https://cloud.ca
|
||||
img: cloudca.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://cloud.ca/two-factor-authentication-is-now-available-on-cloud-ca/
|
||||
|
||||
- name: Datapipe
|
||||
url: https://www.datapipe.com/
|
||||
img: datapipe.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.datapipe.com/security_compliance/managed_security/two_factor_authentication/
|
||||
|
||||
- name: DigitalOcean
|
||||
url: https://www.digitalocean.com/
|
||||
img: digitalocean.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required."
|
||||
doc: https://www.digitalocean.com/company/blog/introducing-two-factor-authentication/
|
||||
|
||||
- name: EngineYard
|
||||
url: https://www.engineyard.com
|
||||
img: engineyard.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "Currently in beta as of June 5th 2014. Create a support ticket to request 2FA added to your organization"
|
||||
doc: https://support.cloud.engineyard.com/entries/40538256-Two-factor-authentication
|
||||
|
||||
- name: fortrabbit
|
||||
url: http://www.fortrabbit.com/
|
||||
img: fortrabbit.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.fortrabbit.com/security#toc-two-factor-authentication
|
||||
|
||||
- name: Google Cloud Platform
|
||||
url: https://cloud.google.com
|
||||
img: googlecloud.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: Heroku
|
||||
url: https://www.heroku.com/
|
||||
img: heroku.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://devcenter.heroku.com/articles/two-factor-authentication
|
||||
|
||||
- name: IBM BlueMix
|
||||
url: https://bluemix.net
|
||||
img: ibmbluemix.png
|
||||
tfa: No
|
||||
twitter: IBMBluemix
|
||||
|
||||
- name: Joyent
|
||||
url: http://www.joyent.com/
|
||||
img: joyent.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://docs.joyent.com/public-cloud/getting-started/2fa
|
||||
|
||||
- name: LeaseWeb
|
||||
url: https://www.leaseweb.com/
|
||||
img: leaseweb.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "As of February 23, 2016, only for CDN customer accounts; dedicated/virtual server accounts not included, but in development."
|
||||
doc: https://kb.leaseweb.com/display/KB/Two+factor+authentication%3A+Cyber+Security
|
||||
|
||||
- name: Linode
|
||||
url: https://www.linode.com/
|
||||
img: linode.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.linode.com/docs/security/linode-manager-security-controls
|
||||
|
||||
- name: Microsoft Azure
|
||||
url: http://azure.microsoft.com/
|
||||
img: microsoftazure.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://azure.microsoft.com/en-us/documentation/articles/multi-factor-authentication/
|
||||
|
||||
- name: OpenShift
|
||||
url: https://www.openshift.com/
|
||||
twitter: openshift
|
||||
img: openshift.png
|
||||
tfa: No
|
||||
|
||||
- name: Packet
|
||||
url: https://www.packet.net/
|
||||
img: packet.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://www.packet.net/help/kb/account-management-and-billing/how-do-i-enable-two-factor-authentication-/
|
||||
|
||||
- name: Rackspace
|
||||
url: https://www.rackspace.com/
|
||||
img: rackspace.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://www.rackspace.com/knowledge_center/article/multi-factor-authentication-from-the-cloud-control-panel
|
||||
|
||||
- name: RightScale
|
||||
url: http://www.rightscale.com/
|
||||
img: rightscale.png
|
||||
tfa: No
|
||||
twitter: RightScale
|
||||
|
||||
- name: Scaleway
|
||||
url: https://www.scaleway.com
|
||||
twitter: scaleway
|
||||
img: scaleway.png
|
||||
tfa: No
|
||||
|
||||
- name: Scalr
|
||||
url: http://www.scalr.com
|
||||
img: scalr.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://scalr-wiki.atlassian.net/wiki/display/docs/Two-Factor+Authentication
|
||||
|
||||
- name: SingleHop
|
||||
url: http://www.singlehop.com
|
||||
img: singlehop.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://library.singlehop.com/assets_project_development/Two_Factor_Instructions.pdf
|
||||
|
||||
- name: Tilaa
|
||||
url: https://www.tilaa.com
|
||||
img: tilaa.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required."
|
||||
doc: http://blog.tilaa.com/post/128110588046/two-factor-authentication-and-session-management
|
||||
|
||||
- name: Userify
|
||||
url: https://userify.com
|
||||
img: userify.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://userify.com/docs/multifactor-authentication/
|
||||
|
||||
- name: Vultr
|
||||
url: https://www.vultr.com
|
||||
img: vultr.png
|
||||
tfa: yes
|
||||
software: yes
|
||||
hardware: yes
|
||||
doc: https://www.vultr.com/docs/using-two-factor-authentication-to-login-to-vultr-control-panel
|
166
data/applications/data/communication.yml
Normal file
|
@ -0,0 +1,166 @@
|
|||
websites:
|
||||
- name: Basecamp
|
||||
url: https://basecamp.com/
|
||||
img: basecamp.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://basecamp.com/help/guides/you/phone-verification
|
||||
|
||||
- name: Campfire
|
||||
url: https://campfirenow.com/
|
||||
img: campfire.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://help.37signals.com/sign-in/questions/460-how-do-i-set-up-and-use-phone-verification-for-logging-in
|
||||
|
||||
- name: Customer.io
|
||||
url: http://customer.io
|
||||
twitter: customerio
|
||||
img: customerio.png
|
||||
tfa: No
|
||||
|
||||
- name: Discord
|
||||
url: https://discordapp.com/
|
||||
img: discord.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.discordapp.com/hc/en-us/articles/219576828
|
||||
|
||||
- name: Disqus
|
||||
url: https://disqus.com
|
||||
twitter: disqus
|
||||
img: disqus.png
|
||||
tfa: No
|
||||
|
||||
- name: Fleep
|
||||
url: https://fleep.io
|
||||
twitter: fleepio
|
||||
img: fleep.png
|
||||
tfa: No
|
||||
|
||||
- name: Flowdock
|
||||
url: https://www.flowdock.com
|
||||
twitter: flowdock
|
||||
img: flowdock.png
|
||||
tfa: No
|
||||
|
||||
- name: HipChat
|
||||
url: https://www.hipchat.com
|
||||
twitter: HipChat
|
||||
img: hipchat.png
|
||||
tfa: No
|
||||
|
||||
- name: MailChimp
|
||||
url: https://mailchimp.com/
|
||||
img: mailchimp.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://kb.mailchimp.com/integrations/other-integrations/set-up-google-authenticator
|
||||
|
||||
- name: Mailgun
|
||||
url: https://mailgun.com
|
||||
twitter: Mail_Gun
|
||||
img: mailgun.png
|
||||
tfa: No
|
||||
|
||||
- name: Maxemail
|
||||
url: https://maxemail.emailcenteruk.com/
|
||||
img: maxemail.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.emailcenteruk.com/software/security-collaboration-2/
|
||||
|
||||
- name: Peerio
|
||||
url: https://peerio.com
|
||||
img: peerio.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://peerio.zendesk.com/hc/en-us/articles/202933829-How-do-I-setup-two-factor-authentication-
|
||||
|
||||
- name: Ryver
|
||||
url: http://www.ryver.com/
|
||||
img: ryver.png
|
||||
twitter: ryverapp
|
||||
tfa: No
|
||||
|
||||
- name: Salesforce
|
||||
url: http://www.salesforce.com
|
||||
img: salesforce.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
email: Yes
|
||||
doc: https://help.salesforce.com/HTViewHelpDoc?id=security_require_two_factor_authentication.htm
|
||||
|
||||
- name: SendGrid
|
||||
url: https://sendgrid.com/
|
||||
img: sendgrid.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://sendgrid.com/docs/User_Guide/two_factor_authentication.html
|
||||
|
||||
- name: Sendloop
|
||||
url: http://app.sendloop.com
|
||||
img: sendloop.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://app.sendloop.com/help/article/account-003/how-can-i-make-my-account-more-secure
|
||||
|
||||
- name: Skype (via Microsoft Account)
|
||||
url: https://www.skype.com
|
||||
img: skype.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-au/windows/two-step-verification-faq
|
||||
exceptions:
|
||||
text: "Two-factor authentication is available only when logging in using Microsoft Account, not Skype's stand-alone account."
|
||||
|
||||
- name: Slack
|
||||
url: https://slack.com/
|
||||
img: slack.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://slack.zendesk.com/hc/en-us/articles/204509068-Enabling-two-factor-authentication
|
||||
|
||||
- name: SocketLabs
|
||||
url: https://socketlabs.com/
|
||||
img: socketlabs.png
|
||||
sms: Yes
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.socketlabs.com/kb/145
|
||||
|
||||
- name: SparkPost
|
||||
url: https://sparkpost.com/
|
||||
img: sparkpost.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.sparkpost.com/customer/portal/articles/1948449
|
||||
|
||||
- name: Telegram
|
||||
url: https://telegram.org/
|
||||
img: telegram.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://telegram.org/blog/sessions-and-2-step-verification
|
||||
|
||||
- name: ToutApp
|
||||
url: http://www1.toutapp.com/
|
||||
twitter: toutapp
|
||||
img: toutapp.png
|
||||
tfa: No
|
||||
|
||||
- name: WhatsApp
|
||||
url: https://www.whatsapp.com/
|
||||
twitter: whatsapp
|
||||
img: whatsapp.png
|
||||
tfa: No
|
||||
|
||||
- name: Yammer
|
||||
url: https://yammer.com
|
||||
twitter: yammer
|
||||
img: yammer.png
|
||||
tfa: No
|
263
data/applications/data/cryptocurrencies.yml
Normal file
|
@ -0,0 +1,263 @@
|
|||
websites:
|
||||
- name: BitBay
|
||||
url: http://bitbay.net
|
||||
img: bitbay.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://www.youtube.com/watch?v=KFvoNHgl9Pw
|
||||
|
||||
- name: Bitcoins Norway
|
||||
url: https://bitcoinsnorway.com
|
||||
img: bitcoinsnorway.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Bitcoin.de
|
||||
url: https://bitcoin.de
|
||||
img: bitcoinde.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.bitcoin.de/de/faq/was-ist-die-2-step-verification-2-faktor-authentifizierung/46.html
|
||||
|
||||
- name: Bitcoin-Central
|
||||
url: https://bitcoin-central.net
|
||||
img: bitcoincentral.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://bitcoin-central.net/page/profile/security
|
||||
|
||||
- name: BitGo
|
||||
url: https://www.bitgo.com
|
||||
img: bitgo.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://bitgo.zendesk.com/hc/en-us/sections/201009049-Two-Factor-Authentication-Help-Page
|
||||
|
||||
- name: Bitlish
|
||||
url: https://bitlish.com
|
||||
img: bitlish.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://bitlish.com/how#mfa
|
||||
|
||||
- name: Bitpay
|
||||
url: https://bitpay.com
|
||||
img: bitpay.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://bitpay.com/two-factor
|
||||
|
||||
- name: Bitreserve
|
||||
url: https://bitreserve.org
|
||||
img: bitreserve.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.bitreserve.org/hc/en-us/articles/202409609-How-does-phone-number-verification-work-
|
||||
|
||||
- name: Bitstamp
|
||||
url: https://bitstamp.net
|
||||
img: bitstamp.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.bitstamp.net/s/documents/bitstamp_2_factor_authentication_guide.pdf
|
||||
|
||||
- name: BTC-E
|
||||
url: https://btc-e.com
|
||||
img: btc-e.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.btc-e.com/index.php?/Knowledgebase/Article/View/97/25/how-do-i-set-2-factor-authentication-to-my-btc-e-account
|
||||
|
||||
- name: BTCJam
|
||||
url: https://www.btcjam.com
|
||||
img: btcjam.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.btcjam.com/customer/portal/articles/1987686
|
||||
|
||||
- name: Blockchain
|
||||
url: https://blockchain.info/
|
||||
img: blockchain.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://blockchain.info/wallet/support-pages
|
||||
|
||||
- name: CampBX
|
||||
url: https://campbx.com/
|
||||
img: campbx.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://campbx.com/faq.php#security-compliance
|
||||
|
||||
- name: CEX.IO
|
||||
url: https://cex.io/
|
||||
img: cex.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://cex.io/guide#4
|
||||
|
||||
- name: ChangeTip
|
||||
url: https://www.changetip.com/
|
||||
img: changetip.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://blog.changetip.com/changetip-adds-two-factor-authentication-2fa-security/
|
||||
|
||||
- name: Circle
|
||||
url: https://circle.com
|
||||
img: circle.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.circle.com/hc/en-us/articles/204624600-What-is-two-factor-authentication-2FA-
|
||||
|
||||
- name: CleverCoin
|
||||
url: https://clevercoin.com
|
||||
img: clevercoin.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Coinapult
|
||||
url: https://coinapult.com
|
||||
img: coinapult.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://coinapult.com/faq
|
||||
|
||||
- name: Coinbase
|
||||
url: https://coinbase.com/
|
||||
img: coinbase.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
doc: http://blog.coinbase.com/post/25677574019/coinbase-now-offers-two-factor-authentication
|
||||
|
||||
- name: Coin Cafe
|
||||
url: https://coincafe.com
|
||||
img: coincafe.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
email: Yes
|
||||
doc: http://blog.coincafe.com/2016/01/08/2fa/
|
||||
|
||||
- name: Coinfloor
|
||||
url: https://www.coinfloor.co.uk/
|
||||
img: coinfloor.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.coinfloor.co.uk/security
|
||||
|
||||
- name: Coinify (Merchants)
|
||||
url: https://coinify.com/merchants
|
||||
img: coinify.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "While Coinify has aquired BIPS to allow for trading, only merchant accounts support TFA at this time. Trading is done through a separate account. Hardware support is limited to a print-out character matrix."
|
||||
|
||||
- name: Coinjar
|
||||
url: https://coinjar.com
|
||||
img: coinjar.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: https://support.coinjar.com/kb/using-coinjar/keeping-your-coinjar-secure-with-multi-factor-authentication
|
||||
|
||||
- name: Coinkite
|
||||
url: https://coinkite.com
|
||||
img: coinkite.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://coinkite.com/settings/pws
|
||||
|
||||
- name: Coinsetter
|
||||
url: https://www.coinsetter.com
|
||||
img: coinsetter.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.coinsetter.com/my/security
|
||||
|
||||
- name: Coins.ph
|
||||
url: https://coins.ph/
|
||||
img: coinsph.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://coinsph.zendesk.com/hc/en-us/sections/200557900-Two-factor-authentication
|
||||
|
||||
- name: Cryptsy
|
||||
url: https://cryptsy.com/
|
||||
img: cryptsy.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.cryptsy.com/pages/security
|
||||
|
||||
- name: Eclipse Mining Consortium
|
||||
url: https://eclipsemc.com
|
||||
img: eclipsemc.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://eclipsemc.com/single-news.php?id=20
|
||||
|
||||
- name: Justcoin Exchange
|
||||
url: https://justcoin.com/
|
||||
img: justcoinexchange.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://twitter.com/jstcoin/status/445900548743897088
|
||||
|
||||
- name: Kraken
|
||||
url: https://www.kraken.com/
|
||||
img: kraken.png
|
||||
doc: https://www.kraken.com/security/practices#two-factor-authentication
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: LocalBitcoins
|
||||
url: https://localbitcoins.com/
|
||||
img: localbitcoins.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://localbitcoins.blogspot.fi/2013/05/using-two-factor-authentication-on.html
|
||||
|
||||
- name: Uphold
|
||||
url: https://uphold.com/
|
||||
img: uphold.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://support.uphold.com/hc/en-us/articles/206119683-How-does-phone-number-verification-work-
|
||||
|
||||
- name: WeMineLTC.com
|
||||
url: https://www.wemineltc.com
|
||||
img: wemineltc.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://twitter.com/jstcoin/status/445900548743897088
|
||||
|
||||
- name: Xapo
|
||||
url: https://xapo.com
|
||||
img: xapo.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://support.xapo.com/how-do-i-enable-second-factor-authentication/view=faq
|
331
data/applications/data/developer.yml
Normal file
|
@ -0,0 +1,331 @@
|
|||
websites:
|
||||
- name: Aha!
|
||||
url: https://www.aha.io/
|
||||
img: aha.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://support.aha.io/hc/en-us/articles/202000957-Add-two-factor-authentication-2FA-
|
||||
|
||||
- name: Airbrake
|
||||
url: https://airbrake.io
|
||||
twitter: airbrake
|
||||
img: airbrake.png
|
||||
tfa: No
|
||||
|
||||
- name: aTech Media
|
||||
url: https://atechmedia.com
|
||||
img: atechmedia.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://atechmedia.com/blog/general/launches/two-factor-authentication
|
||||
|
||||
- name: Balsamiq
|
||||
url: https://balsamiq.com
|
||||
twitter: balsamiq
|
||||
img: balsamiq.png
|
||||
tfa: No
|
||||
|
||||
- name: Bitbucket
|
||||
url: https://bitbucket.org
|
||||
img: bitbucket.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://confluence.atlassian.com/x/425QLg
|
||||
|
||||
- name: Bugsnag
|
||||
url: https://bugsnag.com
|
||||
img: bugsnag.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://bugsnag.com/blog/two-factor-authentication
|
||||
|
||||
- name: Cedexis
|
||||
url: http://www.cedexis.com/
|
||||
img: cedexis.png
|
||||
tfa: No
|
||||
twitter: Cedexis
|
||||
|
||||
- name: Cloud9
|
||||
url: https://c9.io
|
||||
twitter: Cloud9IDE
|
||||
img: cloud9.png
|
||||
tfa: No
|
||||
exceptions:
|
||||
text: "TFA available by signing up using GitHub"
|
||||
|
||||
- name: CM Telecom
|
||||
url: https://www.cmtelecom.com/
|
||||
img: cmtelecom.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://help.onlinesmsgateway.com/en/accounts-and-payments/how-do-i-enable-two-factor-authentication
|
||||
|
||||
- name: Codeanywhere
|
||||
url: https://codeanywhere.com
|
||||
img: codeanywhere.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://blog.codeanywhere.com/codeanywhere-now-offers-two-factor-authentication/
|
||||
exceptions:
|
||||
text: "Only available on paid accounts at $7/10 per month (annual/monthly) or more."
|
||||
|
||||
- name: Code Climate
|
||||
url: https://codeclimate.com
|
||||
img: codeclimate.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://docs.codeclimate.com/docs/enabling-two-factor-authentication
|
||||
|
||||
- name: Codeship
|
||||
url: https://codeship.io/
|
||||
twitter: codeship
|
||||
img: codeship.png
|
||||
tfa: No
|
||||
|
||||
- name: Compose.io
|
||||
url: https://www.compose.io/
|
||||
img: composeio.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://docs.compose.io/security/compose-two-factor-authentication.html
|
||||
|
||||
- name: Deploybot
|
||||
url: http://deploybot.com/
|
||||
twitter: deploybothq
|
||||
img: deploybot.png
|
||||
tfa: No
|
||||
|
||||
- name: Docker
|
||||
url: https://docker.com/
|
||||
twitter: docker
|
||||
img: docker.png
|
||||
tfa: No
|
||||
|
||||
- name: Esri
|
||||
url: https://www.esri.com
|
||||
img: esri.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://doc.arcgis.com/en/arcgis-online/reference/multifactor.htm
|
||||
|
||||
- name: 'FogBugz & Kiln'
|
||||
url: https://www.fogcreek.com/fogbugz
|
||||
img: fogbugz.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.fogcreek.com/10892/two-factor-authentication
|
||||
|
||||
- name: GitHub
|
||||
url: https://github.com
|
||||
img: github.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://help.github.com/articles/about-two-factor-authentication
|
||||
|
||||
- name: GitLab
|
||||
url: https://gitlab.com
|
||||
img: gitlab.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://doc.gitlab.com/ee/profile/two_factor_authentication.html
|
||||
|
||||
- name: Hashicorp Atlas
|
||||
url: https://atlas.hashicorp.com/
|
||||
img: hashicorp-atlas.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: https://atlas.hashicorp.com/help/user-accounts/authentication#two-factor-authentication
|
||||
|
||||
- name: Infobip
|
||||
url: http://www.infobip.com/
|
||||
img: infobip.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://www.infobip.com/messaging/enterprise/2_factor_authentication/
|
||||
|
||||
- name: Jidoteki
|
||||
url: https://jidoteki.com
|
||||
img: jidoteki.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: 'https://jidoteki.com/documentation#authentication'
|
||||
|
||||
- name: Koding
|
||||
url: https://koding.com
|
||||
img: koding.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://learn.koding.com/guides/2-factor-auth/
|
||||
|
||||
- name: Launchpad
|
||||
url: https://launchpad.net
|
||||
img: launchpad.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://help.ubuntu.com/community/SSO/FAQs/2FA
|
||||
|
||||
- name: Looker
|
||||
url: http://looker.com/
|
||||
img: looker.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.looker.com/docs/admin/security/two-factor-authentication
|
||||
|
||||
- name: Mapbox
|
||||
url: https://www.mapbox.com
|
||||
img: mapbox.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.mapbox.com/help/two-step-verification/
|
||||
|
||||
- name: MongoDB Cloud Manager
|
||||
url: https://cloud.mongodb.com
|
||||
img: mongodbmms.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
doc: https://docs.cloud.mongodb.com/core/two-factor-authentication/
|
||||
|
||||
- name: New Relic
|
||||
url: https://newrelic.com
|
||||
twitter: newrelic
|
||||
img: newrelic.png
|
||||
tfa: No
|
||||
|
||||
- name: Nexmo
|
||||
url: https://www.nexmo.com/
|
||||
img: nexmo.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
|
||||
- name: Papertrail
|
||||
url: https://papertrailapp.com/
|
||||
twitter: papertrailapp
|
||||
img: papertrail.png
|
||||
tfa: No
|
||||
|
||||
- name: Phacility
|
||||
url: https://phacility.com/
|
||||
img: phacility.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Pivotal Tracker
|
||||
url: https://www.pivotaltracker.com
|
||||
twitter: pivotaltracker
|
||||
img: pivotaltracker.png
|
||||
tfa: No
|
||||
|
||||
- name: Plivo
|
||||
url: https://www.plivo.com
|
||||
twitter: plivo
|
||||
img: plivo.png
|
||||
tfa: No
|
||||
|
||||
- name: PyPI
|
||||
url: https://pypi.python.org/
|
||||
twitter: pypi
|
||||
img: pypi.png
|
||||
tfa: No
|
||||
|
||||
- name: PythonAnywhere
|
||||
url: https://www.pythonanywhere.com
|
||||
twitter: pythonanywhere
|
||||
img: pythonanywhere.png
|
||||
tfa: No
|
||||
|
||||
- name: RBCommons
|
||||
url: https://rbcommons.com
|
||||
img: rbcommons.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://support.beanbaginc.com/support/solutions/articles/3000006998-enabling-two-factor-authentication
|
||||
|
||||
- name: Semaphore
|
||||
url: https://semaphoreci.com
|
||||
img: semaphore.png
|
||||
tfa: Yes
|
||||
doc: https://semaphoreci.com/docs/two-step-verification.html
|
||||
software: Yes
|
||||
|
||||
- name: SourceForge
|
||||
url: http://sourceforge.net/
|
||||
twitter: sourceforge
|
||||
img: sourceforge.png
|
||||
tfa: No
|
||||
|
||||
- name: Status.io
|
||||
url: https://status.io/
|
||||
img: statusio.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: http://blog.status.io/2014/03/01/yubikey/
|
||||
|
||||
- name: StatusCake
|
||||
url: https://statuscake.com/
|
||||
img: statuscake.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
|
||||
- name: StatusPage.io
|
||||
url: https://www.statuspage.io
|
||||
twitter: statuspageio
|
||||
img: statuspageio.png
|
||||
tfa: No
|
||||
|
||||
- name: Taiga.io
|
||||
url: https://taiga.io
|
||||
twitter: taigaio
|
||||
img: taigaio.png
|
||||
tfa: No
|
||||
|
||||
- name: Twilio
|
||||
url: https://www.twilio.com/
|
||||
img: twilio.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://www.twilio.com/help/faq/twilio-basics/what-happens-when-i-enable-two-factor-authentication
|
||||
|
||||
- name: Unfuddle
|
||||
url: https://unfuddle.com/
|
||||
img: unfuddle.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://unfuddle.com/blog/2014/07/140721-two-factor-authentication
|
||||
|
||||
- name: Uptime Robot
|
||||
url: https://uptimerobot.com
|
||||
twitter: uptimerobot
|
||||
img: uptimerobot.png
|
||||
tfa: No
|
||||
|
||||
- name: Visual Studio Online
|
||||
url: http://www.visualstudio.com/
|
||||
img: visualstudio.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-us/windows/two-step-verification-faq
|
||||
|
||||
- name: Zapier
|
||||
url: https://www.zapier.com
|
||||
twitter: zapier
|
||||
img: zapier.png
|
||||
tfa: No
|
403
data/applications/data/domains.yml
Normal file
|
@ -0,0 +1,403 @@
|
|||
websites:
|
||||
- name: 007Names
|
||||
url: https://www.007names.com
|
||||
img: 007names.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.007names.com/info/two-step.xhtml
|
||||
|
||||
- name: 1and1
|
||||
url: https://www.1and1.com/
|
||||
img: 1and1.png
|
||||
tfa: No
|
||||
twitter: 1and1
|
||||
|
||||
- name: 10Dollar
|
||||
url: https://10dollar.ca/
|
||||
img: 10dollar.png
|
||||
twitter: 10dollar_ca
|
||||
tfa: No
|
||||
|
||||
- name: 101domain
|
||||
url: https://101domain.com
|
||||
img: 101domain.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.101domain.com/vip_security_card.htm
|
||||
|
||||
- name: Above.com
|
||||
url: https://www.above.com
|
||||
img: above.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://domains.above.com/manual-two-step-authentication.html
|
||||
|
||||
- name: Badger
|
||||
url: http://badger.com
|
||||
img: badger.png
|
||||
tfa: No
|
||||
twitter: badger
|
||||
|
||||
- name: CloudFlare
|
||||
url: https://cloudflare.com
|
||||
img: cloudflare.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.cloudflare.com/hc/en-us/articles/200167866-What-is-Authy-2-Factor-Authentication-
|
||||
|
||||
- name: ClouDNS
|
||||
url: https://www.cloudns.net/
|
||||
img: cloudns.png
|
||||
tfa: No
|
||||
twitter: ClouDNS
|
||||
|
||||
- name: Crazy Domains
|
||||
url: https://www.crazydomains.com
|
||||
img: crazydomains.png
|
||||
tfa: No
|
||||
twitter: CrazyDomains
|
||||
|
||||
- name: Directnic
|
||||
url: https://directnic.com
|
||||
img: directnic.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://directnic.com/knowledge/article/137:how+do+i+set+up+two-factor+authentication%3F
|
||||
|
||||
- name: DNS Made Easy
|
||||
url: http://www.dnsmadeeasy.com
|
||||
img: dnsmadeeasy.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.dnsmadeeasy.com/press-release/dns-made-easy-adds-two-factor-authentication-with-time-based-passwords/
|
||||
|
||||
- name: DNSimple
|
||||
url: https://dnsimple.com/
|
||||
img: dnsimple.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://blog.dnsimple.com/2012/08/protect-your-dnsimple-account-with-two-factor-authentication-from-authy/
|
||||
|
||||
- name: Domain.com
|
||||
url: http://www.domain.com/
|
||||
twitter: DomainDotCom
|
||||
img: domaindotcom.png
|
||||
tfa: No
|
||||
|
||||
- name: domainFACTORY
|
||||
url: http://www.df.eu
|
||||
img: domainfactory.png
|
||||
twitter: domainfactory
|
||||
tfa: No
|
||||
|
||||
- name: Domain Monster
|
||||
url: https://www.domainmonster.com/
|
||||
img: domainmonster.png
|
||||
twitter: domainmonster
|
||||
tfa: No
|
||||
|
||||
- name: DomainsAtCost
|
||||
url: https://www.domainsatcost.ca/
|
||||
twitter: domainsatcost
|
||||
img: domainsatcost.png
|
||||
tfa: No
|
||||
|
||||
- name: Domeny.tv
|
||||
url: http://www.domeny.tv/en
|
||||
img: domenytv.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.domeny.tv/en/two-factor-authentication
|
||||
|
||||
- name: Dyn
|
||||
url: http://dyn.com/
|
||||
img: dyn.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "Currently only supported for the Managed DNS & Email Delivery platforms (via DynID). Eventually DynID (and 2FA) will be rolled out to all platforms (no ETA)."
|
||||
doc: https://help.dyn.com/2-factor-authentication/
|
||||
|
||||
- name: Dynadot
|
||||
url: http://dynadot.com/
|
||||
img: dynadot.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://dynadot.com/domain/security.html
|
||||
|
||||
- name: easyDNS
|
||||
url: https://easydns.com
|
||||
img: easydns.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://docs.easydns.com/2-factor-authentication/
|
||||
|
||||
- name: eNom
|
||||
url: http://enom.com/
|
||||
img: enom.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.enom.com/news/article.aspx?p=978&
|
||||
|
||||
- name: EuroDNS
|
||||
url: https://www.eurodns.com
|
||||
img: eurodns.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.eurodns.com/customer/en/portal/articles/1633106-how-do-i-activate-two-step-verification-on-my-account-
|
||||
|
||||
- name: Fabulous
|
||||
url: http://fabulous.com
|
||||
img: fabulous.png
|
||||
tfa: yes
|
||||
hardware: yes
|
||||
doc: http://fabulous.com/informationcenter/index.htm?formdata%5Bqid%5D=1194
|
||||
|
||||
- name: Fasthosts
|
||||
url: https://www.fasthosts.co.uk/
|
||||
twitter: Fasthosts
|
||||
img: fasthosts.png
|
||||
tfa: No
|
||||
|
||||
- name: Gandi
|
||||
url: https://gandi.net
|
||||
img: gandi.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://wiki.gandi.net/en/contacts/login/2-factor-activation
|
||||
|
||||
- name: GoDaddy
|
||||
img: godaddy.png
|
||||
url: http://www.godaddy.com/
|
||||
tfa: yes
|
||||
sms: Yes
|
||||
doc: https://www.godaddy.com/help/enabling-two-step-authentication-for-your-godaddy-account-7502
|
||||
|
||||
- name: Google Domains
|
||||
url: https://domains.google.com
|
||||
img: googledomains.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: Heart Internet
|
||||
url: https://www.heartinternet.uk/
|
||||
img: heartinternet.png
|
||||
tfa: No
|
||||
twitter: HeartInternet
|
||||
|
||||
- name: Hover.com
|
||||
img: hover.png
|
||||
url: http://www.hover.com/
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://help.hover.com/entries/26677644
|
||||
|
||||
- name: Hurricane Electric
|
||||
url: http://www.he.net/
|
||||
img: hurricane.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Incapsula
|
||||
url: https://www.incapsula.com/
|
||||
img: incapsula.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: https://incapsula.zendesk.com/hc/en-us/articles/204795664-Incapsula-s-Password-Policy
|
||||
|
||||
- name: Internet.bs
|
||||
url: http://www.internet.bs
|
||||
img: internetbs.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: /notes/internetbs/
|
||||
|
||||
- name: InterNetworX (INWX)
|
||||
url: https://www.inwx.de/en/
|
||||
img: internetworx.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.inwx.de/en/offer/mobiletan
|
||||
|
||||
- name: iWantMyName
|
||||
url: https://iwantmyname.com/
|
||||
img: iwantmyname.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.iwantmyname.com/customer/portal/articles/1139898
|
||||
|
||||
- name: Loopia
|
||||
url: https://www.loopia.se/
|
||||
img: loopia.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://blogg.loopia.se/2015/03/16/nu-kan-du-logga-in-med-tvafaktorsautentiering-hos-loopia-genom-bankid/
|
||||
exceptions:
|
||||
text: "TFA only available for Swedish citizens"
|
||||
|
||||
- name: MarkMonitor
|
||||
url: https://www.markmonitor.com
|
||||
img: markmonitor.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Metaname
|
||||
url: http://metaname.net/
|
||||
img: metaname.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://metaname.net/public/two_factor_authentication
|
||||
|
||||
- name: Moniker
|
||||
url: http://www.moniker.com/
|
||||
img: moniker.png
|
||||
tfa: No
|
||||
twitter: monikersnap
|
||||
|
||||
- name: MyDomain
|
||||
url: http://www.mydomain.com/
|
||||
twitter: mydomaindotcom
|
||||
img: mydomain.png
|
||||
tfa: No
|
||||
|
||||
- name: Name.com
|
||||
url: http://www.name.com/
|
||||
img: namecom.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.name.com/services/two-step-verification
|
||||
|
||||
- name: Namecheap
|
||||
url: https://www.namecheap.com/
|
||||
img: namecheap.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://www.namecheap.com/support/knowledgebase/article.aspx/9253/45/how-to-two-factor-authentication
|
||||
|
||||
- name: NameSilo.com
|
||||
url: http://www.namesilo.com/
|
||||
img: namesilo.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.namesilo.com/Support/2~Factor-Authentication
|
||||
|
||||
- name: NamesPro.ca
|
||||
url: http://www.namespro.ca/
|
||||
twitter: namespro
|
||||
img: namespro.png
|
||||
tfa: No
|
||||
|
||||
- name: NearlyFreeSpeech.net
|
||||
url: https://www.nearlyfreespeech.net/
|
||||
img: nfsn.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://blog.nearlyfreespeech.net/2014/02/28/price-cuts-more-security-and-recovery-options/
|
||||
|
||||
- name: Netfirms
|
||||
url: https://www.netfirms.com
|
||||
twitter: netfirms
|
||||
img: netfirms.png
|
||||
tfa: No
|
||||
|
||||
- name: Netim
|
||||
url: http://www.netim.com/
|
||||
twitter: Netim_com
|
||||
img: netim.png
|
||||
tfa: No
|
||||
|
||||
- name: Netregistry
|
||||
url: http://www.netregistry.com.au/
|
||||
twitter: netregistry
|
||||
img: netregistry.png
|
||||
tfa: No
|
||||
|
||||
- name: Network Solutions
|
||||
url: https://www.networksolutions.com/
|
||||
twitter: netsolcares
|
||||
img: networksolutions.png
|
||||
tfa: No
|
||||
|
||||
- name: No-IP
|
||||
url: https://www.noip.com/
|
||||
img: noip.png
|
||||
tfa: No
|
||||
twitter: NoIPcom
|
||||
|
||||
- name: Nominet
|
||||
url: http://www.nominet.uk/
|
||||
img: nominet.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://registrars.nominet.org.uk/sites/default/files/two_factor_authentication_userguide.pdf
|
||||
|
||||
- name: Openprovider
|
||||
url: https://www.openprovider.co.uk
|
||||
img: openprovider.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.openprovider.co.uk/about-openprovider/news/secure-your-account-with-two-factor-authentication
|
||||
|
||||
- name: OpenSRS
|
||||
url: https://opensrs.com
|
||||
img: opensrs.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: https://help.opensrs.com/hc/en-us/articles/209618017-Two-Factor-Authentication-2FA-for-Reseller-Account-Access
|
||||
|
||||
- name: pairNIC
|
||||
url: https://www.pairnic.com/
|
||||
img: pairnic.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://www.pairnic.com/faq_security.html
|
||||
|
||||
- name: PointDNS
|
||||
url: https://pointhq.com/
|
||||
twitter: pointdns
|
||||
img: pointdns.png
|
||||
tfa: No
|
||||
|
||||
- name: Registro.br
|
||||
url: https://registro.br
|
||||
img: registrobr.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://registro.br/ajuda.html?secao=GerenciamentoConta&item=310
|
||||
|
||||
- name: Register4Less
|
||||
url: https://register4less.com/
|
||||
img: register4less.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://blog.register4less.com/?p=43
|
||||
|
||||
- name: STRATO
|
||||
url: https://www.strato.de/
|
||||
twitter: STRATO_AG
|
||||
img: strato.png
|
||||
tfa: No
|
||||
|
||||
- name: Verio
|
||||
url: https://www.verio.com/
|
||||
twitter: Verio
|
||||
img: verio.png
|
||||
tfa: No
|
124
data/applications/data/education.yml
Normal file
|
@ -0,0 +1,124 @@
|
|||
websites:
|
||||
- name: Academic Earth
|
||||
url: http://academicearth.org/
|
||||
twitter: academicearth
|
||||
img: academicearth.png
|
||||
tfa: No
|
||||
|
||||
- name: Antagning.se
|
||||
url: https://www.antagning.se
|
||||
img: antagning.png
|
||||
twitter: antagningse
|
||||
tfa: No
|
||||
|
||||
- name: Clever
|
||||
url: https://www.clever.com
|
||||
img: clever.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.clever.com/hc/en-us/articles/202062333-Two-Factor-Authentication
|
||||
|
||||
- name: CSN
|
||||
url: https://www.csn.se
|
||||
img: csn.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.csn.se/bas/vanligaFragor.do
|
||||
|
||||
- name: Codecademy
|
||||
url: http://www.codecademy.com/
|
||||
twitter: codecademy
|
||||
img: codecademy.png
|
||||
tfa: No
|
||||
|
||||
- name: Code School
|
||||
url: https://www.codeschool.com/
|
||||
twitter: codeschool
|
||||
img: codeschool.png
|
||||
tfa: No
|
||||
|
||||
- name: Coursera
|
||||
url: https://www.coursera.org/
|
||||
twitter: coursera
|
||||
img: coursera.png
|
||||
tfa: No
|
||||
|
||||
- name: Duolingo
|
||||
url: https://www.duolingo.com
|
||||
img: duolingo.png
|
||||
twitter: duolingo
|
||||
tfa: No
|
||||
|
||||
- name: Edmodo
|
||||
url: https://www.edmodo.com/
|
||||
twitter: edmodo
|
||||
img: edmodo.png
|
||||
tfa: No
|
||||
|
||||
- name: edX
|
||||
url: https://www.edx.org/
|
||||
twitter: edXOnline
|
||||
img: edx.png
|
||||
tfa: No
|
||||
|
||||
- name: Montclair State University
|
||||
url: http://www.montclair.edu/employee-services/
|
||||
twitter: montclairstateu
|
||||
img: montclair.png
|
||||
tfa: No
|
||||
|
||||
- name: My Study Life
|
||||
url: https://www.mystudylife.com/
|
||||
twitter: mystudylife
|
||||
img: mystudylife.png
|
||||
tfa: No
|
||||
|
||||
- name: Oplerno
|
||||
url: https://enroll.oplerno.com/
|
||||
img: oplerno.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: PushCoin
|
||||
url: https://pushcoin.com
|
||||
img: pushcoin.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "U2F support only for school admin accounts. 2FA for parent accounts is in progress."
|
||||
doc: http://knowhow.pushcoin.com/using-security-key-for-2-step-verification/
|
||||
|
||||
- name: Robert Morris University
|
||||
url: https://sentry.rmu.edu/login
|
||||
twitter: rmu
|
||||
img: rmu.png
|
||||
tfa: No
|
||||
|
||||
- name: SchoolSoft
|
||||
url: http://schoolsoft.se/
|
||||
img: schoolsoft.png
|
||||
tfa: No
|
||||
|
||||
- name: Udacity
|
||||
url: https://www.udacity.com/
|
||||
twitter: udacity
|
||||
img: udacity.png
|
||||
tfa: No
|
||||
|
||||
- name: Udemy
|
||||
url: https://www.udemy.com/
|
||||
twitter: udemy
|
||||
img: udemy.png
|
||||
tfa: No
|
||||
|
||||
- name: Virginia Tech
|
||||
url: https://www.vt.edu/
|
||||
img: virginiatech.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://it.vt.edu/2factor/index.php
|
161
data/applications/data/email.yml
Normal file
|
@ -0,0 +1,161 @@
|
|||
websites:
|
||||
- name: Aol Mail
|
||||
url: https://mail.aol.com
|
||||
img: aol.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
exceptions:
|
||||
text: "Currently U.S. only. International support coming soon."
|
||||
doc: https://help.aol.com/articles/2-factor-authentication-stronger-than-your-password-alone
|
||||
|
||||
- name: FastMail
|
||||
url: https://www.fastmail.fm/
|
||||
img: fastmail.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.fastmail.fm/help/features_alternative_logins.html
|
||||
|
||||
- name: Gmail
|
||||
url: https://gmail.com
|
||||
img: gmail.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: GMX
|
||||
url: https://www.gmx.com/
|
||||
twitter: gmxmail
|
||||
img: gmx.png
|
||||
tfa: No
|
||||
|
||||
- name: Hushmail
|
||||
url: https://www.hushmail.com
|
||||
img: hushmail.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://help.hushmail.com/entries/63282756-Two-step-verification
|
||||
|
||||
- name: Mail.com
|
||||
url: https://www.mail.com/
|
||||
twitter: maildotcom
|
||||
img: maildotcom.png
|
||||
tfa: No
|
||||
|
||||
- name: Mail.Ru
|
||||
url: https://mail.ru/
|
||||
img: mailru.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://help.mail.ru/enmail-help/settings/2auth
|
||||
|
||||
- name: mailbox.org
|
||||
url: https://www.mailbox.org/
|
||||
img: mailbox.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: https://mailbox.org/en/one-time-passwords-for-secure-login-to-our-webmailer/
|
||||
|
||||
- name: Mailstache
|
||||
url: https://mailstache.io
|
||||
twitter: mailstache
|
||||
img: mailstache.png
|
||||
tfa: No
|
||||
|
||||
- name: Outlook.com
|
||||
url: https://outlook.com
|
||||
img: outlook.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-us/windows/two-step-verification-faq
|
||||
|
||||
- name: Pobox
|
||||
url: https://www.pobox.com/
|
||||
img: pobox.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://pobox.com/helpspot/index.php?pg=kb.chapter&id=65
|
||||
|
||||
- name: Posteo
|
||||
url: https://posteo.de/
|
||||
img: posteo.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://posteo.de/en/help/what-is-two-factor-authentication-and-how-do-i-set-it-up
|
||||
|
||||
- name: ProtonMail
|
||||
url: https://protonmail.com/
|
||||
twitter: ProtonMail
|
||||
img: protonmail.png
|
||||
tfa: No
|
||||
|
||||
- name: Riseup Mail
|
||||
url: https://mail.riseup.net
|
||||
twitter: riseupnet
|
||||
img: riseup.png
|
||||
tfa: No
|
||||
|
||||
- name: Runbox
|
||||
url: https://runbox.com
|
||||
twitter: Runbox
|
||||
img: runbox.png
|
||||
tfa: No
|
||||
|
||||
- name: Thexyz
|
||||
url: https://www.thexyz.com/
|
||||
img: thexyz.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.thexyz.com/account/knowledgebase/15/Enabling-two-factor-authentication.html
|
||||
|
||||
- name: Yahoo Mail
|
||||
url: https://mail.yahoo.com/
|
||||
img: yahoomail.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://help.yahoo.com/kb/SLN5013.html
|
||||
|
||||
- name: Yahoo Japan Mail
|
||||
url: https://mail.yahoo.co.jp/
|
||||
img: yahoojapanmail.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: http://id.yahoo.co.jp/security/otp.html
|
||||
|
||||
- name: Yandex.Mail
|
||||
url: https://mail.yandex.com/
|
||||
img: yandexmail.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required for initial setup."
|
||||
doc: https://yandex.com/support/passport/authorization/twofa.xml
|
||||
|
||||
- name: Zimbra
|
||||
url: https://www.zimbra.com/
|
||||
img: zimbra.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "Available in Zimbra Collaboration 8.7 and above, Network Edition only"
|
||||
doc: https://blog.zimbra.com/2016/02/zimbra-collaboration-8-7-two-factor-authentication-2fa-technical-preview/
|
||||
|
||||
- name: Zoho Mail
|
||||
url: https://www.zoho.com/mail/
|
||||
img: zoho.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://adminconsole.wiki.zoho.com/mail/Two-Factor-Authentication.html
|
124
data/applications/data/entertainment.yml
Normal file
|
@ -0,0 +1,124 @@
|
|||
websites:
|
||||
- name: Bandcamp
|
||||
url: https://bandcamp.com
|
||||
twitter: bandcamp
|
||||
img: bandcamp.png
|
||||
tfa: No
|
||||
|
||||
- name: CD Baby
|
||||
url: https://www.cdbaby.com/
|
||||
twitter: cdbaby
|
||||
img: cdbaby.png
|
||||
tfa: No
|
||||
|
||||
- name: Google Play
|
||||
url: https://play.google.com
|
||||
img: googleplay.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: hitbox
|
||||
url: http://www.hitbox.tv/
|
||||
twitter: hitboxliveHelp
|
||||
img: hitbox.png
|
||||
tfa: No
|
||||
|
||||
- name: Hulu
|
||||
url: http://www.hulu.com/
|
||||
twitter: hulu_support
|
||||
img: hulu.png
|
||||
tfa: No
|
||||
|
||||
- name: IMDb
|
||||
url: https://www.imdb.com
|
||||
img: imdb.png
|
||||
twitter: IMDb
|
||||
tfa: No
|
||||
|
||||
- name: Last.fm
|
||||
url: http://www.last.fm/
|
||||
twitter: lastfmsupport
|
||||
img: lastfm.png
|
||||
tfa: No
|
||||
|
||||
- name: Netflix
|
||||
url: https://www.netflix.com/us/
|
||||
twitter: Netflixhelps
|
||||
img: netflix.png
|
||||
tfa: No
|
||||
|
||||
- name: Plex
|
||||
url: https://www.plex.tv
|
||||
twitter: plexapp
|
||||
img: plex.png
|
||||
tfa: No
|
||||
|
||||
- name: Sling TV
|
||||
url: https://www.sling.com/
|
||||
twitter: slinganswers
|
||||
img: sling.png
|
||||
tfa: No
|
||||
|
||||
- name: SoundCloud
|
||||
url: https://soundcloud.com/
|
||||
twitter: SCsupport
|
||||
img: soundcloud.png
|
||||
tfa: No
|
||||
|
||||
- name: Spotify
|
||||
url: https://www.spotify.com/
|
||||
twitter: spotifycares
|
||||
img: spotify.png
|
||||
tfa: No
|
||||
|
||||
- name: TIDAL
|
||||
url: http://tidal.com/
|
||||
twitter: TIDALHiFi
|
||||
img: tidal.png
|
||||
tfa: No
|
||||
|
||||
- name: TiVo
|
||||
url: https://www.tivo.com/
|
||||
twitter: TiVo
|
||||
img: tivo.png
|
||||
tfa: No
|
||||
|
||||
- name: Twitch
|
||||
url: http://www.twitch.tv/
|
||||
img: twitch.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://blog.twitch.tv/2015/11/two-factor-authentication-now-available-on-your-twitch-account/
|
||||
|
||||
- name: Ustream
|
||||
url: http://www.ustream.tv/
|
||||
twitter: UstreamSupport
|
||||
img: ustream.png
|
||||
tfa: No
|
||||
|
||||
- name: YouTube
|
||||
url: https://www.youtube.com/
|
||||
img: youtube.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: Vessel
|
||||
url: https://www.vessel.com/
|
||||
twitter: Vessel
|
||||
img: vessel.png
|
||||
tfa: No
|
||||
|
||||
- name: Vimeo
|
||||
url: https://vimeo.com/
|
||||
twitter: vimeo
|
||||
img: vimeo.png
|
||||
tfa: No
|
184
data/applications/data/finance.yml
Normal file
|
@ -0,0 +1,184 @@
|
|||
websites:
|
||||
- name: ADP
|
||||
url: https://www.adp.com
|
||||
twitter: adp
|
||||
img: adp.png
|
||||
tfa: No
|
||||
|
||||
- name: Credit Karma
|
||||
url: https://www.creditkarma.com
|
||||
twitter: creditkarma
|
||||
img: creditkarma.png
|
||||
tfa: No
|
||||
|
||||
- name: FreeAgent
|
||||
url: http://www.freeagent.com
|
||||
img: freeagent.png
|
||||
twitter: freeagent
|
||||
tfa: No
|
||||
|
||||
- name: FreshBooks
|
||||
url: https://www.freshbooks.com
|
||||
img: freshbooks.png
|
||||
twitter: freshbooks
|
||||
tfa: No
|
||||
|
||||
- name: Geico
|
||||
url: https://www.geico.com/
|
||||
img: geico.png
|
||||
twitter: geico_service
|
||||
tfa: No
|
||||
|
||||
- name: HelloWallet
|
||||
url: https://www.hellowallet.com
|
||||
twitter: HelloWallet
|
||||
img: hellowallet.png
|
||||
tfa: No
|
||||
|
||||
- name: InEx Finance
|
||||
url: https://www.inexfinance.com/
|
||||
twitter: InexFinance
|
||||
img: inex.png
|
||||
tfa: No
|
||||
|
||||
- name: Intuit TurboTax
|
||||
url: https://turbotax.intuit.com/
|
||||
img: turbotax.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://ttlc.intuit.com/questions/2902682-what-is-two-step-verification
|
||||
|
||||
- name: Kiva
|
||||
url: https://www.kiva.org
|
||||
twitter: kiva
|
||||
img: kiva.png
|
||||
tfa: No
|
||||
|
||||
- name: Kualto
|
||||
url: https://www.kualto.com
|
||||
twitter: kualtoapp
|
||||
img: kualto.png
|
||||
tfa: No
|
||||
|
||||
- name: LevelUp
|
||||
url: https://www.thelevelup.com
|
||||
twitter: TheLevelUp
|
||||
img: levelup.png
|
||||
tfa: No
|
||||
|
||||
- name: Mint
|
||||
url: https://www.mint.com
|
||||
img: mint.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Mint Bills (formerly Check)
|
||||
url: https://bills.mint.com
|
||||
twitter: mintbills
|
||||
img: mintbills.png
|
||||
tfa: No
|
||||
|
||||
- name: Paychex
|
||||
url: https://www.paychex.com
|
||||
img: paychex.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
|
||||
- name: Pocketsmith
|
||||
url: https://www.pocketsmith.com
|
||||
img: pocketsmith.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.pocketsmith.com/blog/2014/07/18/2fa-orginal-merchant-and-other-updates
|
||||
|
||||
- name: Popmoney
|
||||
url: https://www.popmoney.com
|
||||
twitter: popmoney
|
||||
img: popmoney.png
|
||||
tfa: No
|
||||
|
||||
- name: Progressive
|
||||
url: https://www.progressive.com
|
||||
twitter: progressive
|
||||
img: progressive.png
|
||||
tfa: No
|
||||
|
||||
- name: Quickbooks Online
|
||||
url: http://www.quickbooks.com
|
||||
img: quickbooks.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://community.intuit.com/articles/1164912-multi-factor-authentication-faq
|
||||
|
||||
- name: QuickFile
|
||||
url: http://www.quickfile.co.uk
|
||||
img: quickfile.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.quickfile.co.uk/main/1/2-factor_authentication.htm
|
||||
|
||||
- name: Ripple Trade
|
||||
url: https://www.rippletrade.com/
|
||||
img: rippletrade.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://ripple.com/knowledge_center/using-two-factor-authentication-2fa/
|
||||
|
||||
- name: Shoeboxed
|
||||
url: https://www.shoeboxed.com/
|
||||
twitter: Shoeboxed
|
||||
img: shoeboxed.png
|
||||
tfa: No
|
||||
|
||||
- name: SimpleTax
|
||||
url: https://simpletax.ca/
|
||||
img: simpletax.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
doc: https://help.simpletax.ca/questions/two-factor-authentication
|
||||
|
||||
- name: Treasury Direct
|
||||
url: https://www.treasurydirect.gov
|
||||
img: treasurydirect.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
|
||||
- name: Valic
|
||||
url: https://www.valic.com/
|
||||
twitter: VALIC_retire
|
||||
img: valic.png
|
||||
tfa: No
|
||||
|
||||
- name: Xero
|
||||
url: https://www.xero.com/
|
||||
img: xero.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://help.xero.com/nz/MyXero_Two-Step_About
|
||||
|
||||
- name: Yodlee Moneycenter
|
||||
url: https://yodleemoneycenter.com/
|
||||
twitter: Yodlee
|
||||
img: yodlee.png
|
||||
tfa: no
|
||||
|
||||
- name: You Need A Budget (YNAB)
|
||||
url: https://www.youneedabudget.com/
|
||||
twitter: ynab
|
||||
img: ynab.png
|
||||
tfa: no
|
||||
|
||||
- name: ZenPayroll
|
||||
url: https://www.zenpayroll.com
|
||||
img: zenpayroll.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://help.zenpayroll.com/customer/portal/articles/969452-two-step-authentication
|
24
data/applications/data/food.yml
Normal file
|
@ -0,0 +1,24 @@
|
|||
websites:
|
||||
- name: Dutch Bros
|
||||
url: http://www.dutchbros.com/
|
||||
img: dutchbros.png
|
||||
tfa: No
|
||||
twitter: DutchBros
|
||||
|
||||
- name: Max
|
||||
url: https://max.se/
|
||||
img: max.png
|
||||
tfa: No
|
||||
twitter: maxhamburgare
|
||||
|
||||
- name: Starbucks
|
||||
url: http://www.starbucks.com/
|
||||
img: starbucks.png
|
||||
tfa: No
|
||||
twitter: Starbucks
|
||||
|
||||
- name: Taco Bell
|
||||
url: https://www.tacobell.com
|
||||
img: tacobell.png
|
||||
tfa: No
|
||||
twitter: tacobell
|
228
data/applications/data/gaming.yml
Normal file
|
@ -0,0 +1,228 @@
|
|||
websites:
|
||||
- name: Ankama
|
||||
url: http://www.ankama.com
|
||||
img: ankama.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://support.ankama.com/hc/en-us/categories/200093427-DOFUS-Security
|
||||
|
||||
- name: Blizzard
|
||||
url: http://blizzard.com
|
||||
img: blizzard.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://us.battle.net/en/security/
|
||||
|
||||
- name: Black Desert Online
|
||||
url: https://www.blackdesertonline.com/
|
||||
img: bdo.png
|
||||
twitter: BDO_News
|
||||
tfa: No
|
||||
|
||||
- name: Blade & Soul
|
||||
url: http://www.bladeandsoul.com/
|
||||
img: bladeandsoul.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.bladeandsoul.com/hc/en-us/articles/207578553-Supported-Two-Step-OTP-Authentication-Verification-Methods
|
||||
|
||||
- name: Desura
|
||||
url: http://www.desura.com/
|
||||
img: desura.png
|
||||
tfa: No
|
||||
twitter: desura
|
||||
|
||||
- name: Elder Scrolls Online
|
||||
url: http://www.elderscrollsonline.com/
|
||||
img: eso.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
doc: /notes/eso/
|
||||
|
||||
- name: Enjin
|
||||
url: http://www.enjin.com/
|
||||
img: enjin.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "2FA is only available on paid plans."
|
||||
doc: http://support.enjin.com/hc/en-us/articles/201090770-2-Factor-Authentication-Authy-
|
||||
|
||||
- name: EVE Online
|
||||
url: http://www.eveonline.com/
|
||||
img: eveonline.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://community.eveonline.com/news/dev-blogs/two-factor-authentication/
|
||||
exceptions:
|
||||
text: "This does not prevent people from logging into the game client by circumventing the launcher. That is a legacy issue that the developers have acknowledged."
|
||||
|
||||
- name: Garena Online
|
||||
url: http://garena.com
|
||||
img: garena.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.garena.com/account/
|
||||
exceptions:
|
||||
text: "A mobile phone and Garena account level 3 or higher is required for 2FA."
|
||||
|
||||
- name: GOG.com
|
||||
url: https://www.gog.com
|
||||
img: gog.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
doc: https://www.gog.com/support/support_view/twostep_login_faq
|
||||
|
||||
- name: GREE
|
||||
url: http://product.gree.net/
|
||||
img: gree.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: /notes/gree/
|
||||
|
||||
- name: Guild Wars 2
|
||||
url: https://www.guildwars2.com
|
||||
img: guildwars2.png
|
||||
sms: Yes
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: http://help.guildwars2.com/entries/95446157-Securing-Your-Account-With-Authentication
|
||||
|
||||
- name: Humble Bundle
|
||||
url: https://www.humblebundle.com/
|
||||
img: humble.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.humblebundle.com/hc/en-us/articles/202421374
|
||||
|
||||
- name: Itch.io
|
||||
url: https://itch.io/
|
||||
img: itchio.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://itch.io/developers/two-factor-authentication
|
||||
|
||||
- name: League of Legends
|
||||
url: http://leagueoflegends.com
|
||||
twitter: leagueoflegends
|
||||
img: leagueoflegends.png
|
||||
tfa: No
|
||||
|
||||
- name: Mojang
|
||||
url: https://mojang.com/
|
||||
twitter: MojangSupport
|
||||
img: mojang.png
|
||||
tfa: No
|
||||
|
||||
- name: Nintendo Network
|
||||
url: http://www.nintendo.com/
|
||||
twitter: NintendoAmerica
|
||||
img: nintendo.png
|
||||
tfa: No
|
||||
|
||||
- name: Origin
|
||||
url: https://www.origin.com/
|
||||
img: origin.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://help.ea.com/en/article/origin-login-verification-information/
|
||||
|
||||
- name: Playstation Network
|
||||
url: https://www.playstation.com/
|
||||
twitter: AskPlayStation
|
||||
img: psn.png
|
||||
tfa: No
|
||||
status: http://www.polygon.com/2016/4/20/11470660/psn-two-factor-authentication-playstation-network
|
||||
|
||||
- name: Rockstar Games Social Club
|
||||
url: http://socialclub.rockstargames.com
|
||||
twitter: RockstarSupport
|
||||
img: rockstargames.png
|
||||
tfa: No
|
||||
|
||||
- name: RuneScape
|
||||
url: http://www.runescape.com/
|
||||
img: runescape.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://services.runescape.com/m=rswiki/en/Authenticator_FAQ
|
||||
|
||||
- name: "Star Wars: The Old Republic"
|
||||
url: http://www.swtor.com/
|
||||
img: swtor.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.swtor.com/info/security-key
|
||||
|
||||
- name: Steam
|
||||
url: http://store.steampowered.com/
|
||||
img: steam.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: https://support.steampowered.com/kb_article.php?ref=8625-WRAH-9030
|
||||
exceptions:
|
||||
text: "Software implementation requires use of the Steam Mobile app. It does not support multiple accounts on the same device. It does not support multiple accounts using the same phone number for SMS. Authentication on non-phone devices is not officially supported. SMS support is limited to receiving account recovery codes for password resets."
|
||||
|
||||
- name: Square Enix
|
||||
url: http://na.square-enix.com/
|
||||
img: squarenix.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.square-enix.com/na/account/otp/
|
||||
exceptions:
|
||||
text: "Software implementation requires you to have purchased either Final Fantasy XI or Final Fantasy XIV and registered the game."
|
||||
|
||||
- name: Tibia
|
||||
url: http://www.tibia.com/
|
||||
img: tibia.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.tibia.com/support/?subtopic=faq&question=authenticator
|
||||
|
||||
- name: Trion Worlds
|
||||
url: http://www.trionworlds.com/en/
|
||||
img: trionworlds.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://store.trionworlds.com/account/profile/manage-game
|
||||
|
||||
- name: Uplay
|
||||
url: http://uplay.ubi.com/
|
||||
twitter: UplayUbisoft
|
||||
img: uplay.png
|
||||
tfa: No
|
||||
|
||||
- name: Wargaming
|
||||
url: http://wargaming.net/
|
||||
twitter: wargaming_net
|
||||
img: wargaming.png
|
||||
tfa: No
|
||||
|
||||
- name: WildStar
|
||||
url: https://www.wildstar-online.com/
|
||||
img: wildstar.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.wildstar-online.com/hc/en-us/articles/203982369-Two-Step-Verification-FAQ
|
||||
|
||||
- name: Xbox Live
|
||||
url: https://www.xbox.com/live
|
||||
img: xbox.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-us/windows/two-step-verification-faq
|
89
data/applications/data/health.yml
Normal file
|
@ -0,0 +1,89 @@
|
|||
websites:
|
||||
- name: 23andMe
|
||||
url: http://www.23andme.com
|
||||
twitter: 23andMe
|
||||
img: 23andme.png
|
||||
tfa: No
|
||||
|
||||
- name: CVS/Caremark
|
||||
url: https://www.caremark.com
|
||||
twitter: cvshealth
|
||||
img: cvscaremark.png
|
||||
tfa: No
|
||||
|
||||
- name: drchrono
|
||||
url: https://www.drchrono.com
|
||||
img: drchrono.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.drchrono.com/blog/two-factor-authentication-extra-security-for-your-health-records/
|
||||
|
||||
- name: Drugs.com
|
||||
url: http://www.drugs.com
|
||||
twitter: DrugsCom
|
||||
img: drugscom.png
|
||||
tfa: No
|
||||
status: https://twitter.com/Drugscom/status/493856207572975620
|
||||
|
||||
- name: Google Fit
|
||||
url: https://fit.google.com
|
||||
img: googlefit.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: FitBit
|
||||
url: http://www.fitbit.com
|
||||
twitter: fitbit
|
||||
img: fitbit.png
|
||||
tfa: No
|
||||
|
||||
- name: FollowMyHealth
|
||||
url: https://www.followmyhealth.com/
|
||||
img: followmyhealth.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
doc: http://support.followmyhealth.com/customer/portal/articles/1309938-fmh-secure-login-2-step-verification---break-down
|
||||
|
||||
- name: Healthcare.gov
|
||||
url: http://healthcare.gov
|
||||
twitter: HealthCareGov
|
||||
img: healthcaregov.png
|
||||
tfa: No
|
||||
|
||||
- name: HealthVault (w/Microsoft Account)
|
||||
url: https://www.healthvault.com
|
||||
img: healthvault.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: http://windows.microsoft.com/en-au/windows/two-step-verification-faq
|
||||
|
||||
- name: Misfit
|
||||
url: http://misfit.com/
|
||||
twitter: Misfit
|
||||
img: misfit.png
|
||||
tfa: No
|
||||
|
||||
- name: myfitnesspal
|
||||
url: http://www.myfitnesspal.com
|
||||
twitter: myfitnesspal
|
||||
img: myfitnesspal.png
|
||||
tfa: No
|
||||
|
||||
- name: WebMD
|
||||
url: http://www.webmd.com
|
||||
twitter: WebMD
|
||||
img: webmd.png
|
||||
tfa: No
|
||||
|
||||
- name: Withings
|
||||
url: http://www.withings.com
|
||||
twitter: Withings
|
||||
img: withings.png
|
||||
tfa: No
|
259
data/applications/data/hosting.yml
Normal file
|
@ -0,0 +1,259 @@
|
|||
websites:
|
||||
- name: ARP Networks
|
||||
url: https://arpnetworks.com/
|
||||
img: arpnetworks.png
|
||||
tfa: No
|
||||
twitter: arpnetworks
|
||||
|
||||
- name: Binary Lane
|
||||
url: https://www.binarylane.com.au/
|
||||
img: binarylane.png
|
||||
tfa: Yes
|
||||
software: yes
|
||||
doc: https://www.binarylane.com.au/support/solutions/articles/1000199372-two-factor-authentication
|
||||
|
||||
- name: Bluehost
|
||||
url: https://www.bluehost.com/
|
||||
img: bluehost.png
|
||||
tfa: No
|
||||
twitter: bluehostsupport
|
||||
|
||||
- name: ChunkHost
|
||||
url: https://chunkhost.com
|
||||
img: chunkhost.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: CloudAtCost
|
||||
url: http://cloudatcost.com
|
||||
img: cloudatcost.png
|
||||
twitter: cloudatcost
|
||||
tfa: no
|
||||
|
||||
- name: CloudShards
|
||||
url: https://www.cloudshards.com/
|
||||
img: cloudshards.png
|
||||
twitter: CloudShards
|
||||
tfa: No
|
||||
|
||||
- name: cyon
|
||||
url: https://www.cyon.ch
|
||||
img: cyon.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.cyon.ch/support/a/225/wie-aktiviere-ich-die-zwei-schritt-verifizierung
|
||||
|
||||
- name: Dreamhost
|
||||
url: https://dreamhost.com
|
||||
img: dreamhost.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://wiki.dreamhost.com/Enabling_Multifactor_Authentication
|
||||
|
||||
- name: Fastly
|
||||
url: https://www.fastly.com
|
||||
img: fastly.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://docs.fastly.com/guides/getting-started/enabling-and-disabling-twofactor-authentication
|
||||
|
||||
- name: Glesys
|
||||
url: http://glesys.com/
|
||||
img: glesys.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
|
||||
- name: Globat
|
||||
url: https://www.globat.com/
|
||||
img: globat.png
|
||||
tfa: No
|
||||
twitter: globat
|
||||
|
||||
- name: ICUK
|
||||
url: https://icuk.net
|
||||
img: icuk.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.icuk.net/reseller/security.asp
|
||||
|
||||
- name: Infomaniak
|
||||
url: https://www.infomaniak.com/
|
||||
img: infomaniak.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.infomaniak.ch/en/support/faq/1940
|
||||
|
||||
- name: InMotion Hosting
|
||||
url: https://www.inmotionhosting.com/
|
||||
twitter: inmotionhosting
|
||||
img: inmotion.png
|
||||
tfa: No
|
||||
|
||||
- name: Hetzner Online
|
||||
url: https://www.hetzner.de/
|
||||
img: hetzner.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
|
||||
- name: iPage
|
||||
url: http://www.ipage.com/ipage/index.html
|
||||
twitter: iPage
|
||||
img: ipage.png
|
||||
tfa: No
|
||||
|
||||
- name: Liquid Web
|
||||
url: https://www.liquidweb.com
|
||||
img: liquidweb.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.liquidweb.com/kb/how-to-enable-two-factor-authentication-2fa/
|
||||
|
||||
- name: Mammoth Networks
|
||||
url: https://www.mammoth.net.au/
|
||||
img: mammothnetworks.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.mammoth.net.au/news/2012/10/22/two-factor-authentication-now-available
|
||||
|
||||
- name: MaxCDN
|
||||
url: https://www.maxcdn.com
|
||||
img: maxcdn.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.maxcdn.com/one/tutorial/enable-two-step-verification/
|
||||
|
||||
- name: Media Temple
|
||||
url: http://mediatemple.net/
|
||||
twitter: mediatemple
|
||||
img: mediatemple.png
|
||||
tfa: No
|
||||
|
||||
- name: Netcup
|
||||
url: https://netcup.eu/
|
||||
img: netcup.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.netcup-wiki.de/wiki/Stammdaten_CCP#Zwei-Faktor-Authentifizierung_.282FA.29
|
||||
|
||||
- name: NearlyFreeSpeech.NET
|
||||
url: https://www.nearlyfreespeech.net/
|
||||
img: nfsn.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://blog.nearlyfreespeech.net/2014/02/28/price-cuts-more-security-and-recovery-options/
|
||||
|
||||
- name: One.com
|
||||
url: https://www.one.com/
|
||||
twitter: onecom
|
||||
img: onecom.png
|
||||
tfa: No
|
||||
|
||||
- name: Online
|
||||
url: https://www.online.net/
|
||||
img: online.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
|
||||
- name: OVH
|
||||
url: http://www.ovh.com/
|
||||
img: ovh.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
|
||||
- name: PlanetHoster
|
||||
url: https://planethoster.net
|
||||
img: PlanetHoster.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://blog.planethoster.net/securite-espace-client-planethoster/
|
||||
|
||||
- name: Rackspace
|
||||
url: https://www.rackspace.com/
|
||||
img: rackspace.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://www.rackspace.com/knowledge_center/article/myrackspace-two-factor-authentication
|
||||
|
||||
- name: RamNode
|
||||
url: http://www.ramnode.com
|
||||
img: ramnode.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=70
|
||||
|
||||
- name: Scaleway
|
||||
url: https://www.scaleway.com/
|
||||
twitter: scaleway
|
||||
img: scaleway.png
|
||||
tfa: No
|
||||
|
||||
- name: Site5
|
||||
url: http://www.site5.com/
|
||||
twitter: site5
|
||||
img: site5.png
|
||||
tfa: No
|
||||
|
||||
- name: Softlayer
|
||||
url: https://www.softlayer.com
|
||||
img: softlayer.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://knowledgelayer.softlayer.com/procedure/configure-portal-account-one-time-password-access-manage
|
||||
|
||||
- name: SpeedIT Solutions
|
||||
url: https://www.speedit.org/
|
||||
img: speedit.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.speedit.org/faq/#accordian_item_937
|
||||
|
||||
- name: Squarespace
|
||||
url: https://squarespace.com/
|
||||
twitter: squarespace
|
||||
img: squarespace.png
|
||||
tfa: No
|
||||
|
||||
- name: UKFast
|
||||
url: http://www.ukfast.co.uk/
|
||||
img: ukfast.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
|
||||
- name: Vultr
|
||||
url: https://www.vultr.com/
|
||||
img: vultr.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.vultr.com/faq/#authy
|
||||
|
||||
- name: WebFaction
|
||||
url: https://www.webfaction.com
|
||||
img: webfaction.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://docs.webfaction.com/user-guide/control_panel.html#two-step-login
|
||||
|
||||
- name: Ukraine
|
||||
url: https://www.ukraine.com.ua/
|
||||
img: ukraine.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.ukraine.com.ua/faq/rekomendatsii-po-zashchite-ot-vzloma-uchetnoj-zapisi.html
|
||||
|
||||
- name: Easy
|
||||
url: https://easy.gr/
|
||||
img: easy.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://easy.gr/el/faq
|
136
data/applications/data/identity.yml
Normal file
|
@ -0,0 +1,136 @@
|
|||
websites:
|
||||
- name: Bitium
|
||||
url: https://www.bitium.com
|
||||
img: bitium.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://support.bitium.com/customer/portal/articles/1417358-enabling-two-factor-authentication-2fa-
|
||||
|
||||
- name: Centrify
|
||||
url: http://www.centrify.com
|
||||
img: centrify.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: http://www.centrify.com/products/identity-service/multi-factor-authentication/
|
||||
|
||||
- name: Clavid
|
||||
url: http://www.clavid.com/
|
||||
img: clavid.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
sms: Yes
|
||||
doc: http://www.clavid.com/index.php?option=com_content&view=article&id=85&Itemid=128&lang=en
|
||||
|
||||
- name: CloudEntr
|
||||
url: http://www.cloudentr.com/
|
||||
img: cloudentr.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.cloudentr.com/product/two-factor-authentication/
|
||||
|
||||
- name: Dashlane
|
||||
url: https://www.dashlane.com
|
||||
img: dashlane.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://support.dashlane.com/hc/en-us/articles/202625042-Protect-your-account-using-Two-Factor-Authentication#title3
|
||||
|
||||
- name: Keeper
|
||||
url: https://keepersecurity.com/
|
||||
img: keeper.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
phone: Yes
|
||||
sms: Yes
|
||||
doc: https://www.keepersecurity.com/security#twoFactor
|
||||
|
||||
- name: Keybase
|
||||
url: https://keybase.io
|
||||
twitter: KeybaseIO
|
||||
img: keybase.png
|
||||
tfa: No
|
||||
|
||||
- name: LastPass
|
||||
url: https://lastpass.com/
|
||||
img: lastpass.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://helpdesk.lastpass.com/security-options/multifactor-authentication-options/
|
||||
|
||||
- name: Monkey Box
|
||||
url: https://monkeybox.com
|
||||
img: monkeybox.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://support.monkeybox.com/knowledgebase/topics/71602-security
|
||||
|
||||
- name: MyDigipass.com
|
||||
url: https://mydigipass.com/
|
||||
img: mydigipass.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.mydigipass.com/en/fp/signup
|
||||
|
||||
- name: Okta
|
||||
url: https://www.okta.com/
|
||||
img: okta.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.okta.com/what-we-do/multifactor-authentication.html
|
||||
|
||||
- name: OneLogin
|
||||
url: http://www.onelogin.com
|
||||
img: onelogin.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www.onelogin.com/product/strong-authentication/two-factor-authentication/
|
||||
|
||||
- name: Persowna
|
||||
url: https://persowna.net
|
||||
img: persowna.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Passpack
|
||||
url: https://www.passpack.com/
|
||||
img: passpack.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
hardware: Yes
|
||||
doc: https://help.passpack.com/knowledgebase/idx.php/44/0/
|
||||
|
||||
- name: RoboForm
|
||||
url: http://www.roboform.com/
|
||||
img: roboform.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
sms: Yes
|
||||
doc: http://www.roboform.com/blog/stay-protected-with-mulitfactor-authentication
|
||||
|
||||
- name: SAASPASS
|
||||
url: https://www.saaspass.com
|
||||
img: saaspass.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
|
||||
- name: SecureSafe
|
||||
url: http://www.securesafe.com
|
||||
img: securesafe.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "2FA is only available on paid plans."
|
||||
doc: http://www.securesafe.com/en/faq/security.html
|
183
data/applications/data/investing.yml
Normal file
|
@ -0,0 +1,183 @@
|
|||
websites:
|
||||
- name: Acorns
|
||||
url: https://www.acorns.com/
|
||||
twitter: acorns
|
||||
img: acorns.png
|
||||
tfa: No
|
||||
|
||||
- name: Betterment
|
||||
url: https://www.betterment.com/
|
||||
twitter: betterment
|
||||
img: betterment.png
|
||||
tfa: No
|
||||
|
||||
- name: Charles Schwab
|
||||
url: https://www.schwab.com/
|
||||
img: charlesschwab.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
|
||||
- name: COL Financial
|
||||
url: https://www.colfinancial.com
|
||||
twitter: COLfinancial
|
||||
img: colfinancial.png
|
||||
tfa: no
|
||||
|
||||
- name: E*Trade
|
||||
url: https://www.etrade.com/
|
||||
img: etrade.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://us.etrade.com/e/t/jumppage/viewjumppage?PageName=secureid_enter#
|
||||
|
||||
- name: Fidelity Investments
|
||||
url: https://www.fidelity.com
|
||||
img: fidelity.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "Only available for some account types"
|
||||
doc: /notes/fidelity/
|
||||
|
||||
- name: HealthEquity
|
||||
url: http://www.healthequity.com/
|
||||
twitter: healthequity
|
||||
img: healthequity.png
|
||||
tfa: No
|
||||
|
||||
- name: Interactive Brokers
|
||||
url: https://www.interactivebrokers.com
|
||||
img: interactivebrokers.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: https://www.interactivebrokers.com/en/index.php?f=ibgStrength&p=log
|
||||
|
||||
- name: Loyal3
|
||||
url: https://www.loyal3.com/
|
||||
twitter: loyal3
|
||||
img: loyal3.png
|
||||
tfa: No
|
||||
|
||||
- name: Manulife
|
||||
url: http://www.manulife.ca
|
||||
twitter: Manulife
|
||||
img: manulife.png
|
||||
tfa: No
|
||||
|
||||
- name: Merrill Edge
|
||||
url: https://www.merrilledge.com/
|
||||
twitter: MerrillLynch
|
||||
img: merrilledge.png
|
||||
tfa: No
|
||||
|
||||
- name: MotifInvesting
|
||||
url: https://www.motifinvesting.com/
|
||||
img: motif.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://www.motifinvesting.com/security
|
||||
|
||||
- name: Nutmeg
|
||||
url: https://www.nutmeg.com/
|
||||
twitter: thenutmegteam
|
||||
img: nutmeg.png
|
||||
tfa: No
|
||||
|
||||
- name: OptionsHouse
|
||||
img: optionshouse.png
|
||||
url: https://www.optionshouse.com
|
||||
tfa: No
|
||||
twitter: OptionsHouse
|
||||
|
||||
- name: OptionsXpress
|
||||
url: http://www.optionsxpress.com/
|
||||
twitter: optionsXpress
|
||||
img: optionsxpress.png
|
||||
tfa: No
|
||||
|
||||
- name: Personal Capital
|
||||
url: https://www.personalcapital.com
|
||||
img: personalcapital.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
phone: Yes
|
||||
doc: https://www.personalcapital.com/safety-and-security
|
||||
|
||||
- name: RBC Direct Investing
|
||||
url: http://www.rbcdirectinvesting.com
|
||||
twitter: RBC
|
||||
img: rbc.png
|
||||
tfa: No
|
||||
|
||||
- name: Robinhood
|
||||
url: https://www.robinhood.com/
|
||||
img: robinhood.png
|
||||
tfa: No
|
||||
twitter: RobinhoodApp
|
||||
|
||||
- name: Scottrade
|
||||
url: https://www.scottrade.com/
|
||||
twitter: scottrade
|
||||
img: scottrade.png
|
||||
tfa: No
|
||||
|
||||
- name: Sharebuilder
|
||||
url: https://www.sharebuilder.com/
|
||||
twitter: sharebuilder
|
||||
img: sharebuilder.png
|
||||
tfa: No
|
||||
|
||||
- name: SigFig
|
||||
url: https://www.sigfig.com/
|
||||
twitter: sigfiginsights
|
||||
img: sigfig.png
|
||||
tfa: No
|
||||
|
||||
- name: TD Ameritrade
|
||||
url: https://www.tdameritrade.com
|
||||
twitter: TDAmeritrade
|
||||
img: tdameritrade.png
|
||||
tfa: No
|
||||
|
||||
- name: TD Waterhouse
|
||||
url: https://www.tdwaterhouse.ca
|
||||
twitter: TD_Canada
|
||||
img: tdameritrade.png
|
||||
tfa: No
|
||||
|
||||
- name: TradeKing
|
||||
url: https://www.tradeking.com
|
||||
twitter: tradeking
|
||||
img: tradeking.png
|
||||
tfa: No
|
||||
|
||||
- name: TIAA-CREF
|
||||
url: https://www.tiaa-cref.org
|
||||
twitter: TC_Talks
|
||||
img: tiaacref.png
|
||||
tfa: no
|
||||
|
||||
- name: Vanguard
|
||||
url: https://www.vanguard.com/
|
||||
img: vanguard.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://personal.vanguard.com/us/insights/article/Account-security-092015
|
||||
|
||||
- name: Wealthfront
|
||||
url: https://www.wealthfront.com/
|
||||
img: wealthfront.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://pages.wealthfront.com/faqs/how-do-i-enable-two-step-authentication-on-my-account/
|
||||
|
||||
- name: WiseBanyan
|
||||
url: https://www.wisebanyan.com/
|
||||
twitter: WiseBanyan
|
||||
img: wisebanyan.png
|
||||
tfa: No
|
306
data/applications/data/other.yml
Normal file
|
@ -0,0 +1,306 @@
|
|||
websites:
|
||||
- name: ActiveCollab
|
||||
url: https://www.activecollab.com/
|
||||
twitter: activecollab
|
||||
img: activecollab.png
|
||||
tfa: No
|
||||
|
||||
- name: Adobe ID
|
||||
url: https://accounts.adobe.com/
|
||||
twitter: adobecare
|
||||
img: adobe.png
|
||||
tfa: No
|
||||
|
||||
- name: Aerohive Networks
|
||||
url: https://www.aerohive.com/
|
||||
img: aerohive.png
|
||||
tfa: No
|
||||
twitter: aerohive
|
||||
|
||||
- name: Airbnb
|
||||
url: https://www.airbnb.com/
|
||||
img: airbnb.png
|
||||
tfa: No
|
||||
twitter: airbnb
|
||||
|
||||
- name: Asana
|
||||
url: https://www.asana.com
|
||||
img: asana.png
|
||||
tfa: No
|
||||
twitter: asana
|
||||
|
||||
- name: Automater
|
||||
url: http://automater.pl/en/
|
||||
img: automater.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.youtube.com/watch?v=5OLcvjVhhuI
|
||||
|
||||
- name: Azendoo
|
||||
url: https://app.azendoo.com
|
||||
img: azendoo.png
|
||||
tfa: No
|
||||
twitter: Azendoo
|
||||
|
||||
- name: BuiltWith
|
||||
url: https://builtwith.com
|
||||
img: builtwith.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://kb.builtwith.com/account-management/how-to-enable-2fa-on-builtwith/
|
||||
|
||||
- name: Cisco Meraki
|
||||
url: https://meraki.cisco.com/
|
||||
img: meraki.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://documentation.meraki.com/zGeneral_Administration/Managing_Dashboard_Access/Using_Google_Authenticator_for_Two-factor_Authentication_in_Dashboard
|
||||
|
||||
- name: Clio
|
||||
url: https://goclio.com
|
||||
img: clio.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
doc: https://support.goclio.com/hc/en-us/articles/203184210-Two-Factor-Authentication
|
||||
|
||||
- name: Cloudinary
|
||||
url: http://cloudinary.com
|
||||
img: cloudinary.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Cosmolex
|
||||
url: https://www.cosmolex.com/
|
||||
img: cosmolex.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://support.cosmolex.com/customer/portal/articles/2158628
|
||||
|
||||
- name: Delighted
|
||||
url: https://delightedapp.com/
|
||||
img: delighted.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
|
||||
- name: Delicious
|
||||
url: http://del.icio.us/
|
||||
img: delicious.png
|
||||
twitter: Delicious
|
||||
tfa: No
|
||||
|
||||
- name: DirectAdmin
|
||||
url: http://www.directadmin.com
|
||||
img: directadmin.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://directadmin.com/features.php?id=1754
|
||||
|
||||
- name: DoorDash
|
||||
url: https://www.doordash.com
|
||||
img: doordash.png
|
||||
twitter: doordash
|
||||
tfa: No
|
||||
|
||||
- name: Envato
|
||||
url: http://envato.com
|
||||
img: envato.png
|
||||
twitter: envato
|
||||
tfa: No
|
||||
|
||||
- name: Everlaw
|
||||
url: https://everlaw.com
|
||||
img: everlaw.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
email: Yes
|
||||
doc: https://everlaw.zendesk.com/hc/en-us/articles/206312165-Two-Factor-Authentication
|
||||
|
||||
- name: Formstack
|
||||
url: https://www.formstack.com/
|
||||
img: formstack.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.formstack.com/customer/portal/articles/1833071-two-factor-authentication
|
||||
|
||||
- name: fruux
|
||||
url: https://fruux.com
|
||||
img: fruux.png
|
||||
twitter: fruux
|
||||
tfa: No
|
||||
|
||||
- name: IFTTT
|
||||
url: https://ifttt.com
|
||||
img: ifttt.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://ifttt.com/settings#two-step-verification
|
||||
|
||||
- name: Kayako
|
||||
url: https://www.kayako.com
|
||||
img: kayako.png
|
||||
twitter: kayako
|
||||
tfa: No
|
||||
|
||||
- name: Kickstarter
|
||||
url: https://www.kickstarter.com
|
||||
img: kickstarter.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
doc: https://www.kickstarter.com/help/faq/backer+questions#faq_63004
|
||||
|
||||
- name: Mandrill
|
||||
url: https://mandrill.com/
|
||||
img: mandrill.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "SMS only available in the United States, the United Kingdom, Canada or some Caribbean islands."
|
||||
doc: http://help.mandrill.com/entries/57465557
|
||||
|
||||
- name: Mixpanel
|
||||
url: https://mixpanel.com/
|
||||
img: mixpanel.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Nest
|
||||
url: https://nest.com
|
||||
twitter: nestsupport
|
||||
img: nest.png
|
||||
tfa: No
|
||||
|
||||
- name: Office 365
|
||||
url: http://office.microsoft.com/en-us/business/
|
||||
img: office365.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://support.office.com/en-US/article/Set-up-multi-factor-authentication-for-Office-365-8f0454b2-f51a-4d9c-bcde-2c48e41621c6
|
||||
|
||||
- name: Onshape
|
||||
url: https://www.onshape.com/
|
||||
img: onshape.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://cad.onshape.com/help/Content/twofactorauthentication.htm
|
||||
|
||||
- name: Patreon
|
||||
url: https://www.patreon.com/
|
||||
img: patreon.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://patreon.zendesk.com/hc/en-us/articles/206538086-How-Do-I-Set-Up-2-Factor-Authorization
|
||||
|
||||
- name: PhraseApp
|
||||
url: https://phraseapp.com
|
||||
img: phraseapp.png
|
||||
software: Yes
|
||||
tfa: Yes
|
||||
doc: http://blog.phraseapp.com/post/97556438392/extra-secure-user-accounts-in-phraseapp-with
|
||||
|
||||
- name: Pinboard
|
||||
url: https://pinboard.in/
|
||||
twitter: Pinboard
|
||||
img: pinboard.png
|
||||
tfa: No
|
||||
|
||||
- name: Pocket
|
||||
url: https://www.getpocket.com
|
||||
twitter: Pocket
|
||||
img: pocket.png
|
||||
tfa: No
|
||||
|
||||
- name: Pozible
|
||||
url: https://www.pozible.com
|
||||
img: pozible.png
|
||||
twitter: pozible
|
||||
tfa: No
|
||||
|
||||
- name: Skatteverket
|
||||
url: https://www.skatteverket.se
|
||||
img: skatteverket.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
doc: http://www.skatteverket.se/privat/sjalvservice/allaetjanster/omelegitimation.4.18e1b10334ebe8bc80004811.html
|
||||
|
||||
- name: StartJOIN
|
||||
url: https://www.startjoin.com/
|
||||
img: startjoin.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
|
||||
- name: Todoist
|
||||
url: https://todoist.com
|
||||
twitter: todoist
|
||||
img: todoist.png
|
||||
tfa: No
|
||||
|
||||
- name: Total Connect Comfort
|
||||
url: https://www.mytotalconnectcomfort.com
|
||||
twitter: Honeywell_Home
|
||||
img: totalconnect.png
|
||||
tfa: No
|
||||
|
||||
- name: Trello
|
||||
url: https://trello.com
|
||||
img: trello.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://help.trello.com/article/993-enabling-two-factor-authentication-for-your-trello-account
|
||||
|
||||
- name: Usabilla
|
||||
url: https://www.usabilla.com
|
||||
img: usabilla.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://support.usabilla.com/customer/portal/articles/2098444-2-step-authentication
|
||||
|
||||
- name: US Internal Revenue Service
|
||||
url: http://www.irs.gov/Individuals/Get-Transcript
|
||||
twitter: IRSnews
|
||||
img: irs.png
|
||||
tfa: No
|
||||
|
||||
- name: US Social Security Administration
|
||||
url: http://www.ssa.gov
|
||||
img: usssa.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://secure.ssa.gov/RIL/HpsView.do#question3
|
||||
|
||||
- name: Webmin
|
||||
url: http://www.webmin.com/
|
||||
img: webmin.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://doxfer.webmin.com/Webmin/Enhanced_Authentication
|
||||
|
||||
- name: Wikipedia
|
||||
url: https://www.wikipedia.org/
|
||||
twitter: Wikipedia
|
||||
img: wikipedia.png
|
||||
tfa: No
|
||||
|
||||
- name: Wunderlist
|
||||
url: https://www.wunderlist.com
|
||||
twitter: Wunderlist
|
||||
img: wunderlist.png
|
||||
tfa: No
|
||||
|
||||
- name: Zendesk
|
||||
url: http://www.zendesk.com
|
||||
img: zendesk.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
doc: https://support.zendesk.com/hc/en-us/articles/203824246
|
138
data/applications/data/payments.yml
Normal file
|
@ -0,0 +1,138 @@
|
|||
websites:
|
||||
- name: Amazon Payments
|
||||
url: https://payments.amazon.com
|
||||
twitter: AmazonPayments
|
||||
img: amazon.png
|
||||
tfa: No
|
||||
|
||||
- name: Braintree
|
||||
img: braintree.png
|
||||
url: https://www.braintreepayments.com/
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://articles.braintreepayments.com/reference/security/two-factor-authentication
|
||||
|
||||
- name: Buycraft
|
||||
url: http://buycraft.net
|
||||
img: buycraft.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required."
|
||||
doc: http://server.buycraft.net/tfa
|
||||
|
||||
- name: Dwolla
|
||||
url: https://www.dwolla.com
|
||||
img: dwolla.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://help.dwolla.com/customer/portal/articles/2068158-two-factor-authentication-faq?b_id=5438
|
||||
|
||||
- name: Flattr
|
||||
img: flattr.png
|
||||
url: https://flattr.com
|
||||
twitter: flattr
|
||||
tfa: No
|
||||
|
||||
- name: GoCardless
|
||||
img: gocardless.png
|
||||
url: https://gocardless.com/
|
||||
twitter: GoCardless
|
||||
tfa: No
|
||||
|
||||
- name: Google Wallet
|
||||
url: http://www.google.se/wallet/
|
||||
img: googlewallet.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: Klarna
|
||||
url: https://www.klarna.com
|
||||
img: klarna.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "Software 2FA is only available for Swedish citizens with BankID."
|
||||
|
||||
- name: Litle & Co
|
||||
img: litleco.png
|
||||
twitter: litleco
|
||||
tfa: No
|
||||
url: https://www.litle.com
|
||||
|
||||
- name: Payoneer
|
||||
url: http://www.payoneer.com/
|
||||
twitter: Payoneer
|
||||
img: payoneer.png
|
||||
tfa: No
|
||||
|
||||
- name: PayPal
|
||||
url: https://www.paypal.com/
|
||||
img: paypal.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "2FA is only available in a few countries. Contact PayPal on twitter for an up to date list of available countries."
|
||||
doc: https://www.paypal.com/us/cgi-bin?cmd=xpt/Marketing_CommandDriven/securitycenter/PayPalSecurityKey-outside&bn_r=o
|
||||
|
||||
- name: Paysafecard
|
||||
url: https://www.paysafecard.com/
|
||||
img: paysafecard.png
|
||||
tfa: No
|
||||
twitter: paysafecard
|
||||
|
||||
- name: Privacy
|
||||
url: https://privacy.com/
|
||||
img: privacy.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://privacy.com/faq
|
||||
|
||||
- name: Skrill
|
||||
url: https://skrill.com/
|
||||
img: skrill.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
doc: https://help.skrill.com/pkb_sc_article_FAQ?id=kA0D0000000Ci3x&l=en_GB
|
||||
|
||||
- name: Stripe
|
||||
img: stripe.png
|
||||
url: https://www.stripe.com/
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.stripe.com/questions/how-do-i-enable-two-step-verification
|
||||
|
||||
- name: Square
|
||||
url: https://squareup.com
|
||||
img: squareup.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "Currently only US merchants, protects only Dashboard access"
|
||||
doc: https://squareup.com/help/us/en/article/5593-2-step-verification
|
||||
|
||||
- name: Venmo
|
||||
url: https://venmo.com
|
||||
img: venmo.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://help.venmo.com/hc/en-us/articles/217532397--Confirm-my-identity-on-sign-in-Why
|
||||
|
||||
- name: Yandex.Money
|
||||
url: https://money.yandex.ru
|
||||
img: yandexmoney.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://money.yandex.ru/doc.xml?id=524852
|
40
data/applications/data/remote.yml
Normal file
|
@ -0,0 +1,40 @@
|
|||
websites:
|
||||
- name: Amazon AWS WorkSpaces
|
||||
url: https://aws.amazon.com/workspaces/
|
||||
doc: https://aws.amazon.com/blogs/aws/multi-factor-auth-for-workspaces/
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
img: awsworkspaces.png
|
||||
|
||||
- name: join.me (w/ LogMeIn account)
|
||||
url: https://join.me/
|
||||
img: joinme.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://secure.logmein.com/welcome/webhelp/EN/Pro/LogMeIn/c_common_Security_TwoStep.html
|
||||
|
||||
- name: LogMeIn
|
||||
url: https://secure.logmein.com/
|
||||
img: logmein.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
email: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://secure.logmein.com/welcome/webhelp/EN/Pro/LogMeIn/c_Common_Account_Security.html
|
||||
|
||||
- name: O&O Syspectr
|
||||
url: https://www.syspectr.com
|
||||
img: oosyspectr.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.syspectr.com/en/faq/how-do-i-activate-deactivate-two-factor-authentication-for-my-account
|
||||
|
||||
- name: TeamViewer
|
||||
url: https://www.teamviewer.com
|
||||
img: teamviewer.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.teamviewer.com/en/help/402-How-do-I-activate-deactivate-two-factor-authentication-for-my-TeamViewer-account.aspx
|
127
data/applications/data/retail.yml
Normal file
|
@ -0,0 +1,127 @@
|
|||
websites:
|
||||
- name: Amazon
|
||||
url: https://www.amazon.com
|
||||
img: amazon.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "SMS or phone call required to enable 2FA."
|
||||
doc: https://www.amazon.com/gp/help/customer/display.html?nodeId=201596330
|
||||
|
||||
- name: Apple
|
||||
url: https://appleid.apple.com
|
||||
img: apple.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "See http://support.apple.com/kb/HT5593 for a list of supported SMS carriers."
|
||||
doc: http://support.apple.com/kb/ht5570
|
||||
|
||||
- name: Comixology
|
||||
url: https://www.comixology.com/
|
||||
img: comixology.png
|
||||
tfa: No
|
||||
twitter: comixology
|
||||
|
||||
- name: eBay
|
||||
url: http://ebay.com
|
||||
img: ebay.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "eBay only supports 2FA in some countries."
|
||||
doc: http://pages.ebay.com/securitykey/faq.html
|
||||
|
||||
- name: Etsy
|
||||
url: http://www.etsy.com/
|
||||
img: etsy.png
|
||||
sms: Yes
|
||||
tfa: Yes
|
||||
doc: http://www.etsy.com/help/article/3335
|
||||
|
||||
- name: Everlane
|
||||
url: http://www.everlane.com/
|
||||
twitter: everlane
|
||||
img: everlane.png
|
||||
tfa: No
|
||||
|
||||
- name: Gilt
|
||||
url: https://www.gilt.com
|
||||
twitter: gilt
|
||||
img: gilt.png
|
||||
tfa: No
|
||||
|
||||
- name: Hudson's Bay
|
||||
url: http://www.thebay.com
|
||||
img: bay.png
|
||||
twitter: hudsonsbay
|
||||
tfa: No
|
||||
|
||||
- name: Jet
|
||||
url: https://jet.com
|
||||
twitter: JetHeads
|
||||
img: jet.png
|
||||
tfa: No
|
||||
|
||||
- name: Lazada
|
||||
url: http://www.lazada.com/
|
||||
twitter: asklazadasg
|
||||
img: lazada.png
|
||||
tfa: No
|
||||
|
||||
- name: Macy's
|
||||
url: http://www.macys.com/
|
||||
twitter: macys
|
||||
img: macys.png
|
||||
tfa: No
|
||||
|
||||
- name: Massdrop
|
||||
url: https://www.massdrop.com
|
||||
twitter: Massdrop
|
||||
img: massdrop.png
|
||||
tfa: No
|
||||
|
||||
- name: Newegg
|
||||
url: http://www.newegg.com
|
||||
twitter: newegg
|
||||
img: newegg.png
|
||||
tfa: No
|
||||
|
||||
- name: Stack Social
|
||||
url: https://stacksocial.com
|
||||
twitter: StackSocial
|
||||
img: stacksocial.png
|
||||
tfa: No
|
||||
|
||||
- name: Target
|
||||
url: http://www.target.com/
|
||||
twitter: target
|
||||
img: target.png
|
||||
tfa: No
|
||||
|
||||
- name: Walgreens
|
||||
url: http://www.walgreens.com
|
||||
twitter: walgreens
|
||||
img: walgreens.png
|
||||
tfa: No
|
||||
|
||||
- name: Walmart
|
||||
url: http://www.walmart.com/
|
||||
twitter: walmartlabs
|
||||
img: walmart.png
|
||||
tfa: No
|
||||
|
||||
- name: Warby Parker
|
||||
url: https://www.warbyparker.com
|
||||
twitter: WarbyParkerHelp
|
||||
img: warbyparker.png
|
||||
tfa: No
|
||||
|
||||
- name: Zappos
|
||||
url: http://www.zappos.com/
|
||||
twitter: Zappos
|
||||
img: zappos.png
|
||||
tfa: No
|
149
data/applications/data/security.yml
Normal file
|
@ -0,0 +1,149 @@
|
|||
websites:
|
||||
- name: Air VPN
|
||||
url: https://airvpn.org/
|
||||
img: airvpn.png
|
||||
tfa: No
|
||||
twitter: airvpn
|
||||
|
||||
- name: Blur
|
||||
url: https://www.abine.com/
|
||||
img: blur.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://dnt.abine.com/#help/faq/faq-enabletwoFactor
|
||||
|
||||
- name: BolehVPN
|
||||
url: https://www.bolehvpn.net/
|
||||
img: bolehvpn.png
|
||||
tfa: No
|
||||
twitter: bolehvpn
|
||||
|
||||
- name: CAcert
|
||||
url: http://www.cacert.org/
|
||||
img: cacert.png
|
||||
tfa: Yes
|
||||
hardware: Yes
|
||||
exceptions:
|
||||
text: "Requires X.509-capable cryptotoken or smartcard."
|
||||
|
||||
- name: Cobalt
|
||||
url: https://www.cobalt.io/
|
||||
img: cobalt.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://cobalt.io/blog/new-feature-two-factor-auth/
|
||||
|
||||
- name: CyberGhost
|
||||
url: https://www.cyberghostvpn.com
|
||||
img: cyberghost.png
|
||||
twitter: cyberghost_EN
|
||||
tfa: No
|
||||
|
||||
- name: DigiCert
|
||||
url: http://www.digicert.com/
|
||||
img: digicert.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.digicert.com/two-factor-authentication.htm
|
||||
|
||||
- name: Dome9 Security
|
||||
url: http://www.dome9.com/
|
||||
img: dome9.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.dome9.com/overview/strong-2-factor-authentication
|
||||
|
||||
- name: Entrust
|
||||
img: entrust.png
|
||||
url: http://www.entrust.net
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.entrust.net/certificate-services/cms-authentication.htm
|
||||
|
||||
- name: FoxVPN
|
||||
url: https://www.foxvpn.net/
|
||||
img: foxvpn.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://www.foxvpn.net/help/enable-two-factor-authentication/
|
||||
|
||||
- name: GeoTrust
|
||||
url: http://www.geotrust.com/
|
||||
img: geotrust.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
|
||||
- name: GoGetSSL
|
||||
url: https://gogetssl.com/
|
||||
img: gogetssl.png
|
||||
tfa: No
|
||||
twitter: gogetssl
|
||||
|
||||
- name: Imperva Incapsula
|
||||
url: https://www.incapsula.com/
|
||||
img: incapsula.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://docs.incapsula.com/Content/Management%20Console%20and%20Settings/accountsettings.htm
|
||||
|
||||
- name: Norton
|
||||
url: http://us.norton.com
|
||||
img: norton.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
doc: https://login.norton.com/sso/embedded/learn2fa
|
||||
|
||||
- name: OpenDNS
|
||||
url: http://www.opendns.com/
|
||||
img: opendns.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "Only available for enterprise accounts."
|
||||
doc: http://engineering.opendns.com/2014/05/22/launching-two-step-verification/
|
||||
|
||||
- name: SSLTrust
|
||||
url: http://ssltrust.com.au/
|
||||
img: ssltrust.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://www.ssltrust.com.au/enable-two-factor-authentication.html
|
||||
|
||||
- name: ThreatMetrix
|
||||
url: https://www.threatmetrix.com/
|
||||
img: threatmetrix.png
|
||||
tfa: No
|
||||
twitter: ThreatMetrix
|
||||
|
||||
- name: ThreatSim
|
||||
url: http://login.threatsim.com
|
||||
img: threatsim.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://threatsim.com/features/
|
||||
|
||||
- name: Tinfoil Security
|
||||
url: https://www.tinfoilsecurity.com
|
||||
img: tinfoil.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: http://support.tinfoilsecurity.com/customer/portal/articles/1559364-do-you-support-two-factor-authentication-how-do-i-set-it-up-
|
||||
|
||||
- name: VPN Unlimited
|
||||
url: https://vpnunlimitedapp.com/
|
||||
img: vpnunlimited.png
|
||||
twitter: vpnunlimited
|
||||
tfa: No
|
||||
|
||||
- name: Webroot
|
||||
url: http://www.webroot.com
|
||||
img: webroot.png
|
||||
twitter: Webroot
|
||||
tfa: No
|
207
data/applications/data/social.yml
Normal file
|
@ -0,0 +1,207 @@
|
|||
websites:
|
||||
- name: about.me
|
||||
url: https://about.me
|
||||
twitter: aboutdotme
|
||||
img: aboutme.png
|
||||
tfa: No
|
||||
|
||||
- name: App.net
|
||||
url: https://join.app.net
|
||||
img: appnet.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://mml.desk.com/customer/portal/articles/1039728-how-do-i-set-up-two-factor-authentication-
|
||||
|
||||
- name: Bitly
|
||||
url: https://bitly.com/
|
||||
img: bitly.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required."
|
||||
doc: http://blog.bitly.com/post/90381427894/introducing-2-step-verification-for-all-users
|
||||
|
||||
- name: Buffer
|
||||
url: https://bufferapp.com
|
||||
img: bufferapp.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://blog.bufferapp.com/introducing-the-safest-social-media-publishing-on-the-web
|
||||
|
||||
- name: DeviantArt
|
||||
url: https://www.deviantart.com
|
||||
twitter: deviantart
|
||||
img: deviantart.png
|
||||
tfa: No
|
||||
|
||||
- name: Facebook
|
||||
url: https://facebook.com
|
||||
img: facebook.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "SMS required for 2FA. 1 account per phone number."
|
||||
doc: https://www.facebook.com/help/148233965247823
|
||||
|
||||
- name: Flipboard
|
||||
url: https://flipboard.com
|
||||
img: flipboard.png
|
||||
twitter: FlipboardCS
|
||||
tfa: No
|
||||
|
||||
- name: Foursquare
|
||||
url: https://foursquare.com
|
||||
twitter: foursquare
|
||||
img: foursquare.png
|
||||
tfa: No
|
||||
|
||||
- name: Goodreads
|
||||
url: https://www.goodreads.com
|
||||
twitter: goodreads
|
||||
img: goodreads.png
|
||||
tfa: No
|
||||
|
||||
- name: Google+
|
||||
url: https://plus.google.com
|
||||
img: g+.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: https://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: HootSuite
|
||||
url: https://hootsuite.com
|
||||
img: hootsuite.png
|
||||
tfa: Yes
|
||||
software: Yes
|
||||
doc: https://help.hootsuite.com/entries/22527304-Managing-Google-Authenticator
|
||||
|
||||
- name: Instagram
|
||||
url: https://www.instagram.com
|
||||
twitter: instagram
|
||||
img: instagram.png
|
||||
tfa: No
|
||||
|
||||
- name: LinkedIn
|
||||
url: https://linkedin.com
|
||||
img: linkedin.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: https://help.linkedin.com/app/answers/detail/a_id/531/related/1
|
||||
|
||||
- name: Medium
|
||||
url: https://medium.com
|
||||
img: medium.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
exceptions:
|
||||
text: "Medium doesn't use passwords, instead emails a link to user to login"
|
||||
|
||||
- name: Meetup
|
||||
url: https://www.meetup.com
|
||||
twitter: meetup_support
|
||||
img: meetup.png
|
||||
tfa: No
|
||||
|
||||
- name: Nextdoor
|
||||
url: https://nextdoor.com
|
||||
twitter: Nextdoor
|
||||
img: nextdoor.png
|
||||
tfa: No
|
||||
|
||||
- name: Pinterest
|
||||
url: https://pinterest.com
|
||||
twitter: Pinterest
|
||||
img: pinterest.png
|
||||
tfa: No
|
||||
|
||||
- name: Quora
|
||||
url: https://www.quora.com
|
||||
img: quora.png
|
||||
tfa: No
|
||||
twitter: quora
|
||||
|
||||
- name: Reddit
|
||||
url: https://www.reddit.com/
|
||||
twitter: reddit
|
||||
img: reddit.png
|
||||
tfa: No
|
||||
|
||||
- name: Snapchat
|
||||
url: https://www.snapchat.com/
|
||||
img: snapchat.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://support.snapchat.com/ca/login-verification
|
||||
|
||||
- name: Stack Exchange
|
||||
url: https://stackexchange.com/
|
||||
twitter: StackExchange
|
||||
img: stack_exchange.png
|
||||
tfa: No
|
||||
|
||||
- name: Tumblr
|
||||
url: https://www.tumblr.com/
|
||||
img: tumblr.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://www.tumblr.com/docs/en/two_factor_auth
|
||||
|
||||
- name: Twitter
|
||||
url: https://twitter.com
|
||||
img: twitter.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
exceptions:
|
||||
text: "SMS only available on select providers. SMS required for 2FA. 10 accounts per phone number, 1 phone number per account."
|
||||
software: Yes
|
||||
doc: https://support.twitter.com/articles/20170388
|
||||
|
||||
- name: VanillaForums.com
|
||||
url: https://vanillaforums.com
|
||||
img: vanilla.png
|
||||
tfa: No
|
||||
twitter: vanilla
|
||||
|
||||
- name: Viadeo
|
||||
url: http://www.viadeo.com
|
||||
img: viadeo.png
|
||||
tfa: No
|
||||
twitter: Viadeo
|
||||
|
||||
- name: VK
|
||||
url: https://vk.com
|
||||
img: vk.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://vk.com/page-59800369_47885415
|
||||
|
||||
- name: WordPress.com
|
||||
url: https://wordpress.com
|
||||
img: wordpress.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
exceptions:
|
||||
text: "SMS-capable phone required."
|
||||
doc: https://en.support.wordpress.com/security/two-step-authentication/
|
||||
|
||||
- name: XING
|
||||
url: https://www.xing.com
|
||||
img: xing.png
|
||||
tfa: No
|
||||
twitter: XING_com
|
||||
|
||||
- name: Zocle
|
||||
url: https://zocle.com/
|
||||
img: zocle.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
doc: http://university.zocle.com/2015/03/30/new-security-feature-two-step-verification/
|
180
data/applications/data/transport.yml
Normal file
|
@ -0,0 +1,180 @@
|
|||
websites:
|
||||
- name: American Airlines
|
||||
url: https://www.aa.com/
|
||||
twitter: AmericanAir
|
||||
img: aa.png
|
||||
tfa: No
|
||||
|
||||
- name: Air Canada
|
||||
url: https://www.aircanada.com/
|
||||
twitter: AirCanada
|
||||
img: aircanada.png
|
||||
tfa: No
|
||||
|
||||
- name: Alaska Airlines
|
||||
url: https://www.alaskaair.com
|
||||
twitter: AlaskaAir
|
||||
img: alaska.png
|
||||
tfa: No
|
||||
|
||||
- name: Air France
|
||||
url: http://www.airfrance.com
|
||||
twitter: airfrance
|
||||
img: airfrance.png
|
||||
tfa: No
|
||||
|
||||
- name: Amtrak
|
||||
url: https://www.amtrak.com/
|
||||
twitter: Amtrak
|
||||
img: amtrak.png
|
||||
tfa: No
|
||||
|
||||
- name: British Airways
|
||||
url: https://www.britishairways.com/
|
||||
twitter: British_Airways
|
||||
img: ba.png
|
||||
tfa: No
|
||||
|
||||
- name: Clipper
|
||||
url: https://www.clippercard.com
|
||||
twitter: BayAreaClipper
|
||||
img: clipper.png
|
||||
tfa: No
|
||||
|
||||
- name: Delta
|
||||
url: https://www.delta.com/
|
||||
twitter: Delta
|
||||
img: delta.png
|
||||
tfa: No
|
||||
|
||||
- name: Deutsche Bahn (DB)
|
||||
url: https://www.bahn.com
|
||||
twitter: DB_Bahn
|
||||
img: db.png
|
||||
tfa: No
|
||||
|
||||
- name: easyJet
|
||||
url: https://www.easyjet.com
|
||||
twitter: easyJet
|
||||
img: easyjet.png
|
||||
tfa: No
|
||||
|
||||
- name: Greyhound
|
||||
url: https://www.greyhound.com
|
||||
twitter: GHoundBusHelp
|
||||
img: greyhound.png
|
||||
tfa: No
|
||||
|
||||
- name: Frontier
|
||||
url: https://www.flyfrontier.com
|
||||
twitter: FrontierCare
|
||||
img: frontier.png
|
||||
tfa: No
|
||||
|
||||
- name: Hailo
|
||||
url: https://www.hailoapp.com/
|
||||
twitter: Hailo
|
||||
img: hailo.png
|
||||
tfa: No
|
||||
|
||||
- name: JetBlue
|
||||
url: https://www.jetblue.com
|
||||
twitter: JetBlue
|
||||
img: jetblue.png
|
||||
tfa: No
|
||||
|
||||
- name: Hawaiian Airlines
|
||||
url: https://www.hawaiianairlines.com
|
||||
twitter: HawaiianAir
|
||||
img: hawaiian.png
|
||||
tfa: No
|
||||
|
||||
- name: JetSmarter
|
||||
url: https://jetsmarter.com/
|
||||
twitter: JetSmarter
|
||||
img: jetsmarter.png
|
||||
tfa: No
|
||||
|
||||
- name: Lufthansa
|
||||
url: https://www.lufthansa.com
|
||||
twitter: lufthansa
|
||||
img: lufthansa.png
|
||||
tfa: No
|
||||
|
||||
- name: Lyft
|
||||
url: https://www.lyft.com/
|
||||
twitter: AskLyft
|
||||
img: lyft.png
|
||||
tfa: No
|
||||
|
||||
- name: Norwegian
|
||||
url: https://www.norwegian.com/
|
||||
twitter: Fly_Norwegian
|
||||
img: norwegian.png
|
||||
tfa: No
|
||||
|
||||
- name: NSB
|
||||
url: https://www.nsb.no
|
||||
img: nsb.png
|
||||
twitter: nsb_no
|
||||
tfa: No
|
||||
|
||||
- name: Ryanair
|
||||
url: https://www.ryanair.com
|
||||
twitter: Ryanair
|
||||
img: ryanair.png
|
||||
tfa: No
|
||||
|
||||
- name: Transport for London
|
||||
url: https://tfl.gov.uk/
|
||||
twitter: tflwaystopay
|
||||
img: tfl.png
|
||||
tfa: No
|
||||
|
||||
- name: SAS
|
||||
url: https://www.flysas.com/
|
||||
twitter: SAS
|
||||
img: sas.png
|
||||
tfa: No
|
||||
|
||||
- name: SJ
|
||||
url: https://www.sj.se/
|
||||
twitter: SJ_AB
|
||||
img: sj.png
|
||||
tfa: No
|
||||
|
||||
- name: SL
|
||||
url: http://sl.se/
|
||||
twitter: SL_AB
|
||||
img: sl.png
|
||||
tfa: No
|
||||
|
||||
- name: Southwest
|
||||
url: https://www.southwest.com/
|
||||
twitter: SouthwestAir
|
||||
img: southwest.png
|
||||
tfa: No
|
||||
|
||||
- name: Spirit
|
||||
url: https://www.spirit.com
|
||||
twitter: SpiritAirlines
|
||||
img: spirit.png
|
||||
tfa: No
|
||||
|
||||
- name: Uber
|
||||
url: https://www.uber.com/
|
||||
twitter: uber_support
|
||||
img: uber.png
|
||||
tfa: No
|
||||
|
||||
- name: United
|
||||
url: https://www.united.com/
|
||||
twitter: united
|
||||
img: united.png
|
||||
tfa: No
|
||||
|
||||
- name: WestJet
|
||||
url: https://www.westjet.com/
|
||||
twitter: WestJet
|
||||
img: westjet.png
|
||||
tfa: No
|
199
data/applications/data/utilities.yml
Normal file
|
@ -0,0 +1,199 @@
|
|||
websites:
|
||||
- name: American Electric Power
|
||||
url: https://www.aep.com
|
||||
twitter: AEPnews
|
||||
img: aep.png
|
||||
tfa: No
|
||||
|
||||
- name: AT&T
|
||||
url: https://www.att.com/
|
||||
img: att.png
|
||||
tfa: No
|
||||
twitter: ATTCustomerCare
|
||||
|
||||
- name: CallCentric
|
||||
url: https://www.callcentric.com/
|
||||
img: callcentric.png
|
||||
tfa: Yes
|
||||
email: Yes
|
||||
doc: http://www.callcentric.com/features/two_point_authentication
|
||||
|
||||
- name: CenturyLink
|
||||
url: https://www.centurylink.com/
|
||||
img: centurylink.png
|
||||
tfa: No
|
||||
twitter: CenturyLink
|
||||
|
||||
- name: Charter Communications
|
||||
url: http://www.charter.net/
|
||||
img: charter.png
|
||||
tfa: No
|
||||
twitter: CharterCom
|
||||
|
||||
- name: Comcast
|
||||
url: https://www.comcast.com/
|
||||
img: comcast.png
|
||||
tfa: No
|
||||
twitter: ComcastCares
|
||||
|
||||
- name: Con Edison
|
||||
url: https://www.coned.com
|
||||
img: coned.png
|
||||
twitter: ConEdison
|
||||
tfa: No
|
||||
|
||||
- name: Cox
|
||||
url: http://www.cox.com/
|
||||
img: cox.png
|
||||
tfa: No
|
||||
twitter: CoxHelp
|
||||
|
||||
- name: DIRECTV
|
||||
url: http://www.directv.com/
|
||||
img: directv.png
|
||||
tfa: No
|
||||
twitter: DIRECTVService
|
||||
|
||||
- name: DISH Network
|
||||
url: http://www.dish.com/
|
||||
img: dish.png
|
||||
tfa: No
|
||||
twitter: DISH_Answers
|
||||
|
||||
- name: Dominion
|
||||
url: https://www.dom.com
|
||||
img: dom.png
|
||||
twitter: DOMVAPower
|
||||
tfa: No
|
||||
|
||||
- name: EE
|
||||
url: http://www.ee.co.uk/
|
||||
img: ee.png
|
||||
tfa: No
|
||||
twitter: EE
|
||||
|
||||
- name: Florida Power and Light
|
||||
url: https://www.fpl.com
|
||||
img: fpl.png
|
||||
twitter: insideFPL
|
||||
tfa: No
|
||||
|
||||
- name: Google Fiber
|
||||
url: https://fiber.google.com
|
||||
img: googlefiber.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
phone: Yes
|
||||
software: Yes
|
||||
hardware: Yes
|
||||
doc: http://www.google.com/intl/en-US/landing/2step/features.html
|
||||
|
||||
- name: Halebop
|
||||
url: https://www.halebop.se
|
||||
img: halebop.png
|
||||
twitter: halebop_sverige
|
||||
tfa: No
|
||||
|
||||
- name: Pacific Gas and Electric Company PG&E
|
||||
url: http://www.pge.com/
|
||||
img: pge.png
|
||||
tfa: No
|
||||
twitter: pge4me
|
||||
|
||||
- name: Optus
|
||||
url: http://www.optus.com.au/
|
||||
img: optus.png
|
||||
tfa: No
|
||||
twitter: Optus
|
||||
|
||||
- name: RCN
|
||||
url: https://www.rcn.com/
|
||||
img: rcn.png
|
||||
tfa: No
|
||||
twitter: rcnconnects
|
||||
|
||||
- name: Rogers
|
||||
url: https://www.rogers.com
|
||||
twitter: RogersHelps
|
||||
img: rogers.png
|
||||
tfa: No
|
||||
|
||||
- name: San Diego Gas & Electric
|
||||
url: https://www.sdge.com
|
||||
twitter: SDGE
|
||||
img: sdge.png
|
||||
tfa: No
|
||||
|
||||
- name: Sonic
|
||||
url: https://www.sonic.net/
|
||||
img: sonic.png
|
||||
tfa: No
|
||||
twitter: sonic
|
||||
|
||||
- name: Southern California Edison
|
||||
url: https://www.sce.com
|
||||
img: sce.png
|
||||
twitter: SCE
|
||||
tfa: No
|
||||
|
||||
- name: Sprint
|
||||
url: http://www.sprint.com/
|
||||
img: sprint.png
|
||||
tfa: No
|
||||
twitter: sprint
|
||||
|
||||
- name: Three UK
|
||||
url: http://www.three.co.uk/
|
||||
img: three.png
|
||||
tfa: No
|
||||
twitter: ThreeUK
|
||||
|
||||
- name: Time Warner Cable
|
||||
url: https://www.timewarnercable.com/
|
||||
img: timewarner.png
|
||||
tfa: No
|
||||
twitter: TWC_Help
|
||||
|
||||
- name: Ting
|
||||
url: https://ting.com/
|
||||
img: ting.png
|
||||
tfa: Yes
|
||||
sms: Yes
|
||||
software: Yes
|
||||
doc: https://help.ting.com/hc/en-us/articles/209351258-Two-Factor-Authentication
|
||||
|
||||
- name: T-Mobile
|
||||
url: https://www.t-mobile.com/
|
||||
img: tmobile.png
|
||||
tfa: No
|
||||
twitter: TMobileHelp
|
||||
|
||||
- name: Verizon
|
||||
url: https://www.verizon.com/
|
||||
img: verizon.png
|
||||
tfa: No
|
||||
twitter: VerizonSupport
|
||||
|
||||
- name: Verizon Wireless
|
||||
url: https://www.verizonwireless.com/
|
||||
img: verizon.png
|
||||
tfa: No
|
||||
twitter: VZWSupport
|
||||
|
||||
- name: Vimla
|
||||
url: https://www.vimla.se
|
||||
img: vimla.png
|
||||
twitter: vimla_se
|
||||
tfa: No
|
||||
|
||||
- name: Virgin Mobile
|
||||
url: https://www.virgin.com/gateways/mobile
|
||||
img: virginmobile.png
|
||||
tfa: No
|
||||
twitter: virgin
|
||||
|
||||
- name: VoIP.ms
|
||||
url: https://voip.ms/
|
||||
img: voipms.png
|
||||
tfa: No
|
||||
twitter: voipms
|
15
data/applications/images/Makefile.am
Normal file
|
@ -0,0 +1,15 @@
|
|||
imagesdir = $(pkgdatadir)/applications/images
|
||||
images_DATA = amazon.png \
|
||||
dropbox.png \
|
||||
facebook.png \
|
||||
flickr.png \
|
||||
foursquare.png \
|
||||
gitter.png \
|
||||
google.png \
|
||||
microsoft.png \
|
||||
owncloud.png \
|
||||
pocket.png \
|
||||
reddit.png \
|
||||
slack.png \
|
||||
twitter.png \
|
||||
yahoo.png
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 790 B After Width: | Height: | Size: 790 B |
Before Width: | Height: | Size: 1,001 B After Width: | Height: | Size: 1,001 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 668 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 626 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -6,7 +6,7 @@
|
|||
<object class="GtkShortcutsSection">
|
||||
<property name="visible">True</property>
|
||||
<property name="section-name">shortcuts</property>
|
||||
<property name="max-height">10</property>
|
||||
<property name="max-height">5</property>
|
||||
<child>
|
||||
<object class="GtkShortcutsGroup">
|
||||
<property name="visible">True</property>
|
||||
|
@ -18,13 +18,6 @@
|
|||
<property name="accelerator"><Primary>F</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Copy</property>
|
||||
<property name="accelerator"><Primary>C</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
|
@ -32,25 +25,6 @@
|
|||
<property name="accelerator"><Primary>N</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Delete</property>
|
||||
<property name="accelerator">Delete</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsGroup">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Select next/previous account</property>
|
||||
<property name="accelerator">Up Down</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
|
@ -58,10 +32,64 @@
|
|||
<property name="accelerator"><Primary>S</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Lock the application</property>
|
||||
<property name="accelerator"><Primary>L</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsGroup">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Account list</property>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Copy</property>
|
||||
<property name="accelerator"><Primary>C</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Delete</property>
|
||||
<property name="accelerator">Delete</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Select next/previous account</property>
|
||||
<property name="accelerator">Up Down</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsGroup">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Add Account</property>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Scan QR code</property>
|
||||
<property name="accelerator"><Primary>S</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes" context="shortcut window">Close</property>
|
||||
<property name="accelerator">Escape</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-06-12 14:18+0200\n"
|
||||
"POT-Creation-Date: 2016-06-19 15:33+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -52,6 +52,11 @@ msgctxt "shortcut window"
|
|||
msgid "Selection mode"
|
||||
msgstr ""
|
||||
|
||||
#: data/shortcuts.ui:64
|
||||
msgctxt "shortcut window"
|
||||
msgid "Lock the application"
|
||||
msgstr ""
|
||||
|
||||
#: data/about.ui:14
|
||||
msgid "Simple application to generate two-factor authentication code"
|
||||
msgstr ""
|
||||
|
@ -63,68 +68,58 @@ msgid ""
|
|||
"later</a> for details."
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:142
|
||||
msgid "Do you really want to remove selected accounts?"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:165
|
||||
msgid "Enter your password"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:169
|
||||
msgid "Unlock"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:235
|
||||
#: TwoFactorAuth/widgets/headerbar.py:44
|
||||
msgid "Remove selected accounts"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:243 TwoFactorAuth/widgets/add_account.py:28
|
||||
#: TwoFactorAuth/widgets/add_account.py:43
|
||||
#: TwoFactorAuth/widgets/headerbar.py:51
|
||||
#: TwoFactorAuth/widgets/add_account.py:30
|
||||
#: TwoFactorAuth/widgets/add_account.py:45
|
||||
msgid "Add a new account"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:251
|
||||
#: TwoFactorAuth/widgets/headerbar.py:58
|
||||
msgid "Lock the Application"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:263
|
||||
#: TwoFactorAuth/widgets/headerbar.py:74
|
||||
msgid "Selection mode"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:272
|
||||
#: TwoFactorAuth/widgets/applications_list.py:88
|
||||
#: TwoFactorAuth/widgets/headerbar.py:81
|
||||
#: TwoFactorAuth/widgets/applications_list.py:89
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:277 TwoFactorAuth/widgets/add_account.py:48
|
||||
#: TwoFactorAuth/widgets/headerbar.py:85
|
||||
#: TwoFactorAuth/widgets/add_account.py:50
|
||||
#: TwoFactorAuth/widgets/change_password.py:143
|
||||
#: TwoFactorAuth/widgets/applications_list.py:80
|
||||
#: TwoFactorAuth/widgets/applications_list.py:81
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:296 TwoFactorAuth/widgets/settings.py:24
|
||||
#: TwoFactorAuth/application.py:65
|
||||
#: TwoFactorAuth/widgets/headerbar.py:97 TwoFactorAuth/widgets/settings.py:24
|
||||
#: TwoFactorAuth/application.py:60
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:438
|
||||
#: TwoFactorAuth/widgets/no_account_window.py:19
|
||||
msgid "There's no account at the moment"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/window.py:536
|
||||
msgid "Do you really want to remove this account?"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/add_account.py:53
|
||||
#: TwoFactorAuth/widgets/add_account.py:55
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/add_account.py:74
|
||||
#: TwoFactorAuth/widgets/add_account.py:64
|
||||
msgid "Scan a QR code"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/add_account.py:87
|
||||
msgid "Account Name"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/add_account.py:82
|
||||
#: TwoFactorAuth/widgets/add_account.py:95
|
||||
msgid "Secret Code"
|
||||
msgstr ""
|
||||
|
||||
|
@ -148,36 +143,48 @@ msgstr ""
|
|||
msgid "Repeat new password"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/applications_list.py:75
|
||||
#: TwoFactorAuth/widgets/applications_list.py:76
|
||||
msgid "Select an application"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/applications_list.py:91
|
||||
#: TwoFactorAuth/widgets/applications_list.py:92
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:153
|
||||
#: TwoFactorAuth/widgets/login_window.py:25
|
||||
msgid "Enter your password"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/login_window.py:28
|
||||
msgid "Unlock"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:164
|
||||
msgid "Copy the generated code"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:163
|
||||
#: TwoFactorAuth/widgets/account_row.py:174
|
||||
msgid "Remove the account"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:169
|
||||
#: TwoFactorAuth/widgets/account_row.py:225
|
||||
#: TwoFactorAuth/widgets/account_row.py:179
|
||||
#: TwoFactorAuth/widgets/account_row.py:267
|
||||
#, python-format
|
||||
msgid "Expires in %s seconds"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:175
|
||||
#: TwoFactorAuth/widgets/account_row.py:185
|
||||
msgid "Error during the generation of code"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:221
|
||||
#: TwoFactorAuth/widgets/account_row.py:230
|
||||
msgid "Couldn't generate the secret code"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/account_row.py:256
|
||||
msgid "Do you really want to remove this account?"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/widgets/settings.py:52
|
||||
msgid "Behavior"
|
||||
msgstr ""
|
||||
|
@ -198,18 +205,18 @@ msgstr ""
|
|||
msgid "Secret code generation time (s) :"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/application.py:29
|
||||
#: TwoFactorAuth/application.py:28
|
||||
msgid "TwoFactorAuth"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/application.py:73
|
||||
#: TwoFactorAuth/application.py:68
|
||||
msgid "Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/application.py:75
|
||||
#: TwoFactorAuth/application.py:70
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: TwoFactorAuth/application.py:76
|
||||
#: TwoFactorAuth/application.py:71
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
|