コード例 #1
0
        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());
            }
        }
コード例 #2
0
ファイル: SysopGlobal.cs プロジェクト: tuday2/MBBSEmu
        /// <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());
        }
コード例 #3
0
ファイル: MenuRoutines.cs プロジェクト: donfanning/MBBSEmu
        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);
        }
コード例 #4
0
        private void Seed(EntityManager entityManager)
        {
            var entities = _globalCache.Get <T>();

            entityManager.ImportEntities(entities, MergeStrategy.OverwriteChanges);
        }