Пример #1
0
 private void SaveSessionToDatabase(SessionId sessionId, User user, ConnectionTicket ticket)
 {
     lock (_lockObj)
     {
         try
         {
             using (ServerDataContext context = new ServerDataContext())
             {
                 ActiveSession session = new ActiveSession
                 {
                     Id             = ObjectId.NewId(),
                     SessionId      = sessionId.ToString(),
                     UserId         = user.Id,
                     ClientComputer = ticket.ClientComputer,
                     Port           = ticket.Port
                 };
                 context.ActiveSessions.Add(session);
                 context.SaveChanges();
             }
         }
         catch (Exception e)
         {
             ApplicationContext.Log.Error(GetType(), e);
             throw;
         }
     }
 }
Пример #2
0
 public UserData GetRelatedUserInfo(SessionId sessionId)
 {
     using (ServerDataContext context = new ServerDataContext())
     {
         ActiveSession session = context.GetSession(sessionId);
         return(context.CreateUserData(session.User));
     }
 }
Пример #3
0
 public string GetRelatedUserId(SessionId sessionId)
 {
     using (ServerDataContext context = new ServerDataContext())
     {
         ActiveSession session = context.GetSession(sessionId);
         return(session.User.Id.ToString().ToUpper());
     }
 }
Пример #4
0
 public string GetRelatedUserName(SessionId sessionId)
 {
     using (ServerDataContext context = new ServerDataContext())
     {
         ActiveSession session = context.GetSession(sessionId);
         return(session.User.Name);
     }
 }
        private string DoWork(string sessionId, string encryptData)
        {
            if (string.IsNullOrWhiteSpace(encryptData))
            {
                return(ErrorResources.SYSTEM_WARNING_0x0001);
            }
            //初始化服务器(插件、配置)
            string decrypString    = ConfigurationLoader.Instance.DataParser.DecryptData(encryptData);
            string methodText      = ConfigurationLoader.Instance.RequestSpliter.GetMethodText(decrypString);
            string attatchmentText = ConfigurationLoader.Instance.RequestSpliter.GetAttachmentText(decrypString);

            var request = new RequestSchema(sessionId, methodText, attatchmentText);

            request.ResolveRequest(ConfigurationLoader.Instance.MethodResolver,
                                   ConfigurationLoader.Instance.SessionResolver,
                                   ConfigurationLoader.Instance.AttachmentResolver);
            var dataContext = new ServerDataContext {
                Request = request
            };

            PluginManager.Instance.UpdateDataContext(dataContext);

            //定义授权方法
            ISecurityAuthorize security = ConfigurationLoader.Instance.SecurityAuthorize;

            //Session
            bool sessionPass = ConfigurationLoader.Instance.Business.SessionAccess(request.Session);

            try
            {
                //获取授权信息
                if (!security.Authorized(dataContext))
                {
                    return(security.Error.SimpleErrorDescription);
                }

                if (!sessionPass)
                {
                    return(ErrorResources.SYSTEM_FATAL_ERROR_0x0001);
                }

                //获取请求响应
                //TODO:此处的异常应统一处理
                if (request.RequestMethod == null)
                {
                    return(ErrorResources.SYSTEM_WARNING_0x0002);
                }
                object obj  = MethodRoute.Invoke(request.RequestMethod);
                string json = JSONConvert.ConvertToString(obj);

                //压缩发送
                return(CompressProvider.Compress(json));
            }
            catch (Exception)
            {
                return(ErrorResources.SYSTEM_INFO_0x0001);
            }
        }
Пример #6
0
 public void EnsureAuthorizedSession(SessionId sessionId)
 {
     using (ServerDataContext context = new ServerDataContext())
     {
         if (!context.CheckSession(sessionId))
         {
             throw new NotAuthorizedRequestException(GetType(), sessionId);
         }
     }
 }
Пример #7
0
 public bool HasPostBeenAnalyzed(Post post)
 {
     if (Config.I.CurrentRunMode == BotRunMode.Simulated)
     {
         return(false);
     }
     using (var context = new ServerDataContext(Config.I.ServerConnectionString))
     {
         return(context.AnalyzedPosts.Any(t => t.PostID == post.Id));
     }
 }
