extern char const * account_get_ladder_last_time(t_account * account, char const * clienttag, t_ladder_id id) { char key[256]; if (!clienttag || strlen(clienttag)!=4) { eventlog(eventlog_level_error,"account_get_ladder_last_time","got bad clienttag"); return NULL; } sprintf(key,"Record\\%s\\%d\\last game",clienttag,(int)id); return account_get_strattr(account,key); }
static int get_mail_quota(t_account * user) { int quota; char const * user_quota; user_quota=account_get_strattr(user,"BNET\\auth\\mailquota"); if (user_quota==NULL) quota=prefs_get_mail_quota(); else { quota=atoi(user_quota); if (quota<1) quota=1; if (quota>MAX_MAIL_QUOTA) quota=MAX_MAIL_QUOTA; } return quota; }
extern char const * account_get_friends(t_account * account) { char const * temp; if (!account) { eventlog(eventlog_level_error,"account_get_friends","got NULL account"); return NULL; } if (!(temp = account_get_strattr(account,"BNET\\acct\\friends"))) return ""; return temp; }
extern char const * account_get_desc(t_account * account) { char const * temp; if (!account) { eventlog(eventlog_level_error,"account_get_desc","got NULL account"); return NULL; } if (!(temp = account_get_strattr(account,"profile\\description"))) return ""; return temp; }
/* Get account attribute value */ extern int __account_get_attr(lua_State* L) { const char *username, *attrkey; int attrtype; std::string attrvalue; std::map<std::string, std::string> o_account; 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: attrvalue = account_get_strattr(account, attrkey); break; case attr_type_num: attrvalue = std_to_string(account_get_numattr(account, attrkey)); break; case attr_type_bool: attrvalue = account_get_boolattr(account, attrkey) == 0 ? "false" : "true"; break; case attr_type_raw: attrvalue = account_get_rawattr(account, attrkey); break; } } st.push(attrvalue); } catch (const std::exception& e) { eventlog(eventlog_level_error, __FUNCTION__, e.what()); } catch (...) { eventlog(eventlog_level_error, __FUNCTION__, "lua exception\n"); } return 1; }
/* Get account attribute value */ extern int __account_get_attr(lua_State* L) { const char *username, *attrkey; int attrtype; 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: if (const char * val = account_get_strattr(account, attrkey)) st.push(val); break; case attr_type_num: st.push(account_get_numattr(account, attrkey)); break; case attr_type_bool: st.push(account_get_boolattr(account, attrkey)); break; case attr_type_raw: if (const char * val = account_get_rawattr(account, attrkey)) st.push(val); break; } } } catch (const std::exception& e) { eventlog(eventlog_level_error, __FUNCTION__, e.what()); } catch (...) { eventlog(eventlog_level_error, __FUNCTION__, "lua exception\n"); } return 1; }
extern char const * account_get_name(t_account * account) #endif { char const * temp; if (!account) { #ifdef DEBUG_ACCOUNT eventlog(eventlog_level_error,"account_get_name","got NULL account (from %s:%u)",fn,ln); #else eventlog(eventlog_level_error,"account_get_name","got NULL account"); #endif return NULL; /* FIXME: places assume this can't fail */ } if (!(temp = account_get_strattr(account,"BNET\\acct\\username"))) eventlog(eventlog_level_error,"account_get_name","account has no username"); return temp; }
extern int account_get_boolattr(t_account * account, char const * key) #endif { char const * temp; if (!account) { #ifdef DEBUG_ACCOUNT eventlog(eventlog_level_error,"account_get_boolattr","got NULL account (from %s:%u)",fn,ln); #else eventlog(eventlog_level_error,"account_get_boolattr","got NULL account"); #endif return -1; } if (!key) { #ifdef DEBUG_ACCOUNT eventlog(eventlog_level_error,"account_get_boolattr","got NULL key (from %s:%u)",fn,ln); #else eventlog(eventlog_level_error,"account_get_boolattr","got NULL key"); #endif return -1; } if (!(temp = account_get_strattr(account,key))) return -1; switch (str_get_bool(temp)) { case 1: account_unget_strattr(temp); return 1; case 0: account_unget_strattr(temp); return 0; default: account_unget_strattr(temp); eventlog(eventlog_level_error,"account_get_boolattr","bad boolean value \"%s\" for key \"%s\"",temp,key); return -1; } }
extern unsigned int account_get_numattr(t_account * account, char const * key) #endif { char const * temp; unsigned int val; if (!account) { #ifdef DEBUG_ACCOUNT eventlog(eventlog_level_error,"account_get_numattr","got NULL account (from %s:%u)",fn,ln); #else eventlog(eventlog_level_error,"account_get_numattr","got NULL account"); #endif return 0; } if (!key) { #ifdef DEBUG_ACCOUNT eventlog(eventlog_level_error,"account_get_numattr","got NULL key (from %s:%u)",fn,ln); #else eventlog(eventlog_level_error,"account_get_numattr","got NULL key"); #endif return 0; } if (!(temp = account_get_strattr(account,key))) return 0; if (str_to_uint(temp,&val)<0) { eventlog(eventlog_level_error,"account_get_numattr","not a numeric string \"%s\" for key \"%s\"",temp,key); account_unget_strattr(temp); return 0; } account_unget_strattr(temp); return val; }
extern char const * account_get_ll_cdkey(t_account * account) { return account_get_strattr(account,"BNET\\acct\\lastlogin_cdkey"); }
extern char const * account_get_ll_owner(t_account * account) { return account_get_strattr(account,"BNET\\acct\\lastlogin_owner"); }
extern char const * account_get_fl_user(t_account * account) { return account_get_strattr(account,"BNET\\acct\\firstlogin_user"); }
extern char const * account_get_fl_clienttag(t_account * account) { return account_get_strattr(account,"BNET\\acct\\firstlogin_clienttag"); }
extern char const * account_get_pass(t_account * account) { return account_get_strattr(account,"BNET\\acct\\passhash1"); }