示例#1
0
        public HttpResponseMessage GetLevels(Byte?page, String token = "", String rand = "")
        {
            try
            {
                List <LevelRowDTO> levels = this.levelsDAL.GetNewestLevels(page);
                this.mainDAL.FillLevelListMetadata(levels);

                return(HttpResponseFactory.Response200Plain(levels.GetLevelListString()));
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
        private async Task <HttpRequestMessage> GetRequestFor <T>(Func <T, Task> action)
        {
            HttpRequestMessage request        = null;
            string             requestContent = null;
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var mockHandler = new MockHttpMessageHandler();
                mockHandler.When("*").Respond(async r =>
                {
                    if (r.Method != HttpMethod.Get)
                    {
                        request        = r;
                        requestContent = await r.Content.ReadAsStringAsync();
                    }

                    return(HttpResponseFactory.GetResponse(content: "''"));
                });

                return(mockHandler);
            };
            var kernel = new TestingKernel <ConsoleLog>();

            kernel.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);
            var client = kernel.Get <ServiceProxyProviderSpy <T> >();

            client.DefaultPort = _testinghost.BasePort;

            await action(client.Client);

            var contentClone = new StringContent(requestContent, Encoding.UTF8, "application/json");

            foreach (KeyValuePair <string, IEnumerable <string> > header in request.Content.Headers.Where(h =>
                                                                                                          h.Key.StartsWith("X")))
            {
                contentClone.Headers.Add(header.Key, header.Value);
            }

            kernel.Dispose();

            return(new HttpRequestMessage(request.Method, request.RequestUri)
            {
                Content = contentClone
            });
        }
        public IEnumerable <Organisation> GetByStandardId(string id)
        {
            var response = _getAssessmentOrgs.GetOrganisationsByStandardId(id);

            if (response == null)
            {
                throw HttpResponseFactory.RaiseException(
                          HttpStatusCode.NotFound,
                          $"No organisation with EpaOrganisationIdentifier {id} found");
            }

            response = response.ToList();
            foreach (var organisation in response)
            {
                organisation.Uri = Resolve(organisation.Id);
            }

            return(response);
        }
示例#4
0
        public async Task For_ServiceProxy_TakeDefaultSlot()
        {
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var handlerMock = new MockHttpMessageHandler();
                handlerMock.When("*").Respond(req =>
                {
                    req.RequestUri.Port.ShouldBe(40001);
                    return(HttpResponseFactory.GetResponse(content: "null"));
                });
                return(handlerMock);
            };

            var kernel           = SetUpKernel(new ServiceArguments(slotNumber: 5), messageHandlerFactory: messageHandlerFactory);
            var serviceProxyFunc = kernel.Get <Func <string, ServiceProxyProvider> >();
            var serviceProxy     = serviceProxyFunc(TestingKernel <ConsoleLog> .APPNAME);

            await serviceProxy.Invoke(new HttpServiceRequest("myMethod", null, new Dictionary <string, object>()), typeof(int?));
        }
示例#5
0
        public HttpResponseMessage Ban([FromBody] BanFormModel banData)
        {
            try
            {
                if (banData == null)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NO_FORM_DATA));
                }
                else if (!banData.Duration.HasValue || banData.Duration < 1)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_INVALID_DURATION));
                }

                SessionInstance issuerSession = SessionManager.Instance.GetSessionByToken(banData.Token);
                if (issuerSession == null)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NOT_LOGGED_IN));
                }

                Account bannedUser = this.dataAccess.Ban(
                    issuerSession.AccounData.UserId,
                    banData.Banned_Name,
                    banData.Duration.Value,
                    banData.Reason,
                    banData.Record,
                    banData.IsIPBan);

                // User has been banned, notify all registered game servers about this event.
                HubCtxProvider.Instance.ForceLogout(bannedUser.Id, (banData.IsIPBan) ? bannedUser.LoginIP : String.Empty);

                return(HttpResponseFactory.Response200Plain(StatusKeys.SUCCESS, StatusMessages.TRUE));
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#6
0
        public HttpResponseMessage GetPlayerInfo(String name = "", String token = "", String rand = "")
        {
            try
            {
                // TODO - Handle token to check if lookup player is friend and/or ignored.

                Account acc = this.dataAccess.GetAccountByUsername(name);
                if (acc == null)
                {
                    return(HttpResponseFactory.Response200Json(new ErrorJson {
                        Error = ErrorMessages.ERR_NO_USER_WITH_SUCH_NAME
                    }));
                }

                return(HttpResponseFactory.Response200Json(UserInfoJson.ToUserInfoJson(acc)));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#7
0
        public HttpResponseMessage GetServerStatus()
        {
            try
            {
                if (ServerManager.Instance.ServerCount <= 0)
                {
                    return(HttpResponseFactory.Response200Json(new ErrorJson
                    {
                        Error = ErrorMessages.ERR_NO_SERVERS
                    }));
                }

                return(HttpResponseFactory.Response200Json(new ServerListJson
                {
                    Servers = ServerManager.Instance.GetServers()
                }));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#8
0
        public HttpResponseMessage ReportMessage([FromBody] DeleteOrReportMessageFormModel reportMessageData)
        {
            try
            {
                if (reportMessageData == null ||
                    !reportMessageData.Message_Id.HasValue)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NO_FORM_DATA));
                }

                SessionInstance mySession = SessionManager.Instance.GetSessionByToken(reportMessageData.Token);
                if (mySession == null)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NOT_LOGGED_IN));
                }

                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NOT_IMPLEMENTED));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#9
0
        public HttpResponseMessage DeleteAllMessages(String token = "", String rand = "")
        {
            try
            {
                SessionInstance mySession = SessionManager.Instance.GetSessionByToken(token);
                if (mySession == null)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NOT_LOGGED_IN));
                }

                this.dataAccess.DeleteAllMessages(mySession.AccounData.UserId);

                return(HttpResponseFactory.Response200Plain(StatusKeys.SUCCESS, StatusMessages.TRUE));
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#10
0
        public HttpResponseMessage GetLevels(String token = "", String rand = "")
        {
            try
            {
                SessionInstance mySession = SessionManager.Instance.GetSessionByToken(token);
                if (mySession == null)
                {
                    return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NOT_LOGGED_IN));
                }

                List <LevelRowDTO> levels = this.levelsDAL.GetUserLevels(mySession.AccounData.UserId);
                this.mainDAL.FillLevelListMetadata(levels);

                return(HttpResponseFactory.Response200Plain(levels.GetLevelListString()));
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
示例#11
0
        public async Task CreatePerson_UnavailableError_ShouldReturnAnUnavailableCode()
        {
            var expected = Status.Unavailable;

            var personApi = ApiFactory.CreatePersonApiService();

            personApi.CreatePerson(Arg.Any <CreatePersonRequestDto>()).Returns(Task.FromResult(HttpResponseFactory.CreateNotAvailableMessage(null)));
            var personService = new PersonService(personApi);

            var actual = await personService.CreatePerson("Lorem", "Ipsum", "123 Nowhere St", "509-555-1234", "99206", "WA", 23, new DateTime(1980, 01, 01));

            Assert.AreEqual(expected, actual.StatusCode);
        }
示例#12
0
 public HttpResponseMessage Logout(String token = "", String rand = "")
 {
     // TODO - Figure out how real PR2 identifies your session since token is always empty.
     // Probably using cookies or idk. For now we will rely on actual game server (TCP).
     return(HttpResponseFactory.Response200Plain(StatusKeys.SUCCESS, StatusMessages.TRUE));
 }
示例#13
0
        /// <summary>
        /// Performs search according to specified search query.
        /// </summary>
        /// <param name="searchData">Search query.</param>
        /// <returns>List of found maps.</returns>
        private HttpResponseMessage GetSearchResults(SearchLevelsFormModel searchData)
        {
            try
            {
                if (searchData == null)
                {
                    return(HttpResponseFactory.Response200Json(new ErrorJson
                    {
                        Error = ErrorMessages.ERR_NO_FORM_DATA
                    }));
                }

                if (String.IsNullOrEmpty(ConfigurationManager.Instance.SearchUrl))
                {
                    // External level search web API is not specified, handle the request internally.

                    List <LevelRowDTO> levels = null;

                    if (searchData.Mode == SearchMode.User)
                    {
                        Account acc = this.mainDAL.GetAccountByUsername(searchData.Search_Str);
                        if (acc == null)
                        {
                            return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ErrorMessages.ERR_NO_USER_WITH_SUCH_NAME));
                        }

                        levels = this.levelsDAL.SearchLevelsByUserId(acc.Id, searchData.Order, searchData.Dir, searchData.Page);
                    }
                    else
                    {
                        levels = this.levelsDAL.SearchLevelsByTerm(searchData.Search_Str, searchData.Order, searchData.Dir, searchData.Page);
                    }

                    this.mainDAL.FillLevelListMetadata(levels);

                    return(HttpResponseFactory.Response200Plain(levels.GetLevelListString()));
                }
                else
                {
                    // Let the external API handle the level search.

                    using (WebClient webClient = new WebClient())
                    {
                        webClient.QueryString.Add("search_str", searchData.Search_Str);
                        webClient.QueryString.Add("order", searchData.Order.ToString().ToLower());
                        webClient.QueryString.Add("mode", searchData.Mode.ToString().ToLower());
                        webClient.QueryString.Add("dir", searchData.Dir.ToString().ToLower());
                        webClient.QueryString.Add("page", (searchData.Page ?? 1).ToString());
                        webClient.QueryString.Add("rand", searchData.Rand);

                        String result = webClient.DownloadString(ConfigurationManager.Instance.SearchUrl);

                        return(HttpResponseFactory.Response200Plain(result));
                    }
                }
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Plain(StatusKeys.ERROR, ex.Message));
            }
        }
示例#14
0
        public HttpResponseMessage CheckLogin(String token = "", String rand = "")
        {
            SessionInstance session = SessionManager.Instance.GetSessionByToken(token);

            return(HttpResponseFactory.Response200Plain(StatusKeys.USERNAME, session?.AccounData.Username));
        }
示例#15
0
 public virtual void SetResponseFactory(HttpResponseFactory responseFactory)
 {
     Args.NotNull(responseFactory, "Response factory");
     this.responseFactory = responseFactory;
 }
示例#16
0
        public HttpResponseMessage Login([FromBody] LoginFormModel loginData)
        {
            try
            {
                // TODO - Cookie token processing, version check and more checks based on received data.

                if (loginData == null || String.IsNullOrEmpty(loginData.I))
                {
                    return(HttpResponseFactory.Response200Json(new ErrorJson {
                        Error = ErrorMessages.ERR_NO_LOGIN_DATA
                    }));
                }

                String        rawloginDataJSON = loginData.I.FromBase64ToString();
                LoginDataJson loginDataJSON    = JsonConvert.DeserializeObject <LoginDataJson>(rawloginDataJSON);

                // Check if such server even exists.
                ServerInstance server = ServerManager.Instance.GetServer(loginDataJSON.Server.Server_name);
                if (server == null)
                {
                    return(HttpResponseFactory.Response200Json(new ErrorJson {
                        Error = ErrorMessages.ERR_NO_SUCH_SERVER
                    }));
                }

                Account        acc     = null;
                AccountDataDTO accData = null;

                // First of all, lets try to authenticate him using session token. Example use case - Level Editor relog.
                SessionInstance session = SessionManager.Instance.GetSessionByToken(loginData.Token);
                if (session == null)
                {
                    // Did not work. Lets try to authenticate him using credentials instead.
                    acc     = this.dataAccess.AuthenticateUser(loginDataJSON.UserName, loginDataJSON.UserPass, this.Request.GetRemoteIPAddress());
                    accData = acc.ToAccountDataDTO();

                    session = SessionManager.Instance.GetSessionByUsername(acc.Username);

                    if (session != null)
                    {
                        // He already has session. Lets remove it and raise error.
                        HubCtxProvider.Instance.ForceLogout(server.SignalRClientId, session.AccounData.UserId, null);
                        SessionManager.Instance.RemoveSession(session);
                    }

                    session = new SessionInstance(
                        Guid.NewGuid(),
                        loginDataJSON.LoginId,
                        accData,
                        loginDataJSON.Server.Server_name,
                        this.Request.GetRemoteIPAddress(),
                        this.Request.GetRemotePort());
                    SessionManager.Instance.StoreSession(session);
                }
                else
                {
                    // He has session, lets try to log him out of GameServer and update his session.
                    HubCtxProvider.Instance.ForceLogout(server.SignalRClientId, session.AccounData.UserId, null);

                    acc     = this.dataAccess.AuthenticateUser(session.AccounData.Username, this.Request.GetRemoteIPAddress());
                    accData = acc.ToAccountDataDTO();

                    session.LoginId    = loginDataJSON.LoginId;
                    session.AccounData = accData;
                    session.Server     = loginDataJSON.Server.Server_name;
                    session.IP         = this.Request.GetRemoteIPAddress();
                    session.Port       = this.Request.GetRemotePort();
                    session.Extend();
                }

                HubCtxProvider.Instance.LoginSuccessful(server.SignalRClientId, session.LoginId, accData);

                this.dataAccess.UpdateAccountStatus(
                    acc,
                    String.Concat(StatusMessages.STR_PLAYING_ON, session.Server),
                    this.Request.GetRemoteIPAddress());

                return(HttpResponseFactory.Response200Json(new LoginReplyJson
                {
                    Ant = false,    // TODO - Has Ant set.
                    Email = false,  // TODO - Has email set.
                    Emblem = "",    // TODO - Guild emblem URL.
                    Guild = "0",    // TODO - Guild id.
                    GuildName = "", // TODO - Guild name.
                    GuildOwner = 0, // TODO - Guild owner uid.
                    LastRead = 0,   // TODO - Seconds since UNIX time when user last read PMs.
                    LastRecv = 0,   // TODO - Seconds since UNIX time when user last received PM.
                    Status = StatusMessages.STR_SUCCESS,
                    Time = 0,       // TODO - Seconds since UNIX time.
                    Token = session.Token.ToString(),
                    UserId = acc.Id
                }));
            }
            catch (PR2Exception ex)
            {
                return(HttpResponseFactory.Response200Json(new ErrorJson {
                    Error = ex.Message
                }));
            }
            catch (Exception ex)
            {
                return(HttpResponseFactory.Response500Plain(ex.Message));
            }
        }
        public void NegativeContentLengthThrowsException()
        {
            var httpResponse = new Mock <HttpResponseBase>();

            var result = HttpResponseFactory.Create(httpResponse.Object, -1);
        }
