private void LoginPasswordInput(SessionBase session) { //Only Process on CR if (session.GetStatus() != EnumUserStatus.CR_TERMINATED_STRING_AVAILABLE) { return; } //Get The Password session.Password = Encoding.ASCII.GetString(session.InputBuffer.ToArray()); session.InputBuffer.SetLength(0); session.SessionState = EnumSessionState.LoginPasswordDisplay; //See if the Account exists var account = _accountRepository.GetAccountByUsernameAndPassword(session.Username, session.Password); if (account == null) { session.SendToClient("\r\n|B||RED|Invalid Credentials|RESET|\r\n".EncodeToANSIArray()); session.Username = ""; session.EchoSecureEnabled = false; session.SessionState = EnumSessionState.LoginUsernameDisplay; return; } //Populate Session Variables from mbbsemu.db session.Username = account.userName; session.UsrAcc.credat = account.createDate.ToDosDate(); //Lookup User in BBSUSR.db var accountBtrieve = _globalCache.Get <BtrieveFileProcessor>("ACCBB-PROCESSOR"); var result = accountBtrieve.PerformOperation(0, new Span <byte>(new UserAccount { userid = Encoding.ASCII.GetBytes(session.Username.ToUpper()), psword = Encoding.ASCII.GetBytes("<<HASHED>>") }.Data).Slice(0, 55), EnumBtrieveOperationCodes.AcquireEqual); if (!result) { session.SendToClient("\r\n|B||RED|USER MISMATCH IN BBSUSR.DAT -- PLEASE NOTIFY SYSOP|RESET|\r\n".EncodeToANSIArray()); session.Username = ""; session.EchoSecureEnabled = false; session.SessionState = EnumSessionState.LoginUsernameDisplay; return; } //Populate Session Variables from BBSUSR.db session.UsrAcc.sex = accountBtrieve.GetRecord().ElementAt(213); //Start Session session.SessionState = EnumSessionState.LoginRoutines; session.EchoSecureEnabled = false; session.SessionTimer.Start(); if (_accountKeyRepository.GetAccountKeysByUsername(session.Username).Any(x => x.accountKey == "SYSOP")) { session.SendToClient("|RED||B|/SYS to access SYSOP commands\r\n".EncodeToANSIArray()); } }
/// <summary> /// Sysop Command to delete an account /// /// Syntax: /SYS REMOVEACCOUNT USER /// </summary> /// <param name="commandSequence"></param> private void RemoveAccount(IReadOnlyList <string> commandSequence) { if (commandSequence.Count() < 3) { _sessions[_channelNumber].SendToClient("\r\n|RESET||WHITE||B|Invalid Command -- Syntax: /SYS REMOVEACCOUNT <USER>|RESET|\r\n".EncodeToANSIString()); return; } var userName = commandSequence[2]; //Verify the Account Exists if (!IsValidUser(userName)) { return; } if (_sessions.Values.Any(s => string.Equals(s.Username, userName, StringComparison.CurrentCultureIgnoreCase))) { _sessions[_channelNumber].SendToClient($"\r\n|RESET||WHITE||B|Cannot remove logged in user: {userName}|RESET|\r\n".EncodeToANSIString()); return; } //Remove the User from MBBSEmu User Database var userAccount = _accountRepository.GetAccountByUsername(userName); _accountRepository.DeleteAccountById(userAccount.accountId); //Remove the User from the BBSUSR Database var accountBtrieve = _globalCache.Get <BtrieveFileProcessor>("ACCBB-PROCESSOR"); var result = accountBtrieve.PerformOperation(0, new Span <byte>(new UserAccount { userid = Encoding.ASCII.GetBytes(userAccount.userName.ToUpper()), psword = Encoding.ASCII.GetBytes("<<HASHED>>") }.Data).Slice(0, 55), EnumBtrieveOperationCodes.AcquireEqual); if (result) { accountBtrieve.Delete(); } _sessions[_channelNumber].SendToClient($"\r\n|RESET||WHITE||B|Removed account: {userName}|RESET|\r\n".EncodeToANSIString()); }
private void SignupEmailInput(SessionBase session) { if (session.Status != 3) { return; } session.Status = 0; var inputValue = Encoding.ASCII.GetString(session.InputBuffer.ToArray()); var emailRegEx = new Regex( "^(?(\")(\".+?(?<!\\\\)\"@)|(([0-9a-z]((\\.(?!\\.))|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*)(?<=[0-9a-z])@))(?(\\[)(\\[(\\d{1,3}\\.){3}\\d{1,3}\\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\\.)+[a-z0-9][\\-a-z0-9]{0,22}[a-z0-9]))$"); if (!emailRegEx.IsMatch(inputValue)) { EchoToClient(session, "\r\n|RED||B|Please enter a valid e-Mail address.\r\n|RESET|".EncodeToANSIArray()); session.SessionState = EnumSessionState.SignupEmailDisplay; session.InputBuffer.SetLength(0); return; } session.Email = inputValue; //Create the user in the database var accountId = _accountRepository.InsertAccount(session.Username, session.Password, session.Email); foreach (var c in _configuration.DefaultKeys) { _accountKeyRepository.InsertAccountKey(accountId, c); } //Add The User to the BBS Btrieve User Database var _accountBtrieve = _globalCache.Get <BtrieveFileProcessor>("ACCBB-PROCESSOR"); _accountBtrieve.Insert(new UserAccount { userid = Encoding.ASCII.GetBytes(session.Username), psword = Encoding.ASCII.GetBytes("<<HASHED>>") }.Data); session.SessionState = EnumSessionState.LoginRoutines; session.InputBuffer.SetLength(0); }
private void Seed(EntityManager entityManager) { var entities = _globalCache.Get <T>(); entityManager.ImportEntities(entities, MergeStrategy.OverwriteChanges); }