Advertisement
Guest User

Untitled

a guest
May 10th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.29 KB | None | 0 0
  1. Index: src/ascent-logonserver/AccountCache.cpp
  2. ===================================================================
  3. --- src/ascent-logonserver/AccountCache.cpp (revision 4331)
  4. +++ src/ascent-logonserver/AccountCache.cpp (working copy)
  5. @@ -217,6 +217,34 @@
  6. }
  7. }
  8.  
  9. +void AccountMgr::CreateAccount(uint32 id, const char *username, const char *password, uint8 *EncryptedPassword, const char *GMFlags, uint32 Banned, const char *email, uint8 AccountFlags, const char *forceLanguage, uint32 Muted)
  10. +{
  11. + Account *acct = new Account;
  12. + acct->AccountId = id;
  13. + acct->AccountFlags = AccountFlags;
  14. + acct->Banned = Banned;
  15. + acct->SetGMFlags(GMFlags);
  16. + if(strcmp(forceLanguage, "enUS"))
  17. + {
  18. + // non-standard language forced
  19. + memcpy(acct->Locale, forceLanguage, 4);
  20. + acct->forcedLocale = true;
  21. + }
  22. + else
  23. + {
  24. + acct->Locale[0] = 'e';
  25. + acct->Locale[1] = 'n';
  26. + acct->Locale[2] = 'U';
  27. + acct->Locale[3] = 'S';
  28. + acct->forcedLocale = false;
  29. + }
  30. + acct->Muted = Muted;
  31. + memcpy(acct->SrpHash, EncryptedPassword, 20);
  32. +
  33. + AccountDatabase[username] = acct;
  34. + acct->UsernamePtr = (std::string*)&AccountDatabase.find(username)->first;
  35. +}
  36. +
  37. void AccountMgr::ReloadAccountsCallback()
  38. {
  39. ReloadAccounts(true);
  40. Index: src/ascent-logonserver/AccountCache.h
  41. ===================================================================
  42. --- src/ascent-logonserver/AccountCache.h (revision 4331)
  43. +++ src/ascent-logonserver/AccountCache.h (working copy)
  44. @@ -147,6 +147,7 @@
  45. return pAccount;
  46. }
  47.  
  48. + void CreateAccount(uint32 id, const char * username, const char * password, uint8 * EncryptedPassword, const char * GMFlags, uint32 Banned, const char * email, uint8 AccountFlags, const char * forceLanguage, uint32 Muted);
  49. void UpdateAccount(Account * acct, Field * field);
  50. void ReloadAccounts(bool silent);
  51. void ReloadAccountsCallback();
  52. Index: src/ascent-logonserver/LogonCommServer.cpp
  53. ===================================================================
  54. --- src/ascent-logonserver/LogonCommServer.cpp (revision 4331)
  55. +++ src/ascent-logonserver/LogonCommServer.cpp (working copy)
  56. @@ -487,9 +487,127 @@
  57. recvData >> ip;
  58.  
  59. if( sIPBanner.Remove( ip.c_str() ) )
  60. - sLogonSQL->Execute("DELETE FROM ipbans WHERE ip = \"%s\")", sLogonSQL->EscapeString(ip).c_str());
  61. + sLogonSQL->Execute("DELETE FROM ipbans WHERE ip = \"%s\"", sLogonSQL->EscapeString(ip).c_str());
  62.  
  63. }break;
  64.  
  65. + case 6: // set password
  66. + {
  67. + string account;
  68. + string password;
  69. + recvData >> account >> password;
  70. +
  71. + // remember we expect this in uppercase
  72. + ASCENT_TOUPPER(account);
  73. +
  74. + Account *pAccount = sAccountMgr.GetAccount(account);
  75. + if (pAccount == NULL)
  76. + return;
  77. +
  78. + /* Hash the password */
  79. + Sha1Hash hash;
  80. + string password2 = password;
  81. + ASCENT_TOUPPER(password2);
  82. + hash.UpdateData(account + ":" + password2);
  83. + hash.Finalize();
  84. + uint8 *EncryptedPassword = hash.GetDigest();
  85. +
  86. + memcpy(pAccount->SrpHash, EncryptedPassword, 20);
  87. +
  88. + // update it in the sql (duh)
  89. + uint8 *temp = (uint8*)malloc(20);
  90. + for (size_t i = 0; i < 20; ++i)
  91. + temp[i] = EncryptedPassword[20 - i - 1];
  92. + BigNumber bn;
  93. + bn.SetBinary(temp, 20);
  94. + free(temp);
  95. + sLogonSQL->Execute("UPDATE accounts SET password = \"%s\", encrypted_password = \"%s\" WHERE login = \"%s\"", sLogonSQL->EscapeString(password).c_str(), bn.AsHexStr(), sLogonSQL->EscapeString(account).c_str());
  96. + }break;
  97. +
  98. + case 7: // set flags
  99. + {
  100. + string account;
  101. + uint32 flags;
  102. + recvData >> account >> flags;
  103. +
  104. + // remember we expect this in uppercase
  105. + ASCENT_TOUPPER(account);
  106. +
  107. + Account *pAccount = sAccountMgr.GetAccount(account);
  108. + if (pAccount == NULL)
  109. + return;
  110. +
  111. + pAccount->AccountFlags = flags;
  112. +
  113. + // update it in the sql (duh)
  114. + sLogonSQL->Execute("UPDATE accounts SET flags = %u WHERE login = \"%s\"", flags, sLogonSQL->EscapeString(account).c_str());
  115. + }break;
  116. +
  117. + case 8: // set email
  118. + {
  119. + string account;
  120. + string email;
  121. + recvData >> account >> email;
  122. +
  123. + // remember we expect this in uppercase
  124. + ASCENT_TOUPPER(account);
  125. +
  126. + Account *pAccount = sAccountMgr.GetAccount(account);
  127. + if (pAccount == NULL)
  128. + return;
  129. +
  130. + // update it in the sql (duh)
  131. + sLogonSQL->Execute("UPDATE accounts SET email = \"%s\" WHERE login = \"%s\"", sLogonSQL->EscapeString(email).c_str(), sLogonSQL->EscapeString(account).c_str());
  132. + }break;
  133. +
  134. + case 9: // create
  135. + {
  136. + string username;
  137. + string password;
  138. + string gm;
  139. + string email;
  140. + uint8 flags;
  141. + recvData >> username >> password >> gm >> email >> flags;
  142. +
  143. + string account = username;
  144. + // remember we expect this in uppercase
  145. + ASCENT_TOUPPER(account);
  146. +
  147. + /* Check if we already have an account with that username */
  148. + Account *pAccount = sAccountMgr.GetAccount(account);
  149. + if (pAccount != NULL)
  150. + return;
  151. +
  152. + /* Get the highest account ID */
  153. + uint32 highId;
  154. + QueryResult *result = sLogonSQL->Query("SELECT MAX(acct) FROM accounts");
  155. + if (result == NULL)
  156. + {
  157. + delete result;
  158. + return;
  159. + }
  160. + highId = result->Fetch()[0].GetUInt32() + 1;
  161. + delete result;
  162. +
  163. + /* Hash the password */
  164. + Sha1Hash hash;
  165. + string password2 = password;
  166. + ASCENT_TOUPPER(password2);
  167. + hash.UpdateData(account + ":" + password2);
  168. + hash.Finalize();
  169. + uint8 *EncryptedPassword = hash.GetDigest();
  170. +
  171. + sAccountMgr.CreateAccount(highId, account.c_str(), password2.c_str(), EncryptedPassword, gm.c_str(), 0, email.c_str(), flags, "enUS", 0);
  172. +
  173. + // update it in the sql (duh)
  174. + uint8 *temp = (uint8*)malloc(20);
  175. + for (size_t i = 0; i < 20; ++i)
  176. + temp[i] = EncryptedPassword[20 - i - 1];
  177. + BigNumber bn;
  178. + bn.SetBinary(temp, 20);
  179. + free(temp);
  180. + sLogonSQL->Execute("INSERT INTO accounts (acct, login, password, encrypted_password, gm, banned, email, flags, forceLanguage, muted) VALUES (%u, \"%s\", \"%s\", \"%s\", \"%s\", 0, \"%s\", %u, \"enUS\", 0)", highId, sLogonSQL->EscapeString(username).c_str(), sLogonSQL->EscapeString(password).c_str(), bn.AsHexStr(), sLogonSQL->EscapeString(gm).c_str(), sLogonSQL->EscapeString(email).c_str(), flags);
  181. + }break;
  182. +
  183. }
  184. }
  185. Index: src/ascent-world/Chat.cpp
  186. ===================================================================
  187. --- src/ascent-world/Chat.cpp (revision 4331)
  188. +++ src/ascent-world/Chat.cpp (working copy)
  189. @@ -377,7 +378,11 @@
  190. {
  191. { "ban", 'a', &ChatHandler::HandleAccountBannedCommand, "Ban account. .account ban name timeperiod", NULL, 0, 0, 0 },
  192. { "unban", 'z', &ChatHandler::HandleAccountUnbanCommand, "Unbans account x.", NULL, 0, 0, 0 },
  193. + { "create", 'z', &ChatHandler::HandleCreateAccountCommand, "Create account. Pass it username password email.", NULL, 0, 0, 0 },
  194. + { "email", 'z', &ChatHandler::HandleAccountEmailCommand, "Sets email address on account. Pass it username email_address.", NULL, 0, 0, 0},
  195. + { "flags", 'z', &ChatHandler::HandleAccountFlagsCommand, "Sets flags on account. Pass it username and 0 for Non-TBC or 8 for TBC.", NULL, 0, 0, 0},
  196. { "level", 'z', &ChatHandler::HandleAccountLevelCommand, "Sets gm level on account. Pass it username and 0,1,2,3,az, etc.", NULL, 0, 0, 0 },
  197. + { "password", 'z', &ChatHandler::HandleAccountPasswordCommand, "Sets password on account. Pass it username password.", NULL, 0, 0, 0},
  198. { "mute", 'a', &ChatHandler::HandleAccountMuteCommand, "Mutes account for <timeperiod>.", NULL, 0, 0, 0 },
  199. { "unmute", 'a', &ChatHandler::HandleAccountUnmuteCommand, "Unmutes account <x>", NULL, 0, 0, 0 },
  200.  
  201. Index: src/ascent-world/Chat.h
  202. ===================================================================
  203. --- src/ascent-world/Chat.h (revision 4331)
  204. +++ src/ascent-world/Chat.h (working copy)
  205. @@ -336,7 +346,11 @@
  206. bool HandleSetBattlefieldStatusCommand(const char* args, WorldSession *m_session);
  207. bool HandleNpcReturnCommand(const char* args, WorldSession* m_session);
  208. bool HandleAccountBannedCommand(const char * args, WorldSession * m_session);
  209. + bool HandleAccountPasswordCommand(const char * args, WorldSession * m_session);
  210. + bool HandleAccountEmailCommand(const char * args, WorldSession * m_session);
  211. bool HandleAccountLevelCommand(const char * args, WorldSession * m_session);
  212. + bool HandleAccountFlagsCommand(const char * args, WorldSession * m_session);
  213. + bool HandleCreateAccountCommand(const char* args, WorldSession *m_session);
  214. bool HandleResetTalentsCommand(const char* args, WorldSession *m_session);
  215. bool HandleResetSpellsCommand(const char* args, WorldSession *m_session);
  216. bool HandleNpcFollowCommand(const char* args, WorldSession * m_session);
  217. Index: src/ascent-world/ConsoleCommands.cpp
  218. ===================================================================
  219. --- src/ascent-world/ConsoleCommands.cpp (revision 4331)
  220. +++ src/ascent-world/ConsoleCommands.cpp (working copy)
  221. @@ -215,14 +215,13 @@
  222. if(strlen(username) == 0 || strlen(password) == 0 || strlen(email) == 0)
  223. return false;
  224.  
  225. - /*string susername = CharacterDatabase.EscapeString(string(username));
  226. + string susername = CharacterDatabase.EscapeString(string(username));
  227. string spassword = CharacterDatabase.EscapeString(string(password));
  228. string semail = CharacterDatabase.EscapeString(string(email));
  229.  
  230. - sLogonCommHandler.LogonDatabaseSQLExecute("INSERT INTO accounts (login, password, email, flags) VALUES('%s','%s','%s',%u)",susername.c_str(), spassword.c_str(),
  231. - semail.c_str(), flags);
  232. + sLogonCommHandler.Account_Create(susername.c_str(), spassword.c_str(), "", semail.c_str(), flags);
  233.  
  234. - pConsole->Write("Account created.\r\n");*/
  235. + pConsole->Write("Account created.\r\n");
  236. return true;
  237. }
  238.  
  239. Index: src/ascent-world/Level3.cpp
  240. ===================================================================
  241. --- src/ascent-world/Level3.cpp (revision 4331)
  242. +++ src/ascent-world/Level3.cpp (working copy)
  243. @@ -778,11 +886,36 @@
  244. sLogonCommHandler.Account_SetGM( account, gmlevel );
  245.  
  246. GreenSystemMessage(m_session, "Account '%s' level has been updated to '%s'. The change will be effective immediately.", account, gmlevel);
  247. - sGMLog.writefromsession(m_session, "set account %s flags to %s", account, gmlevel);
  248. + sGMLog.writefromsession(m_session, "set account %s GM flags to %s", account, gmlevel);
  249.  
  250. + WorldSession *pSession = sWorld.FindSessionByName(account);
  251. + if (pSession != NULL)
  252. + {
  253. + pSession->SetSecurity(gmlevel);
  254. + pSession->SystemMessage("Your account level has been updated to '%s'.", gmlevel);
  255. + }
  256. +
  257. return true;
  258. }
  259.  
  260. +bool ChatHandler::HandleAccountPasswordCommand(const char * args, WorldSession * m_session)
  261. +{
  262. + if(!*args) return false;
  263. +
  264. + char account[100];
  265. + char password[100];
  266. + int argc = sscanf(args, "%s %s", account, password);
  267. + if(argc != 2)
  268. + return false;
  269. +
  270. + sLogonCommHandler.Account_SetPassword(account, password);
  271. +
  272. + GreenSystemMessage(m_session, "Account '%s' password has been changed to '%s'. The change will be effective immediately.", account, password);
  273. + sGMLog.writefromsession(m_session, "set account %s password to %s", account, password);
  274. +
  275. + return true;
  276. +}
  277. +
  278. bool ChatHandler::HandleAccountUnbanCommand(const char * args, WorldSession * m_session)
  279. {
  280. if(!*args) return false;
  281. @@ -883,6 +1016,66 @@
  282. return true;
  283. }
  284.  
  285. +bool ChatHandler::HandleAccountFlagsCommand(const char * args, WorldSession * m_session)
  286. +{
  287. + if(!*args) return false;
  288. +
  289. + char account[100];
  290. + unsigned int flags;
  291. + int argc = sscanf(args, "%s %u", account, &flags);
  292. + if(argc != 2)
  293. + return false;
  294. +
  295. + sLogonCommHandler.Account_SetFlags(account, flags);
  296. +
  297. + GreenSystemMessage(m_session, "Account '%s' flags have been updated. The change will be effective immediately.", account);
  298. + sGMLog.writefromsession(m_session, "set account %s flags to %u", account, flags);
  299. +
  300. + WorldSession *pSession = sWorld.FindSessionByName(account);
  301. + if (pSession != NULL)
  302. + {
  303. + pSession->SetAccountFlags(flags);
  304. + pSession->SystemMessage("Your account flags have been updated by %s.", m_session->GetPlayer()->GetName());
  305. + }
  306. +
  307. + return true;
  308. +}
  309. +
  310. +bool ChatHandler::HandleAccountEmailCommand(const char * args, WorldSession * m_session)
  311. +{
  312. + if(!*args) return false;
  313. +
  314. + char account[100];
  315. + char email[100];
  316. + int argc = sscanf(args, "%s %s", account, email);
  317. + if(argc != 2)
  318. + return false;
  319. +
  320. + sLogonCommHandler.Account_SetEmail(account, email);
  321. +
  322. + GreenSystemMessage(m_session, "Account '%s' email has been updated to '%s'. The change will be effective immediately.", account, email);
  323. + sGMLog.writefromsession(m_session, "set account %s email to %s", account, email);
  324. +
  325. + return true;
  326. +}
  327. +
  328. +bool ChatHandler::HandleCreateAccountCommand(const char* args, WorldSession *m_session)
  329. +{
  330. + char *user = strtok((char *)args, " ");
  331. + if(!user) return false;
  332. + char *pass = strtok(NULL, " ");
  333. + if(!pass) return false;
  334. + char *email = strtok(NULL, "\n");
  335. + if(!email) return false;
  336. +
  337. + sLogonCommHandler.Account_Create(user, pass, "", email, 0);
  338. +
  339. + GreenSystemMessage(m_session, "Created account '%s' with password '%s' and email '%s'. The account will be active immediately.", user, pass, email);
  340. + sGMLog.writefromsession(m_session, "created account %s with password %s and email %s", user, pass, email);
  341. +
  342. + return true;
  343. +}
  344. +
  345. bool ChatHandler::HandleGetTransporterTime(const char* args, WorldSession* m_session)
  346. {
  347. //Player *plyr = m_session->GetPlayer();
  348. Index: src/ascent-world/LogonCommHandler.cpp
  349. ===================================================================
  350. --- src/ascent-world/LogonCommHandler.cpp (revision 4331)
  351. +++ src/ascent-world/LogonCommHandler.cpp (working copy)
  352. @@ -519,4 +519,71 @@
  353. itr->second->SendPacket(&data, false);
  354. }
  355.  
  356. +void LogonCommHandler::Account_SetPassword(const char *account, const char *password)
  357. +{
  358. + map<LogonServer *, LogonCommClientSocket *>::iterator itr = logons.begin();
  359. + if (logons.size() == 0 || itr->second == 0)
  360. + {
  361. + // No valid logonserver is connected.
  362. + return;
  363. + }
  364. +
  365. + WorldPacket data(RCMSG_MODIFY_DATABASE, 50);
  366. + data << uint32(6); // 6 = set password
  367. + data << account;
  368. + data << password;
  369. + itr->second->SendPacket(&data, false);
  370. +}
  371. +
  372. +void LogonCommHandler::Account_SetFlags(const char *account, unsigned int flags)
  373. +{
  374. + map<LogonServer *, LogonCommClientSocket *>::iterator itr = logons.begin();
  375. + if (logons.size() == 0 || itr->second == 0)
  376. + {
  377. + // No valid logonserver is connected.
  378. + return;
  379. + }
  380. +
  381. + WorldPacket data(RCMSG_MODIFY_DATABASE, 50);
  382. + data << uint32(7); // 7 = set flags
  383. + data << account;
  384. + data << flags;
  385. + itr->second->SendPacket(&data, false);
  386. +}
  387. +
  388. +void LogonCommHandler::Account_SetEmail(const char *account, const char *email)
  389. +{
  390. + map<LogonServer *, LogonCommClientSocket *>::iterator itr = logons.begin();
  391. + if (logons.size() == 0 || itr->second == 0)
  392. + {
  393. + // No valid logonserver is connected.
  394. + return;
  395. + }
  396. +
  397. + WorldPacket data(RCMSG_MODIFY_DATABASE, 50);
  398. + data << uint32(8); // 8 = set password
  399. + data << account;
  400. + data << email;
  401. + itr->second->SendPacket(&data, false);
  402. +}
  403. +
  404. +void LogonCommHandler::Account_Create(const char *username, const char *password, const char *gm, const char *email, uint8 flags)
  405. +{
  406. + map<LogonServer *, LogonCommClientSocket *>::iterator itr = logons.begin();
  407. + if (logons.size() == 0 || itr->second == 0)
  408. + {
  409. + // No valid logonserver is connected.
  410. + return;
  411. + }
  412. +
  413. + WorldPacket data(RCMSG_MODIFY_DATABASE, 50);
  414. + data << uint32(9); // 9 = create
  415. + data << username;
  416. + data << password;
  417. + data << gm;
  418. + data << email;
  419. + data << flags;
  420. + itr->second->SendPacket(&data, false);
  421. +}
  422. +
  423. #endif
  424. Index: src/ascent-world/LogonCommHandler.h
  425. ===================================================================
  426. --- src/ascent-world/LogonCommHandler.h (revision 4331)
  427. +++ src/ascent-world/LogonCommHandler.h (working copy)
  428. @@ -95,6 +95,10 @@
  429. void Account_SetMute(const char * account, uint32 muted);
  430. void IPBan_Add(const char * ip, uint32 duration);
  431. void IPBan_Remove(const char * ip);
  432. + void Account_SetPassword(const char * account, const char * password);
  433. + void Account_SetFlags(const char * account, unsigned int flags);
  434. + void Account_SetEmail(const char * account, const char * email);
  435. + void Account_Create(const char * username, const char * password, const char * gm, const char * email, uint8 flags);
  436.  
  437. void LoadRealmConfiguration();
  438. void AddServer(string Name, string Address, uint32 Port);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement