static void session_authenticate(SoupSession* session, SoupMessage* msg, SoupAuth* auth, gboolean retrying, gpointer user_data)
{
    SoupURI* uri;
    WebKitAuthData* authData;
    SoupSessionFeature* manager = (SoupSessionFeature*)user_data;
#ifdef SOUP_TYPE_PASSWORD_MANAGER
    GSList* users;
#endif
    const char *login, *password;

    soup_session_pause_message(session, msg);
    /* We need to make sure the message sticks around when pausing it */
    g_object_ref(msg);

    uri = soup_message_get_uri(msg);
    authData = g_slice_new0(WebKitAuthData);
    authData->msg = msg;
    authData->auth = auth;
    authData->session = session;
    authData->manager = manager;

    login = password = NULL;

#ifdef SOUP_TYPE_PASSWORD_MANAGER
    users = soup_auth_get_saved_users(auth);
    if (users) {
        login = users->data;
        password = soup_auth_get_saved_password(auth, login);
        g_slist_free(users);
    }
#endif

    show_auth_dialog(authData, login, password);
}
static bool getSavedLogin(SoupAuth* auth, const char** username, const char** password)
{
#ifdef SOUP_TYPE_PASSWORD_MANAGER
    GSList* users = soup_auth_get_saved_users(auth);
    if (!users)
        return false;

    *username = static_cast<char*>(users->data);
    *password = soup_auth_get_saved_password(auth, *username);
    g_slist_free(users);

    return *username && *password;
#else
    return false;
#endif
}