예제 #1
0
        /// <summary>
        /// 根据会员在线ID获取在线会员信息
        /// </summary>
        /// <param name="userOnlineId"></param>
        /// <returns></returns>
        public static UserOnlineInfo getUserOnlineInfo(bool safe = false)
        {
            var info = getOnlineUser;

            if (info == null)
            {
                info = new UserOnlineInfo()
                {
                    UserOnlineId    = Guid.NewGuid().ToString("N"),
                    IP              = Fetch.getClientIP(),
                    StartDate       = SiteConfig.getLocalTime(),
                    Url             = Fetch.getRawUrl(),
                    UnsafeVisitsNum = -1,
                    StatisticsDate  = SiteConfig.getLocalTime().AddMinutes(10),
                };

                info.SafeKey  = Utils.MD5(info.IP);
                info.UserInfo = getVisitor();

                getOnlineUser = info;
            }

            browseHistory(info, safe);


            return(info);
        }
예제 #2
0
        private static void WriteInFile(UserOnlineInfo info, string path = "")
        {
            var directory = $"{path}\\{info.Id}\\{info.DateTime.Year}\\{info.DateTime.Month}";
            var name      = info.DateTime.Day.ToString();

            FileWriter.WriteInFile(directory, name, $"{info.DateTime:HH:mm:ss} : {info.OnlineInfo}{Environment.NewLine}");
        }
예제 #3
0
        /// <summary>
        /// 注册用户
        /// </summary>
        /// <param name="clmngr"></param>
        /// <param name="uid"></param>
        /// <returns></returns>
        protected override bool RegistUser(ClientManager clmngr, int uid)
        {
            if (clmngr == null || uid < 1 || !this._Clients.ContainsKey(clmngr.nSessionID))
            {
                return(false);
            }

            clmngr.IsAuthedUser = true;
            clmngr.nUID         = uid;

            if (_Users.ContainsKey(uid))
            {
                UserOnlineInfo onlineUser = _Users[uid] as UserOnlineInfo;
                if (!onlineUser.IsOnline)
                {
                    onlineUser.SetLogin();
                }
                onlineUser.RefreshActiveTime();
            }
            else
            {
                UserOnlineInfo onlineUser = new UserOnlineInfo(uid);
                onlineUser.SetLogin();
                lock (_Users.SyncRoot)
                {
                    _Users[uid] = onlineUser;
                }
            }
            return(true);
        }
예제 #4
0
        public UserOnlineInfo MyUser; //= UserManage.UserInfo;

        #region 初始化 在OnInit执行
        /// <summary>
        /// 设置当前登录人的信息
        /// 设置元数据的数据库的实例
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            var debugInfo = new NatureDebugInfo {
                Title = "[Nature.Service.Ashx.BaseAshx]判断Url参数"
            };

            base.OnInit(e);

            //验证是否已经登录
            //如果已经登录了,加载登录人员的信息,
            var manageUser = new ManageUser {
                Dal = Dal
            };

            UserWebappInfo userWebappInfo = AppManage.UserWebappInfoByCookies(debugInfo.DetailList);

            if (userWebappInfo.State != UserState.NormalAccess)
            {
                //没有登录。
                Response.Write("您还没有登录,请到<a href='/default.aspx' target='_top'>这里</a>登录");
                Response.End();
            }

            MyUser = manageUser.CreateUser(Convert.ToString(userWebappInfo.UserWebappID), null);

            //保存访问日志
            //SaveViewLog();
        }
예제 #5
0
 private static MongoOnlineInfo Map(UserOnlineInfo userOnlineInfo)
 {
     return(new MongoOnlineInfo
     {
         DateTime = userOnlineInfo.DateTime,
         OnlineInfo = userOnlineInfo.OnlineInfo
     });
 }
예제 #6
0
        /// <summary>
        /// 根据清除登陆信息
        /// </summary>
        public static void clearUserOline()
        {
            var onlineInfo = getUserOnlineInfo();

            if (onlineInfo != null)
            {
                getOnlineUser.UserInfo = getVisitor();
                onlineInfo.UserId      = -1;
                getOnlineUser          = onlineInfo;
            }
        }
