Remove login_2fa command - toot - Unnamed repository; edit this file 'description' to name the repository.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 609c432e682012056f713ad2bf33f429efc9dafa
 (DIR) parent b0e556a07b9ee896ca5ef56fe5248de34163dafb
 (HTM) Author: Ivan Habunek <ivan@habunek.com>
       Date:   Fri, 29 Dec 2017 11:52:00 +0100
       
       Remove login_2fa command
       
       It was a hacky way to log with 2fa without using a browser, but did not
       work on half the instances. login_browser now exists and should be used
       instead.
       
       Diffstat:
         CHANGELOG.md                        |       1 +
         README.rst                          |       5 ++---
         toot/commands.py                    |      67 -------------------------------
         toot/console.py                     |       8 +-------
       
       4 files changed, 4 insertions(+), 77 deletions(-)
       ---
 (DIR) diff --git a/CHANGELOG.md b/CHANGELOG.md
       @@ -5,6 +5,7 @@ Changelog
        
        * **Dropped support for Python 2** because it's a pain to support and was
          causing bugs with handling unicode.
       +* Remove hacky `login_2fa` command, use `login_browser` instead
        
        **0.15.1 (2017-12-12)**
        
 (DIR) diff --git a/README.rst b/README.rst
       @@ -79,9 +79,8 @@ Running ``toot <command> -h`` shows the documentation for the given command.
            toot - a Mastodon CLI client
        
            Authentication:
       -      toot login           Log into a Mastodon instance, does NOT support two factor authentication
       +      toot login           Log in from the console, does NOT support two factor authentication
              toot login_browser   Log in using your browser, supports regular and two factor authentication
       -      toot login_2fa       Log in using two factor authentication in the console (hacky, experimental)
              toot logout          Log out, delete stored access keys
              toot auth            Show stored credentials
        
       @@ -90,7 +89,7 @@ Running ``toot <command> -h`` shows the documentation for the given command.
              toot whois           Display account details
              toot search          Search for users or hashtags
              toot timeline        Show recent items in your public timeline
       -      toot curses          An experimental timeline app.
       +      toot curses          An experimental timeline app (doesn't work on Windows)
        
            Post:
              toot post            Post a status text to your timeline
 (DIR) diff --git a/toot/commands.py b/toot/commands.py
       @@ -1,7 +1,5 @@
        # -*- coding: utf-8 -*-
        
       -import json
       -import requests
        import webbrowser
        
        from bs4 import BeautifulSoup
       @@ -72,57 +70,6 @@ def login_interactive(app, email=None):
            return create_user(app, email, response['access_token'])
        
        
       -def two_factor_login_interactive(app):
       -    """Hacky implementation of two factor authentication"""
       -
       -    print_out("Log in to {}".format(app.instance))
       -    email = input('Email: ')
       -    password = getpass('Password: ')
       -
       -    sign_in_url = app.base_url + '/auth/sign_in'
       -
       -    session = requests.Session()
       -
       -    # Fetch sign in form
       -    response = session.get(sign_in_url)
       -    response.raise_for_status()
       -
       -    soup = BeautifulSoup(response.content, "html.parser")
       -    form = soup.find('form')
       -    inputs = form.find_all('input')
       -
       -    data = {i.attrs.get('name'): i.attrs.get('value') for i in inputs}
       -    data['user[email]'] = email
       -    data['user[password]'] = password
       -
       -    # Submit form, get 2FA entry form
       -    response = session.post(sign_in_url, data)
       -    response.raise_for_status()
       -
       -    soup = BeautifulSoup(response.content, "html.parser")
       -    form = soup.find('form')
       -    inputs = form.find_all('input')
       -
       -    data = {i.attrs.get('name'): i.attrs.get('value') for i in inputs}
       -    data['user[otp_attempt]'] = input("2FA Token: ")
       -
       -    # Submit token
       -    response = session.post(sign_in_url, data)
       -    response.raise_for_status()
       -
       -    # Extract access token from response
       -    soup = BeautifulSoup(response.content, "html.parser")
       -    initial_state = soup.find('script', id='initial-state')
       -
       -    if not initial_state:
       -        raise ConsoleError("Login failed: Invalid 2FA token?")
       -
       -    data = json.loads(initial_state.get_text())
       -    access_token = data['meta']['access_token']
       -
       -    return create_user(app, email, access_token)
       -
       -
        def _print_timeline(item):
            def wrap_text(text, width):
                wrapper = TextWrapper(width=width, break_long_words=False, break_on_hyphens=False)
       @@ -209,20 +156,6 @@ def login(app, user, args):
            print_out("<green>✓ Successfully logged in.</green>")
        
        
       -def login_2fa(app, user, args):
       -    print_out()
       -    print_out("<yellow>Two factor authentication is experimental.</yellow>")
       -    print_out("<yellow>If you have problems logging in, please open an issue:</yellow>")
       -    print_out("<yellow>https://github.com/ihabunek/toot/issues</yellow>")
       -    print_out()
       -
       -    app = create_app_interactive()
       -    two_factor_login_interactive(app)
       -
       -    print_out()
       -    print_out("<green>✓ Successfully logged in.</green>")
       -
       -
        BROWSER_LOGIN_EXPLANATION = """
        This authentication method requires you to log into your Mastodon instance
        in your browser, where you will be asked to authorize <yellow>toot</yellow> to access
 (DIR) diff --git a/toot/console.py b/toot/console.py
       @@ -54,7 +54,7 @@ email_arg = (["-e", "--email"], {
        AUTH_COMMANDS = [
            Command(
                name="login",
       -        description="Log into a Mastodon instance, does NOT support two factor authentication",
       +        description="Log in from the console, does NOT support two factor authentication",
                arguments=[instance_arg, email_arg],
                require_auth=False,
            ),
       @@ -65,12 +65,6 @@ AUTH_COMMANDS = [
                require_auth=False,
            ),
            Command(
       -        name="login_2fa",
       -        description="Log in using two factor authentication in the console (hacky, experimental)",
       -        arguments=[],
       -        require_auth=False,
       -    ),
       -    Command(
                name="logout",
                description="Log out, delete stored access keys",
                arguments=[],