Exemplo n.º 1
0
def send(secret, expires, outmode, outformat):
    """Submit secret to server. Optionally pipe secret via stdin.

    """
    backend = os.environ.get("YOPASS_BACKEND_URL")
    if backend is None:
        click.echo("""YOPASS_BACKEND_URL is not defined, run export
            YOPASS_BACKEND_URL=<your backend> first""")
        exit(1)
    frontend = os.environ.get("YOPASS_FRONTEND_URL")
    if frontend is None and outmode != "id":
        click.echo("""YOPASS_FRONTEND_URL is not defined, run export
            YOPASS_FRONTEND_URL=<your frontend> first""")
        exit(1)
    try:
        secret = secret.read()
    except AttributeError:
        pass

    passphrase = generate_passphrase(15)
    cypherdict = SJCL().encrypt(secret.encode(), passphrase)
    converted_cypherdict = {}

    for key, value in cypherdict.items():
        try:
            converted_cypherdict[key] = value.decode("utf-8")
        except AttributeError:
            converted_cypherdict[key] = value

    expiry_dict = {"1h": 3600, "1d": 86400, "1w": 604800}
    payload = {
        "expiration": expiry_dict[expires],
        "secret": json.dumps(converted_cypherdict),
    }
    response = {}
    try:
        response = requests.post("{:s}/secret".format(backend),
                                 data=json.dumps(payload))
    except requests.exceptions.HTTPError as errh:
        click.echo("HTTP Error: {:s}".format(errh))
        exit(1)
    except requests.exceptions.ConnectionError as errc:
        click.echo("Error Connecting: {:s}".format(errc))
        exit(1)
    except requests.exceptions.Timeout as errt:
        click.echo("Timeout: {:s}".format(errt))
        exit(1)
    except requests.exceptions.RequestException as err:
        click.echo("Request Exception: {:s}".format(err))
        exit(1)

    secret_id = json.loads(response.text)["message"]

    one_click_link = "{:s}/#/s/{:s}/{:s}".format(frontend, secret_id,
                                                 passphrase)
    short_link = "{:s}/#/s/{:s}".format(frontend, secret_id)

    if outmode == "verbose":
        if outformat == "json":
            click.echo(
                json.dumps({
                    "one-click-link": one_click_link,
                    "short-link": short_link,
                    "decryption-key": passphrase,
                }))
        else:
            click.echo(one_click_link)
            click.echo(short_link)
            click.echo(passphrase)
    elif outmode == "short-link":
        if outformat == "json":
            click.echo(
                json.dumps({
                    "short-link": short_link,
                    "decryption-key": passphrase
                }))
        else:
            click.echo(short_link)
            click.echo(passphrase)
    elif outmode == "id":
        if outformat == "json":
            click.echo(
                json.dumps({
                    "id": secret_id,
                    "decryption-key": passphrase
                }))
        else:
            click.echo(secret_id)
            click.echo(passphrase)
    elif outmode == "one-click-link":
        if outformat == "json":
            click.echo(json.dumps({"one-click-link": one_click_link}))
        else:
            click.echo(one_click_link)
Exemplo n.º 2
0
chrome_dir = sys.argv[1]
ext_id = sys.argv[2]
cryptpw = sys.argv[3]

settings = data['settings']
accounts = settings['accounts']

encrypted_accounts = SJCL().encrypt(bytes(json.dumps(accounts),
                                          encoding='utf-8'),
                                    cryptpw,
                                    count=1000,
                                    dkLen=32)

json_accounts = json.dumps({
    x: str(y, encoding='utf-8') if isinstance(y, bytes) else y
    for x, y in encrypted_accounts.items()
})
settings['accounts'] = str(base64.b64encode(
    bytes(json_accounts, encoding='utf-8')),
                           encoding='utf-8')

data['settings'] = json.dumps(settings)
data['activeTab'] = '"search"'

db_path = path.join(chrome_dir, "Default/Local Extension Settings", ext_id)
db = plyvel.DB(db_path, create_if_missing=True)
for k, v in data.items():
    db.put(bytes(k, encoding='utf-8'), bytes(v, encoding='utf-8'))
db.close()