예제 #7
0
        /// <summary>
        /// 监控线程
        /// </summary>
        /// <param name="stateInfo"></param>
        internal virtual void StartWorkerProcessing(Object stateInfo)
        {
            try
            {
                UserOnlineInfo onlineUser     = null;
                int            uid            = 0;
                int            onlineTimePlus = 0;
                List <int>     offLineUIDList = null;

                _MonitorCheckSuccessTimes++;

                if (_Users.Count > 0)
                {
                    offLineUIDList = new List <int>(_Users.Count);

                    lock (_Users.SyncRoot)
                    {
                        if (_Users.Count > 0)
                        {
                            foreach (DictionaryEntry item in _Users)
                            {
                                onlineUser = (UserOnlineInfo)item.Value;
                                uid        = (int)item.Key;
                                if (!onlineUser.IsOnline)
                                {
                                    offLineUIDList.Add(uid);
                                    onlineUser.SetLogoff();
                                }
                                //  收集在线时长
                                onlineTimePlus = onlineUser.CollectOnlineTime();
                                //if (onlineTimePlus > 0)
                                //    _ServerStatManager.SaveUserOnlineTime(uid, onlineTimePlus);
                            }

                            if (offLineUIDList.Count > 0)
                            {
                                foreach (int offLineUID in offLineUIDList)
                                {
                                    _Users.Remove(offLineUID);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _MonitorCheckErrorTimes++;
                Console.WriteLine(string.Format("监测线程工作出现异常({0}):{1}", DateTime.Now.ToString(), ex.Message));
            }
            finally
            { }
            Console.Write("\rConn:{0}  Users:{1}    Check:{2}    Req:{3}          \r", _Clients.Count, _Users.Count, _MonitorCheckSuccessTimes, _RequestTimes);
        }
예제 #8
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            string userCode = txtUserCode.Value; // Request.Form["userCode"];
            string userPsw  = txtUserPsw.Value;

            //实现登录

            userCode = userCode.Replace("'", "''");
            userPsw  = Functions.ToMD5(userPsw);

            var dal = CommonClass.SetMetadataDal();

            const string sql = "SELECT TOP 1 userID from Person_User_Info where UserCode='{0}' and LoginPsw ='{1}'";

            string userId = dal.DalUser.ExecuteString(string.Format(sql, userCode, userPsw));

            if (dal.DalUser.ErrorMessage.Length > 2)
            {
                //debugInfo.Remark = "到数据库验证登录账户和密码,出现异常!";
                Response.Write("<br>" + dal.DalUser.ErrorMessage);
            }

            if (dal.DalUser.ErrorMessage.Length > 2)
            {
                //debugInfo.Remark = "到数据库验证登录账户和密码,出现异常!";
                Response.Write("\"msg\":\"" + dal.DalUser.ErrorMessage + "\"");
                return;
            }

            if (string.IsNullOrEmpty(userId))
            {
                Response.Write("\"msg\":\"用户名和密码不匹配!\"");
                return;
            }

            Response.Write("<br>" + userId);

            var mUser = new ManageUser {
                Dal = dal
            };

            var debugInfo2 = new NatureDebugInfo {
                Title = "判断访问权限"
            };

            UserOnlineInfo user = mUser.CreateUser(userId, debugInfo2.DetailList);

            Response.Write("<br>" + user.BaseUser.UserID);
            Functions.PageRegisterJavascript(Page, "isLogin();");
        }
예제 #9
0
        /// <summary>
        /// 设置会员在线
        /// </summary>
        /// <param name="userInfo"></param>
        public static void setUserOnline(BasicUserInfo userInfo, int days = 0)
        {
            var onlineInfo = getUserOnlineInfo();

            if (days > 0)
            {
                setKeyExpires(days);
            }

            onlineInfo.UserInfo = userInfo;
            onlineInfo.UserName = userInfo.UserName;
            onlineInfo.UserId   = userInfo.UserId;
            getOnlineUser       = onlineInfo;
        }
예제 #10
0
        /// <summary>
        /// 设置授权会员在线
        /// </summary>
        /// <param name="userInfo"></param>
        public static void setOAuthOnline(UserBindInfo userBindInfo)
        {
            var onlineInfo = getUserOnlineInfo();

            onlineInfo.UserBindInfo = userBindInfo;
            if (onlineInfo.UserId <= 0 && userBindInfo.UserId > 0)//设置会员在线
            {
                onlineInfo.UserInfo.UserId = userBindInfo.UserId;
                onlineInfo.UserId          = userBindInfo.UserId;
            }
            onlineInfo.UserInfo.UserName = userBindInfo.NickName;
            onlineInfo.UserName          = userBindInfo.NickName;
            onlineInfo.IsOAuth           = true;
            getOnlineUser = onlineInfo;
        }
예제 #11
0
        /// <summary>
        /// 更新验证码
        /// </summary>
        /// <param name="info"></param>
        /// <param name="account">账号</param>
        /// <param name="code">验证码</param>
        /// <param name="minute">分钟</param>
        public static Entity.VerifyCode setVerifyCode(UserOnlineInfo info, string account, string code, int minute = 0)
        {
            var codeList = info.VerifyCode;

            Entity.VerifyCode codeInfo = codeList.Find(g => g.Account.Equals(account));
            if (codeInfo == null)
            {
                codeInfo         = new Entity.VerifyCode();
                codeInfo.Account = account.ToLower();
                info.VerifyCode.Add(codeInfo);
            }
            codeInfo.Code = code.ToLower();
            if (minute > 0)
            {
                codeInfo.Deadline = Config.SiteConfig.getLocalTime().AddMinutes(minute);
            }
            else
            {
                codeInfo.Deadline = null;
            }

            return(codeInfo);
        }
예제 #12
0
        /// <summary>
        /// 卸载用户
        /// </summary>
        /// <param name="clmngr"></param>
        public void UnRegistUser(ClientManager clmngr)
        {
            if (clmngr == null || !clmngr.IsAuthedUser)
            {
                return;
            }

            int uid = clmngr.nUID;

            try
            {
                if (_Users.ContainsKey(uid))
                {
                    UserOnlineInfo user = _Users[uid] as UserOnlineInfo;
                    user.SocketOpen = false;
                }
            }
            catch { }
            finally
            {
                clmngr.IsAuthedUser = false;
            }
        }
예제 #13
0
        /// <summary>
        /// 更新浏览记录
        /// </summary>
        private static void browseHistory(UserOnlineInfo onlineInfo, bool safe = false)
        {
            var ip = Fetch.getClientIP();

            var date = SiteConfig.getLocalTime();
            var span = date - onlineInfo.StatisticsDate;

            if (!safe)
            {
                if (span.TotalSeconds < 1.0)
                {
                    onlineInfo.StatisticsDate = date;
                    onlineInfo.UnsafeVisitsNum++;
                }
                else if (span.TotalSeconds > 10 && onlineInfo.UnsafeVisitsNum > 5)//会员登录错误次数在5以下使用
                {
                    onlineInfo.UnsafeVisitsNum--;
                }
            }
            onlineInfo.RefreshDate = date;
            onlineInfo.UrlReferrer = onlineInfo.Url;
            onlineInfo.Url         = Fetch.getRawUrl();
        }
예제 #14
0
 private bool IsLastInfoDifferent(UserOnlineInfo info)
 {
     return(!_lastInfo.ContainsKey(info.Id) || _lastInfo[info.Id] != info.OnlineInfo);
 }
예제 #15
0
        /// <summary>
        /// 获取用户在线状态码
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        public OnlineCodeValue GetUserOnlineCode(int uid)
        {
            UserOnlineInfo user = GetUserOnlineInfo(uid);

            return(user != null ? user.OnlineStatusCode : OnlineCodeValue.Offline);
        }
예제 #16
0
        public DTLoginInfo LoginFB(int idMovimiento, String accesToken)
        {
            if (null == accesToken)
            {
                throw new ArgumentNullException();
            }

            FacebookUser fbUser = Facebook.GetInfo(accesToken);

            // busco el usuario en la base de datos
            var db = new IndignadoDBDataContext();

            var fbUserDB = db.UsuarioFacebooks.SingleOrDefault(u => (u.idMovimiento == idMovimiento &&
                                          u.idFacebook == fbUser.id));

            if (fbUserDB == null)
            {
                throw new FaultException<LoginFault>(new LoginFault("El usuario logueado por facebook no se encuentra registrado", DTLoginFaultType.FB_NOT_REGISTERED));
            }

            var userDB = db.Usuarios.SingleOrDefault(u => (u.id == fbUserDB.idUsuario));

            if (userDB.banned)
            {
                Usuario movAdmin = db.Usuarios.SingleOrDefault(u => (u.idMovimiento == idMovimiento) && ((u.privilegio & IndignadoServer.Roles.MovAdminMask) == IndignadoServer.Roles.MovAdminMask));

                throw new FaultException("The user is banned, please contact the movement administrator at " + movAdmin.mail + ".");
            }

            String token = GenerateToken();

            _usersOnline[token] = new UserOnlineInfo(userDB.id, userDB.apodo, userDB.privilegio, idMovimiento, token);

            bool isRegUser = true;
            bool isMovAdmin = (userDB.privilegio & IndignadoServer.Roles.MovAdminMask) == IndignadoServer.Roles.MovAdminMask;
            bool isSysAdmin = (userDB.privilegio & IndignadoServer.Roles.SysAdminMask) == IndignadoServer.Roles.SysAdminMask;

            return new DTLoginInfo(userDB.apodo, userDB.id, token, isRegUser, isMovAdmin, isSysAdmin);
        }
예제 #17
0
        public DTLoginInfo Login(int idMovimiento, String userName, String password)
        {
            if (null == userName || null == password)
            {
                throw new ArgumentNullException();
            }

            // calculo el hash del password
            HashAlgorithm sha = new SHA1CryptoServiceProvider();
            byte[] passwordHash = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(password));

            byte[] noPass = new byte[1];
            noPass[0] = 0;

            // busco el usuario en la base de datos
            var db = new IndignadoDBDataContext();
            var user = db.Usuarios.SingleOrDefault(u => (u.idMovimiento == idMovimiento &&
                                          u.apodo == userName &&
                                          u.contraseña == passwordHash &&
                                          u.contraseña != noPass) ||
                                          (u.apodo == userName &&
                                           u.contraseña == passwordHash &&
                                           u.contraseña != noPass &&
                                           (u.privilegio & IndignadoServer.Roles.SysAdminMask) == IndignadoServer.Roles.SysAdminMask));

            // usuario inexistente o contraseña incorrecta.
            if (user == null)
            {
                throw new FaultException("Unknown username or incorrect password");
            }

            // usuario deshabilitado.

            bool isRegUser = true;
            bool isMovAdmin = (user.privilegio & IndignadoServer.Roles.MovAdminMask) == IndignadoServer.Roles.MovAdminMask;
            bool isSysAdmin = (user.privilegio & IndignadoServer.Roles.SysAdminMask) == IndignadoServer.Roles.SysAdminMask;

            if (user.banned && !isMovAdmin && !isSysAdmin)
            {
                Usuario movAdmin = db.Usuarios.SingleOrDefault(u => (u.idMovimiento == idMovimiento) && ((u.privilegio & IndignadoServer.Roles.MovAdminMask) == IndignadoServer.Roles.MovAdminMask));

                throw new FaultException("The user is banned, please contact the movement administrator at " + movAdmin.mail + ".");
            }

            String token = GenerateToken();

            _usersOnline[token] = new UserOnlineInfo(user.id, user.apodo, user.privilegio, idMovimiento, token);

            return new DTLoginInfo(user.apodo, user.id, token, isRegUser, isMovAdmin, isSysAdmin);
        }