Пример #1
0
        // GET: User
        public ActionResult Index()
        {
            try
            {
                // 使用 Request 和 Response 初始化登录服务
                LoginService loginService = new LoginService(Request, Response);

                // 调用检查登录接口,成功后可以获得用户信息,进行正常的业务请求
                UserInfo userInfo = loginService.Check();

                Response.AddHeader("Content-Type", "application/json");
                // 获取会话成功,需要返回 HTTP 视图,这里作为示例返回了获得的用户信息
                return(Content(JsonConvert.SerializeObject(new
                {
                    code = 0,
                    message = "OK",
                    data = new { userInfo }
                })));
            }
            catch (Exception error)
            {
                // 可以处理登录失败的情况,但是注意此时无需返回 ActionResult,
                // 因为登录失败的时候,登录服务已经输出登录失败的响应
                Debug.WriteLine(error);
                return(null);
            }
        }
Пример #2
0
        public void TestCheck()
        {
            var          mock     = helper.CreateCheckHttpMock("valid-id", "valid-key");
            LoginService service  = new LoginService(mock.Object.Request, mock.Object.Response);
            UserInfo     userInfo = service.Check();

            Assert.IsNotNull(userInfo);

            mock.Verify(x => x.Response.Write(It.IsAny <string>()), Times.Never());
        }
Пример #3
0
        /// <summary>
        /// 处理 WebSocket 信道 GET 请求
        /// </summary>
        ///
        /// <remarks>
        /// GET 请求表示客户端请求进行信道连接,此时会向 SDK 申请信道连接地址,并且返回给客户端
        /// 如果配置指定了要求登陆,还会调用登陆服务来校验登陆态并获得用户信息
        /// </remarks>
        private void HandleGet(ITunnelHandler handler, TunnelHandleOptions options)
        {
            Configuration config = ConfigurationManager.CurrentConfiguration;

            Tunnel   tunnel = null;
            UserInfo user   = null;

            // 要求登录态,获取用户信息
            if (options?.CheckLogin == true)
            {
                try
                {
                    LoginService loginService = new LoginService(Request, Response);
                    user = loginService.Check();
                }
                catch
                {
                    // 要求检查登录态的话,发生异常就结束了
                    return;
                }
            }

            // 申请 WebSocket 信道连接地址
            TunnelAPI tunnelApi = new TunnelAPI();

            try
            {
                tunnel = tunnelApi.RequestConnect(BuildReceiveUrl());
            }
            catch (Exception e)
            {
                Response.WriteJson(new { error = e.Message });
                throw e;
            }

            // 输出 URL 结果
            Response.WriteJson(new { url = tunnel.ConnectUrl });

            handler.OnTunnelRequest(tunnel, user);
        }
Пример #4
0
        public ActionResult <bool> Post(string email)
        {
            try
            {
                List <User> users = Get();
                bool        test  = _loginService.Check(email, users);
                //User hold = _userService.Create(user);
                if (test == false)
                {
                    return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status406NotAcceptable));
                }

                return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status202Accepted));
            }
            catch (Exception e)
            {
                string message    = e.Message;
                string stackTrace = e.StackTrace;

                return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError));
            }
        }
Пример #5
0
        private LoginServiceException TestCheckExpectError(string id, string skey, bool?expectInvalidSession = null)
        {
            var mock = helper.CreateCheckHttpMock(id, skey);

            var loginService = new LoginService(mock.Object.Request, mock.Object.Response);

            LoginServiceException errorShouldThrow = null;

            try
            {
                UserInfo userInfo = loginService.Check();
            }
            catch (LoginServiceException error)
            {
                errorShouldThrow = error;
            }

            Func <string, bool> bodyMatch = (string body) =>
            {
                Console.WriteLine("=======Response========");
                Console.WriteLine(body);
                JObject result = JObject.Parse(body);
                if (!helper.CheckBodyHasMagicId(result))
                {
                    return(false);
                }
                if (expectInvalidSession == null)
                {
                    return(true);
                }
                return(result["error"].Value <string>() == "ERR_INVALID_SESSION" ^ !expectInvalidSession.Value);
            };

            mock.Verify(x => x.Response.Write(It.Is((string body) => bodyMatch(body))), Times.Once());

            return(errorShouldThrow);
        }