コード例 #1
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def get_private_key():
    pem_str = state.get("private_key")
    if pem_str:
        return crypto.load_privatekey(crypto.FILETYPE_PEM, pem_str)
    log.info("Generating new private key...")
    key = crypto.PKey()
    key.generate_key(crypto.TYPE_RSA, 2048)
    pem = crypto.dump_privatekey(crypto.FILETYPE_PEM, key)
    state.set("private_key", pem.decode("utf-8"))
    state.set("private_key_for_api_token", config.get("api_token"))
    return key
コード例 #2
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def register_device():
    permitted_ips = ['*']
    if config.get("single_ip"):
        permitted_ips = [network.get_public_ip()]
    log.info("Registering permitted IPs {}".format(",".join(permitted_ips)))
    method = "v1/device-server"
    data = {
        "description": "bunq2ynab on " + network.get_hostname(),
        "secret": config.get("api_token"),
        "permitted_ips": permitted_ips
    }
    post(method, data)
    state.set("device_registered", "True")
コード例 #3
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def call(action, method, data=None):
    result = call_requests(action, method, data)
    if isinstance(result, str):
        return result
    if ("Error" in result and result["Error"][0]["error_description"]
            == "Insufficient authorisation."):
        state.set("session_token", "")
        result = call_requests(action, method, data)
        if isinstance(result, str):
            return result
    if "Error" in result:
        raise Exception(result["Error"][0]["error_description"])
    global older_url
    older_url = result.get("Pagination", {}).get("older_url")
    return result["Response"]
コード例 #4
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def get_installation_token():
    token = state.get("installation_token")
    if token:
        return token
    log.info("Requesting installation token...")
    public_key = get_public_key()
    pem = crypto.dump_publickey(crypto.FILETYPE_PEM, public_key)
    method = "v1/installation"
    data = {"client_public_key": pem.decode("utf-8")}
    reply = post(method, data)
    token = None
    for row in reply:
        if "Token" in row:
            token = row["Token"]["token"]
    if not token:
        raise Exception("No token returned by installation")
    state.set("installation_token", token)
コード例 #5
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def get_session_token():
    check_stale_api_token()
    token = state.get("session_token")
    if token:
        return token
    if not state.get("installation_token"):
        get_installation_token()
    if not state.get("device_registered"):
        register_device()
    log.info("Requesting session token...")
    method = "v1/session-server"
    data = {"secret": config.get("api_token")}
    reply = post(method, data)
    session_token = None
    for row in reply:
        if "Token" in row:
            session_token = row["Token"]["token"]
    if not session_token:
        raise Exception("No token returned by session-server")
    state.set("session_token", session_token)
    return session_token
コード例 #6
0
ファイル: bunq.py プロジェクト: wesselt/bunq2ynab
def clear_state():
    state.set("private_key", "")
    state.set("private_key_for_api_token", "")
    state.set("installation_token", "")
    state.set("device_registered", "")
    state.set("session_token", "")