示例#18
0
 public HttpResponseMessage GetWelcomeMessage()
 {
     // TODO - Nicer welcome page. :-)
     return(HttpResponseFactory.Response200Plain("PR2PS.Web works!"));
 }
 public void CreateThrowsExceptionForNullHttpResponse()
 {
     HttpResponseFactory.Create(null, 0);
 }
示例#20
0
 public DefaultHttpResponseParser(SessionInputBuffer buffer, LineParser parser, HttpResponseFactory
                                  responseFactory, HttpParams @params) : base(buffer, parser, @params)
 {
     Args.NotNull(responseFactory, "Response factory");
     this.responseFactory = responseFactory;
     this.lineBuf         = new CharArrayBuffer(128);
 }
示例#21
0
 /// <summary>Create a new HTTP service.</summary>
 /// <remarks>Create a new HTTP service.</remarks>
 /// <param name="processor">the processor to use on requests and responses</param>
 /// <param name="connStrategy">
 /// the connection reuse strategy. If <code>null</code>
 /// <see cref="Org.Apache.Http.Impl.DefaultConnectionReuseStrategy.Instance">Org.Apache.Http.Impl.DefaultConnectionReuseStrategy.Instance
 ///     </see>
 /// will be used.
 /// </param>
 /// <param name="responseFactory">
 /// the response factory. If <code>null</code>
 /// <see cref="Org.Apache.Http.Impl.DefaultHttpResponseFactory.Instance">Org.Apache.Http.Impl.DefaultHttpResponseFactory.Instance
 ///     </see>
 /// will be used.
 /// </param>
 /// <param name="handlerMapper">the handler mapper. May be null.</param>
 /// <since>4.3</since>
 public HttpService(HttpProcessor processor, ConnectionReuseStrategy connStrategy,
                    HttpResponseFactory responseFactory, HttpRequestHandlerMapper handlerMapper) : this
     (processor, connStrategy, responseFactory, handlerMapper, null)
 {
 }
 public DefaultHttpResponseParserFactory(HttpResponseFactory responseFactory) : this
     (null, responseFactory)
 {
 }