Пример #8
0
        private string DoWork(string encryptData)
        {
            if (string.IsNullOrWhiteSpace(encryptData))
            {
                return(ErrorResources.SYSTEM_WARNING_0x0001);
            }
            //初始化服务器(插件、配置)
            string decrypString    = ConfigurationLoader.Instance.DataParser.DecryptData(encryptData);
            string methodText      = ConfigurationLoader.Instance.RequestSpliter.GetMethodText(decrypString);
            string attatchmentText = ConfigurationLoader.Instance.RequestSpliter.GetAttachmentText(decrypString);

            var request = new RequestSchema(methodText, attatchmentText);

            request.ResolveRequestWithoutSession(ConfigurationLoader.Instance.MethodResolver,
                                                 ConfigurationLoader.Instance.AttachmentResolver);
            var dataContext = new ServerDataContext {
                Request = request
            };

            PluginManager.Instance.UpdateDataContext(dataContext);

            //定义授权方法
            ISecurityAuthorize security = ConfigurationLoader.Instance.SecurityAuthorize;

            try
            {
                //获取授权信息
                if (!security.Authorized(dataContext))
                {
                    return(security.Error.SimpleErrorDescription);
                }

                //获取允许的方法
                MethodsName = MethodsName ?? (MethodsName = AvailableInvokeMethod(typeof(ILoginEntry)));

                //获取请求响应
                //TODO:此处的异常应统一处理
                if (request.RequestMethod == null)
                {
                    return(ErrorResources.SYSTEM_WARNING_0x0002);
                }
                object obj  = MethodRoute.Invoke(request.RequestMethod, MethodsName);
                string json = JSONConvert.ConvertToString(obj);

                //压缩发送
                return(CompressProvider.Compress(json));
            }
            catch (Exception ex)
            {
                return(ex.InnerException != null?ex.InnerException.ToString() : ex.ToString());

                //return ErrorResources.SYSTEM_INFO_0x0001;
            }
        }
Пример #9
0
 public UserData CreateUser(string username)
 {
     lock (_lockObj)
     {
         using (ServerDataContext context = new ServerDataContext())
         {
             User user = context.Users.Create();
             user.Id            = ObjectId.NewId();
             user.Name          = username;
             user.SecurityToken = ObjectId.NewId().ToString();
             context.Users.Add(user);
             context.SaveChanges();
             return(context.CreateUserData(user));
         }
     }
 }
Пример #10
0
 public bool ChangeUserName(Guid userId, string newName)
 {
     lock (_lockObj)
     {
         using (ServerDataContext context = new ServerDataContext())
         {
             User user = context.Users.Find(userId);
             if (user == null)
             {
                 return(false);
             }
             user.Name = newName;
             context.SaveChanges();
             return(true);
         }
     }
 }
Пример #11
0
        public bool RemoveUser(Guid userId)
        {
            lock (_lockObj)
            {
                using (ServerDataContext context = new ServerDataContext())
                {
                    User user = context.Users.Find(userId);
                    if (user == null)
                    {
                        return(false);
                    }

                    context.Users.Remove(user);
                    context.SaveChanges();
                    return(true);
                }
            }
        }
Пример #12
0
 private void RemoveSessionFromDatabase(SessionId sessionId)
 {
     lock (_lockObj)
     {
         try
         {
             using (ServerDataContext context = new ServerDataContext())
             {
                 context.RemoveSession(sessionId);
                 context.SaveChanges();
             }
         }
         catch (Exception e)
         {
             ApplicationContext.Log.Error(GetType(), e);
             throw;
         }
     }
 }
Пример #13
0
 private bool CheckUser(string username, string token, out User user)
 {
     lock (_lockObj)
     {
         using (ServerDataContext context = new ServerDataContext())
         {
             User result = context.GetUser(username);
             if (result != null)
             {
                 if (result.SecurityToken == token)
                 {
                     user = result;
                     return(true);
                 }
             }
         }
     }
     user = null;
     return(false);
 }
Пример #14
0
        public AnalyzedPost SubmitPostAnalysis(Post post, BotAction action)
        {
            if (Config.I.CurrentRunMode == BotRunMode.Simulated)
            {
                return(new AnalyzedPost()
                {
                });
            }
            using (var context = new ServerDataContext(Config.I.ServerConnectionString))
            {
                var analyzedPost = new AnalyzedPost
                {
                    PostID          = post.Id,
                    AnalysisTimeUTC = DateTime.UtcNow,
                    BotAction       = (int)action
                };
                context.AnalyzedPosts.InsertOnSubmit(analyzedPost);
                context.SubmitChanges();

                return(analyzedPost);
            }
        }
Пример #15
0
        public void ReconnectSessions()
        {
            using (ServerDataContext context = new ServerDataContext())
            {
                List <SessionId> toRemove = new List <SessionId>();
                foreach (ActiveSession session in context.ActiveSessions)
                {
                    SessionId   sessionId = new SessionId(session.SessionId);
                    SessionData data      = new SessionData(sessionId, context.CreateFakeTicket(session));
                    _sessions.TryAdd(sessionId, data);
                    try
                    {
                        using (ClientProxy proxy = CreateClientProxy(data.Ticket))
                        {
                            proxy.ConnectionRestarted();
                            Logger.Info("Restarted session to computer {0}.", data.Ticket.ClientComputer);
                        }
                    }
                    catch (Exception e)
                    {
                        toRemove.Add(sessionId);
                        ApplicationContext.Log.Error(GetType(), e);
                        ApplicationContext.Log.Info(GetType(), "Removed session to: {0}", data.Ticket.ClientComputer);
                    }
                }

                if (toRemove.Count > 0)
                {
                    foreach (SessionId sessionId in toRemove)
                    {
                        SessionData tmpData;
                        context.RemoveSession(sessionId);
                        _sessions.TryRemove(sessionId, out tmpData);
                    }
                    context.SaveChanges();
                }
            }
        }