/* Set account attribute value
 * (Return 0 if attribute is not set, and 1 if set)
 */
extern int __account_set_attr(lua_State* L)
{
    const char *username, *attrkey;
    int attrtype;
    std::map<std::string, std::string> o_account;
    int result = 0;

    try
    {
        lua::stack st(L);
        // get args
        st.at(1, username);
        st.at(2, attrkey);
        st.at(3, attrtype);

        if (t_account *account = accountlist_find_account(username))
        {
            switch ((t_attr_type)attrtype)
            {
            case attr_type_str:
                const char * strvalue;
                st.at(4, strvalue);

                if (account_set_strattr(account, attrkey, strvalue) >= 0)
                    result = 1;
                break;
            case attr_type_num:
                int numvalue;
                st.at(4, numvalue);

                if (account_set_numattr(account, attrkey, numvalue) >= 0)
                    result = 1;
                break;
            case attr_type_bool:
                bool boolvalue;
                st.at(4, boolvalue);

                if (account_set_boolattr(account, attrkey, boolvalue ? 1 : 0) >= 0)
                    result = 1;
                break;
            case attr_type_raw:
                const char * rawvalue;
                int length;
                st.at(4, rawvalue);
                st.at(5, length);

                if (account_set_rawattr(account, attrkey, rawvalue, length) >= 0)
                    result = 1;
                break;
            }
        }
        st.push(result);
    }
    catch (const std::exception& e)
    {
        eventlog(eventlog_level_error, __FUNCTION__, e.what());
    }
    catch (...)
    {
        eventlog(eventlog_level_error, __FUNCTION__, "lua exception\n");
    }
    return 1;
}
Exemple #2
0
extern int account_set_auth_lock(t_account * account, int val)
{
    return account_set_boolattr(account,"BNET\\auth\\lock",val);
}