Advertisement
Guest User

Untitled

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