Advertisement
Guest User

Untitled

a guest
Jul 11th, 2017
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.88 KB | None | 0 0
  1. using DarkRift;
  2. using DarkRift.ConfigTools;
  3. using DarkRift.Storage;
  4. using System;
  5. using System.Collections.Generic;
  6.  
  7.  
  8. namespace LoginPlugin
  9. {
  10. public class LoginPlugin : Plugin
  11. {
  12. /// Plugin Discription
  13.  
  14. public override string name { get { return "LoginPlugin"; } }
  15. public override string version { get { return "1.0"; } }
  16. public override string author { get { return "Ken McClelland"; } }
  17. public override string supportEmail { get { return "admin@knktech.com"; } }
  18.  
  19. public override Command[] commands
  20. {
  21. get
  22. {
  23. return new Command[]
  24. {
  25. new Command("UserCreate", "Turns ON and OFF User creation [on / off]", new Action<string[]>(UserCreateCommand)),
  26. new Command("AddUser", "Adds a User To the DB [AddUser name password]", new Action<string[]>(AddUserCommand)),
  27. new Command("LPDebug", "Turns on Plugin Debug", new Action<string[]>(DebugCommand))
  28.  
  29. };
  30. }
  31. }
  32.  
  33. /// All Variables we going to Read out of the Config File
  34. private ConfigReader _settings;
  35.  
  36. private byte _loginT;
  37. private ushort _loginSUserLogin;
  38. private ushort _loginSLogoutUser;
  39. private ushort _loginSAddUser;
  40. private ushort _loginSLoginSuccess;
  41. private ushort _loginSLoginFailed;
  42. private ushort _loginSLogoutSuccess;
  43. private ushort _loginSAddUserSuccess;
  44. private ushort _loginSAddUserFailed;
  45.  
  46. private bool _allowAddUser = false;
  47. private bool _debug = false;
  48.  
  49. private object _obj;
  50.  
  51. private int _reason;
  52.  
  53. public LoginPlugin()
  54. {
  55. /// <summary> If not Installed Make Plugin Directory under ./Plugins/Pluginname Also Create Database Table for this.
  56. if (!IsInstalled())
  57. {
  58. InstallSubdirectory(
  59. new Dictionary<string, byte[]>()
  60. {
  61. {"settings.cnf", System.Text.ASCIIEncoding.ASCII.GetBytes("LoginTag:\t\t\t\t\t10\n"+
  62. "LoginSubjectUserLogin:\t\t1\n"+
  63. "LoginSubjectLogoutUser:\t\t2\n"+
  64. "LoginSubjectAddUser:\t\t3\n"+
  65. "LoginSubjectLoginSuccess:\t4\n"+
  66. "LoginSubjectLoginFailed:\t5\n"+
  67. "LoginSubjectLogoutSuccess:\t6\n"+
  68. "LoginSubjectAddUserSuccess:\t7\n"+
  69. "LoginSubjectAddUserFailed:\t7\n"+
  70. "AllowAddUser:\t\t\tTrue\n"+
  71. "Debug:\t\t\t\t\t\tTrue") }
  72. }
  73. );
  74. try
  75. {
  76. DarkRiftServer.database.ExecuteNonQuery(
  77. "CREATE TABLE IF NOT EXISTS tblPlayer(" +
  78. "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " +
  79. "username VARCHAR(50) NOT NULL, " +
  80. "password VARCHAR(200) NOT NULL ) ", new QueryParameter[0]
  81. );
  82. }
  83. catch (DatabaseException e)
  84. {
  85. Interface.LogError("[LoginPlugin] SQL error during step:" + e.ToString());
  86.  
  87. if (_debug)
  88. Interface.Log("[LoginPlugin] SQL error during setup:");
  89. }
  90. }
  91.  
  92. /// Read Settings from settings.cnf
  93.  
  94. _settings = new ConfigReader(GetSubdirectory() + "/settings.cnf");
  95.  
  96. /// Read Variables
  97.  
  98. if (!byte.TryParse(_settings["LoginTag"], out _loginT))
  99. {
  100. Interface.LogFatal("[LoginPlugin] Plugin Tag could not be found in settings.cnf");
  101. DarkRiftServer.Close(true);
  102. }
  103. if (!ushort.TryParse(_settings["LoginSubjectUserLogin"], out _loginSUserLogin))
  104. {
  105. Interface.LogFatal("[LoginPlugin] User Login Subject could not be found in settings.cnf");
  106. DarkRiftServer.Close(true);
  107. }
  108. if (!ushort.TryParse(_settings["LoginSubjectLogoutUser"], out _loginSLogoutUser))
  109. {
  110. Interface.LogFatal("[LoginPlugin] User Logout Subject could not be found in settings.cnf");
  111. DarkRiftServer.Close(true);
  112. }
  113. if (!ushort.TryParse(_settings["LoginSubjectAddUser"], out _loginSAddUser))
  114. {
  115. Interface.LogFatal("[LoginPlugin] Add User Subject could not be found in settings.cnf");
  116. DarkRiftServer.Close(true);
  117. }
  118. if (!ushort.TryParse(_settings["LoginSubjectLoginSuccess"], out _loginSLoginSuccess))
  119. {
  120. Interface.LogFatal("[LoginPlugin] User Login Success Subject could not be found in settings.cnf");
  121. DarkRiftServer.Close(true);
  122. }
  123. if (!ushort.TryParse(_settings["LoginSubjectLoginFailed"], out _loginSLoginFailed))
  124. {
  125. Interface.LogFatal("[LoginPlugin] User Login Failed Subject could not be found in settings.cnf");
  126. DarkRiftServer.Close(true);
  127. }
  128. if (!ushort.TryParse(_settings["LoginSubjectLogoutSuccess"], out _loginSLogoutSuccess))
  129. {
  130. Interface.LogFatal("[LoginPlugin] User Logout Success Subject could not be found in settings.cnf");
  131. DarkRiftServer.Close(true);
  132. }
  133. if (!ushort.TryParse(_settings["LoginSubjectAddUserSuccess"], out _loginSAddUserSuccess))
  134. {
  135. Interface.LogFatal("[LoginPlugin] Add User Success Subject could not be found in settings.cnf");
  136. DarkRiftServer.Close(true);
  137. }
  138. if (!ushort.TryParse(_settings["LoginSubjectAddUserFailed"], out _loginSAddUserFailed))
  139. {
  140. Interface.LogFatal("[LoginPlugin] Add User Failed Subject could not be found in settings.cnf");
  141. DarkRiftServer.Close(true);
  142. }
  143. if (!bool.TryParse(_settings["AllowAddUser"], out _allowAddUser))
  144. {
  145. Interface.LogFatal("[LoginPlugin] Allow Add User could not be found in settings.cnf");
  146. DarkRiftServer.Close(true);
  147. }
  148. if (!bool.TryParse(_settings["Debug"], out _debug))
  149. {
  150. Interface.LogFatal("[LoginPlugin] Debug Setting could not be found in settings.cnf");
  151. DarkRiftServer.Close(true);
  152. }
  153.  
  154. /// Add us to the one Server message Event
  155.  
  156. ConnectionService.onServerMessage += OnServerMessage;
  157. }
  158.  
  159. private void OnServerMessage(ConnectionService con, NetworkMessage data)
  160. {
  161. if (data.tag == _loginT)
  162. {
  163. /// Did we get an User Login Message
  164. if (data.subject == _loginSUserLogin)
  165. {
  166. #region Login
  167.  
  168. bool isloggedin = false;
  169. if (con.HasData(name, "IsLoggedIn"))
  170. isloggedin = (bool)con.GetData(name, "IsLoggedIn");
  171.  
  172. if (!isloggedin)
  173. {
  174. try
  175. {
  176. using (DarkRiftReader reader = (DarkRiftReader)data.data)
  177. {
  178. string _username = reader.ReadString();
  179. string _password = reader.ReadString();
  180.  
  181. DatabaseRow[] rows = DarkRiftServer.database.ExecuteQuery(
  182. "SELECT id FROM tblPlayer WHERE username = @username AND password = @password LIMIT 1 ",
  183. new QueryParameter("username", _username),
  184. new QueryParameter("password", _password)
  185. );
  186. if (rows.Length == 1)
  187. {
  188. bool _hasuma = false;
  189. int id = Convert.ToInt32(rows[0]["id"]);
  190.  
  191. con.SetData(name, "IsLoggedIn", true);
  192. con.SetData(name, "UserID", id);
  193. DarkRiftWriter writer = new DarkRiftWriter();
  194.  
  195. writer.Write(_hasuma);
  196. writer.Write(id);
  197.  
  198. con.SendReply(_loginT, _loginSLoginSuccess, writer);
  199.  
  200. if (_debug)
  201. Interface.Log("[LoginPlugin] Successfull login (" + id + ").");
  202. }
  203. else
  204. {
  205. if (_debug)
  206. Interface.Log("[LoginPlugin] User " + _username + " could not login");
  207. _reason = 0;
  208. con.SendReply(_loginT, _loginSLoginFailed, _reason);
  209. }
  210. }
  211. }
  212. catch (InvalidCastException)
  213. {
  214. if (_debug)
  215. Interface.Log("[LoginPlugin] Invalid data receieved in a Login request.");
  216. _reason = -1;
  217. con.SendReply(_loginT, _loginSLoginFailed, _reason);
  218. }
  219. }
  220.  
  221. #endregion Login
  222. }
  223. /// Did we get an User Logout Message
  224. if (data.subject == _loginSLogoutUser)
  225. {
  226. Interface.Log("Logout");
  227. }
  228. /// Did we get an Add User Message
  229. if (data.subject == _loginSAddUser)
  230. {
  231.  
  232. #region AddUser
  233.  
  234. if (_allowAddUser)
  235. {
  236. try
  237. {
  238. using (DarkRiftReader reader = (DarkRiftReader)data.data)
  239. {
  240. string _username = reader.ReadString();
  241. string _password = reader.ReadString();
  242.  
  243. if (!CheckUser(_username, _password))
  244. {
  245. AddUser(_username, _password);
  246. }
  247. _reason = 1;
  248. con.SendReply(_loginT, _loginSAddUserSuccess, _reason);
  249. }
  250. }
  251. catch (InvalidCastException)
  252. {
  253. if (_debug)
  254. Interface.Log("[LoginPlugin] Add user Failed, Invalid data recieved. ");
  255. _reason = -1;
  256. con.SendReply(_loginT, _loginSAddUserFailed, _reason);
  257. }
  258. }
  259.  
  260. #endregion AddUser
  261. }
  262.  
  263. }
  264. }
  265.  
  266. private void UserCreateCommand(String[] _commandStr)
  267. {
  268. if (_commandStr.Length != 1)
  269. {
  270. LogColor("You need to call this command with [UserCreate on] or [UserCreate off]", ConsoleColor.DarkMagenta);
  271. return;
  272. }
  273. if (_commandStr[0] == "on")
  274. {
  275. this._allowAddUser = true;
  276. LogColor("Add User creation is " + _commandStr[0], ConsoleColor.Yellow);
  277. }
  278. else if (_commandStr[0] == "off")
  279. {
  280. this._allowAddUser = false;
  281. LogColor("Add User creation is " + _commandStr[0], ConsoleColor.Yellow);
  282. }
  283.  
  284. }
  285.  
  286. private void AddUser(String _username, String _password)
  287. {
  288. try
  289. {
  290. DarkRiftServer.database.ExecuteNonQuery(
  291. "INSERT INTO tblPlayer(username, password) VALUES(@username, @password)",
  292. new QueryParameter("username", _username),
  293. new QueryParameter("password", _password)
  294. );
  295. if (_debug)
  296. Interface.Log("[LoginPlugin] New User : " + _username);
  297. }
  298. catch (DatabaseException e)
  299. {
  300. if (_debug)
  301. {
  302. Interface.Log("[LoginPlugin] Add user failed. \n" + e.ToString());
  303. }
  304. }
  305. }
  306.  
  307. private void AddUserCommand(String[] _commandStr)
  308. {
  309. if (_commandStr.Length != 2) return;
  310.  
  311. string _username = _commandStr[0];
  312. string _password = HashHelper.ReturnHash(_commandStr[1], HashType.SHA256);
  313.  
  314. if (!CheckUser(_username, _password))
  315. {
  316. AddUser(_username, _password);
  317. }
  318. }
  319.  
  320. private void DebugCommand(String[] _commandStr)
  321. {
  322. _debug = !_debug;
  323. Interface.Log("[LoginPlugin] Debug is " + _debug);
  324. }
  325.  
  326. private bool CheckUser(String _username, String _password)
  327. {
  328. try
  329. {
  330. _obj = DarkRiftServer.database.ExecuteScalar(
  331. "SELECT EXISTS(SELECT 1 FROM tblPlayer WHERE username = @username ) ",
  332. new QueryParameter("username", _username)
  333. );
  334. return Convert.ToBoolean(_obj);
  335. }
  336. catch (DatabaseException e)
  337. {
  338. if (_debug)
  339. {
  340. Interface.Log("[LoginPlugin] Add user failed." + e.ToString());
  341. }
  342. return true;
  343. }
  344. }
  345.  
  346. private void LogColor(String _text, ConsoleColor _color)
  347. {
  348. Console.ForegroundColor = _color;
  349. Interface.Log(_text);
  350. Console.ForegroundColor = ConsoleColor.White;
  351. }
  352. }
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement